我目前正在进行NLP / IR的java项目,并且对此非常新。 该项目由一个包含大约1000个文档的集合组成,每个文档大约有100个单词,结构为带有术语频率的单词包。我想根据文档(来自集合)找到类似的文档。
使用TF-IDF,计算查询(给定文档)和集合中的每个其他文档的tf-idf,然后将这些值作为具有余弦相似性的向量进行比较。这可以对它们的相似性有所了解吗?或者它是不合理的,因为大查询(文档)? 还有其他相似性措施可以更好地运作吗?
感谢您的帮助
答案 0 :(得分:1)
基于TF-IDF的相似性,通常使用余弦来将表示查询项的向量与表示文档的TF-IDF值的向量集进行比较,这是计算相似度的常用方法&#34 ;
请注意那里的相似性"是一个非常通用的术语。在IR域中,您通常会说"相关性"。文本可以在许多层面上相似:使用相同的语言,使用相同的词,使用相同的人,使用类似的复杂语法结构等等 - 因此,有许多措施。在Web上搜索文本相似性以查找许多出版物,以及实现不同度量的开源框架和库。
今天,"语义相似性"比传统的基于关键词的IR模型更吸引人。如果这是您感兴趣的领域,您可以查看2012年至2015年SemEval共享任务的结果。
答案 1 :(得分:1)
If all you want is to compare two documents using TF-IDF, you can do that. Since you mention that each doc contains 100 words, in the worst case there might be 1000*100 unique words. So, im assuming your vectors are built on all unique words (since all documents should be represented in same dimension). If the no. of unique words are too high, you could try using some dimensionality reduction techniques to reduce the dimensions (like PCA). But what you are trying to do is right, you can always compare documents like this for finding similarity between documents.
If you want similarity more in the sense of semantics you should look at using LDA (topic modelling) type techniques.