Загрузка словарных статей в spaCy NLP - PullRequest
0 голосов
/ 23 апреля 2019

Я изо всех сил пытаюсь найти эффективный способ загрузки всех элементов из словаря python в spaCy NLP. Моя цель - создать функцию подобия, которая может взять элемент из dict1 и вернуть наиболее похожий элемент из dict2.

Поскольку я новичок в Python и Spacy, у меня была идея только циклически повторять каждый элемент из dict1, выполнять dict1_item = nlp(item), затем для каждого элемента dict2, выполнять dict2_item = nlp(item2) и, наконец, similarity(dict1_item[dict2_item])

Я еще не полностью реализовал этот подход, так как большое количество циклов подсказывает мне, что это будет невероятно медленно.

В отношении данных Я сравниваю около 3 000 элементов dict1 с 3 500 элементами dict2, поэтому меня беспокоит производительность.

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

Мое желание - загрузить все dict1 и dict2 в nlp, а не все его элементы.

Что-то вроде:

doc1 = nlp(dict1.items())
doc2 = nlp(dict2.keys())
similarity = dic1.similarity(dic2)

и позже я могу хранить во фрейме данных лучшие совпадения.

1 Ответ

0 голосов
/ 23 апреля 2019

Используйте конвейер spaCy для обработки всех ваших документов одновременно.

my_docs = list(docs)
nlp_docs = nlp.pipe(my_docs, batch_size = 100)

Функция .similarity просто вычисляет косинусное сходство, используя векторы внедрения НЛП. Мы можем извлечь векторы как ...

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, надеюсь, цикл выполнения этих вычислений будет для вас быстрее.

...