Python - tf-idf预测新文档的相似性

Shl*_*rtz 7 python machine-learning tf-idf document-classification scikit-learn

受到这个答案的启发,我试图在经过训练的训练有素的tf-idf矢量化器和新文档之间找到余弦相似性,并返回类似的文档.

下面的代码找到第一个向量的余弦相似度,而不是新的查询

>>> from sklearn.metrics.pairwise import linear_kernel
>>> cosine_similarities = linear_kernel(tfidf[0:1], tfidf).flatten()
>>> cosine_similarities
array([ 1.        ,  0.04405952,  0.11016969, ...,  0.04433602,
    0.04457106,  0.03293218])
Run Code Online (Sandbox Code Playgroud)

由于我的火车数据很大,循环遍历整个训练过的矢量器听起来像个坏主意.如何推断新文档的向量,并找到相关文档,与下面的代码相同?

>>> related_docs_indices = cosine_similarities.argsort()[:-5:-1]
>>> related_docs_indices
array([    0,   958, 10576,  3277])
>>> cosine_similarities[related_docs_indices]
array([ 1.        ,  0.54967926,  0.32902194,  0.2825788 ])
Run Code Online (Sandbox Code Playgroud)

小智 1

对于庞大的数据集,有一个名为Text Clustering By Concept的解决方案。搜索引擎使用此技术,

第一步,将文档聚类到一些组(例如 50 个聚类),然后每个聚类都有一个代表性文档(其中包含一些具有有关其聚类的有用信息的单词)。 第二步,
计算新文档和新文档之间的余弦相似度您的数据集,您循环遍历所有代表(50 个数字)并找到最接近的代表(例如 2 个代表)
在最后一步,您可以循环遍历所选代表中的所有文档并找到最近的余弦相似度

使用此技术,您可以减少循环次数并提高性能,您可以在本书的某些章节中阅读更多技术:http://nlp.stanford.edu/IR-book/html/htmledition/irbook.html