All streams
Search
Write a publication
Pull to refresh

Comments 4

У меня жена — библиограф, работает в библиотеке. Периодически их отдел составляет именные указатели. Задача — по списку фамилий с инициалами найти все вхождения этих фамилий в текст, составленный из описаний библиографических ссылок на статьи, материалы конференций, отзывы в разных источниках и т.д. Посмотрев, как жена днями и неделями мучается с этой работой, я написал программу для автоматизации этого процесса. Без конечной проверки человеком обойтись не удалось, но весь процесс теперь занимал несколько часов и сводился в основном к проверке, не пропущена ли какая-то ссылка или фамилия.

Изначально программа была написана на BlitzBasic, с которым я тогда активно работал (дело было ну очень давно), поэтому недавно я захотел переписать ее на C#. А заодно увеличить уровень автоматизации за счет автоматического составления исходного списка фамилий. Это классический поиск именованных сущностей. Для этого решил попробовать Natasha, которую так хвалят. И сильно разочаровался. Половину фамилий она вообще не находила, а среди того, что находила, было довольно много мусора. Пришлось оставить «человеческий» поиск фамилий в тексте.

У меня возникло подозрение, что Natasha оптимизирована для поиска именованных сущностей в более-менее связном и коротком тексте. Например, в аннотации статьи или в приговоре суда. Если же ей подсунуть большой текст, состоящий из массы не связанных между собой параграфов, насыщенный именованными сущностями, то она сильно лажает.

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

«Мусор» встречается из-за обобщенных правил, которые указывают, что в тексте может встретиться, например, только фамилия. Для ее поиска в коде «NameExtractor» указывается правило – «слово с заглавной буквы». И парсер найдет всё, что попадает под это указание. Можно ограничить поиск еще одним правилом вроде «оканчивается на –ов/-ова/-ко». Это – пользовательская настройка, которую нужно писать самостоятельно.

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

Не берусь делать однозначные выводы относительно качества работы их модели для NER на разных объемах и структуре текста. Она обучена на новостях и художественной литературе, что охватывает далеко не весь спектр жанров письменной речи.

А если и форм больше (уфк, ано, мп, итд)и записаны они не только сокращённо?

Парсер – механический поиск. Нужно указывать все формы, если они нужны Вам в результате поиска. В том числе, развернутые аббревиатуры.

Sign up to leave a comment.

Articles