Можно ли использовать NER-Label в генерации кандидатов Entity Linking в spaCy?

Я хочу использовать spaCy для связывания сущностей (EL). Я уже обучил модель распознавания именованных сущностей (NER) spaCy с настраиваемыми метками в моем корпусе, зависящем от предметной области. Однако в моем следующем примере будут использоваться обычные метки объекта PERSON и LOCATION.

Устанавливая псевдонимы в базе знаний (KB), KB возвращает кандидатов на наличие распознанных объектов, например кандидатами в Париж могут быть записи Викиданных Q47899 (Пэрис Хилтон), Q7137357 (Парижские Теммены), Q5214166 (Дэн Пэрис), Q90 (Париж, столица Франции) или Q830149 (Париж, округ округа Ламар, Техас, США. ).

Мой вопрос касается метки распознанного объекта. Если NER признает Париж как ЛИЦО, это исключает Q90 (Париж, столица Франции) и Q830149 (Париж, округ Ламар, штат Техас, США) из кандидатов, оставляя 3 кандидата. В то время как если бы Париж был признан МЕСТОПОЛОЖЕНИЕМ, остались только 2 других кандидата.

Можно ли каким-то образом посоветовать модели KB или EL, из какого набора сущностей выбрать кандидатов, учитывая обнаруженную метку NER? До или после обучения модели EL?


person LBoss    schedule 09.10.2020    source источник


Ответы (2)


В настоящее время это не реализовано в spaCy. В общем, это будут шаги, необходимые для получения желаемой функциональности:

  • Создайте своего рода сопоставление между вашими объектами базы знаний (идентификаторами Викиданных) и вашими метками NER. Это будет не совсем тривиально. Вам нужно либо проанализировать экземпляр метаинформации викиданных, либо использовать систему классификации Википедии, которая имеет свои подводные камни. В любом случае вам нужно получить автоматический способ определения этого Q830149 is-a "LOCATION" и т. Д.
  • Сохраните метки NER для каждого объекта. Это можно сделать в базе знаний, но затем необходимо отредактировать структуры Cython.
  • Переопределите генерацию кандидатов (в настоящее время часть метода KB: get_candidates), чтобы взять текстовое упоминание + его метку NER и выводить только соответствующих кандидатов для этой конкретной метки.

Одно предостережение, которое я хотел бы отметить, заключается в том, что этот подход может усилить ошибки на этапе NER. Представьте, что вы говорите о Париже, столице, но ваш NER ошибается и помечает это как ЛИЧНОСТЬ. С подходом, описанным здесь, NEL не сможет восстановиться после этого и будет выводить наиболее вероятного человека, которого он может найти, хотя ни один из них не является правильным.

Другой подход - не изменять генератор кандидатов, а учитывать метку NER как часть механизма оценки в конвейере entity_linker. В настоящее время он уже объединяет две оценки: одну по априорной вероятности (с использованием статистики из большого обучающего корпуса) и по контексту (с использованием машинного обучения и схожести предложений). Аспект соответствия метки NER может быть включен в этот счет, и тогда еще будет шанс распознать PARIS как правильный объект, даже если его метка NER неверна. Но это зависит от того, насколько строго вы хотите добиться этого.

person Sofie VL    schedule 12.10.2020
comment
Спасибо @SofieVL за подробный ответ. - person LBoss; 13.10.2020

У меня просто была идея. Я предполагаю, что можно было бы иметь 2 канала и обучать отдельную NER-модель для каждого типа сущности. Затем поместите отдельную модель KB и EL в каждую трубу. Затем объедините результаты труб.

person LBoss    schedule 13.10.2020
comment
Отличная идея! Вы можете обучить одну модель NER, но отдельные модели NEL для каждой метки NER. Тем не менее, вам все равно придется найти способ сопоставить объекты Викиданных с вашими метками NER, чтобы отделить разные KB. - person Sofie VL; 13.10.2020