Проект Natasha решает базовые задачи обработки естественного русского языка: сегментация на токены и предложения, анализ морфологии и синтаксиса, NER. Natasha — не научный проект, у нас нет цели побить SOTA. Важно измерить качество на публичных бенчмарках, постараться занять высокое место, не проиграв в производительности.
Naeval — часть проекта Natasha, набор скриптов для оценки качества и скорости работы открытых инструментов для обработки естественного русского языка:
Задача | Датасеты | Решения |
---|---|---|
Токенизация | SynTagRus, OpenCorpora, GICRYA, RNC | SpaCy, NLTK, MyStem, Moses, SegTok, SpaCy Russian Tokenizer, RuTokenizer, Razdel |
Сегментация предложений | SynTagRus, OpenCorpora, GICRYA, RNC | SegTok, Moses, NLTK, RuSentTokenizer, Razdel |
Эмбеддинги | SimLex965, HJ, LRWC, RT, AE, AE2 | RusVectores, Navec |
Анализ морфологии | GramRuEval2020 (SynTagRus, GSD, Lenta.ru, Taiga) | DeepPavlov Morph, DeepPavlov BERT Morph, RuPosTagger, RNNMorph, Maru, UDPipe, SpaCy, Stanza, Slovnet Morph, Slovnet BERT Morph |
Анализ синтаксиса | GramRuEval2020 (SynTagRus, GSD, Lenta.ru, Taiga) | DeepPavlov BERT Syntax, UDPipe, SpaCy, Stanza, Slovnet Syntax, Slovnet BERT Syntax |
NER | factRuEval-2016, Collection5, Gareev, BSNLP-2019, WiNER | DeepPavlov NER, DeepPavlov BERT NER, DeepPavlov Slavic BERT NER, PullEnti, SpaCy, Stanza, Texterra, Tomita, MITIE, Slovnet NER, Slovnet BERT NER |
Сетка решений и тестовых датасетов из репозитория Naeval. Инструменты проекта Natasha: Razdel, Navec, Slovnet.
Дальше подробнее рассмотрим задачу NER.Для русскоязычного NER существует 5 публичных бенчмарков: factRuEval-2016, Collection5, Gareev, BSNLP-2019, WiNER. Ссылки на источники собраны в реестре Corus. Все датасеты состоят из новостных статей, в текстах отмечены подстроки с именами, названиями организаций и топонимов. Что может быть проще?
Collection5 использует Standoff-формат утилиты Brat, Gareev и WiNER — разные диалекты BIO-разметки, у BSNLP-2019 свой формат, у factRuEval-2016 тоже своя нетривиальная спецификация. Naeval приводит все источники к общему формату. Разметка состоит из спанов. Спан — тройка: тип сущности, начало и конец подстроки.
factRuEval-2016 и Collection5 отдельно помечают полутопонимы-полуорганизации: «Кремль», «ЕС», «СССР». BSNLP-2019 и WiNER выделяют названия событий: «Чемпионат России», «Брексит». Naeval адаптирует и удаляет часть меток, оставляет эталонные метки PER, LOC, ORG: имена людей, названия топонимов и организаций.
В factRuEval-2016 спаны пересекаются. Naeval упрощает разметку:
Было Теперь, как утверждают в Х5 Retail Group, куда входят org_name─────── Org──────────── сети магазинов "Пятерочка", "Перекресток" и "Карусель", org_descr───── org_name─ org_name─── org_name Org────────────────────── org_descr───── Org───────────────────────────────────── org_descr───── Org────────────────────────────────────────────────── о повышении цен сообщили два поставщика рыбы и морепродуктов и компания, поставляющая овощи и фрукты. Стало Теперь, как утверждают в Х5 Retail Group, куда входят ORG──────────── сети магазинов "Пятерочка", "Перекресток" и "Карусель", ORG────── ORG──────── ORG───── о повышении цен сообщили два поставщика рыбы и морепродуктов и компания, поставляющая овощи и фрукты.
Naeval сравнивает 12 открытых решений задачи NER для русского языка. Все инструменты завёрнуты в Docker-контейнеры с веб-интерфейсом:
$ docker run -p 8080:8080 natasha/tomita-algfio 2020-07-02 11:09:19 BIN: 'tomita-linux64', CONFIG: 'algfio' 2020-07-02 11:09:19 Listening http://0.0.0.0:8080 $ curl -X POST http://localhost:8080 --data \ 'Глава государства Дмитрий Медведев и Председатель \ Правительства РФ Владимир Путин выразили глубочайшие \ соболезнования семье актрисы' <document url="" di="5" bi="-1" date="2020-07-02"> <facts> <Person pos="18" len="16" sn="0" fw="2" lw="3"> <Name_Surname val="МЕДВЕДЕВ" /> <Name_FirstName val="ДМИТРИЙ" /> <Name_SurnameIsDictionary val="1" /> </Person> <Person pos="67" len="14" sn="0" fw="8" lw="9"> <Name_Surname val="ПУТИН" /> <Name_FirstName val="ВЛАДИМИР" /> <Name_SurnameIsDictionary val="1" /> </Person> </facts> </document>
Некоторые решения так тяжело запустить и настроить, что мало людей ими пользуется. PullEnti — сложная система, построенная на правилах, заняла первой место на конкурсе factRuEval в 2016 году. Инструмент распространяется в виде SDK для C#. Работа над Naeval вылилась в отдельный проект с набором обёрток для PullEnti: PullentiServer — веб-сервер на С#, pullenti-client — Python-клиент для PullentiServer:
$ docker run -p 8080:8080 pullenti/pullenti-server 2020-07-02 11:42:02 [INFO] Init Pullenti v3.21 ... 2020-07-02 11:42:02 [INFO] Load lang: ru, en 2020-07-02 11:42:03 [INFO] Load analyzer: geo, org, person 2020-07-02 11:42:05 [INFO] Listen prefix: http://*:8080/ >>> from pullenti_client import Client >>> client = Client('localhost', 8080) >>> text = 'Глава государства Дмитрий Медведев и ' \ ... 'Председатель Правительства РФ Владимир Путин ' \ ... 'выразили глубочайшие соболезнования семье актрисы' >>> result = client(text) >>> result.graph
Формат разметки у всех инструментов немного отличается. Naeval загружает результаты, адаптирует типы сущностей, упрощает структуру спанов:
Было (PullEnti) Напомним, парламент Южной Осетии на состоявшемся 19 декабря ORGANIZATION────────── GEO───────── заседании одобрил представление президента Республики PERSON──────────────── PERSONPROPERTY─────── Леонида Тибилова об отставке председателя Верховного суда ──────────────── PERSON─────────────────────── PERSONPROPERTY────────────── ORGANIZATION─── Ацамаза Биченова. ──────────────── Стало Напомним, парламент Южной Осетии на состоявшемся 19 декабря ORG────── LOC───────── заседании одобрил представление президента Республики Леонида Тибилова об отставке председателя Верховного суда PER───────────── ORG──────────── Ацамаза Биченова. PER─────────────
Результат работы PullEnti сложнее адаптировать, чем разметку factRuEval-2016. Алгоритм убирает тег PERSONPROPERTY, разбивает вложенные PERSON, ORGANIZATION и GEO на непересекающиеся PER, LOC, ORG.
Для каждой пары «модель, датасет» Naeval вычисляет F1-меру по токенам, публикует таблицу с оценками качества.
Natasha — не научный проект, для нас важна практичность решения. Naeval измеряет время старта, скорость работы, размер модели и потребление RAM. Таблица с результатами в репозитории.
Мы подготовили датасеты, завернули 20 систем в Docker-контейнеры и посчитали метрики для 5 других задач русскоязычного NLP, результаты в репозитории Naeval: токенизация, сегментация на предложения, эмбеддинги, анализ морфологии и синтаксиса.
natural_language_processing — чат пользователей, разработчиков проекта.