深度文本匹配模型(一):k-nrm

开篇

用深度学习模型去匹配句子的相似度已经是目前句子相似度的主流方法。本质上还是句子相似度的问题。深度文本匹配模型可以提供更好的搜索排序服务。它的基本场景就是:给一个query,模型返回排序靠前的document。是不是很像一个搜索引擎,其实本质上是差不多的。只不过深度文本匹配更具语义上的优势,更加智能。公司实习是做问答系统,所以最近都在刷一些文本匹配的模型,这边以博客的形式记录下来。不光是理论,我会奉上一些代码。

k-nrm

本模型来源于End-to-End Neural Ad-hoc Ranking with Kernel Pooling
下载地址,如果公司、学校没有购买acm的库,可以去百度搜索一下题目下载免费的。

先放上模型图,再逐步解释它的每一个部分。

每一步的公式也放上,便于大家复现模型,这边先不放代码,后期会放上代码。

Embedding Layer

公式从下往上看。深度学习NLP任务中出镜率异常高的embedding层。如图所示,我们把文本中的每一个单词都表示成一个300维的词向量。这里的词向量可以是预训练的,也可以是随机初始化的。当然预训练的词向量往往效果更加优秀。

Translation Layer

这边计算是的cosine,余弦相似度,n个单词的query和m个单词的doc,每一个单词的词向量都会计算一个cosine,最后组成一个n*m的矩阵M

Kernel Pooling

这里主要包括公式的是4,3,2,这也是文章最核心的地方,或者说创新点吧。主要是使用高斯核函数去做池化。大家有没有发现,这里没有卷积,却有池化。为什么不用卷积去提取更加细的特征,直接就池化了呢。原因嘛,憋着大招留给下一篇顶会。也就是我之后会写的conv-knrm,同样的作者,加入了卷积。不得不说cnn速度还是相当优秀的。

回到正题,(4)对M中的每一行都做了高斯核的转换,k代表的是kernel的标号;(3)每一行的Mi都得到一个向量,向量里面的元素代表的是不同的kernel转换的数值;(2)每个kernel下面都Mi都要做logsum得到我们最后的soft-tf feature

全连接层

这里就没什么好讲的啦。

猜你喜欢

转载自blog.csdn.net/Ding_xiaofei/article/details/81067275
nrm