Проект Natasha

Nerus — большой синтетический русскоязычный датасет с разметкой морфологии, синтаксиса и именованных сущностей

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