Создание и загрузка собственного конвейера в Spacy - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужно запустить конвейер НЛП для многостраничных документов. Классификатор текста работает с первыми N предложениями и на основе выходных данных классификатора текста необходимо добавить новые пользовательские элементы в конвейер. Конечно, я мог бы перезапустить конвейер с новыми элементами, но для этого потребовалось бы перезапустить все заново с самого начала (токенизатор, предложение и т. Д.).

Возможно ли зафиксировать состояние конвейера (например, объект doc), измените конвейер и продолжите с того места, где он был оставлен, с новым конвейером и его новыми элементами?

Каков рекомендуемый способ для таких сценариев?

Спасибо

1 Ответ

0 голосов
/ 11 ноября 2019

Я не думаю, что вы можете создать конвейер без токенизатора или остановить / запустить в середине конвейера, но поскольку все компоненты, не относящиеся к токенизатору, принимают и модифицируют Doc, вы можете загрузить конвейер со всемикомпоненты, которые вы можете использовать, а затем вызывать каждый компонент по мере необходимости:

nlp = spacy.load('en')
# nlp.make_doc() is equivalent to nlp.tokenizer()
doc = nlp.make_doc("This is a sentence.")
# there are shortcuts for default model components
nlp.tagger(doc)
nlp.parser(doc)
nlp.ner(doc)
# but you can access any component with nlp.get_pipe(), also "tagger", etc.
nlp.get_pipe("your_component_name")(doc)
nlp.get_pipe("tagger")(doc)

API не запрещает вам попытки, но вы не хотите применять компоненты, которые были загружены как часть другого конвейера. чем тот, который использовался для создания Doc, потому что вы можете столкнуться с проблемами, когда Doc и компонент не совместно используют vocab.

...