文本匹配模型汇总

时间:2024-04-12 17:40:35

文本匹配模型汇总

1 DSSM

https://posenhuang.github.io/papers/cikm2013_DSSM_fullversion.pdf

DSSM是2013年提出来的模型主要应用场景为query与doc的匹配,在这之前,用的更多的还是一些传统的机器学习算法,例如LSA,BM25等。DSSM也算是深度学习在文本匹配领域中的一个先驱者,接下来我们会先从其结构开始讲起,并简单介绍下其变体。

1.1 模型

文本匹配模型汇总
Term Vector是文本转向量后的值,论文中作者采用的是bag-of-words即词袋模型。然后是Word Hashing层,英文主流文本转vector的方式更多是采用embedding,但是该方法有一个致命的问题就是会出现OOV的问题,而作者提出了一种word hasing的方法,该方法一方面能降低输入数据的维度,其次也能保证不出现OOV的问题,接下来我们详细看下其原理。

1.2 word hashing

这里以good这个单词为例,分为三个步骤
–在good两端添加临界符#good#
–采用n-gram的方式分成多个部分,如果是trigrams那么结果是[#go, goo, ood, od#]
–最终good将会用[#go, goo, ood, od#]的向量来表示
在英文中,因为只有26个字母,加上临界符是27个符号,3个字母的组合是有限的,即17550种可能,因此也就不会出现OOV的问题。

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

可见该方法对于英文来说是有效可行的,但是并不适合中文。

1.3 特征抽取

接下来的结构就很简单了,三个全连接层,**函数采用的是tanh,把维度降低到128,然后把两个序列的Semantic feature进行了余弦相似度计算,这里给一下前向传播的公式。

文本匹配模型汇总

1.4 输出层

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

1.5 变体

随着深度学习的发展,CNN、LSTM被提出,这些特征提取的结构也被应用到了DSSM中,其主要的区别就在于把特征提取层的全连接结构换成了CNN或者LSTM。

2 ESIM

https://arxiv.org/pdf/1609.06038.pdf

ESIM模型主要是用来做文本推理的,给定一个前提premise p 推导出假设hypothesis h,其损失函数的目标是判断 p与 h是否有关联,即是否可以由 p推导出 h,因此,该模型也可以做文本匹配,只是损失函数的目标是两个序列是否是同义句。接下来我们就从模型的结构开始讲解其原理。

2.1 模型

ESIM的论文中,作者提出了两种结构,如下图所示,左边是自然语言理解模型ESIM,右边是基于语法树结构的HIM,本文也主要讲解ESIM的结构,大家如果对HIM感兴趣的话可以阅读原论文。

文本匹配模型汇总
ESIM一共包含四部分,Input Encoding、Local Inference Modeling、 Inference Composition、Prediction,接下来会分别对这四部分进行讲解。

Input Encoding
我们先看一下这一层结构的输入内容,输入一般可以采用预训练好的词向量或者添加embedding层。接下来就是一个双向的LSTM,起作用主要在于对输入值做encoding,也可以理解为在做特征提取,最后把其隐藏状态的值保留下来。
其中i与j分别表示的是不同的时刻,a与b表示的是上文提到的p与h。
文本匹配模型汇总

2.2 Local Inference Modeling

这一层的任务主要是把上一轮拿到的特征值做差异性计算。这里作者采用了attention机制,其中attention weight的计算方法如下:文本匹配模型汇总
然后根据attention weight计算出a与b的权重加权后的值,计算方法如下:文本匹配模型汇总
得到encoding值与加权encoding值之后,下一步是分别对这两个值做差异性计算,作者认为这样的操作有助于模型效果的提升,论文有有两种计算方法,分别是对位相减与对位相乘,最后把encoding两个状态的值与相减、相乘的值拼接起来。文本匹配模型汇总

2.3 Inference Composition

在这一层中,把之前的值再一次送到了BiLSTM中,这里的BiLSTM的作用和之前的并不一样,这里主要是用于捕获局部推理信息 m a m_a ma m b m_b mb及其上下文,以便进行推理组合。
最后把BiLSTM得到的值进行池化操作,分别是最大池化与平均池化,并把池化之后的值再一次的拼接起来。文本匹配模型汇总

2.4 Prediction

最后把 V送入到全连接层,**函数采用的是tanh,得到的结果送到softmax层。

2.5 小结

ESIM与BiMPM在相似度匹配任务中都是使用较多的模型,但是ESIM训练速度快,效果也并没有逊色太多,如果加入了语法树,其最终效果也能进一步的提升。

3 ABCNN

https://arxiv.org/pdf/1512.05193.pdf

以CNN与attention机制做文本匹配的模型即ABCNN。
在文本任务上,大部分模型均是采用以LSTM为主的结构,本文的作者采用了CNN的结构来提取特征,并用attention机制进行进一步的特征处理,作者一共提出了三种attention的建模方法,下文会详细介绍。

在开始讲解之前,我们简单说明下attention机制,例如我们有两个序列A与B,当我们需要进行相似度比较时,A序列某个时刻的值该和B序列哪个时刻比较最合适呢,而attention机制就是为了解决这个问题的,把B序列的每个时刻的值做了一个加权平均,用加权平均之后的值与A进行比较,说白了attention就是一个加权平均的过程,其中的权重就是BP过程中不断更新得到的。

论文中,作者分为了两个部分进行介绍,首先是没有attention仅有CNN的基础模型BCNN,后续又介绍了添加了attention的ABCNN,其中又分别介绍了三种模式,下文也会以该顺序进行讲解。

3.1 BCNN

BCNN的结构如下图所示
文本匹配模型汇总
可以看到BCNN包括四部分,分别是Input Layer、Convolution Layer、Average Pooling Layer、Output Layer,第一层为Input Layer,第二层与第三层为卷积与池化层,最后是用LR作为Output Layer

3.1.1 Input Layer

Input Layer即输入层,该层主要是做词嵌入,论文中作者采用的是word2vec的方法,当然,也可以采用glove等其他方法,或者直接输入one-hot,并添加embedding层。作者设置的词向量维度是300维,图中所示,左边序列是5个词维度为[5,300],右边序列是7个词维度为[7,300],注意这里作者输入的维度是不固定的,后续的池化层会将维度处理为一样的。

3.1.2 Convolution Layer

Convolution Layer即卷积层,在文本处理中,卷积核的大小通常为[n, embedding_size],n指的是节点的个数,可以理解为n-gram,从而从字/词特征中提取出短语特征,而这里的卷积层和大家平时使用的卷积还不太一样,这里采用了Wide Convolution宽卷积,我们看个图
文本匹配模型汇总
如果不做padding,边缘位置只被卷积了一次,可能损失信息,因此对边缘进行padding,使得边缘与其他位置卷积的次数相同。

3.1.3 Average Pooling Layer

Average Pooling Layer即平均池化层,仔细看,图中的第二层和第三层的池化层是不一样的,第二层的池化层是w-ap,第三层是all-ap,有什么区别呢,w-ap的核大小是可以自己定义的即[n, 300],,其操作过程类似卷积,只不过是取平均值,而all-ap的核大小是和输入的值的维度相同的,这样也就保证了输出的维度是[1, 300],从而使两个序列在比较的时候的值的维度是相同的。

3.1.4 Output Layer

Output Layer即输出层,很简单的LR做一个二分类,不再赘述。

这就是BCNN的全部内容,接下来我们看加了attention的BCNN即ABCNN

3.6 ABCNN

ABCNN作者提出了三种结构,我们分别讲解。

3.6.1 ABCNN-1

文本匹配模型汇总
第一种attention的方法是对representation进行了处理,首先,针对两个不同的序列,生成attention matrix A,如图中所示,这个矩阵可以保存了序列0与序列1每一个词/字向量的相似度,论文中作者采用的是欧氏距离,其计算过程为 1 / ( 1 + ∣ x − y ∣ ) 1/(1 + ∣x−y∣) 1/(1+xy),其中 ∣ x − y ∣ ∣x−y∣ xy表示的是欧氏距离,还是以图中为例,0序列的长度是5,1序列的长度是7,我们需要计算的是0序列中5个节点分别与1序列的7个节点的相似度的值,所以A最终的维度是[5, 7],这个相似度的值我个人认为还可以采用余弦相似度或者直接两个矩阵相乘(归一化后的值直接相乘就是余弦相似度,所以两个矩阵直接相乘得到的结果理论上来说也可以表示相似度),不过论文中提到欧式距离效果更好一些。
attention matrix生成好后,就能计算attention feature了,计算方法是定义一个权重矩阵W,如图中所示0序列对应的是 W 0 W_0 W0,1序列对应的是 W 1 W_1 W1,W的维度为[d, s],d表示的是词/字向量维度,论文中是300,s表示的是序列长度,然后用这个权重矩阵和attention matrix相乘,所以最终的attention feature为
文本匹配模型汇总
最终得到的attention feature维度和representation feature的维度是相同的。

3.6.2 ABCNN-2

文本匹配模型汇总
第二种attention是对卷积之后的结果进行操作,attention matrix的生成方法和1的一样,生成完成后,会分别针对列与行进行求和,还是以图中为例,卷积0的维度为[7, 300],卷积1的维度为[9,300],matrix的维度是[7, 9],生成的求和权重为[7, 1]与[1, 9],之后的pooling的操作不是简单的求平均,而是换成了把对应的行和求和的权重进行对位相乘,所以最后池化后的结果维度和输入维度是相同的。

ABCNN1与ABCNN2有三个主要的区别

1是对卷积之前的值进行处理,2是对池化之前的值进行处理
1需要两个权重矩阵 W 0 W_0 W0 W 1 W_1 W1,参数多一些,更容易过拟合,2不存在这个问题,由于池化是在卷积之后执行的,因此其处理的粒度单元比卷积大,在卷积阶段,获取到的是词/字向量,而池化层获取到的是短语向量,而这个短语向量的维度主要看卷积层的卷积核大小,因此,1和2其实是在不同的粒度上进行了处理。

ABCNN-3

文本匹配模型汇总
第三种方式就是把第一种和第二种方式结合起来

待更

4 BiMPM

5 DIIN

6 DRCN

7 SiaGRU

https://aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195/12023

8 RE2

https://www.aclweb.org/anthology/P19-1465.pdf