Java: 如何使用TF-IDF计算两个文档的相似度?
Java: How to use TF-IDF to compute similarity of two documents?
我的目标是找到两个文档(单词集合)之间的相似度值。我已经找到了几个答案,例如 this SO post or this SO post,它们提供了实现此目的的 Python 库,但我无法理解该方法并使其适用于我的用例。
如果我理解正确,文档的 TF-IDF 是根据给定的术语计算的,对吧?这就是我对 Wikipedia article 的解释:"tf-idf...is a numerical statistic that is intended to reflect how important a word is to a document"。
就我而言,我没有要与文档进行比较的特定搜索词,但我有两个不同的文档。我假设我需要先计算文档的向量,然后计算这些向量之间的余弦值。但是我找到的关于构建这些向量的所有答案总是假设有一个搜索词,而我没有。
无法解决这个问题,我们将不胜感激任何概念性帮助或指向 Java 实现此目的的库的链接。
我建议先 运行 术语提取 ,连同它们的频率。请注意,词干提取也可以应用于提取的术语,以避免在随后的 cosine similarity calculation. See Java library for keywords extraction from input text SO 线程中出现噪音,以获得更多帮助和想法。
然后,正如您自己提到的,对于其中的每一项,您都必须计算 TF-IDF 值,获取向量并计算余弦相似度。
计算TF-IDF时注意1 + log(N/n)
(N代表语料总数,n
代表语料数量包括术语)公式更好,因为它避免了当 TF 不为 0 而 IDF 结果等于 0 时的问题。
我的目标是找到两个文档(单词集合)之间的相似度值。我已经找到了几个答案,例如 this SO post or this SO post,它们提供了实现此目的的 Python 库,但我无法理解该方法并使其适用于我的用例。
如果我理解正确,文档的 TF-IDF 是根据给定的术语计算的,对吧?这就是我对 Wikipedia article 的解释:"tf-idf...is a numerical statistic that is intended to reflect how important a word is to a document"。
就我而言,我没有要与文档进行比较的特定搜索词,但我有两个不同的文档。我假设我需要先计算文档的向量,然后计算这些向量之间的余弦值。但是我找到的关于构建这些向量的所有答案总是假设有一个搜索词,而我没有。
无法解决这个问题,我们将不胜感激任何概念性帮助或指向 Java 实现此目的的库的链接。
我建议先 运行 术语提取 ,连同它们的频率。请注意,词干提取也可以应用于提取的术语,以避免在随后的 cosine similarity calculation. See Java library for keywords extraction from input text SO 线程中出现噪音,以获得更多帮助和想法。
然后,正如您自己提到的,对于其中的每一项,您都必须计算 TF-IDF 值,获取向量并计算余弦相似度。
计算TF-IDF时注意1 + log(N/n)
(N代表语料总数,n
代表语料数量包括术语)公式更好,因为它避免了当 TF 不为 0 而 IDF 结果等于 0 时的问题。