Adline125's Blog

NLP Engineer, Google Developers Expert

0%

WMD论文总结及代码实现: From Word Embeddings To Document Distances

本文是对论文From Word Embeddings To Document Distances的总结和code实现。该论文基于word2vec embedding 和EMD(Earth Mover's Distance)提出了一种新的计算文档距离的算法WMD(Word Mover's Distance)。旨在解决 Obama speaks to the media in IllinoisThe President greets the press in Chicago 仅仅因词语拼写不同而导致距离很远的不合理现象。尽管这两个句子对应的词语在语义上是相近的。

本文的主要内容包括:

  • WMD模型
  • WMD模型的速度优化
  • 总结
  • Code

在WMD模型提出以前,计算文档相似度主要是使用词袋模型或TF-IDF。这两种方法都存在严重的数据稀疏问题,而且完成没有考虑词与词之间的语义关系。对意义相近但用词不同的文档无能为力。

Word Mover’s Distance(WMD)模型


MWD既考虑了词袋模型的词频也考虑了词与词之间的距离:

文档表示(nBOW)

WMD中文档表示就是归一化的词袋模型,文档向量各分量值形式化表示为: \[ d _ { i } = \frac { c _ { i } } { \sum _ { i = 1 } ^ { n } c _ { j } } \] 分子为词频,分母为文档总词数。以论文中的例句为例,去停后可表示为:

  • D0:President greets press Chicago [0.25, 0.25, 0.25, 0.25, 0, 0, ...]
  • D1:Obama speaks media Illinois [0, ..., 0.25, 0.25, 0.25, 0.25, 0, ...]
  • D3:Obama speaks Illinois [0, .., 0.33, 0.33, 0.33, 0, ..., 0]

词转化损失(word travel cost)

利用word2vec词向量计算欧式距离得到: \[ c ( i , j ) = \| x _ { i } - x _ { j } \| _ { 2 } \] $c ( i , j ) $表示一个词转化为另一个词的损失。

文档距离

WMD文档距离是由文档表示(nBow)和词转化损失(word travel cost)共同作用得到的,计算方法为寻找两个文档中对应的词,累加各组对应词对的(词转化损失 * nBow对应的分量分到该词上的权重)。对应词的标准是\(c(i, j)\)最小的词,如Figure 1所示。

Figure 1. (Top:) The components of the WMD metric between a query D0 and two sentences D1, D2 (with equal BOW distance). The arrows represent flow between two words and are labeled with their distance contribution. (Bottom:) The flow between two sentences D3 and D0 with different numbers of words. This mismatch causes the WMD to move words to multiple similar words.

当比较的两个文档长度相同时,文档距离可以简单理解为: \[ W\!M\!D \ document \ distance = \sum _ {i=1}^ {n} d_{i} * min(c(i, j)) \] 但更通用的表示,即当比较的两个文档长度不同时,我们需要引入矩阵\(T \in R ^ { n \times n }\)来表示文档距离: \[ \sum _ { i , j = 1 } ^ { n } T _ { i j } c ( i , j ) \] 其中 \(T _ { i j } \geq 0\),表示文档中的词\(i\)在多大程度上转化为另一个文档中的词 \(j\),也可理解为文档中的词\(i\)在文档nBow表示中对应的分量有多少权重被分到另一个文档中的词\(j\)上。

举个例子,Figure 1中的\(D_{0}\)\(D_{3}\),当\(T\) 矩阵为如下情况时,\(D_{0}\)\(D_{3}\)会产生如图中所示的对应关系: \[ \begin{array}{c|cccc} & \text{President} & \text{greets} & \text{press} & \text{Chicago}\\ \hline Obama & 0.25 & 0.08 & 0. & 0. \\ speaks & 0.08 & 0. & 0.25 & 0. \\ Illinois & 0.08 & 0. & 0. & 0.25 \\ \end{array} \]

Figure 2

还记得\(D_3\)的nBow表示,Obama对应的分量值为0.33,这里Obama被距离最近的词President 分走了0.25, 还剩0.08需要分配出去。图中的情况,greets是距离Obama第二近的词,于是0.08被分配给了greets。以此类推。

显然,两个文档长度相同时,\(T\) 除一一对应的词的位置是nbow分量值外,其他位置都是0.

注:Figure 1中\(D_0\)\(D_3\)只是众多可能的对应关系的一种,并不是最优的对应关系。最优的对应关系如前面所说,寻找\(c(i, j)\)尽可能小的词对。一对多的情况下,按\(c(i, j)\)由小到大顺位取。

WMD模型

WMD模型的\(Obj\)\[ \begin{split} \min _ { T \geq 0 } &\sum _ { i , j = 1 } ^ { n } T _ { i j } c ( i , j ) \\ subject\ to: &\sum _ { j = 1 } ^ { n } T _ { i j } = d _ { i } \quad \forall i \in \{ 1 , \ldots , n \} \qquad (1)\\ &\sum _ { i = 1 } ^ { n } T _ { i j } = d _ { j } ^ { \prime } \quad \forall j \in \{ 1 , \ldots , n \} \qquad (2) \end{split} \\ \] 条件(1)就是\(T\)的行元素相加和等于\(d_i\) 。如 Obama (0.33) = President (0.25) + greets (0.08) + press (0.) + Chicago (0.)

条件(2)就是\(T\)的列元素相加和等于\(d_j\)。如Press (0.25) = Obama (0.) + speak (0.25) + Illinois (0.)

(Figure2中例子\(president\)是不满足条件(2)的,下面优化部分会提到,其实只满足一个条件就可以)

\(\min _ { T \geq 0 } \sum _ { i , j = 1 } ^ { n } T _ { i j } c ( i , j )\)可以看出,这是一个有条件的线性规划问题。所有线性规划问题都有最优解。

WMD模型的速度优化


Word centroid distance(WCD)

计算WMD的复杂度太高,为\(O ( p ^ { 3 } \log p )\)。WCD的结果是WMD的下限,它是一些简单的矩阵运算,复杂度为\(O (dp)\)。其推导过程如下: \[ \begin{split} &\sum _ { i , j = 1 } ^ { n } T _ { i j } c ( i , j ) = \sum _ { i , j = 1 } ^ { n } T _ { i j } \| x _ { i } - x _ { j } ^ { \prime } \| _ { 2 } \\ = &\sum ^ { n } \| T _ { i j } ( x _ { i } - x _ { j } ^ { \prime } ) \| _ { 2 } \geq \| \sum ^ { n } T _ { i j } ( x _ { i } - x _ { j } ^ { \prime } ) \| _{2} \\ = &\| \sum _ { i = 1 } ^ { n } ( \sum _ { j = 1 } ^ { n } T _ { i j } ) x _ { i } - \sum _ { j = 1 } ^ { n } ( \sum _ { i = 1 } ^ { n } T _ { i j } ) x _ { j } ^ { \prime } \| _ { 2 } \\ = &\| \sum _ { i = 1 } ^ { n } d _ { i } x _ { i } - \sum _ { j = 1 } ^ { n } d _ { j } ^ { \prime } x _ { j } ^ { \prime } \| _ { 2 } = \| X d - X d ^ { \prime } \| _ { 2 } \\ \end{split} \]

WCD的推导相对容易,上面推导中不等式的步骤是利用\(\sqrt a + \sqrt b \geq \sqrt{a+b}\) 得到的。

得到两个文档的WMD下限\(\| X d - X d ^ { \prime } \| _ { 2 }\),可知这两个文档的距离一定大于这个值。在很多情况下,可以直接排除掉这些下限都已经很大的文档,免去进一步的运算,减少计算量。

Relaxed word moving distance (RWMD)

虽然WCD速度很快,但计算出来的下限相比真实值还是差距比较大的。RWMD通过分别去掉WMD中的一个条件来得到两个下限\(\ell _ { 1 } ( d , d ^ { \prime } )\)\(\ell _ { 2 } ( d , d ^ { \prime } )\), 然后取\(\ell _ { r } ( d , d ^ { \prime } ) = \max ( \ell _ { 1 } ( d , d ^ { \prime } ) , \ell _ { 2 } ( d , d ^ { \prime } ) )\)。当去掉的是条件(2)时,RMWD形式化表示如下: \[ \begin{split} \min _ { T \geq 0 } &\sum _ { i , j = 1 } ^ { n } T _ { i j } c ( i , j ) \\ subject\ to: &\sum _ { j = 1 } ^ { n } T _ { i j } = d _ { i } \quad \forall i \in \{ 1 , \ldots , n \} \\ \end{split} \\ \] RWMD的复杂度为\(O(p^2)\)(Figure 2的情况满足RWMD)

Prefetch and prune

  1. 计算所有文档与目标文档的WCD并对结果进行排序,选择前k个文档作为k-nearest-neighbour。
  2. 计算这k个文档与目标文档的具体WMD。
  3. 依次计算其他文档与目标文档的RWMD,并将其与第k个文档WMD进行对比,超过的可以直接prune掉。
  4. 如果没超过,计算该文档与目标文档的WMD并对k-nearest-neighbour进行更新。

总结


  • WMD完美地将word2vec与传统的Bow结合起来,这在深度学习与传统机器学习算法结合方面做得都不是很好的今天,无疑是个很novel的idea.
  • 在解决WMD复杂度过高的问题上,利用复杂度低很多的两个下限配合使用,既大大提高了速度,又没有损失精度。

代码实现


本文实现代码请见 https://github.com/Adline125/Similarity

开源的WMD实现有:

参考文献


From Word Embeddings To Document Distances

文本距离类的其他资料


CIKM Cup 2018阿里小蜜短文本匹配算法竞赛 – 冠军DeepSmart团队分享

Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks