首页  >  文章  >  后端开发  >  如何使用 TF-IDF 和余弦相似度测量文本相似度?

如何使用 TF-IDF 和余弦相似度测量文本相似度?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-23 06:53:30330浏览

How to Measure Text Similarity using TF-IDF and Cosine Similarity?

使用 TF-IDF 和余弦相似度测量文本相似度

确定两个文本文档之间的相似度是文本挖掘和信息中的一项关键任务检索。一种流行的方法是利用 TF-IDF(术语频率-逆文档频率)余弦相似度

TF-IDF 分配权重根据文档中每个单词在该文档中的出现频率及其在整个文档语料库中的稀有性来对文档中的每个单词进行分类。具有相似单词模式的文档将共享更高的 TF-IDF 向量。

余弦相似度 测量两个向量之间的角度,提供 0(无相似性)和 1(完全相似)之间的值。在我们的例子中,两个文档的 TF-IDF 向量形成了这些向量,余弦相似度量化了它们的角度。

Python 实现

在 Python 中,使用scikit-learnGensim 包,计算成对相似度很简单:

<code class="python">from sklearn.feature_extraction.text import TfidfVectorizer

documents = [open(f).read() for f in text_files]
tfidf = TfidfVectorizer().fit_transform(documents)
pairwise_similarity = tfidf * tfidf.T</code>

或者,如果文档已经是字符串,请使用:

<code class="python">corpus = ["I'd like an apple", "An apple a day keeps the doctor away", "..."]
vect = TfidfVectorizer(min_df=1, stop_words="english")
tfidf = vect.fit_transform(corpus)
pairwise_similarity = tfidf * tfidf.T</code>

解释结果

pairwise_similarity 是一个稀疏矩阵,表示每个文档对之间的相似度。要查找与特定文档最相似的文档,请屏蔽文档与其自身的相似性(将其设置为 NaN),并使用 np.nanargmax() 查找其行中的最大值:

<code class="python">import numpy as np

arr = pairwise_similarity.toarray()
np.fill_diagonal(arr, np.nan)
input_doc = "The scikit-learn docs are Orange and Blue"
input_idx = corpus.index(input_doc)
result_idx = np.nanargmax(arr[input_idx])
similar_doc = corpus[result_idx]</code>

其他注意事项

对于大型语料库和词汇表,使用稀疏矩阵比转换为 NumPy 数组更高效。

通过调整 TfidfVectorizer 中的参数,例如最小文档的 min_df频率,可以自定义 TF-IDF 计算以满足特定要求。

其他资源

  • [信息检索简介](http://infolab .stanford.edu/~backrub/classes/2002/cs276/handouts/04-tfidf.pdf)
  • [使用 Gensim 计算成对相似性](https://stackoverflow.com/questions/23752770/computing-与 gensim 的成对相似性)

以上是如何使用 TF-IDF 和余弦相似度测量文本相似度?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn