如何计算文本间距离:WMD

WMD

Paper: From Word Embeddings To Document Distances

2015年,提出词移距离WMD(Word Mover’s Distance):词移距离是在词向量的基础上发展而来的用来衡量文档相似性的度量, 是一种计算句子之间距离的方法,距离越小,相似度越高。

1. 为什么提出?

计算句子/文档相似度的一些方法有:

  • 无监督的句子相似度计算——Jaccard相似系数:

    Jaccard相似系数用来衡量两个集合之间的相似性,被定义为两个集合交集的元素个数除以并集的元素个数。
    S I M ( s 1 , s 2 ) = intersection ( w o r d s 1 , w o r d s 2 ) union ( w o r d s 1 , w o r d s 2 ) SIM(s_1,s_2) = \frac{\text{intersection}(words1, words2)}{\text{union}(words1, words2)} SIM(s1,s2)=union(words1,words2)intersection(words1,words2)
    Jaccard相似系数值越大,句子相似度越高。

    Jaccard距离用来度量两个集合之间的差异性,它是Jaccard的相似系数的补集,被定义为1减去Jaccard相似系数。
    d ( s 1 , s 2 ) = 1 − S I M ( s 1 , s 2 ) = 1 − intersection ( w o r d s 1 , w o r d s 2 ) union ( w o r d s 1 , w o r d s 2 ) d(s_1,s_2)=1-SIM(s_1,s_2) = 1-\frac{\text{intersection}(words1, words2)}{\text{union}(words1, words2)} d(s1,s2)=1SIM(s1,s2)=1union(words1,words2)intersection(words1,words2)
    Jaccard距离越大,句子相似度越小。

  • 使用向量空间模型,对句子进行向量表征,再计算两两之间的欧式距离、余弦相似度等度量指标。

    基于Word2Vec,使用预先训练好的word-embdding向量,对于一个句子,将词向量的每一位进行加和或求平均。

    对句子建模,方法包括skip-gram,cbow的doc2vector建模方法,基于autoencoder的建模方法,基于skip-thought的句子建模方法等。基于sentence-vector的方法能够更好的保留句子的语义信息,能够在一定程度上弥补词袋缺点。

首先解决文档表示,可以通过:

  • 词袋(BOW)/TF-IDF:不考虑文法及词的顺序,只考虑词频,将文本进行向量化表示。存在的问题:如果两个句子没有相同词语,根据向量表示会判定为完全不相关,但两者可能具有相同的语义。
  • LSI和LDA:将相似词归入主题,文档表示为主题的概率分布。相比BOW更连贯,但不能改善BOW的性能效果。比较两个文档的相似度,可以比较两个文档主题分布的差异。
  • Word2Vec:基于word2vec把文本中的所有词映射到一个词向量空间。在一定程度上解决了语义问题,使用CBOW/Skip-Gram考虑上下文信息,词向量可以反映词与词之间的语义差别。再将文档/句子表征为所有词向量的平均,通过计算两两之间的欧式距离、余弦相似度等衡量文档相似度。

Word2Vec考虑词间的距离,提出的WMD是考虑文档间的距离。用一个距离反映文档和文档间的相似度,一个想法:将文档建模成2个文档中词的语义距离的一个组合,比如对两个文档中的任意两个词所对应的词向量求欧式距离然后再加权求和。

2. 如何解决问题?

WMD的求解是EMD问题的一个特例 。

2.1 定义问题

2.1.1 归一化词频

归一化词频(normalized bag-of-words,nBOW),如果一个词 i i i在文本中出现的次数为 c i c_i ci,它的归一化词频为:
d i = c i ∑ j = 1 n c j d_i=\frac{c_i}{\sum_{j=1}^{n}c_j} di=j=1ncjci
单词的重要程度与词的出现频率相关(并且归一化)。

2.1.2 词移动代价

词移动代价(Word travel cost),由于WMD中词语是经过word2vec表示的,而word2vec表示后的词可以直接计算欧式距离。单词 i i i和单词 j j j的语义距离 c ( i , j ) c(i,j) c(i,j)为欧式距离:
c ( i , j ) = ∣ ∣ x i − x j ∣ ∣ 2 = ( x i 1 − x j 1 ) 2 + ⋯ + ( x i d − x j d ) 2 ) c(i,j)=||x_i-x_j||_2=\sqrt{(x_i^1-x_j^1)^2+\cdots+(x_i^d-x_j^d)^2)} c(i,j)=xixj2=(xi1xj1)2++(xidxjd)2)

