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.
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
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---
slovnet_ner_v1.tar 1.5 MB
4 datasets are used for evaluation, see Corus registry for more info: factru
, gareev
, ne5
and bsnlp
.
slovnet
is compared to:
deeppavlov
— biLSTM + CRF by DeepPavlov, see their 2017 paper for more.deeppavlov_bert
— BERT based NER, current SOTA for Russian language, see video presentation describing the approach.pullenti
— first place on factRuEval-2016, super sophisticated ruled based system.texterra
— multifunctional NLP solution by ISP RAS, NER is one of the features.tomita
— GLR-parser by Yandex, only grammars forPER
are publicly available.mitie
— engine developed at MIT + third party model for Russian language.
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
andtexterra
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 andtexterra
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 thantomita
,mitie
andslovnet
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 |
- Chat — https://telegram.me/natural_language_processing
- Issues — https://github.com/natasha/slovnet/issues
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