​​Как выделяют и классифицируют сущности в художественных текстах

#nlp #philology



Человек схватывает новую информацию на лету: из контекста, из интонации, из невербального общения. А как помочь компьютеру понять, что Гарри — волшебник, Гендальф — майар, а Джон Сноу — одновременно Старк и Таргариен?



В NLP эти задачи называются Named-entity recognition (NER), то есть выделение сущностей, и Entity Typing (ET) — классификация сущностей. С помощью NER и ET филологи подсчитывают, сколько раз появляется персонаж в тексте, строят сеть связей между героями книг и собирают все прозвища героя, а историки работают с оцифрованными текстами древних рукописей.



Какие корпуса используют для классифицируют сущности



Обычно для выделения особенностей сущности и их классификации используются тексты Википедии. Этот метод работает, если нужно разобрать текст о реальном мире. Но если мы скормим программе текст «Властелина Колец», она выдаст неполный результат, т. к. в Википедии не хватает информации о вымышленных вселенных.



Эту проблему решили исследователи из Института Макса Планка. Они создали систему ENTIFY (ENtity TYping on FIctional texts), которая может работать с художественными текстами, в том числе и фэнтези и science-fiction вселенными.



В основе ENTYFI лежит тот же принцип, что и в базовых инструментах NLP — поиск и классификация сущностей, но к корпусу текстов из Википедии добавляются размеченные тексты с платформы fandom.com (ранее Wikia). Это платформа, которая позволяет создавать отдельные тематические википедии о вселенных из книг, кино, игр и т. д. Поэтому ENTYFI смогла определить, что «Фродо Бэггинс» — «хоббит» из племени «мохноног» (harfoot).



Как работает ENTYFI



Сначала статьи Wikia объединяются в группы, в которых все статьи описывают одну и ту же вселенную — Властелин колец, Гарри Поттер, Марвел и др. Затем программа ранжирует массив «каноничных вселенных» по количеству совпадений в статьях Wikia об одной вселенной и анализируемом тексте и с помощью нейросети LSTM выделяются сущности. Дальше программа ищет найденные в тексте сущности в корпусах Wikia и Википедии.



Одновременно с этими процессами проходят еще два: авторы ENTYFI называют их Unsupervised typing и KB lookup. Unsupervised typing — это поиск класса сущности внутри того предложения, в котором сущность найдена. ET при нахождении сущности подразделяет ее на токены (слова в ней), находит их класс (метку) и добавляет к ним префиксы — элементы разметки текста.



KB lookup — метод, позволяющий вычислить класс (метку) сущности через контекст, который есть в анализируемом тексте. Сначала программа анализирует то, что вокруг сущности (не обязательно близко по тексту), выделяет контекст, формирует связи и из этих связей выделяет классы (метки) сущности. На прикрепленной схеме показано, как программа понимает, что Фродо — «cousin» Бильбо и его наследник.



Информация консолидируется методами Inductive logic programming — Индуктивного логического программирования. Система перепроверяет метки (классы), которые она присвоила персонажам.



Сопоставляя факты, ENTYFI узнает, что Дрого Бэггинс, отец Фродо Бэггинса, ещё и троюродный брат Бильбо Бэггинса по мужской линии; а Примула Брендибак, мать Фродо Бэггинса — двоюродная сестра Бильбо Бэггинса по женской линии. Следовательно, Фродо Бэггинс — дважды племянник Бильбо Бэггинса: двоюродный по матери и троюродный по отцу. Поэтому в «борьбе» меток cousin и nephew победит последняя — потому что Фродо действительно племянник, а не кузен Бильбо.



Авторы ENTYFI выложили исходный код программы на Github.



Также есть демонстратор возможностей библиотеки SpaCy для Python.



https://sysblok.ru/philology/bjegginsy-kolca-i-saurony-kak-nauchit-kompjuter-ponimat-kto-est-kto/



Артур Хисматулин