2.1.3 文档距离

文档距离(Document distance)的直观表示: ∑ i , j T i j ⋅ c ( i , j ) \sum_{i,j}T_{ij}\cdot c(i,j) i,jTijc(i,j)

转移矩阵 T i j T_{ij} Tij:文档 d d d中的单词 i i i到另一文档 d ′ d' d中的单词 j j j的权重。

2.1.4 约束条件

结合EMD这个经典的运输问题(Transportation problem),目标是:最小化两个文档的总距离(移动代价);添加约束条件调整权重:让文档 d d d中的每个单词都以不同的权重匹配到到另一文档 d ′ d' d中所有单词。
min ⁡ T ≥ 0 ∑ i , j = 1 n T i j c ( i , j ) s . t : ∑ j = 1 n T i j = d i ∀ i ∈ 1 , … , n ∑ i = 1 n T i j = d j ′ ∀ j ∈ 1 , … , n \min_{T\ge0}\sum_{i,j=1}^{n}T_{ij}c(i,j)\\ s.t: \sum_{j=1}^{n}T_{ij}=d_i \quad \forall i\in{1,\dots,n}\\ \sum_{i=1}^{n}T_{ij}=d_j' \quad \forall j\in{1,\dots,n}\\ T0mini,j=1nTijc(i,j)s.t:j=1nTij=dii1,,ni=1nTij=djj1,,n

2.2 快速计算

解决WMD优化问题的最佳平均时间复杂度为 O ( p 3 log ⁡ p ) O(p^3 \log p) O(p3logp),其中 p p p表示文档中唯一词的数量。如果数据集有大量的文档或者有大量的唯一词,解决WMD优化问题就很困难。

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

论文中提出了两种设置Lower bounds 的方法来过滤文档,通过牺牲部分精准度来减少时间复杂度. 两种方法分别为 Word Centroid Distance( WCD) , Relaxed Word Moving Distance(RWMD)。

2.2.1 WCD

WCD(Word centroid distance),根据三角不等式 ∣ a ∣ + ∣ b ∣ ≥ ∣ a ± b ∣ ≥ ∣ ∣ a ∣ − ∣ b ∣ ∣ |a|+|b|\ge |a\pm b|\ge ||a|-|b|| a+ba±bab,转化为计算WMD的下限——centroid distance: ∥ X d − X d ′ ∥ 2 \parallel Xd-Xd'\parallel_2 XdXd2,如下:

两个文档之间的“centroid”距离将会永远比WMD距离要小。

WCD

其中 X ∈ R d × p X\in R^{d\times p} XRd×p是词向量组成的矩阵,算法时间复杂度为 O ( d p ) O(dp) O(dp)

2.2.2 RWMD

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

去掉了一个条件之后,依然符合永远小于原WMD的性质,而以下方程的最优解为,将所有的分配权重都分配到最相近的Euclidean distance的两个单词中。

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

RWMD.png

这个问题的最优解为,对于文档 d d d中的一个词,找到另一个文档 d ′ d' d中与之最相近的一个词,全部转移到这个词,即:

RWMD-T.png

