原文:Kusner M, Sun Y, Kolkin N, et al. From word embeddings to document distances[C]//International conference on machine learning. PMLR, 2015: 957-966.

啰嗦半天为什么要用WMD

WMD全称为word mover‘s distance,也就是说词汇移动的距离,我们知道通过word2vec可以将不同的文本中的词汇编码成一些词向量,这些词向量之间是有关系的,意义相近的词通常他们的词向量编码出来也相似,在整个词向量空间中他们的距离也就比意义不相同的词距离更近,那我们扩展到整个文档中来,比较两个文档的相似程度也是一个重要的研究问题,假设两个文档都被编码到同一向量空间,那么是不是我们找到每两个词之间的距离,就可以比较文档之间的相似程度。文档间的相似度越高,他们的距离越小。先举如下的例子。

经过预处理去除停用词等操作之后两个文档分别得到了他们剩下的词汇,如上图粗体字,可以看出,两个文档每个词汇都有一一对应的距离相近的词汇,无论是根据具体的句子意思还是根据word2vec的表征之后都可以发现这两句话意思是相近,同理我们再加入第三句话,

可以看出我们加入D2之后,D2也可以在D0中找到一个相似的单词来,同样也可以计算他们之间的距离,此时D1,D2两个文档对D0的距离就是词汇距离之和,可以看出D1是更接近D0的句子,根据句意也可以看出D1更接近D0的意思。
那么到这里是不是就结束了?当然不是,上述情况只是一种句子匹配之间的一种特殊情况,也就是说我两个文档中可以找到足够对的距离小的单词对进行匹配计算他们的单词距离,但是实际上我们给到的两个文档一般不会产生上述情况,就如D3和D0一样,他们并不能产生足够的且不重复的相似单词对来进行这种匹配。但是我们能不能用上述特殊情况提出的方法来进行计算呢,现在来进行验证。
根据上述的算法我们可以知道,我们每个单词都匹配另一个文档的与他最相似的单词组成一个单词对来进行他们之间的距离的计算,我们有如下实例:

条件:D1:每个单词都和音乐有关 D2:只有一个单词和音乐有关,其他的和音乐无关 D3:有一个单词和音乐有感,其他和音乐有关但是不完全有关
我们来计算D1分别和D2之间的概率,我们希望Dist(D1,D2)>Dist(D1,D3),也就是说虽然三句话都离谱但是D1相对D3的距离还是相对D2要近一点,毕竟D2还是有一些无关词,此时我们应用上面的方法,找到每个匹配的单词对,可以发现,对于d1来说它没得选,每个单词只能选择音乐来作为自己的相近词进行距离的匹配,这样会导致Dist(D1,D2)=Dist(D1,D3),和我们的预期希望是不相符的,也就是说上述的特殊情况提出的算法是不适用的(特殊表一般当然不适用),但是我们可以吸取上述教训,我们可以发现虽然D1中的词汇都和音乐有关,但是和其他的词汇或多或少也是有那么一丁点关系的,关系不大,有用就行,如果我们同样也考虑这些单词,会不会让我们的方法更加适用,换句话说,不在进行单独单词匹配,我用一个单词去匹配整个文档,是不是可以更好的来进行表示,只不过我可以给匹配的单词加权重,意义相近的单词我就加一个较高的权重,毫无关系就权重为0或者最小,我们可以发现这样做似乎更合理一些,另外他还解决了另一个问题,当两个文档的单词数量不同,也不会因为单词数量减少导致匹配词对减少从而减少文档的相似性,回到图二中,D3和D1之间距离最相似,但是相对与D2来说还是D1更接近D2,因为他表达的意思更加细致而且同D0合适。

真正的WMD

通过上述的思考,我们大概知道了WMD的思想是什么了,但是具体如何用呢,先看公式

其中Tij为权重,c(i,j)为两个词语之间的语义距离,也就是词向量之间的欧氏距离,c(i,j)是固定的,那么我们的问题是如何确定那个Tij,文章中提到了两个方法,WCD和RWMD两个,但是这只是去计算WMD的一个快速方法,实际上计算Tij是一个线性规划问题,

