问题的提出
假如现在有一个任务,是判断两段文本之间的相似性,那我们应该怎么做呢?一个很自然的想法是用word2vec对两段文本的词向量化,然后再利用欧氏距离或者余弦相似性进行求解。不过这种方法有着致命的缺陷,即无法从文档整体上来考虑相似性,仅仅是基于词,这就造成了很大的信息缺失问题,下面要介绍的这种方法可以从文档整体上来考虑两个文档之间的相似性,这种技术称为词移距离(WMD)。
词移距离(WMD)
究竟什么才是词移距离呢?这要从Word2Vec讲起。Word2Vec将词映射为一个词向量,在这个向量空间中,语义相似的词之间距离会比较小,而词移距离(WMD)正是基于word2vec的这一特性开发出来的。
正如上面所讲到的,Word2Vec得到的词向量可以反映词与词之间的语义差别,那么如果我们希望有一个距离能够反映文档和文档之间的相似度,应该怎么做呢?一个想法是将文档距离建模成两个文档中词的语义距离的一个组合,比如说对两个文档中的任意两个词所对应的词向量求欧氏距离然后再加权求和,大概是这样的形式: ∑i,j=1nTijc(i,j) ,其中 c(i,j) 为 i,j 两个词所对应的词向量的欧氏距离。
那我们怎样得到这个加权矩阵 T 呢?又或者说这个加权矩阵
这里有两个文档,去除停用词后,每篇文档仅剩下4个词,我们就是要用这四个词来比较两个文档之间的相似度。在这里,我们假设’Obama’这个词在文档1中的的权重为0.5(可以简单地用词频或者TFIDF进行计算),那么由于’Obama’和’president’的相似度很高,那么我们可以给由’Obama’移动到’president’很高的权重,这里假设为0.4,文档2中其他的词由于和’Obama’的距离比较远,所以会分到更小的权重。这里的约束是,由文档1中的某个词
为什么要有这样的操作呢?因为我们可以设想,
举例说明
形象化的考虑一下,我们有三个文档,文档1中每个词都跟“王者荣耀”紧密相关;文档2中只有一个词跟“王者荣耀”密切相关,其余词都跟“王者荣耀”完全无关;文档3中有一个词跟“王者荣耀”密切相关,其他词都跟“王者荣耀”有点关系但关联性不大。那么可以想象, WMD(d1,d2)>WMD(d1,d3) ,因为文档1中的词和文档2中和“王者荣耀”完全无关的词之间的距离要比文档1中的词和文档3中和“王者荣耀”有点关系但关联性不大的词之间的距离要大。
带监督的词移距离(Supervised Word Mover’s Distance)
我们理解了WMD距离,那么问题来了,学习这个权重矩阵用来聚类虽好(告诉我们哪些文档比较相近),但是, 用来分类却很差,这就要引入监督学习。
为什么? 因为一些文章虽然近义词很多, 但是表达的不是一个语义和主题. 比如: I love playing football 和 I like playing piano . 虽然看起来句式差不多, 可能会归为同类, 但是如果打标签时如果是”运动”和”艺术”两类, 显然就不能用WMD直接分类了. 因为, WMD没有加入 football和”运动”是强相关的信息.
所以, 论文Supervised Word Mover’s Distance给出的解决方案就是在WMD距离中加入可以训练类别权重的功能:
这里的 d 加入了类别权重
单词间距离也要进行调整(单词间距离也因为类别不同需要调整距离),加入训练参数矩阵 A <script type="math/tex" id="MathJax-Element-63">A</script>。
参考文献:
- 如何通过词向量技术来计算2个文档的相似度?
- Supervised Word Mover’s Distance (可监督的词移距离) – NIPS 2016论文精选#2