Может ли spaCy связывать только названные объекты?

Вот отрывок из (предположительно) забавного обзора ресторана:

Я хочу лично пожать руку мистеру Тофу. Хотя я не могу доказать это с медицинской точки зрения, я на 100% уверен, что их скородубу содержит неопределенные лечебные свойства. Каким-то образом я всегда чувствую себя лучше после еды здесь. Получил простуду? Прикрутите NyQuil и получить пряный кимчи soondubu.

Я хотел бы выделить важные объекты и связать их с объектами Википедии. Я обучил spaCy на небольшой выборке Wikipedia/WikiData и запустил ссылку на объект в обзоре:

[('Tofu', 'PERSON', 'Q177378'), 
('Nyquil', 'WORK_OF_ART', 'NIL')]

Я бы хотел, чтобы другие объекты также были извлечены и связаны, например:

kimchi -> Kimchi
cold -> Common cold
healing -> medicine 
medically -> medicine

Похоже, что spaCy может связывать только именованные объекты. Я попытался явно перечислить другие названные сущности (которые, очевидно, плохо масштабируются):

ruler = EntityRuler(nlp)
patterns = [{"label": "ORG", "pattern": "kimchi"}, {"label": "ORG", "pattern": "cold"}]
ruler.add_patterns(patterns)
nlp.add_pipe(ruler)

Однако похоже, что spaCy вообще не связывает новые сущности:

[ ('Tofu', 'PERSON', 'Q177378'),
  ('cold', 'ORG', ''),
  ('Nyquil', 'WORK_OF_ART', 'NIL'),
  ('kimchi', 'ORG', '')]
  1. Как я могу заставить Spacy распознавать и другие сущности?
  2. Следует ли это сделать до обучения модели связывания сущностей или это можно сделать с уже обученной моделью?
  3. Подходит ли spaCy для моей задачи?

1 ответ

Решение

Теоретически это возможно. Во-первых, вам нужно убедиться, что у вас есть компонент, который маркирует такие объекты. Вы можете обучить для этого модель NER, но имейте в виду, что ее производительность может быть не такой хорошей для таких вещей, как "холодный", чем для реальных именованных сущностей, таких как "Лондон".

Для создания базы знаний и компоновщика сущностей из Википедии / Викиданных примеры сценариев не ограничиваются именованными сущностями - они пытаются анализировать все, что появляется во внутренней ссылке вики. Если слово "простуда" будет связано со страницей "Простуда", он сможет его выучить. Конкретные сущности, которые хранятся в базе знаний и используются для обучения модели EL, зависят от того, какие сущности обнаруживает ваш компонент распознавания сущностей. Поэтому, если вы настроите это в соответствии с вашим вариантом использования, компонент связывания сущностей будет следовать автоматически.

Другие вопросы по тегам