文档相似度(document similarity)是自然语言处理(NLP)领域中比较经典的一个下游任务。基本问题是,给定两个文档,判断它们的内容有多相似。这种判断可以基于多个层次。最低级的就是字符串到字符串的匹配,最高级的就是两篇文档是不是传达了相似的信息。从低级到高级,评判算法给出的相似度的合理性越来越依赖于算法对人类语言的理解,或者说越来越基于“语义”。比如,"Obama speaks to the media in Illinois"同"The President greets the press in Chicago" (引自标题论文)有类似的语义,但完全不一样的表达,或者说两句话的字符串形式差异很大。那么,如何才能做到基于语义的相似度计算?
随着神经网络的复兴,NLP领域里涌现了一个重要技术,就是词向量,或者说词嵌入。语言学家很早就在思考对于人类语言的数学建模。自然而然,这需要语言学家解决一个基本问题:以英语为例,如果说英语的基本单位是一个个的英文单词,那么该如何把每个单词映射为几何空间里的一个向量,使得语义相关的单词有相邻近的空间位置?直观的做法是,手工设计一个高维空间,每个维度都有明确的定义,然后按照人类对语言的理解,给一个单词在每个维度打分,也就是依靠人来定义坐标轴和每个单词的具体坐标。这样的映射通常会有比较好的性质,比如同义词应该在所有坐标轴上坐标相似,反义词应该在某些坐标轴上坐标相反。但很明显,手工做法难以大规模推广到所有英文单词。也因此有了word2vec、glove这一类基于统计共现的词向量模型。这一类模型本质上是在对单词的共现矩阵做矩阵分解,此处按下不表。总之,我们现在有大量的可选的词向量模型,能够用向量间的空间距离来抽象的表达单词间的语义距离。接下来的问题是,如何从给定的单词间的语义距离,推断文档间的语义距离?这也就是标题论文的主题。
基本思路如下。首先,一篇文档可以粗糙的理解为一个单词的集合(无序)。如果文档A和B相似,那么我们应该能发现A中的一些词在语义上对应着B中的一些词。比如,在第一段的两个例句中,“Obama”应该对应"President",“media”应该对应“press”。为什么?以A句中的“media”为例,相对于B句中的其他单词,“media”同“press”有最小的基于单词对的语义距离。
更一般来说,假设我们有一个语料库(corpus),也就是一堆文档的集合。我们先收集语料库中至少出现一次的单词,构成字典(vocabulary)。假设字典中有个唯一的词,随意排序好,指字典中的第个单词。然后,统计每篇文档使用了字典中的哪些词,以及每个词使用了多少次。假设文档A中,所有字典词出现的频率为()。自然,A中没使用的词的频率为。 类似的,文档B的单词频率为。记为文档A中出现的第个字典词。然后构建一个的矩阵,其中元素记为。具体含义上,,也就是到的基于单词词义的语义距离。距离矩阵由某个词向量模型给出的单词向量结合一个距离函数可以得出,视为给定即可。
那么直观上,可以定义如下文档距离,
即单词对对文档距离的贡献正比于它们的语义距离,以及它们的词频乘积。然而,该定义并不合理。比如,如果套用该定义计算第一段两个例句的距离,我们实际上了考虑了“Obama”同“Illinois”的距离。显然,因为它们的单词语义相差很多,将其算在总距离内,夸大了两句话的语义距离。
其实,我们想要做的是,将A中出现过的每一个词匹配到B中出现过的语义最相近的词,文档A和B的距离就是所有匹配到一起的单词对的语义距离之和。可是这个想法也有很多问题。第一,数学上难以求解。对每一个,我们都需要求解一个“argmin”问题,即在B中找到最小的。第二,没有考虑词频。最后,从语言理解的角度出发,文档A中的一个主体词(题眼),可能同时对应文档B中多个具体的词;只考虑与其语义最接近的一个词,有失片面。综上所述,原则上,(或)应该被允许对应到B(或A)中的任意多个词。
数学上,我们使用来描述到的对应强度,这个对应是有方向的。也就是说,一般意义上,。基于此构建两个文档间词到词的对应矩阵。给定,文档间的距离可以计算为
那么,什么样的对应关系才是最优的呢?或者说,什么样的文档距离才是合理的语义距离呢?自然而然,我们希望算法给予较小的单词对较大的(较强的对应)。数学上,这对应一个最小化线性规划问题。是待解的决策变量,是待优化的目标函数,是给定的系数。翻译成大白话,优化问题的目标是,寻找到使总体语义距离最小的词与词的两两对应关系。然而,假设,目前的优化问题有个平凡解,即。这是因为我们忘记考虑词频信息。假设一个词在距离公式中的总权重应该同它的词频相匹配。我们有,
以上的优化问题有一个直观理解。把每个单词想象成一个车站,每个车站都有一定量的乘客,数量上等于该词的词频。词频为零等价于车站里没有乘客。一篇文档就是一个城市,里面有许多车站(单词)。我们希望把城市A中的所有车站的所有乘客(即文档A中的词频总量,等于1)转移到城市B中的车站(同B中的词对应起来,注意B中的词频总量也为1)。
一方面,是从车站到车站的运输量,是单位运输成本。因此,间运输的总成本为。另一方面,车站的总发出的乘客数为。而B中的每个车站也有自己的最大承载人数,等于对应的词频。又因为发出的总乘客数必须等于接受的总乘客数,所以分派到车站上,必须满足总接受的乘客数为。我们希望寻找到使全部乘客的总运输成本,,最小的运输方案,。求解优化问题得到最优运输方案后,带入到中得到最小成本,,这个值就是所谓的文档A和B的word mover's distance (WMD)。越小,文档A和B在语义上越接近。
然而,该算法的局限性很大。第一,计算复杂度约等于文档长度(唯一词数量)的三次方。即便后文做了些优化,计算复杂度也在平方左右。所以,当我们需要对大量长文档计算每一对文档的相似度时,论文的算法显然不适用。另一个问题在于,算法完全忽略了词序,导致最终捕捉到的语义相似度比较粗糙。不过,可能因为核心想法较为有趣直观,该论文有不少后续研究。比如,Wu et al. (2018) 通过理论推导,为WMD提出了容易计算的上界。基本思路如下。
当A和B的长度太长时,直接计算WMD(A,B)较为费时。而且当我们需要计算WMD(A,B),WMD(A,C),WMD(A,D), ... 时,虽然都涉及到文档A,但多次计算却只能彼此独立进行,没有任何可重复利用的信息。那么,可不可以为任意文档A设计一个文档向量,然后结合一个容易计算的距离函数(论文中的核函数),使得?这样,我们只需提前把待比较的文档的向量都计算好,文章中称为word mover's embedding (WME),就可以快速计算所有文档对的距离了。
WME的核心想法是,引入个长度和内容都完全随机的短文档作为中间量。对于任意待比较的文档A,计算一个长度为的向量,第个元素是该文档同第个随机文档的WMD距离的简单函数。这个向量称为文档A的WME向量。文档A和B的距离定义为它们WME向量的内积。因此,给定WME向量计算WME距离极其迅速。又因为可以直接控制生成随机文档的最大长度,计算所有文档的WME向量的总时间复杂度可控。当然了,这篇文章的核心想法是有理论背书的。比如,在什么意义上,WME距离是WMD的近似上界?具体论述请参考原文。
参考文献
Wu, Lingfei, Ian En-Hsu Yen, Kun Xu, Fangli Xu, Avinash Balakrishnan, Pin-Yu Chen, Pradeep Ravikumar, and Michael J. Witbrock. 2018. “Word Mover’s Embedding: From Word2Vec to Document Embedding.” In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing, 4524–4534.
Kusner, Matt J., Yu Sun, Nicholas I. Kolkin, and Kilian Q. Weinberger. 2015. “From Word Embeddings to Document Distances.” In Proceedings of the 32Nd International Conference on International Conference on Machine Learning - Volume 37, 957–966. ICML’15.