0

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

4

1 回答 1

1

我认为您的问题模棱两可-您可能的意思是为列表 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]]
于 2018-11-15T12:13:29.347 回答