从 tf-idf 计算余弦相似度

Posted

技术标签:

【中文标题】从 tf-idf 计算余弦相似度【英文标题】:Calculate cosine similarity from tf-idf 【发布时间】:2017-02-03 17:29:21 【问题描述】:

在一个数据框df我有一个以下列tf-idf

       tf-idf
0      u'selection': 3.83579393163, u'carltons': 7.0...
1      u'precise': 6.43261849762, u'thomas': 3.31980...
2      u'just': 2.70047792082, u'issued': 4.42829758...
3      u'englishreading': 9.88788310056, u'all': 1.6...
4      u'they': 1.89922701484, u'gangstergenka': 10....
5      u'since': 1.45530416153, u'less': 3.956522477...
6      u'exclusive': 10.4488880129, u'producer': 2.6...
7      u'taxi': 6.04485296662, u'all': 1.64302370465...
8      u'houston': 3.93463976627, u'frankie': 6.0306...
9      u'phenomenon': 5.74474837417, u'deborash': 10...
10     u'zwigoff': 19.7757662011, u'september': 1.90...
11     u'gospels': 7.9419729515, u'theft': 6.0028887... `

我很难在两个样本之间找到cosine similarity - 例如在df['tf-idf'][0]df['tf-idf'][1] 之间。

【问题讨论】:

【参考方案1】:

你可以使用 scikit-learn:

from sklearn.feature_extraction import DictVectorizer
from sklearn.metrics.pairwise import cosine_similarity

a = DictVectorizer().fit_transform(df['tf-idf'])
cosine_similarity(a[0], a[1])

【讨论】:

@chintans,很高兴听到!没有.tolist() 可以吗? 再问一个问题。如果有 50000 个样本,即df.shape[0] = 50000,是否有更快的方法来获取相似度矩阵(无需运行两个 for 循环)? 试试cosine_similarity(a)。它应该返回所有成对的相似性。 好的...让我试试...谢谢! 是的,这是一个 CPU 和内存密集型操作。尝试检查您是否没有导致一切变慢的 ram 交换原因。

以上是关于从 tf-idf 计算余弦相似度的主要内容,如果未能解决你的问题,请参考以下文章

使用 sklearn 如何计算文档和查询之间的 tf-idf 余弦相似度?

如何计算两个向量的余弦相似度?

如何在 Lucene 中实现 tf-idf 和余弦相似度?

Python中N-Gram、tf-idf和余弦相似度的简单实现

Python中N-Gram、tf-idf和余弦相似度的简单实现

余弦相似度计算