конвейер spaCy nlp порядок операций - PullRequest
0 голосов
/ 28 сентября 2018

Есть ли у кого-нибудь хронологический список операций, выполняемых

import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(text)

Я могу видеть основные компоненты с nlp.pipe_names

['tagger', 'parser', 'ner']

и алфавитный список заводских операций с nlp.factories

{'merge_entities': <function spacy.language.Language.<lambda>>,
 'merge_noun_chunks': <function spacy.language.Language.<lambda>>,
 'ner': <function spacy.language.Language.<lambda>>,
 'parser': <function spacy.language.Language.<lambda>>,
 'sbd': <function spacy.language.Language.<lambda>>,
 'sentencizer': <function spacy.language.Language.<lambda>>,
 'similarity': <function spacy.language.Language.<lambda>>,
 'tagger': <function spacy.language.Language.<lambda>>,
 'tensorizer': <function spacy.language.Language.<lambda>>,
 'textcat': <function spacy.language.Language.<lambda>>,
 'tokenizer': <function spacy.language.Language.<lambda>>}

, но я не могу понять, когда вызывается лемматизатор .Лемматизация должна произойти после токенизации и POS-тегов , и она будет работать с отключенными синтаксическим анализатором и ner .Документация по spaCy вообще не упоминается.Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2018

Ответ на ваш вопрос сложнее, чем я думал, но сейчас я объясню это подробно.

Лемматизация SpaCy обычно выполняется на основе таблицы поиска.Это означает, что он не зависит от компонентов конвейера и его лемматизация происходит перед конвейером.Тем не менее, английский язык и греческий язык разработаны таким образом, что лемматизация на основе правил может выполняться при наличии тега pos.Это означает, что если тегер включен, то мы можем воспользоваться POS-тегом, чтобы найти лучшую лемму, соответствующую слову, основанную на его теге.В этом случае лемматизация происходит сразу после компонента конвейера tagger.

Вкратце, если tagger отключен, мы следуем статической процедуре лемматизации на основе таблицы поиска, которая сопоставляет слова с их леммами, и лемматизация происходит до того, как любой компонент конвейера,В отличие от этого, когда тегер включен, процедура лемматизации основана на правилах и зависит от тега POS, поэтому это происходит после тегера.Я повторяю, что этот случай может произойти только для определенных языков, которые поддерживают лемматизацию на основе правил, таких как английский и греческий язык.

Пример кода:

import spacy
nlp = spacy.load('en')
nlp.remove_pipe('parser')
# uncommenting the following line means we go to rule based lemmatization
# nlp.remove_pipe('tagger')
nlp.remove_pipe('ner')
doc = nlp('those are random words')
for token in doc:
    print(token.lemma_)

Вывод с закомментированной строкой:случайное слово

Вывод со строкой без комментария: это будет случайное слово

Надеюсь, оно теперь прояснено.

...