Skip to content

Deep Learning based NLP modeling for Russian language

License

Notifications You must be signed in to change notification settings

natasha/slovnet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

SlovNet is a Python library for deep-learning based NLP modeling for Russian language. Library is integrated with other Natasha projects: large NER corpus and compact Russian embeddings. SlovNet provides high quality practical model for Russian NER, it is 1-2% worse than current BERT SOTA by DeepPavlov but 60 times smaller in size (~30 MB) and works fast on CPU (~30 news articles/sec), see evaluation section for more.

Install

During inference slovnet depends only on numpy. Library supports Python 2.7+, 3.4+ и PyPy 3. PyPy 2 is excluded since it is hard to install numpy for PyPy 2.

$ pip install slovnet

Usage

Download news Navec embeddings and SlovNet news NER model:

>>> from navec import Navec
>>> from slovnet import NERTagger
>>> from ipymarkup import show_ascii_markup

>>> text = 'Европейский союз добавил в санкционный список девять политических деятелей из самопровозглашенных республик Донбасса — Донецкой народной республики (ДНР) и Луганской народной республики (ЛНР) — в связи с прошедшими там выборами. Об этом говорится в документе, опубликованном в официальном журнале Евросоюза. В новом списке фигурирует Леонид Пасечник, который по итогам выборов стал главой ЛНР. Помимо него там присутствуют Владимир Бидевка и Денис Мирошниченко, председатели законодательных органов ДНР и ЛНР, а также Ольга Позднякова и Елена Кравченко, председатели ЦИК обеих республик. Выборы прошли в непризнанных республиках Донбасса 11 ноября. На них удержали лидерство действующие руководители и партии — Денис Пушилин и «Донецкая республика» в ДНР и Леонид Пасечник с движением «Мир Луганщине» в ЛНР. Президент Франции Эмманюэль Макрон и канцлер ФРГ Ангела Меркель после встречи с украинским лидером Петром Порошенко осудили проведение выборов, заявив, что они нелегитимны и «подрывают территориальную целостность и суверенитет Украины». Позже к осуждению присоединились США с обещаниями новых санкций для России.'

>>> navec = Navec.load('navec_news_v1_1B_250K_300d_100q.tar')

>>> tagger = NERTagger.load('slovnet_ner_v1.tar', navec)
>>> markup = tagger(text)
>>> markup
SpanMarkup(
    text='Европейский союз добавил в санкционный список девять политических деятелей из самопровозглашенных республик Донбасса — Донецкой народной республики (ДНР) и Луганской народной республики (ЛНР) — в связи с прошедшими там выборами. Об этом говорится в документе, опубликованном в официальном журнале Евросоюза. В новом списке фигурирует Леонид Пасечник, который по итогам выборов стал главой ЛНР. Помимо него там присутствуют Владимир Бидевка и Денис Мирошниченко, председатели законодательных органов ДНР и ЛНР, а также Ольга Позднякова и Елена Кравченко, председатели ЦИК обеих республик. Выборы прошли в непризнанных республиках Донбасса 11 ноября. На них удержали лидерство действующие руководители и партии — Денис Пушилин и «Донецкая республика» в ДНР и Леонид Пасечник с движением «Мир Луганщине» в ЛНР. Президент Франции Эмманюэль Макрон и канцлер ФРГ Ангела Меркель после встречи с украинским лидером Петром Порошенко осудили проведение выборов, заявив, что они нелегитимны и «подрывают территориальную целостность и суверенитет Украины». Позже к осуждению присоединились США с обещаниями новых санкций для России.',
    spans=[Span(
         start=0,
         stop=16,
         type='LOC'
     ), Span(
         start=108,
         stop=116,
         type='LOC'
     ), Span(
         start=119,
         stop=153,
         type='LOC'
     )
 ...
])

>>> show_ascii_markup(markup.text, markup.spans)

Европейский союз добавил в санкционный список девять политических 
LOC-------------                                                  
деятелей из самопровозглашенных республик ДонбассаДонецкой народной
                                          LOC-----   LOC--------------
 республики (ДНР) и Луганской народной республики (ЛНР) — в связи с 
-----------------   LOC--------------------------------             
прошедшими там выборами. Об этом говорится в документе, опубликованном
 в официальном журнале Евросоюза. В новом списке фигурирует Леонид 
                       LOC------                            PER----
