将字典项加载到spaCy NLP中

时间:2019-04-22 21:36:01

标签: python spacy

我正在努力寻找一种将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

然后我可以在数据框中存储最匹配的内容。

1 个答案:

答案 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对象和矢量,因此希望循环进行该计算会更快。