【问题标题】:Best way to find document similarity查找文档相似性的最佳方法
【发布时间】:2013-12-22 19:04:43
【问题描述】:
我是 NLP 新手,我想找出两个文档之间的相似性
我搜索了一下,发现有一些方法可以做到这一点,例如
最好的方法是什么(我也可以使用其他方法),我们可以获得高精度,如果java中有一些API可以做到这一点,请告诉我
【问题讨论】:
标签:
java
text
nlp
similarity
cosine-similarity
【解决方案1】:
您的问题有两个答案:(a) 句法和 (b) 语义相似性。
句法相似度
您已经发现了Singling,所以我将重点介绍其他方面。最近的方法使用潜在变量模型来描述句法模式。基本思想是使用条件概率:P (f| f_c ),其中 f 是某个特征,f_c 是它的上下文。此类模型的最简单示例是马尔可夫模型,其中单词作为特征,之前的单词作为上下文。这些模型回答了这个问题:*一个词 w_ n 的概率是多少,给定词 w1, ... w_ n-1 出现在它之前的文件中?这条途径将引导您构建language models,从而基于perplexity 测量文档相似度。对于纯粹的句法相似性度量,可以查看解析树特征而不是单词。
语义相似度
当然,这是一个更难的问题。这个方向的最新技术涉及理解分布式语义。 Distributional semantics 本质上是说,“在大量数据的相似上下文中出现的术语必然具有相似的含义”。这种方法是数据密集型的。基本思想是构建“上下文”的向量,然后衡量这些向量的相似度。
基于自然语言测量文档相似度并不容易,这里的答案并不公平,所以我给你指点this ACL paper,在我看来,它提供了一个很好的图片。