求得WMD最小值 l 1 ( d , d ′ ) l_1(d,d') l1(d,d)

同理去掉第一个约束条件,可得:
min ⁡ T ≥ 0 ∑ i , j = 1 n T i j c ( i , j ) s . t : ∑ i = 1 n T i j = d j ′ ∀ j ∈ 1 , … , n \min_{T\ge0}\sum_{i,j=1}^{n}T_{ij}c(i,j)\\ s.t: \sum_{i=1}^{n}T_{ij}=d_j' \quad \forall j\in{1,\dots,n}\\ T0mini,j=1nTijc(i,j)s.t:i=1nTij=djj1,,n
这个问题的最优解为,对于文档 d ′ d' d中的一个词,找到另一个文档 d d d中与之最相近的一个词,全部接收这个词,即:
T i j ∗ = { d j ′ if    i = arg ⁡ min ⁡ i c ( i , j ) 0 otherwise. T_{ij}^*=\begin{cases} d_j'\quad \text{if} \;i=\arg\min_i c(i,j)\\ 0 \quad \text{otherwise.} \end{cases} Tij={djifi=argminic(i,j)0otherwise.
求得WMD最小值 l 2 ( d , d ′ ) l_2(d,d') l2(d,d)

最后求 l r ( d , d ′ ) = max ⁡ ( l 1 ( d , d ′ ) ,    l 2 ( d , d ′ ) ) l_r(d,d')=\max(l_1(d,d'),\;l_2(d,d')) lr(d,d)=max(l1(d,d),l2(d,d))结果即为RWMD,时间复杂度为 O ( p 2 ) O(p^2) O(p2)

2.2.3 Prefetch and prune 加速k-NN

结合以上两个办法来一起进行剪枝处理。为了找到查询文档 q q q的k个最近邻,我们可以使用两个下限来大大减少我们需要进行的WMD距离计算量。

K-NN的流程如下:

  1. 用时间复杂度最小的WCD计算本文档 q q q与所有文档之间的距离;
  2. 并将所有文档按照距离从小到大排序;
  3. 然后只计算前k个文档的WMD距离;
  4. 遍历剩下的文档,用RWMD计算本文档 q q q与剩下文档之间的距离,如果距离大于前k个最近文档的WMD距离的最大值,直接剪枝这个文档;如果这个文档的距离小于前k个WMD距离的任何一个,我们就计算这个文档的WMD,并更新k个近邻的文档。

通过这个办法,我们可以剪枝掉95%以上的数据集,非常有效。

3. 优点?

  • 效果出色:充分利用了word2vec的领域迁移能力
  • 无监督:不依赖标注数据,没有冷启动问题
  • 模型简单:仅需要词向量的结果作为输入,没有任何超参
  • 可解释性:将问题转化成线性规划,有全局最优解
  • 灵活性:可以人为干预词的重要性
  • 检索准确率高

4. 缺点?改进方向?

4.1 缺点

缺点:

  • 没有保留语序信息,WMD认为“屡战屡败”和“屡败屡战”在语义上完全一致。
  • 不能很好地处理OOV问题:由于词向量是离线训练的,应用于在线业务时会遇到OOV问题,用户query分出来的词,有可能找不到对应的词向量。
  • 处理否定词能力差:在训练好的词向量中,通常语义相反的词的词向量是比较相近的,这会导致语义相反的两个句子WMD距离很近。 (很多相似度计算方法的缺点 )

4.2 改进算法S-WMD

WMD距离,学习这个权重矩阵用于聚类(K-NN,那些文档比较相近)的效果很好,但是用来分类的效果很差。

因为一些文章虽然近义词很多, 但是表达的不是一个语义和主题. 比如: I love playing football 和 I like playing piano。虽然看起来句式差不多,可能会归为同类,但是如果打标签时如果是”运动”和”艺术”两类,显然就不能用WMD直接分类了。因为,**WMD没有加入 football和”运动” 是强相关的信息。

论文“Supervised Word Mover’s Distance”提出的WMD算法改进:可训练的加惩罚项的S-WMD

论文给出的解决方案就是在WMD距离中加入可以训练类别权重的功能:

S-WMD.png

这里的 d i d_i di加入了类别权重 w i w_i wi

S-WMD-weight.png

单词间距离也要进行调整(单词间距离也因为类别不同需要调整距离),加入训练参数矩阵A。

Algorithm S-WMD.png

改进方向:

  • 可解释性
  • 加惩罚项

5. WMD应用

WMD应用:

  • 作为特征输入:一个无监督的语义相似度特征。
  • 计算文本间距离。

6. WMD代码实现

WMD代码实现的几个要点:

  • 找最近的词,
  • 优化:处理权重
  • 剪枝:topk个文档的排序

目前开源的WMD实现有:

  • https://pypi.org/project/wmd/
  • https://github.com/mkusner/wmd

7. 参考

WMD tutorial:https://github.com/RaRe-Technologies/gensim/blob/c971411c09773488dbdd899754537c0d1a9fce50/docs/notebooks/WMD_tutorial.ipynb

Code:https://github.com/mkusner/wmd

https://zhuanlan.zhihu.com/p/84809907

https://blog.csdn.net/weixin_40547993/article/details/89475630

Supervised Word Mover’s Distance (可监督的词移距离)-NIPS 2016论文精选#2

算法改进:Supervised Word Mover’s Distance

欢迎各位关注我的个人公众号:HsuDan,我将分享更多自己的学习心得、避坑总结、面试经验、AI最新技术资讯。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值