作者:吴俣https://www.zhihu.com/question/33952003/answer/135089460

Deep Learning 派系:(1)最简单的就是两个句子分别过一个CNN或者LSTM,然后在向量空间算分,这个方法有一个trick就是千万别用MLP在向量空间算,效果大打折扣,一定要用f2f2f1dd-a82a-eb11-8da9-e4434bdf6706.svg 这种,或者你把f9f2f1dd-a82a-eb11-8da9-e4434bdf6706.svg当做MLP的输入。一定要有f2f2f1dd-a82a-eb11-8da9-e4434bdf6706.svg这项,原因是其实你a和b直接连接会丢信息,就是boundary信息,并不知道a的边界在哪里,

b的边界在哪里。

Severyn, Aliaksei, and Alessandro Moschitti. "Learning to rank short text pairs with convolutional deep neural networks." Proceedings of the 38th International ACM SIGIR Conference on Research and Development in Information Retrieval. ACM, 2015.

评论有人问1为什么:这个我做过很详细的实验,如果靠连接起来走MLP不靠Bilinear的计算训练收敛速度会慢很多,且最后往往没有Bilinear的收敛的好。这个原因大概是Bilinear相当于我已经告诉神经网络,a和b都是哪里,不用神经网络去学,让收敛速度变快。另外,a自己作用自己往往是无效的(设想MLP时候A自己的第一维度还要和自己的第二维度发生作用,这其实是奇怪的在匹配任务重)。当然这两种模型的差距在数据的增大时候会效果越来越接近,可见模型在很大规模数据上,可以学习到这件事情(不过往往写论文的数据集没这么大)。

(2) 李航老师的Arc2 不是很work,但是想法非常非常好,亲测仍需提高,稍微改改就可以很work。。。先简介 Arc2, 这个模型把两句话的所有word算了个分生成了一个n*m的矩阵,然后把这个矩阵当图片过cnn。他原本算词词相似度是两个词向量连一起然后算个分,其实点击 fdf2f1dd-a82a-eb11-8da9-e4434bdf6706.svg或者 f2f2f1dd-a82a-eb11-8da9-e4434bdf6706.svg比他原始的06f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg好用很多。另外,最好在cnn算的时候,直接用word embedding不是最佳方案,最佳方案是用已经过了LSTM的hidden state。

李航:Hu, Baotian, et al. "Convolutional neural network architectures for matching natural language sentences." Advances in Neural Information Processing Systems. 2014.

改相似度方法为Dot:Pang, Liang, et al. "Text Matching as Image Recognition." arXiv preprint arXiv:1602.06359 (2016).改为RNN上做CNN(原始方法是只做了Pooling,我尝试过如果做Convolution会更好) Wan, Shengxian, et al. "A Deep Architecture for Semantic Matching with Multiple Positional Sentence Representations." arXiv preprint arXiv:1511.08277 (2015).

