python - 值列表彼此之间的余弦相似度

标签 python scikit-learn tf-idf tfidfvectorizer

我正在尝试查找字符串列表的余弦相似度。我首先使用sklearn tfidf向量将文本转换为数值向量,然后使用pairwise cosine_similarity api来查找每个字符串对的分数。

字符串看起来很相似,但我得到了一个奇怪的答案。字符串数组中的第一个和第三个值除了单词 TRENTON 之外相似,但余弦相似度为 0。同样,第 1、3、4 个字符串相同,除了 GREEN 和 CHILLI 之间有一个空格,余弦相似度为零。这不奇怪吗?

我的代码:

from sklearn.metrics import pairwise_kernels
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vectorizer=TfidfVectorizer()

values =['GREENCHILLI TRENTON'
,'GREENCHILLI'
,'GREEN CHILLI'
,'GREEN CHILLI']

X_train_counts = tfidf_vectorizer.fit_transform(values)
similarities = cosine_similarity(X_train_counts) 
print(similarities)

输出

 [[1.        0.6191303 0.        0.       ]
 [0.6191303 1.        0.        0.       ]
 [0.        0.        1.        1.       ]
 [0.        0.        1.        1.       ]]

最佳答案

最后两个 GREEN CHILLI 之间缺少逗号 (,),因此 tfidf 仅将它们视为 3 条记录而不是 4 条。

如果你纠正它,你应该看到下面的余弦相似度

[[1。 0.6191303 0.0.] [0.6191303 1.0.0.] [0。 0.1.1.] [0。 0.1.1.]]

如何解释上述矩阵:第 n 行中的值是该 tfidf 向量与所有其他向量(按顺序排列)的余弦相似度。所以所有对角线都将为 1,因为每个向量都与其自身相似。

关于python - 值列表彼此之间的余弦相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55109169/

相关文章:

python - 以编程方式将 png 图像插入 pdf 文件中的特定位置

matplotlib - 绘制逻辑回归的决策边界

python - Spark,关于reduceByKey的小问题

python - 如何使用 spark 朴素贝叶斯分类器对 IDF 进行文本分类?

python - python 中的最长匹配

python - 字符串列表中的替换函数

python - 创建原子集列表

machine-learning - 如何在 scikit learn 中使用核密度估计作为一维聚类方法?

python - sklearn BallTree 更改传递给指标的数据

machine-learning - 术语提取的 tf-idf 背后的直觉