Пасечник, который по итогам выборов стал главой ЛНР. Помимо него там 
--------                                        LOC                  
присутствуют Владимир Бидевка и Денис Мирошниченко, председатели 
             PER-------------   PER---------------               
законодательных органов ДНР и ЛНР, а также Ольга Позднякова и Елена 
                        LOC   LOC          PER-------------   PER---
Кравченко, председатели ЦИК обеих республик. Выборы прошли в 
---------               ORG                                  
непризнанных республиках Донбасса 11 ноября. На них удержали лидерство
                         LOC-----                                     
 действующие руководители и партииДенис Пушилин и «Донецкая 
                                     PER----------    ORG------
республика» в ДНР и Леонид Пасечник с движением «Мир Луганщине» в ЛНР.
----------    LOC   PER------------              ORG----------    LOC 
 Президент Франции Эмманюэль Макрон и канцлер ФРГ Ангела Меркель после
           LOC---- PER-------------           LOC PER-----------      
 встречи с украинским лидером Петром Порошенко осудили проведение 
                              PER-------------                    
выборов, заявив, что они нелегитимны и «подрывают территориальную 
целостность и суверенитет Украины». Позже к осуждению присоединились 
                          LOC----                                    
США с обещаниями новых санкций для России.
LOC                                LOC--- 

Downloads

slovnet_ner_v1.tar 1.5 MB

Evaluation

4 datasets are used for evaluation, see Corus registry for more info: factru, gareev, ne5 and bsnlp.

slovnet is compared to:

For every column top 3 results are highlighted. In each case slovnet and deeppavlov_bert are 5-10% better then other systems:

factru gareev ne5 bsnlp
f1 PER LOC ORG PER ORG PER LOC ORG PER LOC ORG
slovnet 0.960 0.905 0.808 0.982 0.907 0.992 0.981 0.958 0.949 0.833 0.735
deeppavlov_bert 0.971 0.925 0.823 0.984 0.917 0.997 0.991 0.977 0.955 0.840 0.738
deeppavlov 0.909 0.885 0.735 0.944 0.797 0.942 0.919 0.880 0.866 0.767 0.623
pullenti 0.903 0.814 0.684 0.941 0.641 0.947 0.862 0.681 0.896 0.766 0.566
texterra 0.900 0.800 0.601 0.888 0.565 0.901 0.777 0.593 0.858 0.783 0.540
tomita 0.929 0.921 0.945 0.880
mitie 0.888 0.859 0.531 0.849 0.452 0.753 0.642 0.430 0.733 0.800 0.520
  • init — time between system launch and first response. It is convenient for testing and devops to have model that starts quickly. deeppavlov_bert and texterra take >30 sec to start, slovnet takes just ~1 sec.
  • disk — file size of artefacts one needs to download before using the system: model weights, embeddings, binaries, vocabs. It is inconvenient to deploy large models in production. deeppavlov models require >1 GB download, slovnet is just 30 MB including embeddings.
  • ram — average memory consumption. deeppavlov systems and texterra are memory heavy, slovnet consumes ~200 MB of RAM.
  • speed — number of news articles processed per second, one article is ~1 KB of text. deeppavlov systems process texts in batches on GPU, but they are still slover than tomita, mitie and slovnet that run on single CPU.
init, s disk, mb ram, mb speed, articles/s
slovnet 0.9 30 180 33.9
deeppavlov_bert 34.5 2048 6144 13.1 (gpu)
deeppavlov 5.9 1024 3072 24.3 (gpu)
pullenti 2.9 16 253 6.0
texterra 47.6 193 3379 4.0
tomita 2.0 64 63 29.8
mitie 28.3 327 261 32.8

Support

Development

Rent GPU:

vast search offers | grep '1 x  RTX 2080 Ti'
vast create instance 420232 --image alexkuk/my-vast --disk 20
vast destroy instance 488817
watch vast show instances

ssh -Nf vast -L 8888:localhost:8888 -L 6006:localhost:6006
http://localhost:8888/notebooks/
http://localhost:6006/

scp ~/.slovnet.json vast:~
rsync --exclude data --exclude notes -rv . vast:~/slovnet
rsync -u --exclude data --exclude runs -rv 'vast:~/slovnet/*' .

Intall dev:

pip3 install -e slovnet
pip3 install -r slovnet/requirements/dev.txt