Проблема / согласованность пространственного лемматизатора

В настоящее время я использую 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, может быть ['обработка', 'чай', 'лист'] или ['обработка', 'чай', 'отпуск »].

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

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

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


person Martin    schedule 26.04.2019    source источник
comment
Я попытался запустить ваш пример, и результаты, которые я получаю, согласованы - ›['обработка', 'из', 'чай', 'лист']. Не могли бы вы поделиться подробностями?   -  person Petr Matuska    schedule 02.05.2019
comment
Я обнаружил проблему, чтобы воспроизвести это, вам нужно перезагрузить сеанс python (это означает, что для того же экземпляра интерпретатора он даст тот же результат). Исправление объясняется здесь: github.com/explosion/spaCy/pull/3646 Надежда это поможет другим людям   -  person Martin    schedule 02.05.2019
comment
Это очень интересно и понятно - спасибо, что поделились!   -  person Petr Matuska    schedule 02.05.2019


Ответы (1)


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

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


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

person Martin    schedule 02.05.2019