Можно ли использовать NER-Label в генерации кандидатов Entity Linking в spaCy?
Я хочу использовать spaCy для связывания сущностей (EL). Я уже обучил модель распознавания именованных сущностей (NER) spaCy с настраиваемыми метками в моем корпусе, зависящем от предметной области. Однако в моем следующем примере будут использоваться обычные метки объекта PERSON и LOCATION.
Устанавливая псевдонимы в базе знаний (KB), база знаний возвращает кандидатов на наличие признанных объектов, например, кандидатами на "Париж" может быть запись в Викиданных Q47899 (Пэрис Хилтон), Q7137357 (Paris Themmen), Q5214166 (Дэн Пэрис), Q90 (Париж, столица Франции) или Q830149 (Париж, округ Ламар, штат Техас, США).
Мой вопрос касается метки признанного объекта. Если NER признает "Париж" как ЛИЦО, это исключает Q90 (Париж, столица Франции) и Q830149 (Париж, административный центр округа Ламар, штат Техас, США) из кандидатов, оставляя 3 кандидата. В то время как если "Париж" был признан МЕСТОПОЛОЖЕНИЕМ, то остались только 2 других кандидата.
Можно ли как-то посоветовать модели KB или EL, из какого набора сущностей выбирать кандидатов, учитывая обнаруженную метку NER? До или после обучения модели EL?
2 ответа
В настоящее время это не реализовано в spaCy. В общем, это шаги, необходимые для получения желаемой функциональности:
- Создайте своего рода сопоставление между вашими объектами базы знаний (идентификаторами Викиданных) и вашими метками NER. Это будет не совсем тривиально. Вам необходимо либо проанализировать метаинформацию "экземпляр" викиданных, либо использовать систему классификации Википедии, которая имеет свои подводные камни. В любом случае вам нужно получить автоматический способ определения этого
Q830149 is-a "LOCATION"
и т.п. - Сохраните "метки NER" для каждого объекта. Это можно сделать в базе знаний, но затем необходимо отредактировать структуры Cython.
- Повторно реализовать генерацию кандидатов (в настоящее время часть базы знаний:
get_candidates
метод), чтобы взять текстовое упоминание + его метку NER и вывести только подходящих кандидатов для этой конкретной метки.
Одно предостережение, на которое я хотел бы обратить внимание, заключается в том, что этот подход может усиливать ошибки на этапе NER. Представьте, что вы говорите о Париже, столице, но ваш NER ошибается и помечает это как "ЧЕЛОВЕК". С подходом, описанным здесь, NEL не сможет оправиться от этого и выведет наиболее вероятного человека, которого он может найти, хотя ни один из них не является правильным.
Другой подход заключается в том, чтобы не изменять генератор кандидатов, а учитывать метку NER как часть механизма оценки в
entity_linker
труба. В настоящее время он уже объединяет две оценки: одну по априорной вероятности (с использованием статистики из большого обучающего корпуса) и по контексту (с использованием машинного обучения и схожести предложений). Аспект соответствия метки NER может быть включен в этот счет, и тогда еще будет шанс распознать "PARIS" как правильный объект, даже если его метка NER неверна. Но это зависит от того, насколько строго вы хотите добиться этого.
У меня просто была идея. Я предполагаю, что можно было бы иметь 2 канала и обучать отдельную NER-модель для каждого типа сущности. Тогда имейте отдельные KB и EL-модели в каждой трубе. Затем объедините результаты труб.