正式开始看文本匹配的东西啦!文本匹配对NLPer来说是很重要的,不管是最后是做对话、推荐、搜索,文本匹配都是必不可少的。当然啦,BERT系列的模型出来之后,其实传统的深度学习模型效果是远远比不上的。不过这些预训练模型效果好是好,但是训练代价昂贵,当然啦,有人会说,现在已经有剪枝、量化、蒸馏这样的方法来减小预训练模型的大小,从而降低训练所需的代价(所以说模型压缩、加速这个方向还是很有前景的🤩咦,好像跑偏了,anyway),但是这仍然远远不够,所以熟悉传统的文本匹配模型是非常有必要的。本篇博客讲解经典的MatchPyramid模型,并采用tensorflow2实现。
MatchPyramid模型介绍
MatchPyramid模型来源于2016年的《Text Matching as Image Recognition》论文,用来解决文本匹配问题,即计算句子的相似度。论文的思想比较有意思,它借鉴了图像识别的思想。在图像识别中,我们通过CNN,先得到最为基本的特征,譬如:线、角、点等等,然后在这些low level的特征上,构建出更加高级的特征,譬如:眼睛、鼻子、嘴巴等等,之后再构建出整个图像。那么在文本中,是不是也可以这样来做呢?答案是肯定的!我们可以计算word level的matching signals,在此基础上,我们可以计算phrase level的matching signals,最后得到sentence level的matching signals。但是,图像一般是2D的,而文本是1D的,这个怎么解决呢?在MatchPyramid模型中,使用token与token之间的相似度当作图像中的像素,从而构建出一个matching matrix $M$,之后使用卷积层来提取出更加丰富的matching pattern,最后得到句子之间的相似度,就解决啦!思想是不是nice~直接放图吧~
Matching Matrix
从上图中可以得知,matching matrix的构建对于MP模型来说至关重要。在论文中,提到了三种构建matching matrix的方法:indicator function、cosine、dot product。如下:
- indicator function:$M_{ij}=\left\{ \begin{matrix} 1,w_i=v_j \ 0, otherwise \end{matrix} \right.$。其中,$w_i、v_j$ 分别表示两个句子的第 $i$ 个位置与第 $j$ 个位置的token。这种方法的缺点在于:无法捕捉到更加丰富的语义信息。
- Cosine: $M_{ij}=\frac {\alpha_i\beta_j}{||\alpha_i||·||\beta_j||}$,其中,$\alpha_i、\beta_j$ 分别是两个句子第 $i$ 个位置与第 $j$ 个位置的token的word embedding(可以由word2vec、glove等得到)。
- dot product: $M_{ij}=\alpha_i^{T}\beta_j$,这个没有什么可说的,就是向量相乘。
Hierarchical Convolution
在得到matching matrix之后,我们只是得到的word level的matching pattern,这远远不够。所以,我们要搞事情啦!由于卷积层提取特征的能力远远超过分类层,所以使用卷积层能够提取到更为丰富的matching pattern。具体如下:
- 在模型的第一层,我们使用一个2维卷积,注意:这个2维卷积层采用的是方核,并且激活函数使用relu。
- 在模型的第二层,我们使用动态的pooling。pooling kernel的维度根据文本长度会发生变化。
- 当然啦,我们可以复用上述两个block,从而得到更加高层次语义特征。
- 最后,我们加一个MLP层,得到最终的每一个class(0,1)的matching score。对于得到的matching score,我们使用softmax作为分类器,cross entropy作为loss function。 训练时,我们使用SGD,优化器使用AdaDelta。
作者在Paraphrase Identification(MSRP datasets)与Paper Citation Matching两个task上进行了实验,都取得了非常的效果。发现使用dot product构建的Matching matrix得到的结果最好。如下:
另外提一句,MatchPyramid也有局限性,在于:MP模型只适合于相似度主要在结构上,并且数据量较少的情况,像这个case:我写信写了一个晚上/这封信写了我一个晚上,是不适合MP模型的。
以上就是MatchPyramid模型的全部内容啦~
MatchPyramid模型实现
参考文献
Deep Pyramid Convolutional Neural Networks for Text Categorization