В проекте Natasha анализ морфологии, синтаксиса и извлечение именованных сущностей делают 3 компактные модели: Slovnet NER, Slovnet Morph и Slovnet Syntax. Качество решений на 1–5 процентных пунктов хуже, чем у тяжёлых аналогов c BERT-архитектурой, размер в 50-75 раз меньше, скорость на CPU в 2 раза больше. Модели обучены на огромном синтетическом датасете Nerus, в архиве 700 000 новостных статей с CoNLL-U-разметкой морфологии, синтаксиса и именованных сущностей:
# newdoc id = 0 # sent_id = 0_0 # text = Вице-премьер по социальным вопросам Татьяна Голикова рассказала, в каких регионах России зафиксирована ... 1 Вице-премьер _ NOUN _ Animacy=Anim|Case=Nom|Gend... 7 nsubj _ Tag=O 2 по _ ADP _ _ 4 case _ Tag=O 3 социальным _ ADJ _ Case=Dat|Degree=Pos|Number... 4 amod _ Tag=O 4 вопросам _ NOUN _ Animacy=Inan|Case=Dat|Gend... 1 nmod _ Tag=O 5 Татьяна _ PROPN _ Animacy=Anim|Case=Nom|Gend... 1 appos _ Tag=B-PER 6 Голикова _ PROPN _ Animacy=Anim|Case=Nom|Gend... 5 flat:name _ Tag=I-PER 7 рассказала _ VERB _ Aspect=Perf|Gender=Fem|Moo... 0 root _ Tag=O 8 , _ PUNCT _ _ 13 punct _ Tag=O 9 в _ ADP _ _ 11 case _ Tag=O 10 каких _ DET _ Case=Loc|Number=Plur 11 det _ Tag=O 11 регионах _ NOUN _ Animacy=Inan|Case=Loc|Gend... 13 obl _ Tag=O 12 России _ PROPN _ Animacy=Inan|Case=Gen|Gend... 11 nmod _ Tag=B-LOC 13 зафиксирована _ VERB _ Aspect=Perf|Gender=Fem|Num... 7 ccomp _ Tag=O 14 наиболее _ ADV _ Degree=Pos 15 advmod _ Tag=O 15 высокая _ ADJ _ Case=Nom|Degree=Pos|Gender... 16 amod _ Tag=O 16 смертность _ NOUN _ Animacy=Inan|Case=Nom|Gend... 13 nsubj _ Tag=O 17 от _ ADP _ _ 18 case _ Tag=O 18 рака _ NOUN _ Animacy=Inan|Case=Gen|Gend... 16 nmod _ Tag=O 19 , _ PUNCT _ _ 20 punct _ Tag=O 20 сообщает _ VERB _ Aspect=Imp|Mood=Ind|Number... 0 root _ Tag=O 21 РИА _ PROPN _ Animacy=Inan|Case=Nom|Gend... 20 nsubj _ Tag=B-ORG 22 Новости _ PROPN _ Animacy=Inan|Case=Nom|Gend... 21 appos _ Tag=I-ORG 23 . _ PUNCT _ _ 20 punct _ Tag=O # sent_id = 0_1 # text = По словам Голиковой, чаще всего онкологические заболевания становились причиной смерти в Псковской, Тверской, ... 1 По _ ADP _ _ 2 case _ Tag=O 2 словам _ NOUN _ Animacy=Inan|Case=Dat|Gend... 9 parataxis _ Tag=O ...
Slovnet NER, Morph, Syntax — примитивные модели. Когда в обучающей выборке 1000 примеров, Slovnet NER отстаёт от тяжёлого BERT-аналога на 11 процентных пунктов, когда примеров 10 000 — на 3 пункта, когда 500 000 — на 1.
Nerus — результат работы, тяжёлых моделей с BERT-архитектурой: Slovnet BERT NER, Slovnet BERT Morph, Slovnet BERT Syntax. Обработка 700 000 новостных статей занимает 20 часов на Tesla V100. Мы экономим время других исследователей, выкладываем готовый архив в открытый доступ:
nerus_lenta.conllu.gz, 2GBУ синтетической разметки высокое качество: точность определения морфологических тегов — 98%, синтаксических связей — 96%. Для NER оценки F1 по токенам: PER — 99%, LOC — 98%, ORG — 97%. Для оценки качества мы размечаем SynTagRus, Collection5 и новостной срез GramEval2020, сравниваем эталонную разметку с нашей, подробнее в репозитории Nerus. Редкие примеры ошибок извлечения именованных сущностей:
Выборы Верховного совета Аджарской автономной республики назначены в соответствии с 241-ой статьей ORG────────────── LOC──────────────────────────── и 4-м пунктом 10-й статьи Конституционного закона Грузии <О статусе Аджарской автономной республики>. LOC─── LOC─────────────────~~~~~~~~~~~ Следственное управление при прокуратуре требует наказать премьера Якутии. ORG────────────────────~~~~~~~~~~~~~~~~ LOC─── Начальник полигона <Игумново> в Нижегородской области осужден за загрязнение атмосферы и грунтовых вод. ORG~~~~~ LOC──────────────────
Python-пакет Nerus организует удобный интерфейс для загрузки и визуализации разметки:
>>> from nerus import load_nerus >>> docs = load_nerus('nerus_lenta.conllu.gz') >>> doc = next(docs) >>> doc NerusDoc( id='0', sents=[NerusSent( id='0_0', text='Вице-премьер по социальным вопросам Татьяна Голикова рассказала, в каких регионах России ... tokens=[NerusToken( id='1', text='Вице-премьер', pos='NOUN', feats={'Animacy': 'Anim', 'Case': 'Nom', 'Gender': 'Masc', 'Number': 'Sing'}, head_id='7', rel='nsubj', tag='O' ), NerusToken( id='2', text='по', pos='ADP', ... >>> doc.ner.print() Вице-премьер по социальным вопросам Татьяна Голикова рассказала, в каких регионах России зафиксирована наиболее PER───────────── LOC─── высокая смертность от рака, сообщает РИА Новости. По словам Голиковой, чаще всего онкологические заболевания ORG──────── PER────── ... >>> sent = doc.sents[0] >>> sent.morph.print() Вице-премьер NOUN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing по ADP социальным ADJ|Case=Dat|Degree=Pos|Number=Plur вопросам NOUN|Animacy=Inan|Case=Dat|Gender=Masc|Number=Plur Татьяна PROPN|Animacy=Anim|Case=Nom|Gender=Fem|Number=Sing Голикова PROPN|Animacy=Anim|Case=Nom|Gender=Fem|Number=Sing рассказала VERB|Aspect=Perf|Gender=Fem|Mood=Ind|Number=Sing ... >>> sent.syntax.print() ┌►┌─┌───── Вице-премьер nsubj │ │ │ ┌──► по case │ │ │ │ ┌► социальным amod │ │ └►└─└─ вопросам nmod │ └────►┌─ Татьяна appos │ └► Голикова flat:name ┌─└───────── рассказала │ ┌──────► , punct │ │ ┌──► в case │ │ │ ┌► каких det │ │ ┌►└─└─ регионах obl │ │ │ └──► России nmod └──►└─└───── зафиксирована ccomp │ ┌► наиболее advmod │ ┌►└─ высокая amod └►┌─└─── смертность nsubj:pass │ ┌► от case └──►└─ рака nmod ┌► , punct ┌─┌─└─ сообщает │ └►┌─ РИА nsubj │ └► Новости appos └────► . punct
Инструкция по установке, примеры использования, оценки качества в репозитории Nerus.
natural_language_processing — чат пользователей, разработчиков проекта.