我们可以把上述文档距离问题看成一个文档迁移问题,也就是说我要计算我这个文档这一群文档向量迁移到另一个文档的文档向量上,而对于这种运输问题来说,我们可以有很多方式来进行,但是我们在节能减排,为什么我们不选择一个最小的迁移距离呢,于是文档迁移最优距离如下:

此时我们结合上面的图表可以发现,对于Tij来说,它所处的行这个值加起来等于这一行的词频,那列值加起来等于这列值的词频,这样我们就变成了一个最优化问题,也就是让T矩阵中的每个元素都尽可能小,这样可以保证迁移距离最小。
作者在文章中提出了两种方法,WCD和RWMD

WCD

Word centroid distance:文档质心距离,也就是说一个文档中的所有词向量组成的词向量矩阵中找到他的中心,然后同另一个文档的中心去比较,算法过程如下:

这个方法要求两个文档去除停用词之后的长度是相同的

RWMD

RWMD首先移除了上面的一个约束,将问题转变为:

因为约束减少了,所以会得到一个更小的解,它将寻找一个最优的T矩阵,其方法如下:

对于上面的限制条件只要求横行等于di,对于纵列不要求,那么只需要找到两个词汇的距离最小的那个词汇坐标把他权重设置为di,经过下面这个式子,

可以求出一个值,然后去掉另一个约束条件,再次求得一个值,选取这两个值最大的那个作为他的wmd。

参考文献

  1. 如何通过词向量技术来计算 2 个文档的相似度?https://www.zhihu.com/question/33952003/answer/134691643
  2. https://blog.csdn.net/sinat_24330297/article/details/102738810?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163955751916780271930788%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163955751916780271930788&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-102738810.first_rank_v2_pc_rank_v29&utm_term=wmd&spm=1018.2226.3001.4187
  3. https://blog.csdn.net/u012678060/article/details/80244015?ops_request_misc=&request_id=&biz_id=102&utm_term=emd&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-80244015.nonecase&spm=1018.2226.3001.4187

自己的理解——WMD相关推荐

  1. 从EMD、WMD到WRD:文本向量序列的相似度计算

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 在 NLP 中,我们经常要去比较两个句子的相似度,其标准方法是想办法将句子编码为固定大小的向量,然后用某种 ...

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

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

  3. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  4. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  5. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  6. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

  7. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  8. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

  9. mapreduce理解_大数据

    map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...

最新文章

  1. Serverless Devs 的官网是如何通过 Serverless Devs 部署的
  2. webpack的入口起点(EntryPoints)
  3. leetcode刷题之堆
  4. 系统安装操作优化:chapter4 多系统的安装与管理
  5. 再谈变分自编码器VAE:从贝叶斯观点出发
  6. MyBatis-学习笔记08【08.动态SQL】
  7. Java文件类boolean canExecute()方法(带示例)
  8. 5款WordPress推荐文章幻灯片插件
  9. 表字段identity
  10. vim字符串替换命令
  11. Verilog三段式状态机描述
  12. [转]各种配置管理工具的比较
  13. BPF类型格式BTF
  14. (Spring+SpringMVC+mybatis)SSM企业职工工资管理系统
  15. 虚拟化、云计算、开放源代码及其他
  16. VC2005-应用程序正常初始化失败-0xc0150002
  17. 淘宝被列入黑名单,确有其事还是另有原因
  18. 如何一眼辨别谁有男朋友/女朋友?哈哈哈哈哈哈哈
  19. L2-3 清点代码库 (25 分)
  20. python+selenium+webdriver 截取全页面长图

热门文章

  1. 从一道题学习SoapClient与CRLF组合拳
  2. 边缘和物联网学术资源
  3. Android SVG动画详细例子
  4. 程序员不爱读书,但这很不明智——想看就看《高效能程序员的修炼》
  5. relpos函数解读
  6. Windows显示与隐藏文件扩展名
  7. 数图互通高校房屋管理系统具体管理范围
  8. 从零开始创建react+Django项目
  9. minicom配置及使用方法
  10. stm32--以太网方案