Ускорьте создание шаблонов при создании шаблонов, которые будут добавлены в Phrase Matcher в Spacy - PullRequest
0 голосов
/ 04 февраля 2020

Попытка распознать сущности из заданного фрагмента текста, используя Spacy's fraMatcher в приложении flask.

У меня есть настраиваемый список сущностей (около 150 КБ), которые я хочу сопоставить с использованием Spacy's fraMMatcher , Я использую самый быстрый рекомендуемый подход, используя tokenizer.pipe, как указано здесь при создании шаблонов, а также для добавления в PhraseMatcher.

with open('entities_index_keys.pkl', 'rb')as f:
    entities_list=pickle.load(f)

print (len(entities_list))

phrase_matcher_obj = PhraseMatcher(nlp.vocab)

# create doc for each entity from entities_list
patterns = list(nlp.tokenizer.pipe(entities_list))
phrase_matcher_obj.add('my_entities', None, *patterns)

Для завершения строки ниже требуется некоторое время. , Я имел успех со списком сущностей размером 1200, и это было довольно быстро во время выполнения. Но при переходе к 150 К сущностям это значительно замедляется.

patterns = list(nlp.tokenizer.pipe(entities_list))

Я бы предпочел не создавать шаблоны во время выполнения, но выбор списка «документов» / шаблонов, созданных с помощью приведенного выше кода, повреждает объект для некоторых причина. Так есть ли способ быстро создать шаблоны и добавить их к объекту разговорника без быстрого удара?

Другой альтернативный подход - сохранить PhraseMatcher на диск и просто быстро загрузить его во время выполнения. маршрута приложения flask. (пробовал травить безуспешно)

1 Ответ

1 голос
/ 06 февраля 2020

Вы должны быть в состоянии мариновать PhraseMatcher. Распаковка не очень быстрая, потому что она должна перестроить некоторые внутренние структуры данных, но она не должна повторно перекодировать тексты и должна быть быстрее, чем сборка с нуля. Из-за некоторых исправлений я бы порекомендовал v2.2.2 +.

Если вы столкнетесь с ошибками при выборе PhraseMatcher, отправьте отчет об ошибке в трекер проблем.

...