3. 去年还提出了一套Attention系列的匹配方法,例如Match-LSTM,我在聊天这个任务上评测没有(2)好用。Match-LSTM:Wang, Shuohang, and Jing Jiang. "Learning Natural Language Inference with LSTM." arXiv preprint arXiv:1512.08849 (2015).另外的:Tan, M.; Xiang, B.; and Zhou, B. 2015. Lstm-based deep learning models for non-factoid answer selection. arXiv preprintTim Rockt¨aschel, Edward Grefenstette, Karl Moritz Hermann,Tom´aˇs Koˇcisk`y, and Phil Blunsom. 2015. Reasoning about entailment with neural attention. arXiv preprint arXiv:1509.06664.

还有DSSM这种比较古老的模型看看就行了,时代在进步~ 还有我说的每个技巧你看着虽小,但都有人拿他发了论文,(1)是SIGIR,(2)是两篇AAAI,(3)是ACL ICLR NAACL,等我有空我尽量把论文地址写上。。。

作者:子元https://www.zhihu.com/question/33952003/answer/134691643正好在组会讲了Batman 提到的 From Word Embeddings To Document Distances,在这里也顺便介绍一下,还有他们发表在NIPS 2016上的后续工作 Supervised Word Mover's Distance。From Word Embeddings To Document Distances:

如果希望文档距离能反映语义上的差别,一个想法是把文档距离建模成两个文档中词的语义距离的某个“总结”,比如说加权和形式09f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg,其中0cf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg为词11f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg和词的语义距离,13f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg为相应的非负权重(把两个文档中都没有的词的权重设为0)。词的语义距离可以用 word2vec 给出的词向量之间的 Euclidean 距离。但是加权方式用什么比较好?

先看个示意图:左右为两个距离待求的文档,粗体字是我们关心的非stop-words,中间是词向量空间示意图。箭头从文档1的词指向文档2中与它们最匹配(=词向量空间中距离最小)的词。


可能大家会首先想到把文档距离定义为这些匹配词对之间距离的和(=匹配词对权重1,其余词对权重0)。但这样做是有问题的。先不论这样定义的距离是否满足距离的性质(比如对称性),我们考虑这样的情况:文档 1 中每个词都跟“音乐”密切相关;文档 2 中只有一个词跟“音乐”密切相关,其余词都跟“音乐”完全无关;文档 3 中有一个词跟“音乐”密切相关,其他词都跟“音乐”有点关系但关联性不大。我们希望有1cf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg,但只考虑匹配词对之间的距离和的话无法做到这一点,因为文档 1 中的所有词在文档 2 和文档 3 中都会被匹配到那个跟“音乐”密切相关的词上去,从而可能导致1ff3f1dd-a82a-eb11-8da9-e4434bdf6706.svg

所以我们希望通过某种约束,使得文档 1 中的每个词都会以不同权重被“强制性”地匹配到另一个文档的所有词上去。在上面关于“音乐”的例子里,由于文档 2 或 3 的所有词都会被匹配到,但文档 3 的词跟“音乐”更相关,我们便有希望得到1cf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg

我们先把文档看成词的一个分布(比如使用归一化的词频特征)。首先考虑如何令“文档 1 中的每个词以不同权重匹配到另一个文档的所有词上”。如下图,很简单,我们允许“部分匹配”就可以了。这里我们把匹配看成是把文档 1 中的词“移动”到文档 2 中的词的一个过程,移动代价是两个词向量的 Euclidean 距离。比如说“Obama”在文档 1 中的权重(概率)是 0.5,如果我把 0.4 移动到“President”、0.05 移动到“greets”……等等,移动代价就是29f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg

这里应该有个约束:把“Obama”分到文档 2 中词的权重的和应该等于它在文档 1 中的权重,即2af3f1dd-a82a-eb11-8da9-e4434bdf6706.svg


现在考虑“强制性”这个特性。要想文档 2 的词都会被匹配到,我们可以同时要求,流进文档 2 中某个词的权重(比如对于“Press”,流进它的权重 =  “Obama”→“press” 的权重 + “speaks”→“press” 的权重 + “media”→“press” 的权重 + ……),等于它在文档 2 中的权重。这样对于每个符合以上两个约束的词的移动方式,我们都有一个总的移动代价。我们令最小的移动代价为两个文档之间的 Word Mover's Distance(WMD),即


其中0cf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg词向量11f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg39f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg的 Euclidean 距离,3cf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg是词的个数,3ef3f1dd-a82a-eb11-8da9-e4434bdf6706.svg40f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg分别是两个文档中各个词权重(概率)组成的向量,亦即我们使用的文档特征。

这个距离是概率分布距离Earth Mover's Distance 的一个特例,它更广泛的形式是 Wasserstein metric。后者可以参见豆豆叶写的 分布的相似度(距离)用什么模型比较好?

现在计算两个文档之间的 WMD 距离就要求解一个大型的线性规划问题,要是用它来做 k-NN 就比较耗时了。文章接下来便考虑了 WMD 两个计算比较方便的下界,方便在 k-NN 的时候做加速:如果当前待检查文档跟中心 query 文档的 WMD 下界已经大到可以确定它不在 query 文档的 k-NN 列表里,那就直接扔掉而不用再花时间求当前文档的 WMD 距离了。

首先是比较快但比较松的 Word Centroid Distance(WCD,定义在最后一个等号处,公式中的43f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg是词向量,45f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg是词向量组成的矩阵):


可以看出 WCD 只涉及基本矩阵运算,计算速度很快。

其次是慢一点但紧一点的 Relaxed word moving distance (RWMD)。想法是,把 WMD 定义中的两个约束去掉一个,然后求解那个优化问题。约束少了目标值肯定就小了。这两个 relax 过的优化问题的解,恰好对应于词向量矩阵的行空间和列空间上的最近邻问题,也是很好算的。最后定义 RWMD 为这两个 relaxed 优化问题的两个目标值中的最大值。

最后是如何利用这两个下界做所谓的 prefetch and prune 来为 k-NN 加速:给定 query 文档4cf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg后,1. 用 WCD 取离它最近的aaf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg个文档;2. 计算前b0f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg个文档的 WMD;3. 计算剩下文档的 RWMD,如果某个文档的 RWMD 大于 k-NN 列表中第b0f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg个文档的 WMD 就扔掉,不然就计算它的 WMD。如果发现在 k-NN 列表中就更新 k-NN 列表,不然也扔掉。

文章中的实验证明了作者所提出的 WMD 距离在几个流行的文本数据上kNN分类效果最好,同时也比较了几个界的松紧程度,以及不同数据集给出的word2vec词嵌入对 kNN 效果的影响等等。

Supervised Word Mover’s Distance

在上文的基础上,作者给文档特征4cf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg引入一个reweightingbff3f1dd-a82a-eb11-8da9-e4434bdf6706.svg,定义新文档特征c8f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg;再给词向量空间引入一个metriccbf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg,定义新的“移动代价”cef3f1dd-a82a-eb11-8da9-e4434bdf6706.svg。然后他们通过 Neighbourhood Components Analysis 去学习bff3f1dd-a82a-eb11-8da9-e4434bdf6706.svgcbf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg

原则上这样做没什么问题,但这时候两个优化问题嵌套在一起,复杂度更高不说,目标函数的梯度也不一定存在。为此,他们采用了 optimal transport problem 的一个带正则项的形式。带正则项后,一来目标函数被光滑化,二来这个版本的最优输运矩阵d8f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg也比较好算。他们再利用这个比较好算的d8f3f1dd-a82a-eb11-8da9-e4434bdf6706.svg去计算他们目标函数的梯度(关于 bff3f1dd-a82a-eb11-8da9-e4434bdf6706.svgcbf3f1dd-a82a-eb11-8da9-e4434bdf6706.svg),从而基于梯度的优化能够顺利进行。

推荐阅读:

就最近看的paper谈谈预训练语言模型发展

如何评价Word2Vec作者提出的fastText算法?深度学习是否在文本分类等简单任务上没有优势?

从Word2Vec到Bert,聊聊词向量的前世今生(一)

文档词频矩阵_如何通过词向量技术来计算 2 个文档的相似度?相关推荐

  1. 文档词频矩阵_论文理解:从词嵌入到文档距离

    论文作者简介 本论文第一作者Matt J. Kusner是牛津大学的副教授,致力于设计适应现实世界问题需求的新机器学习模型(例如,fair algorithms, discrete generativ ...

  2. python+Xpath爬取英文新闻并生成文档词频矩阵

    详情见我的github:https://github.com/Snowing-ST/Statistical-Case-Studies/tree/master/Lab3%20English%20Text ...

  3. 词向量技术原理及应用详解(四)——词向量训练

    前文理论介绍完毕,接下来进入实战环节.实践中向量化应用的场景常有不同,但向量文本化的训练和使用方式大同小异.在这里我将采用两种方法:gensim库以及tensorflow来完成词向量实战训练. 一.w ...

  4. 自然语言处理之词向量技术(二)

    1. 词向量技术 词向量(word2vec)是一种表示自然语言中单词的方法,即把每个词都表示为一个N维空间内的点,即一个高维空间内的向量,通过这种方法,把自然语言计算转换为向量计算.词向量的基本内容包 ...

  5. 机器学习之路: python 实践 word2vec 词向量技术

    git: https://github.com/linyi0604/MachineLearning 词向量技术 Word2Vec 每个连续词汇片段都会对后面有一定制约 称为上下文context找到句子 ...

  6. 词向量与词向量拼接_第一节——词向量与ELmo(转)

    最近在家听贪心学院的NLP直播课.都是比较基础的内容.放到博客上作为NLP 课程的简单的梳理. 本节课程主要讲解的是词向量和Elmo.核心是Elmo,词向量是基础知识点. Elmo 是2018年提出的 ...

  7. word2vec原理_初识word2vec词向量

    Word2vec技术 1.word2vec简介 Word2vec是一种词嵌入技术,用来进行文本表示的.首先谈一下文本表示,众所周知,机器是无法识别和理解自然语言的.文本表示就是把自然语言转换成数字或向 ...

  8. NLP(4) | 用词向量技术简单分析红楼梦人物关系用n-gramma生成词向量word2vect进行模型训练

    NLP(1) | 词向量one hot编码词向量编码思想 NLP(2) | 中文分词分词的概念分词方法分类CRFHMM分词 NLP(3)| seq to seq 模型 前言:出于种种原因,总是不自觉把 ...

  9. NLP专题直播 | 详谈词向量技术:从Word2Vec, BERT到XLNet

    现在是国家的非常时期,由于疫情各地陆续延迟复工,以及各大院校延期开学.作为一家AI教育领域的创业公司,我们希望在这个非常时期做点有价值的事情,并携手共渡难关.在疫情期间,我们决定联合国内外顶尖AI专家 ...

最新文章

  1. 一个很好的性能监测工具dstat
  2. python携程酒店评论_携程酒店评论爬虫心得
  3. 查看oracle压力,一个很简单测试oracle压力方法
  4. 基于Xilinx FPGA生态,加速提升视频处理质量
  5. jq 方法函数(淡入淡出,查找元素,过滤)遍历
  6. GCC Inline ASM GCC内联汇编
  7. bmon:一个强大的网络带宽监视和调试工具
  8. Logistic回归——二分类 —— matlab
  9. 技术转管理,用什么来拯救自己?
  10. python3读取本地_Python3 获取本机 IP
  11. SPSS统计功能与模块对照表
  12. Yahoo!团队实践分享:网站性能优化的34条黄金守则(二)
  13. (04)VTK移动模型,判断是否相交
  14. Q133:PBRT-V3,BSSRDF的采样(15.4章节)
  15. 谈一谈 IPA 上传到 App Store Connect 的几种方法
  16. 国内ERP技术公司综合
  17. 判断访问浏览器的类型
  18. tp前后端不分离源码_Thinkphp5.0+Vue2.0前后台分离框架通使用后端源码
  19. 使用MqttClient
  20. 如何在 CSS 中将表格居中?

热门文章

  1. 黑大本科计算机毕业论文,黑龙江大学本科毕业论文.doc
  2. 内存的工作原理和时序介绍
  3. 发表一个AARDIO对接中控考勤机的源码
  4. 判断浏览器是否支持wap
  5. 注册kaggle人机验证没有验证码
  6. 教程- VTK.js的基本介绍
  7. 基于matlab的pid调节论文,毕业论文 基于matlab的智能PID控制器的设计与仿真
  8. B站UWP客户端下载视频整理脚本
  9. agilent VISA项目开发小记
  10. 在阿里云ECS服务器上搭建tomcat