Python Spacy相似度计算避免循环?

我正在尝试让用户输入一个搜索词,以找到与其搜索匹配的前5篇文章。我正在比较各种方法(gensim word2vec、doc2vec、最近邻等)的结果/性能。

我已经成功创建了利用Spacy标准相似度函数的代码,但是,由于它需要遍历一个庞大的文档列表,并将相似度分数附加到pandas数据框中,耗时太长。

有没有一种方法可以在不使用循环和pandas追加的情况下返回最相似的前5篇文档?原因是这种方法返回的最相似的前5篇文档比其他方法更合理(这是词嵌入的乐趣所在!)

#加载相关库
import pandas as pd
import numpy as np
import spacy

#加载spacy模型
nlp=spacy.load('Z:\\en_core_web_lg-2.0.0')

#获取文档语料库
dfCorpus = pd.read_csv('z:\DocumentCorpus.csv', delimiter=',')

#使用spacy相似度函数获取前5名
SearchStringCosine = nlp(input('请输入搜索词:'))
computed_similarities = []
for i in dfCorpus.CorpusInput_Unqiue:
   doc=nlp(i)
   computed_similarities.append((i, SearchStringCosine.similarity(doc)))
computed_similarities = sorted(computed_similarities, key=lambda item: -item[1])
computed_similarities = pd.DataFrame(computed_similarities,columns=
   ['CorpusInput_Unique','Score'])
print(computed_similarities[:5]) 

回答:

对于其他也在寻找解决方案的人,我发现最好的方法是先对文件应用spacy向量nlp()后进行pickle处理,然后在引用doc_list时,循环几乎是瞬时的!

dfCorpusDescr = dfCorpus.fieldname
doc_list={i: nlp(i) for i in dfCorpus}
with open("filename.pickle", 'wb') as pfile:
    pickle.dump(doc_list, pfile, protocol=pickle.HIGHEST_PROTOCOL)

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注