Повторное включение компонента синтаксического анализатора spacy дает ошибку - PullRequest
0 голосов
/ 13 апреля 2020

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

import spacy
nlp = spacy.load("en_core_web_lg", disable=('ner', 'textcat'))
nlp.pipe_names

Он получил следующий вывод

['tagger', 'parser']

Мне нужно выполнить задачу, ниже приведен фрагмент кода

text = """Extracts the selected  layers in the specified area of interest.... """

doc = nlp(text)

def get_pos(remove_parser=True):
    if remove_parser: 
        nlp.remove_pipe("parser")

    for kw in keywords:
        doc = nlp(kw[0])
        tag_list = [(token.text, token.tag_) for token in doc]

    if remove_parser:
        nlp.add_pipe(nlp.create_pipe('parser'))

    return tag_list

result = get_pos(remove_parser=True)
nlp.pipe_names

Итак, я вызываю функцию get_pos с remove_parser=True. Он удаляет компонент синтаксического анализа, запускает nlp(kw[0]) для каждого элемента в списке keywords. После окончания l oop я добавляю обратно компонент parser, что можно проверить выводом команды nlp.pipe_names. Я получаю следующий вывод

['tagger', 'parser']   

Но тогда, если я вызову nlp("Hello World") после вызова функции get_pos. Это выдает эту ошибку -

ValueError                                Traceback (most recent call last)
<ipython-input-29-320b76b1fe36> in <module>
----> 1 nlp("Hello World")

~\.conda\envs\keyword-extraction\lib\site-packages\spacy\language.py in __call__(self, text, disable, component_cfg)
    433             if not hasattr(proc, "__call__"):
    434                 raise ValueError(Errors.E003.format(component=type(proc), name=name))
--> 435             doc = proc(doc, **component_cfg.get(name, {}))
    436             if doc is None:
    437                 raise ValueError(Errors.E005.format(name=name))

nn_parser.pyx in spacy.syntax.nn_parser.Parser.__call__()

nn_parser.pyx in spacy.syntax.nn_parser.Parser.predict()

nn_parser.pyx in spacy.syntax.nn_parser.Parser.require_model()

ValueError: [E109] Model for component 'parser' not initialized. Did you forget to load a model, or forget to call begin_training()?

1 Ответ

1 голос
/ 14 апреля 2020

Вы пытаетесь добавить пустой / необученный парсер обратно в конвейер, а не тот, который был предоставлен с ним. Вместо этого попробуйте disable_pipes(), что упрощает сохранение компонента и добавление его позже:

disabled = nlp.disable_pipes(["parser"])
# do stuff
disabled.restore()

См .: https://spacy.io/api/language#disable_pipes

...