使用 Spacy 计算多个文档相似度的有效方法

2023-12-06

我有大约 10k 文档(主要是 1-2 个句子),并且希望为每个文档找到 60k 文档集合中的 10 个最相似的文档。因此,我想使用spacy库。由于文档数量庞大,这需要高效,因此我的第一个想法是计算 60k 文档中的每一个以及 10k 文档的文档向量(https://spacy.io/api/doc#vector)并将它们保存在两个矩阵中。这两个矩阵可以相乘得到点积,可以解释为相似度。 现在,我基本上有两个问题:

  1. 这实际上是最有效的方法还是有一个聪明的技巧可以加快这个过程
  2. 如果没有其他聪明的方法,我想知道是否至少有一种聪明的方法来加速计算文档向量矩阵的过程。目前我正在使用 for 循环,这显然不是很快:
import spacy
nlp = spacy.load('en_core_web_lg')
doc_matrix = np.zeros((len(train_list), 300))
for i in range(len(train_list)):
  doc = nlp(train_list[i]) #the train list contains the single documents
  doc_matrix[i] = doc.vector

例如,有没有一种方法可以并行化?


不要进行大矩阵运算,而是将文档向量放入近似最近邻存储中(annoy易于使用)并查询每个向量的最近项目。

做一个大的矩阵运算就可以了n * n比较,但使用近似最近邻技术将划分空间以执行更少的计算。对于整体运行时间来说,这比使用 spaCy 所做的任何事情都重要得多。

也就是说,还要检查spaCy 速度常见问题解答.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Spacy 计算多个文档相似度的有效方法 的相关文章

随机推荐