我想对了解TF-IDF向量结果的方法以及可能的替代方法提供一些反馈。
现在,我有两个文本语料库。目的是找出每个语料库中最相似的文档。
当我找到一个有趣的匹配项时,我想知道为什么,所以我实现了一个名为why_match()
的简单函数,但是我想帮助您了解这是否是一种有效的方法。
它是这样的:
def why_match(doc_vector_a, doc_vector_b, sklearn_tfidfvectorizer):
distance = abs(doc_vector_a - doc_vector_b)
nearest_words = np.array((distance != 0) & (distance < 0.0015))
vocab = np.array(vectorizer.get_feature_names())
keywords = vocab[nearest_words]
return keywords
这个想法应该是返回所有比某个阈值(0.0015)更近而不是0的关键字(最有可能是因为单词不在两个文档中)。
这是在TF-IDF中“解释”亲密关系的有效方法吗?我的成绩不错,但是似乎很普通的单词就具有很大的价值,这很不幸,但是很能说明我的任务。
答案 0 :(得分:0)
当然,这是解释矢量相似度的一种方法。您的方法计算两个TF-IDF向量之间的曼哈顿距离(或L1距离)。就像欧几里得距离(或L2距离)一样,曼哈顿距离也受到矢量之一中“较大”值的过度影响。因此,更常见的方法是使用余弦相似度来测量两个向量之间的 angle 。
使用余弦相似度的最小示例如下:
from scipy.spatial.distance import cosine
sim = 1 - cosine(doc_vector_a, doc_vector_b)
1 - cosine(...)
是必需的,因为scipy
函数将返回距离而不是相似度。