当前位置:   article > 正文

文本匹配相关知识整理(更新中)_短文本匹配

短文本匹配

本人由于前段时间参加了讯飞中文重复问题识别挑战赛,对文本匹配这个方向做一下简单的梳理,方便参考学习以及面试。

短文本匹配

短文本匹配即计算两个短文本的相似度,通常分成无监督方式、有监督方式、有监督+无监督方式

一、无监督方式

考虑文本表征相似度计算两个方面
文本表征:词袋模型(one-hot 、TF)、词向量预训练(word2vector、fasttext、glove)
相似度计算:余弦相似度、曼哈顿距离、欧氏距离、jaccard距离(某个公司的笔试考过公式)等

word2vector + 相似度计算

常用做法是通过word2vec等预训练模型得到词向量,然后对文本做分词,通过embedding_lookup得到每个token对应的词向量,然后得到短文本的句向量。对两个文本的句子向量采用相似度计算方法如余弦相似度、曼哈顿距离、欧氏距离等。无监督方式取得的结果取决于预训练词向量的效果。

BM25

对Query进行语素解析,生成语素qi。对于每个搜索结果D,计算每个语素qi与D的相关性得分,最后将qi相对于D的相关性得分进行加权求和,从而得到Query与D的相关性得分。
公式一般如下:
在这里插入图片描述

Q表示Query,qi即Q分词后的每一个解析语素(对中文而言,我们可以把对Query的分词作为语素分析,每个词看成语素qi)。d表示一个搜索结果文档,Wi表示语素qi的权重,R(qi,d)表示语素qi与文档d的相关性得分。
判断一个词与一个文档的相关性的权重定义Wi方法有多种,较常用的是IDF。公式如下:

在这里插入图片描述
N为索引中的全部文档数,n(qi)为包含了qi的文档数。
根据IDF的定义可以看出当很多文档都包含了qi时,qi的区分度就不高,因此使用qi来判断相关性时的重要度就较低。

在这里插入图片描述

求R(qi,d)具体的公式可以参考文本相似度-BM25算法

在做文本匹配的时候(如重复问题检测)可以尝试BM25的方法,但在搜索领域中,有时候搜索query和候选文档的长度是不一样甚至差距很大,所以BM25在计算相似性的时候需要对文档长度做一定的处理。

二、有监督方式

Siamese Network

孪生体现在使用相同的编码器(sentence encoder),将文本转为高维向量。具体步骤为,有文本A和文本B分别输入 sentence encoder 进行特征提取和编码,将输入映射到新的空间得到特征向量u和v;最终通过u、v的拼接组合,经过下游网络来计算文本A和B的相似性。
在这里插入图片描述

  • 在训练和测试中,模型的编码器是权重共享的,编码器可以选择CNN、RNN、LSTM等
  • 提取到特征u、v后,可以使用余弦距离、欧氏距离等得到两个文本的相似度。
  • 缺点是两个文本在编码时候没有交互,缺乏交互的结构没有充分利用到两个文本相互影响的信息

匹配聚合网络

在上述孪生网络的基础上,得到特征u、v但是不直接计算向量相似度,而是通过注意力机制将两个文本进行信息交互,最后通过全连接层得到相似度。
代表的模型有ESIM,BIMPM等

以ESIM为例

  • 首先是对两个文本的初期编码,就是对两个文本做分词、文本表征,即对句子进行信息的提取。如果使用LSTM作为encoder,可以得到每个时刻(每个单词)的输出,通常维度为[batch_size, seq_len, embedding_dim]。举例子为,句子A长度10,句子B长度也为10,那么进过编码以后句子A的维度[1,10,300],句子B[1,10,300],这里就得到了上述所提到的u、v
  • 接下来是交互操作,为了操作简单忽略batchsize维度,交互即矩阵相乘得到[10,10],矩阵需要对句子A做横向概率归一,对句子B做纵向概率归一。上面这句话其实就是ESIM的核心要点。它是一个两个item之间互相做attention,简单称之为both attention。
  • 对attention后得到的向量做拼接后输出编码器,输出再接到全连接层、softmax就可以得到结果,即两个文本相似(label 1)或不相似(label 0)

三、预训练语言模型

第一阶段,使用通用的预料库训练语言模型,然后第二阶段预训练的语言模型(BERT相关衍生的模型)做相似度任务,得到信息交互后的向量,然后连接全连接层,输出概率。即将两个短文本拼接(CLS A1 A2 … A 10 SEP B1 B2 … B10 SEP),然后CLS向量连接全连接层,判断相似与否。
这种模型参数多,并且使用了通用的语料库,能够获取到短文本之间隐藏的交互信息,效果较好。

题外话:感觉用拼接的方法类似“单塔”,孪生网络的方法类似“双塔”

有监督方式 + 无监督方式

无监督:直接相加得到句向量,不能很好的表达语义信息,并且词的位置信息没有得到体现,也不包含上下文的语义信息。

有监督学习:时间复杂度太高。可以将标准库中的句向量计算完成并存储。新的文本来临时,只需要解决用户问题即可,然后与存储在库中的标准问句进行距离度量。

可以使用BERT代替孪生网络的CNN或LSTM结构,获取更多语义信息的句向量,还可以通过蒸馏降低BERT模型的参数,节约时间成本。

Sentence-BERT

文章链接:https://arxiv.org/pdf/1908.10084.pdf
论文代码:https://github.com/UKPLab/

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

关于u、v整合,作者提供了3种策略:

  • 将u、v拼接,接入全连接网络,经过softmax输出,损失函数用交叉熵损失
  • 直接计算两个文本的余弦相似度,损失函数用均方根误差
  • 如果输入的是三元组,在这里插入图片描述
    SBERT直接用BERT的原始权重初始化,在具体数据集微调,训练过程和传统Siamese Network类似。但是这种训练方式能让Bert更好的捕捉句子之间的关系,生成更优质的句向量。在测试阶段,SBERT直接使用余弦相似度来衡量两个句向量之间的相似度,极大提升了推理速度。

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

文本匹配常见思路(不写trick)

比赛参考:“公益AI之星”挑战赛-新冠疫情相似句对判定大赛

  • TextCNN/TEXTRNN
  • Siamese-RNN
  • 采用多种BERT类预训练模型
  • 对单模型进行调参
  • 多模型融合
  • BERT后接上RCNN/RNN/CNN/LSTM/Siamese等等

有用的文章参考链接:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/242779
推荐阅读
相关标签
  

闽ICP备14008679号