В проекте 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 — чат пользователей, разработчиков проекта.