我正在尝试查找字符串列表的余弦相似度。我首先使用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/