1. 简介

文本间的距离在文本分类, QA问答, 信息检索方面有比较广泛的应用. 最近完成的一个项目就是用bert 向量化文本然后计算余弦距离来实现问答匹配, 这种方法简单粗暴, 但比较依赖特征提取算法的效果, bert也可以换成doc2vec, Wordvec, fasttext等等. 本篇笔记介绍一种基于word2vec的文本相似度算法.

2. Word Mover's Distance (WMD)

2.1. 归一化词频

如果一个词



在文本中出现的次数为



,它的归一化词频为:





2.2. 文档距离直观表示.

为了反映语义上的差别, 我们以加权词距离的形式表示文档距离 :



, 其中



为词



和词



的语义距离:



,



为embedding后的词向量 .



则为相应的非负权重.



示意图如下, 箭头从文档1 中的词指向文档2 中与它们最匹配的词( 向量距离最小), 其中to, the ,in 等为我们不关心的stop-words, 计算前会将它们去掉.




文本语义相似度计算指标 word2vec_minhash算法检索相似文本


直觉上, 我们一般希望给 (Obama, President) 这样的匹配词对权重1 , 而给 (Obama, greets)这样的不匹配词对权重0. 但是这样做是有问题的, 我们在下面的2.3约束条件里来分析.

2.3 约束条件

假设有A, B, C 三个文档, 每个文档去除停用词后都有五个词, 其中A中五个词都跟音乐密切相关, B中只有一个词与音乐密切相关, 其他词都与音乐无关 , C中有一个词与音乐密切相关, 其他四个词与音乐比较相关. 那我们肯定希望计算出来的文档距离是


. 如果我们按照我们上面朴素的权重分配思想, 我们假设


,


,


, 其中


分别是A, B中与音乐密切相关的词, 那么A文档中所有的词都会分配到b1, c1上去, 从而可能导致


,这是我们不愿意看到的.


所以我们希望通过某种约束来调整权重, 让A中的每个词都以不同的权重匹配到另一个文档的所有词上去. 在上述例子中, 由于B和C的所有词都会被匹配到, 其中C文档词与A中词更相关, 所以我们就有可能得到


.


我们是如何调整权重的呢, 比如说 Obama 在文档1 中的词频(权重)是0.5 , 我们把0.4匹配到 President, 0.05 匹配到 greets ......等等, 总的距离( 移动代价) 就是 :


, 这里有两个约束条件:


1. 把 Obama 分到文档2中的权重和应该等于它在文档1 中的权重 , 即 0.4+0.05+.....=0.5. 2. 文档2 中某个词接收到的权重等于它在文档2 中的权重 ( 比如 press , 它接收到的权重 = Obama


press 的权重 + speaks


press 的权重 + ............等等)


这两个约束用公式表达如下,其中



分别是每个词在各自文档中的词频 :




在这两个约束条件下, 我们令两个文档的最小的总的距离( 移动代价)为 它们之间的 Word Movers's Distance( WMD):


文本语义相似度计算指标 word2vec_约束条件_02


计算两个文档之间的WMD就要求解一个大型的线性规划问题, 如果要用它来做K-NN( k个最相似文档)就比较耗时了. 因此提出了了两个优化方案来减小计算量.

2.4 寻找给定文档 d 的k 个最相似文档(K-NN)

论文中提出了两种设置Lower bounds 的方法来过滤文档, 通过牺牲部分精准度来减少时间复杂度. 两种方法分别为 Word Centroid Distance( WCD) , Relaxed Word Moving Distance(RWMD), 我们将在后面介绍这两个算法. K-NN的流程如下:

  1. 用WCD计算所有文档与d的距离并排序, 然后计算前k个文档的WMD距离.
  2. 遍历剩下的文档, 计算它们的RWMD, 如果文档的RWMD超过了第k个最近文档的WMD距离, 我们就可以扔掉它, 如果不超过, 我们就计算它的WMD距离, 并更新k个近邻的文档.

3. prefetch and prune为 K-NN加速

3.1 WCD(Word Centoid Distance) :


文本语义相似度计算指标 word2vec_Word_03


其中


, 是词向量组成的矩阵 . 算法时间复杂度为


. 公式中的不等式咋一看不太明白:


文本语义相似度计算指标 word2vec_约束条件_04


它其实就是是初中就学过的三角不等式


.


3.2 . Relaxed Word Moving Disrance

尽管WCD的时间复杂度很低,但是边界过于宽松,无法很好的近似WMD。因此,这里使用更加tight的下界RWMD。RWMD需要计算两次,基于WMD目标函数,分别去掉两个约束条件中的一个,然后求解最小值,使用两个最小值中的最大值作为WMD的近似值。

比如, 去掉第二个约束条件, 可得:




这个问题的最优解为, 对于文本


中的一个词, 找到另一个文本


中与之最相近的一个词, 全部转移到这个词, 即:



求得


.


同理去掉第一个约束条件, 可得:




这个问题的最优解为对于文本


,找到文本d中与之最相近的一个词, 全部接收这个词,即:



求得



最终


结果即为RWMD, 时间复杂度为