文本相似度

news2024/11/29 7:59:51

传统方法

  • 基于TF-IDF、BM25、Jaccord、SimHash、LDA等算法抽取两个文本的词汇、主题等层面的特征,然后使用机器学习模型(LR, xgboost)训练分类模型
  • 优点:可解释性较好
  • 缺点:依赖人工寻找特征,泛化能力一般,而且由于特征数量的限制,模型的效果比较一般

代表模型:

  • BM25

BM25算法,通过候选句子的字段对qurey字段的覆盖程度来计算两者间的匹配得分,得分越高的候选项与query的匹配度更好,主要解决词汇层面的相似度问题。BM25也是Elasticsearch使用的检索算法。

深度方法:基于表征的匹配

  • 基于表征的匹配方式,初始阶段对两个文本各自单独处理,通过深层的神经网络进行编码(encode),得到文本的表征(embedding),再对两个表征进行相似度计算的函数得到两个文本的相似度

  • 优点:基于BERT的模型通过有监督的Fine-tune在文本表征和文本匹配任务取得了不错的性能

  • 缺点:BERT自身导出的句向量(不经过Fine-tune,对所有词向量求平均)质量较低,甚至比不上Glove的结果,因而难以反映出两个句子的语义相似度

    主要原因是:

    1.BERT对所有的句子都倾向于编码到一个较小的空间区域内,这使得大多数的句子对都具有较高的相似度分数,即使是那些语义上完全无关的句子对。

    2.BERT句向量表示的聚集现象和句子中的高频词有关。具体来说,当通过平均词向量的方式计算句向量时,那些高频词的词向量将会主导句向量,使之难以体现其原本的语义。当计算句向量时去除若干高频词时,聚集现象可以在一定程度上得到缓解,但表征能力会下降。

代表模型:

  • DSSM(2013)
  • CDSSM(2014)
  • ARC I(2014)
  • Siamese Network(2016)
  • InferSent(2017)
  • BERT(2018)
  • Sentence-BERT(2019)
  • BERT-flow(2020)
  • SimCSE(2021)
  • ConSERT(2021)
  • CoSENT(2022)

由于2018年BERT模型在NLP界带来了翻天覆地的变化,此处不讨论和比较2018年之前的模型(如果有兴趣了解的同学,可以参考中科院开源的MatchZoo 和MatchZoo-py)。

所以,本项目主要调研以下比原生BERT更优、适合文本匹配的向量表示模型:Sentence-BERT(2019)、BERT-flow(2020)、SimCSE(2021)、CoSENT(2022)。

该类模型适合召回

深度方法:基于交互的匹配

  • 基于交互的匹配方式,则认为在最后阶段才计算文本的相似度会过于依赖文本表征的质量,同时也会丢失基础的文本特征(比如词法、句法等),所以提出尽可能早的对文本特征进行交互,捕获更基础的特征,最后在高层基于这些基础匹配特征计算匹配分数
  • 优点:基于交互的匹配模型端到端处理,效果好
  • 缺点:这类模型(Cross-Encoder)的输入要求是两个句子,输出的是句子对的相似度值,模型不会产生句子向量表示(sentence embedding),我们也无法把单个句子输入给模型。因此,对于需要文本向量表示的任务来说,这类模型并不实用

代表模型:

  • ARC II(2014)
  • MV-LSTM(2015)
  • MatchPyramid(2016)
  • DRMM(2016)
  • Conv-KNRM(2018)
  • RE2(2019)
  • Keyword-BERT(2020)

Cross-Encoder适用于向量检索精排

DSSM

在这里插入图片描述

先来看其结构,DSSM分成了三个部分,embedding层对应图中的Term Vector,Word Hashing,特征提取层对应图中的,Multi-layer,Semantic feature,Cosine similarity,还有输出层Softmax,我们针对这三部分分别讲解。
embedding层
这里我把图中的Term Vector和Word Hashing都归在了embedding层,Term Vector是文本转向量后的值,论文中作者采用的是bag-of-words即词袋模型,我的代码中会采用one-hot的形式。然后是Word Hashing层,英文主流文本转vector的方式更多是采用embedding,但是该方法有一个致命的问题就是会出现OOV的问题,而作者提出了一种word hasing的方法,该方法一方面能降低输入数据的维度,其次也能保证不出现OOV的问题,接下来我们详细看下其原理。

