文档相似度-奇数一出
Document similarity- Odd one out
假设我有 "n" 份关于特定主题的文档,其中提供了某些详细信息。我想获得那些与大多数文件不相似的文件。尽管这看起来很模糊,但我知道如何找到 2 个文档之间的余弦相似度。但是可以说,我 "know" 我有 10 个彼此相似的文档,我介绍了第 11 个文档,我需要一种方法来判断这个文档与这 10 个文档的相似程度,而不仅仅是与每个单独的文档。
我正在使用 scikit learn,所以答案或技巧及其参考会有所帮助!
将每个文档表示为 bag of words
并使用 tf-idf
权重来表示特定文档中的单词。然后计算与所有 n
文档的余弦相似度。对所有相似度值求和然后归一化(将最终的 sim 值除以 n
)。它应该为您提供 n
文档与目标文档之间的合理相似性。
您还可以考虑 mutual information (sklearn.metrics.mutual_info_score), KL-divergence 来衡量两个文档之间的 similarity/difference。请注意,如果要使用它们,则需要将文档表示为概率分布。要计算文档中术语的概率,您可以简单地使用以下公式:
Probability(w) = TF(w) / TTF(w)
其中,
TF(w) = term frequency of word, w in a document, d
TTF(w) = total term frequency of word, w [sum of tf in all documents]
我相信他们中的任何一个都会让你对 n
文档和你的目标文档之间的 similarity/dissimilarity 有一个合理的想法。
假设我有 "n" 份关于特定主题的文档,其中提供了某些详细信息。我想获得那些与大多数文件不相似的文件。尽管这看起来很模糊,但我知道如何找到 2 个文档之间的余弦相似度。但是可以说,我 "know" 我有 10 个彼此相似的文档,我介绍了第 11 个文档,我需要一种方法来判断这个文档与这 10 个文档的相似程度,而不仅仅是与每个单独的文档。
我正在使用 scikit learn,所以答案或技巧及其参考会有所帮助!
将每个文档表示为 bag of words
并使用 tf-idf
权重来表示特定文档中的单词。然后计算与所有 n
文档的余弦相似度。对所有相似度值求和然后归一化(将最终的 sim 值除以 n
)。它应该为您提供 n
文档与目标文档之间的合理相似性。
您还可以考虑 mutual information (sklearn.metrics.mutual_info_score), KL-divergence 来衡量两个文档之间的 similarity/difference。请注意,如果要使用它们,则需要将文档表示为概率分布。要计算文档中术语的概率,您可以简单地使用以下公式:
Probability(w) = TF(w) / TTF(w)
其中,
TF(w) = term frequency of word, w in a document, d
TTF(w) = total term frequency of word, w [sum of tf in all documents]
我相信他们中的任何一个都会让你对 n
文档和你的目标文档之间的 similarity/dissimilarity 有一个合理的想法。