#nlp #spacy
#nlp #разбиение
Вопрос:
Я использую spacy для разбора документов и, к сожалению, не могу обрабатывать фрагменты имен существительных так, как я ожидал, что они будут обработаны. Ниже мой код:
# Import spacy
import spacy
nlp = spacy.load("en_core_web_lg")
# Add noun chunking to the pipeline
merge_noun_chunks = nlp.create_pipe("merge_noun_chunks")
nlp.add_pipe(merge_noun_chunks)
# Process the document
docs = nlp.pipe(["The big dogs chased the fast cat"])
# Print out the tokens
for doc in docs:
for token in doc:
print("text: {}, lemma: {}, pos: {}, tag: {}, dep: {}".format(tname, token.text, token.lemma_, token.pos_, token.tag_, token.dep_))
Результат, который я получаю, выглядит следующим образом:
text: The big dogs, lemma: the, pos: NOUN, tag: NNS, dep: nsubj
text: chased, lemma: chase, pos: VERB, tag: VBD, dep: ROOT
text: the fast cat, lemma: the, pos: NOUN, tag: NN, dep: dobj
Проблема заключается в первой строке вывода, где «большие собаки» были проанализированы неожиданным образом: она создает «лемму» из «the» и указывает, что это «pos» из «NOUN», «тег» из «NNS» и «dep» из «nsubj».
Результат, который я надеялся получить, выглядит следующим образом:
text: The big dogs, lemma: the big dog, pos: NOUN, tag: NNS, dep: nsubj
text: chased, lemma: chase, pos: VERB, tag: VBD, dep: ROOT
text: the fast cat, lemma: the fast cat, pos: NOUN, tag: NN, dep: dobj
Я ожидал, что «леммой» будет фраза «большая собака» с формой множественного числа, измененной на единственное число, и фраза будет «pos» из «СУЩЕСТВИТЕЛЬНОГО», «tag» из «NNS» и «dep» из «nsubj».
Это правильное поведение, или я неправильно использую spacy? Если я неправильно использую spacy, пожалуйста, дайте мне знать, как правильно выполнить эту задачу.
Ответ №1:
Здесь следует учитывать несколько моментов
- Лемматизация основана на токенах
- Пометка POS и анализ зависимостей являются прогностическими
Вы, вероятно, получите, the big dog
если возьмете lemma_
атрибут для каждого токена. Это не обновляет токен pos, который вы используете для атрибута.
Кроме того, поскольку синтаксический анализ зависимостей и пометка POS обучаются в прогностической модели, не гарантируется, что они всегда будут «правильными» с точки зрения человеческого языка.
Кроме проблемы с леммой, кажется, вы используете spacy правильно