我正在努力寻找一种将python字典中的所有项目加载到spaCy NLP中的有效方法。我的目标是创建一个相似度函数,该函数可以从dict1
中获取一个元素,并从dict2
中返回最相似的元素。
由于我是python和spacy的新手,所以我只想遍历dict1
中的每个项目,执行dict1_item = nlp(item)
,然后对dict2
的每个元素,执行{ {1}},最后执行dict2_item = nlp(item2)
我还没有完全实现这种方法,因为大量的循环提示我这将是非常慢的。
在数据方面,我正在将3000 dict1元素与3500 dict2元素进行比较,这就是为什么我关注性能。
similarity(dict1_item[dict2_item])
我的愿望是将dict1和dict2的所有内容加载到nlp中,而不是其中的每个元素。
类似的东西:
match_dict = {}
for elements in titles_dict: #dict1 full with job titles
for title in title_dict[elements]:
elem1 = nlp(title)
for role in roles_listed: #dict2 full with role titles
elem2 = nlp(role)
similarity = elem1.similarity(elem2)
if similarity >= .8:
match_dict[elem1] = elem2
break
然后我可以在数据框中存储最匹配的内容。
答案 0 :(得分:0)
使用spaCy管道一次处理所有文档。
my_docs = list(docs)
nlp_docs = nlp.pipe(my_docs, batch_size = 100)
.similarity
函数仅使用NLP嵌入矢量计算余弦相似度。我们可以提取矢量,例如...
my_vecs = [doc.vector for doc in nlp_docs]
从scikit-learn中获取成对的余弦相似度函数...
from sklearn.metrics.pairwise import pairwise_distances
sim = 1 - pairwise_distances([vec1, vec2], metric='cosine')[0, 1]
由于已经存储了所有nlp对象和矢量,因此希望循环进行该计算会更快。