From Word Embeddings To Document Distances
1. 问题
文档相似度是很难衡量的,本篇论文之前,两个文档的相似度主要由词频来计算。
举个简单的例子,有三句话:
- “李无名喜欢王无名”
- “张无名喜欢李无名”
- “李某暗恋王某”
分别统计每句话的每个词出现的频率,分别得到向量:
- [“李无名”:\(\frac{1}{3}\),“喜欢”:\(\frac{1}{3}\),“王无名”:\(\frac{1}{3}\),“张无名”:\(\frac{1}{3}\),“张某”:\(0\),“暗恋”:\(0\),“王某”:\(0\)]
- [“李无名”:\(\frac{1}{3}\),“喜欢”:\(\frac{1}{3}\),“王无名”:\(\frac{1}{3}\),“张无名”:\(\frac{1}{3}\),“张某”:\(0\),“暗恋”:\(0\),“王某”:\(0\)]
- [“李无名”:\(0\),“喜欢”:\(0\),“王无名”:\(0\),“张无名”:\(\frac{1}{3}\),“张某”:\(\frac{1}{3}\),“暗恋”:\(\frac{1}{3}\),“王某”:\(\frac{1}{3}\)]
从上面的特征向量可以看出,第一个句子和第二个句子的相似度更高一些,但是从语义角度讲,第一个句子和第三个句子表达的内容更加相近一些,由此可以看出,简单的\(BOW/IF-TDF\)表示方法很难表达语句和文档中丰富的语义信息,比如“李无名”-“李某”。
由此,本文作者提出使用Word2Vec来表示词语,WMD(Word Mover's Distance)来衡量向量距离的方法。
2. 相关
2.1 Word2Vec Embedding
Word2Vec是一种词向量表示方法,可以把稀疏的特征向量转化为稠密的特征向量。经过这种方法的转换,每个词可以表示为相同维度的稠密向量,而且语义相近的词间的欧氏距离也会比语义无关的词距离大。(https://www.cnblogs.com/guoyaohua/p/9240336.html)
2.2 Earth Mover's Distance
EMD距离是一种描述两个分布间距离的方法,尤其是在两个向量维度不一致的时候,这很符合文本比对的特点:两个文本里面包含的词语的交集肯定不等于并集。
http://www.bubuko.com/infodetail-172741.html
3. 思路
有了以上两个技术,我们就可以比较好的对文本进行表示,同时计算两个文本的相似度了。
- 我们拥有一个包含\(n\)个词语的Word2Vec编码器\(X\in{\mathbb{R}^{n\times{d}}}\),可以将每个单词编码为d维稠密向量
- 我们对两篇文档进行nBOW表示,得到特征向量\(D_1,D_2\in{\mathbb{R}^n}\),其中对于每个\(d_i\in{D}\),\(d_i=\frac{p_i}{\sum_{j=1}^np_j}\),\(p_i\)为第i个单词出现的频数。
- 对于词典中的每个词语,词语间的距离可以用\(c\left(i,j\right)=\\||x_i-x_j||_2\)距离来表示, 其中\(x_i, x_j\in{X}\)
- 对于每一个\(D_1\)中的词语\(w_{1i}\),用一个参数\(T_{ij}\)表示其与\(w_{2j}\in{D_2}\)的变换权重(个人理解,不是专用名词),这样我们就得到了一个权重矩阵\(T\in{\mathbb{R^{n\times{n}}}}\),与此同时,我们还得到了约束条件\(\sum_{j=1}^n{T_{ij}}=d_{1i}\),和\(\sum_{i=1}^n{T_{ij}}=d_{2j}\)来保证“出入平衡”
- 最终我们得到了总体距离的表示:
\[\min_{T\geq0}\sum_{i,j=1}^nT_{ij}c\left(i, j\right)\]
\[s.t: \sum_{j=1}^n{T_{ij}}=d_{1i}, \forall{i\in{{\{1,2,\dots,n}\}}}\]
\[\sum_{i=1}^n{T_{ij}}=d_{2j}, \forall{j\in{{\{1,2,\dots,n}\}}}\]
计算过程有很多详细的介绍,在此就不说了。
4. 优化
使用3中的方法,虽然可以得到精确的最小距离,但是计算复杂度过高,有\(O(p^3\log{p})\),其中p为两个文档中共有的单词数量,于是,为了简化计算有了以下三种快速优化方法:Word Centroid Computation, Relaxed word moving distance和预删除和修剪(prefetch and prune)
5. 不足
- 失去了语句上下文的信息
- 只能处理Word2Vec能编码的词语
- 不能给出文档的向量表达
- 求解非常耗时