word hashing
这里以good这个单词为例,分为三个步骤

  • 在good两端添加临界符#good#
  • 采用n-gram的方式分成多个部分,如果是trigrams那么结果是[#go, goo, ood, od#]
  • 最终good将会用[#go, goo, ood, od#]的向量来表示

在英文中,因为只有26个字母,加上临界符是27个符号,3个字母的组合是有限的,即 A 27 3 = 17550 A_{27}^3=17550 A273=17550 种可能,因此也就不会出现OOV的问题。

对于discriminative,discriminate,discrimination 三个单词的意思很像,他们的Word Hashing中也有大部分是相同的。这样两个不同的单词也有可能具有相同的tri-grams,针对这个问题论文中做了统计,这个冲突的概率非常的低,500K个word可以降到30k维,冲突的概率为0.0044%。

可见该方法对于英文来说是有效可行的,但是并不适合中文,在我的代码中,会采用字向量的形式,词典包含了大部分的中文,能有效降低oov的可能性。

特征提取层
接下来的结构就很简单了,三个全连接层,激活函数采用的是tanh,把维度降低到128,然后把两个序列的Semantic feature进行了余弦相似度计算

输出层

输出层也很简单,一个softmax,因为是计算相似度所以可以看成是二分类,细节不再赘述。

ARC I

针对上述讲到的DSSM模型对query和doc序列和上下文信息捕捉能力的不足,华为诺亚方舟在2015年在DSSM的模型基础上加入了CNN模块,里面提到了两种模型ARC-I和ARC-II,前者是基于representation learning的模型,后者是基于match function learning的模型将在第三章讲到。两个模型对比原始的DSSM模型,最大的特点是引入了卷积和池化层来捕捉句子中的词序信息,ARC-I全称Architecture-I,框架如图

在这里插入图片描述

ARC-I模型引入了类似CNN模块的卷积层和池化层,整体框架如图

在这里插入图片描述

总结下ARC-I的特点:

  • 对于query和doc两段文本的匹配,相比DSSM引入了word-ngram网络
  • 通过卷积层不同的feature map来得到相邻term之间的多种组合关系
  • 通过池化层max pooling来提取这些组合关系中最重要的部分,进而得到query和doc各自的表示。
  • 表示层:通过上述卷积层和池化层来强化相邻word的关系,因此得到的query和doc的表示比原始DSSM能捕捉到词序信息
  • 缺点:卷积层虽然提取到了word-ngram的信息,但是池化层依然是在局部窗口进行pooling,因此一定程度上无法得到全局的信息

Sentence-BERT(SBert)

在这里插入图片描述
SBert沿用了孪生网络的结构,文本Encoder部分用同一个Bert来处理。之后,作者分别实验了CLS-token和2种池化策略(Avg-Pooling、Mean-Pooling),对Bert输出的字向量进一步特征提取、压缩,得到u、v。

SBert直接用Bert的原始权重初始化,在具体数据集上微调,训练过程和传统Siamse Network差异不大。

但是这种训练方式能让Bert更好的捕捉句子之间的关系,生成更优质的句向量。在测试阶段,SBert直接使用余弦相似度来衡量两个句向量之间的相似度,极大提升了推理速度。

作者还做了一些有趣的消融实验。使用NLI和STS为代表的匹配数据集,在分类目标函数训练时,作者测试了不同的整合策略,结果显示**“(u, v, |u-v|)”**的组合效果最好。这里面最重要的部分是元素差:(|u - v|)。句向量之间的差异度量了两个句子嵌入维度间的距离,确保相似的pair更近,不同的pair更远。

CoSENT

具体内容在最后一个参考文献

参考

https://pypi.org/project/text2vec/

基于表征(Representation)的文本匹配、信息检索、向量召回的方法总结

https://blog.csdn.net/u012526436/article/details/90212287

https://cloud.tencent.com/developer/news/601293

https://kexue.fm/search/cosent/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux有用技巧:使用ntfs-3g挂载ntfs设备

1.几种文件系统的比较 (1)在linux系统中支持以下文件系统: Ext2 第二扩展文件系统(简称 ext2)很多年前就已经成为 GNU/Linux 默认的文件系统了。ext2 取代了扩展文件系统(这是 “第二代” 的前身)。它纠正了它前身的一些错误并突破了…

【工具篇】41 # 常用可视化工具集整理(完结)

说明 【跟月影学可视化】学习笔记。 可视化场景主体需求 主体需求示例绘制基本图形根据数据绘制一些二维、三维的几何图形,它们不一定是完整的图表,通常是具有灵活性和视觉冲击力的小图形,例如粒子效果绘制基础图表通常是指绘制常见的饼图…

让开发人员偷懒的正则表达式

正则表达式是一种基于特殊模式符号系统的文本处理系统。简而言之,它为程序员提供了轻松处理和验证字符串的能力。它代表了DRY(Dont Repeat Yourself)原则的实现,在几乎所有支持的语言中,正则表达式模式根本不会改变形式…

【信管7.2】质量保证与质量控制

质量保证与质量控制项目质量管理的两个核心过程就是实施质量保证和控制质量。关于它们两个的区别我们在上一课已经讲了,实施质量保证其实保证的是过程,就是我们的开发过程是不是遵循了质量计划,也就是说,这是保证过程有质量的一个…

视频录制软件有哪些?4款录制视频软件,免费下载

对于不了解录屏的用户,肯定会有这些视频是如何制作出来的疑惑?其实录制视频一件很容易的事情,只需要找到一个可以在录视频的软件就可以了。哪有什么录制视频软件可以录制的呢?下面小编给大家分享4款就可以录制视频的软件&#xff…

ORB-SLAM3算法和代码学习—跟踪恒速运动模型TrackWithMotionModel()

0总述 跟踪运动模型核心思想:假设在极短时间内,相机的运动相同。设相邻时刻的三帧图像分别为k-2帧,k-1帧,k帧,则认为k-2帧到k-1帧相机的运动T_delta1和k-1帧到k帧相机的运动T_delta2相等,如下图所示。当相…

K8S概述及用途

K8S概述 1.K8S说明 K8S(Kubernetes) 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。 Kubernetes 这个名字源…

海量数据存储面临的问题

海量数据存储面临的问题海量数据存储面临的问题成本高性能低可扩展性差如何实现分布式文件存储如何支撑高效率的计算分析如何解决海量数据存储的问题如何解决海量数据文件查询便捷问题如何解决大文件传输效率慢的问题如何解决硬件故障数据丢失问题如何解决用户查询视角统一规整…

pyhon把程序打包为whl

首先需要一个库:setuptools如果是conda环境的话,这个包是自带的,不需要另外安装。首先把需要打包的py文件放在一个文件夹内(我的文件夹名为coordTrans,记住这个名字,后面要用)。同时&#xff0c…

dll修复工具下载,dll修复工具注意事项

Dll文件的缺失相信很多人都遇见过吧,只要缺失了一个这样的dll文件,我们的游戏或者软件程序就启动不了了,所以我们就需要去修复它,目前修复有几种方法,最简单的,最适合电脑小白的,那就是dll修复工…

Vue3——第四章(响应式基础:reactive、ref)

一、用reactive()声明响应式状态 我们可以使用 reactive() 函数创建一个响应式对象或数组: 响应式对象其实是 JavaScript Proxy,其行为表现与一般对象相似。不同之处在于 Vue 能够跟踪对响应式对象属性的访问与更改操作。 要在组件模板中使用响应式状…

java后端第六阶段:SpringMVC

1、Spring IoC(Inversion of Controller)控制反转 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象中创建控制权由程序转移到外部,此思想称为控制反转 Spring技术对IoC思想进行了实现 Spring提供了一…

第四十九讲:神州路由器IPv6 OSPFv3和RIPng路由的配置

神州路由器支持IPv6的内部网关路由协议常用的有OPSFv3和RIPng。 实验拓扑图如下所示 配置要求:在两台路由器上启用IPv6 routing, 在接口上配子ipv6协议后,通过配置RIPng和OSPFv3相关命令,观察学习到的路由。 配置步骤&#xff1…

产品试用记录

某产品试用记录 还可以选屏哦

【PWA学习】3. 让你的 WebApp 离线可用

引言 PWA 其中一个令人着迷的能力就是离线(offline)可用 即使在离线状态下,依然可以访问的 PWA离线只是它的一种功能表现而已,具体说来,它可以: 让我们的Web App在无网(offline)情况下可以访问,甚至使用部分功能&#…

Redis哨兵模式搭建

以下配置机器部署ip为 a、b、c,其中a为master节点 需提前创建 /app/user/oms/redis/data 目录 1.1上传 redis-5.0.5.zip 到对应目录,解压 unzip redis-5.0.5.zip # 生成 redis-5.0.5 目录 1.2 修改配置文件 maxclients 10000 #20000 &#xff0…

接口测试实战| GET/POST 请求区别详解

在日常的工作当中,HTTP 请求中使用最多的就是 GET 和 POST 这两种请求方式。深度掌握这两种请求方式的原理以及异同之处,也是之后做接口测试一个重要基础。GET、POST 的区别总结请求行的 method 不同;POST 可以附加 div,可以支持 …

概率论【离散型二维变量与连续性二维变量(下)】--猴博士爱讲课

6.连续型二维变量(下) 1/7 求边缘分布函数 边缘概率密度 边缘概率密度 2/7 求边缘密度函数 边缘概率密度 3/7 判断连续型二维变量的独立性 F(x,y) Fx(X) * Fy(Y)那么X、Y互相独立 f(x,y) fx(X) * fy(Y)那么X、Y互相独立 这种题目带入验证就可以了 先求…

百度举办首个人机共创大会,最强技术天团邀约全球开发者

1月10日,百度举办Create AI开发者大会(下称“Create大会”)。作为首个“人机共创大会”,AIGC(利用AI技术自动生成内容的生产方式)技术被深度应用,创造、搭建、连接了多个科技感爆棚的数字化演讲…

powershell ISE 多个选项卡,替换命令行黑窗口

安装powershell ISE设置权限解决方案1.管理员打开PowerShell2. 执行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser运行脚本自定义函数,function start_service([string]$Name,$p,$r) {$NewTab $psISE.PowerShellTabs.Add()$NewTab.Displa…