Пространственный лемматизатор вопрос / согласованность - PullRequest
0 голосов
/ 26 апреля 2019

В настоящее время я использую spaCy для целей НЛП (главным образом, лемматизации и токенизации).Используется модель en-core-web-sm (2.1.0).

Следующий код запускается для получения списка слов, «очищенных» из запроса

import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp(query)
list_words = []
for token in doc:
    if token.text != ' ':
        list_words.append(token.lemma_)

Однако при запуске этого кода у меня возникает серьезная проблема.Например, при запросе «Обработка чайных листьев».Результат, сохраненный в list_words, может быть [[processing], 'tea', 'leaf'] или ['processing', 'tea', 'left'].

Кажется, что результат не соответствует.Я не могу изменить свой ввод / запрос (добавить другое слово для контекста невозможно), и мне действительно нужно каждый раз находить один и тот же результат.Я думаю, что загрузка модели может быть проблемой.

Почему результат отличается?Могу ли я загружать модель «одинаково» каждый раз?Я пропустил параметр, чтобы получить тот же результат для неоднозначного запроса?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 02 мая 2019

Проблема была проанализирована командой spaCy, и они нашли решение. Вот исправление: https://github.com/explosion/spaCy/pull/3646

В основном, когда применялись правила лемматизации, для возврата леммы использовался набор. Поскольку набор не имеет порядка, возвращаемая лемма может измениться между сеансами Python.


Например, в моем случае для существительного «листья» потенциальными леммами были «листья» и «листья». Без упорядочения результат был случайным - это могли быть «листья» или «листья».

...