DSSM(Deep Structured Semantic Model)是基于语义匹配的经典神经网络算法,在搜索与推荐场景中应用广泛,并且逐渐诞生了CDSSM, MV-DSSM等改进算法。谷歌(Aliaksei Severyn)在2015年的SIGIR上发表了一篇名为 Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks 的算法,也是利用卷积对DSSM做了改动,并且提出了短文本匹配的经典网络结构,后续许多文本匹配的论文都是在这个结构基础上的改进。
算法的整体结构可以分为两部分,第一部分是利用Sentence Model对文本建模,产出其向量化表示;第二部分是利用向量化表示进行短文本匹配。
1. Sentence Model
Sentence Model 的输入是文档,可以看作是一个单词的序列,每个单词都可以查表得到其对应的向量化表示(文章中提到,单词的向量化表示是基于Wikipedia的语料库,事先利用word2vec训练得到),由此组成了每篇文档的矩阵表示(单词向量维度 X 单词列表长度)。接下来针对文档矩阵进行卷积操作,算法使用的是宽卷积(关于宽卷积和窄卷积的对比,可以参考://www.greatytc.com/p/79de5eeb0075),在文档矩阵左右分别padding m - 1个0,m是卷积核长度,如下图所示(此例中m为3,图中阴影表示作用中的卷积核)。
由于在embedding的维度上进行卷积操作的意义不大,因此卷积核的宽度与单词向量的维度保持一致,故而卷积后得到的是一维向量(长度是l + m - 1,l是单词列表的长度)。此外,算法使用了多个卷积核,因此卷积操作后的结果是 n X (l + m - 1)维的矩阵。卷积操作后引入激活函数,为算法提供非线性特性(文中使用的是relu)。最后使用池化操作(max pooling,之所以没有选择使用average pooling,是因为average pooling有可能弱化强激活值的作用,尤其是在tanh激活函数的场景中,可能导致强正向激活值与强负向激活值的互相抵消,但同时提到max pooling可能易导致过拟合,因此后续操作中有防过拟合机制),将n X (l + m - 1) 矩阵变为 l + m - 1的一维向量。
Sentence Model 的整体结构如下图所示
2. 短文本匹配
利用Sentence Model同时得到query 和 document 的embedding向量,xd 和 xq,同时引入相似矩阵 M 计算 xd 和 xq 的相似度,如下所示
这是信息检索和问答系统中常用的操作,由于矩阵可以看作是对向量的平移或旋转操作,因此计算 xd 与 xq 相似度的操作,可以看作是与 Query 最匹配的候选文档,满足其向量 xd,经过 M 变换后与 xq 最相似。该相似度的值,与 xd 和 xq 一起,同时加入额外的特征向量 xfeat,共同拼接成 join 层的向量。其中向量 xfeat 包含了额外的信息,比如 query 与 document 中 word 的重叠度,以及重叠词对应的 tf-idf 值等。
输出层之前算法添加了一个全连接隐层,经过 softmax 层后得到最后的输出,softmax 层计算过程如下
训练过程使用 sgd 优化交叉熵损失函数
损失函数同时引入了 l2 范数,目的是防止过拟合。此外,算法同时实验了神经网络中常用的 dropout 机制,加在唯一隐层与 softmax 层之间。
短文本匹配阶段的整体结构如下图