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
全连接层
这里就没什么好讲的啦。
相关阅读
长久以来,准确获知用户的需求和消费者对产品的满意度,以及竞争对手的规模与弹性,一直都是企业决策者想要却又似乎永远都无法彻底完成
当你设计一个新的功能模块,服务端童鞋一定会追问你具体有哪几种实体以及之间的关系,如果你没想清楚或者描述含糊,那么就有必要学习一
Js、 replace 全部内容替换、替换全部匹配内容、替换
使用jquery的replace时,发现只默认替换到第一个匹配数据。 string str =“12333” 1、替换第一个: string end =str.replace(3,"2"
platform_driver_register,什么时候调用PROBE函数 注册
kernel_init中do_basic_setup()->driver_init()->platform_bus_init()->...初始化platform bus(虚拟总线) 设备向内核注册的时候p
摘要 本文旨在建立数学模型描述并预测中国人口变化情况, 并努力全面合 理地分析人口老龄化、城乡人口分布、男女比例等现实因素对