两个文档列表之间的相似性

Similarity between two lists of documents

我需要找到 Python 中两个短文本列表之间的相似性。 文本可以是 1-4 个词长。每个列表的长度可以是 10K。所以,我需要有效地计算 10K*10K=100M 相似度分数。 我没有找到如何在 spaCy 中有效地做到这一点。也许其他包可以做到这一点? 我假设单词由向量 (300d) 表示,但任何其他选项也可以。 这个任务可以循环完成,但肯定有更有效的方法。此任务适用于 TensorFlow、pyTorch 和类似包,但我不熟悉这些包的详细信息。

我认为您的问题不明确 - 您可能想为列表 1 的平均值与列表 2 的平均值的相似性生成一个相似性分数。我假设您想要每个组合的相似性分数两个列表中的项目。对于每个列表 10K 个项目,将产生 10K pow 2 = 100M 相似度分数。

import spacy
spacyModel = spacy.load('en')

list1 = ["hello, example 1", "right, second example"]
list2 = ["hello, example 1 in the second list", "And now for something completely different"]

list1SpacyDocs = [spacyModel(x) for x in list1]
list2SpacyDocs = [spacyModel(x) for x in list2]

similarityMatrix = [[x.similarity(y) for x in list1SpacyDocs] for y in list2SpacyDocs]

print(similarityMatrix)
[[0.8537950408055295, 0.8852732956832498], [0.5802435148988874, 0.7643245611465626]]

解决方案是使用类似 Spotify Annoy 的方法,它使用 近似最近邻 方法。还有一些其他库可以做最近邻搜索。