{"id":13935758,"url":"https://github.com/natasha/slovnet","last_synced_at":"2025-04-04T21:07:27.922Z","repository":{"id":40964653,"uuid":"205827805","full_name":"natasha/slovnet","owner":"natasha","description":"Deep Learning based NLP modeling for Russian language","archived":false,"fork":false,"pushed_at":"2023-07-24T09:48:05.000Z","size":3918,"stargazers_count":230,"open_issues_count":7,"forks_count":24,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-28T20:07:15.914Z","etag":null,"topics":["bert","deep-learning","machine-learning","morphology","ner","nlp","python","pytorch","russian","syntax"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/natasha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-02T09:56:37.000Z","updated_at":"2025-03-12T12:31:53.000Z","dependencies_parsed_at":"2024-04-27T23:37:05.843Z","dependency_job_id":"c6a8acca-e0c9-49c5-8603-6ebdbe775e28","html_url":"https://github.com/natasha/slovnet","commit_stats":{"total_commits":225,"total_committers":3,"mean_commits":75.0,"dds":0.0444444444444444,"last_synced_commit":"efea466681fd706fea2daee6b187a13e3f8904d0"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fslovnet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fslovnet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fslovnet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fslovnet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/natasha","download_url":"https://codeload.github.com/natasha/slovnet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247249524,"owners_count":20908212,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bert","deep-learning","machine-learning","morphology","ner","nlp","python","pytorch","russian","syntax"],"created_at":"2024-08-07T23:02:04.300Z","updated_at":"2025-04-04T21:07:27.896Z","avatar_url":"https://github.com/natasha.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\n\u003cimg src=\"https://github.com/natasha/natasha-logos/blob/master/slovnet.svg\"\u003e\n\n![CI](https://github.com/natasha/slovnet/actions/workflows/test.yml/badge.svg)\n\nSlovNet is a Python library for deep-learning based NLP modeling for Russian language. Library is integrated with other \u003ca href=\"https://github.com/natasha/\"\u003eNatasha\u003c/a\u003e projects: \u003ca href=\"https://github.com/natasha/nerus\"\u003eNerus\u003c/a\u003e — large automatically annotated corpus, \u003ca href=\"https://github.com/natasha/razdel\"\u003eRazdel\u003c/a\u003e — sentence segmenter, tokenizer and \u003ca href=\"https://github.com/natasha/navec\"\u003eNavec\u003c/a\u003e — compact Russian embeddings. Slovnet provides high quality practical models for Russian NER, morphology and syntax, see \u003ca href=\"#evaluation\"\u003eevaluation section\u003c/a\u003e for more:\n\n* NER is 1-2% worse than current BERT SOTA by DeepPavlov but 60 times smaller in size (~30 MB) and works fast on CPU (~25 news articles/sec).\n* Morphology tagger and syntax parser have comparable accuracy on news dataset with large SOTA BERT models, take 50 times less space (~30 MB), work faster on CPU (~500 sentences/sec). \n\n## Downloads\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003eModel\u003c/th\u003e\n\u003cth\u003eSize\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://storage.yandexcloud.net/natasha-slovnet/packs/slovnet_ner_news_v1.tar\"\u003eslovnet_ner_news_v1.tar\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e2MB\u003c/td\u003e\n\u003ctd\u003e\n  Russian NER, standart PER, LOC, ORG annotation, trained on news articles.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://storage.yandexcloud.net/natasha-slovnet/packs/slovnet_morph_news_v1.tar\"\u003eslovnet_morph_news_v1.tar\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e2MB\u003c/td\u003e\n\u003ctd\u003e\n  Russian morphology tagger optimized for news articles.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\n  \u003ca href=\"https://storage.yandexcloud.net/natasha-slovnet/packs/slovnet_syntax_news_v1.tar\"\u003eslovnet_syntax_news_v1.tar\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e3MB\u003c/td\u003e\n\u003ctd\u003e\n  Russian syntax parser optimized for news articles.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n## Install\n\nDuring inference Slovnet depends only on Numpy. Library supports Python 3.5+, PyPy 3.\n\n```bash\n$ pip install slovnet\n```\n\n## Usage\n\nDownload model weights and vocabs package, use links from \u003ca href=\"#downloads\"\u003edownloads section\u003c/a\u003e and \u003ca href=\"https://github.com/natasha/navec#downloads\"\u003eNavec download section\u003c/a\u003e. Optionally install \u003ca href=\"https://github.com/natasha/ipymarkup\"\u003eIpymarkup\u003c/a\u003e to visualize NER markup.\n\nSlovnet annotator `map` method has list of items as input and same size iterator over markups as output. Internally items are processed in batches of size `batch_size`. Default size is 8, larger batch — more RAM, better CPU utilization. `__call__` method just calls `map` with a list of 1 item.\n\n### NER\n\n```python\n\u003e\u003e\u003e from navec import Navec\n\u003e\u003e\u003e from slovnet import NER\n\u003e\u003e\u003e from ipymarkup import show_span_ascii_markup as show_markup\n\n\u003e\u003e\u003e text = 'Европейский союз добавил в санкционный список девять политических деятелей из самопровозглашенных республик Донбасса — Донецкой народной республики (ДНР) и Луганской народной республики (ЛНР) — в связи с прошедшими там выборами. Об этом говорится в документе, опубликованном в официальном журнале Евросоюза. В новом списке фигурирует Леонид Пасечник, который по итогам выборов стал главой ЛНР. Помимо него там присутствуют Владимир Бидевка и Денис Мирошниченко, председатели законодательных органов ДНР и ЛНР, а также Ольга Позднякова и Елена Кравченко, председатели ЦИК обеих республик. Выборы прошли в непризнанных республиках Донбасса 11 ноября. На них удержали лидерство действующие руководители и партии — Денис Пушилин и «Донецкая республика» в ДНР и Леонид Пасечник с движением «Мир Луганщине» в ЛНР. Президент Франции Эмманюэль Макрон и канцлер ФРГ Ангела Меркель после встречи с украинским лидером Петром Порошенко осудили проведение выборов, заявив, что они нелегитимны и «подрывают территориальную целостность и суверенитет Украины». Позже к осуждению присоединились США с обещаниями новых санкций для России.'\n\n\u003e\u003e\u003e navec = Navec.load('navec_news_v1_1B_250K_300d_100q.tar')\n\u003e\u003e\u003e ner = NER.load('slovnet_ner_news_v1.tar')\n\u003e\u003e\u003e ner.navec(navec)\n\n\u003e\u003e\u003e markup = ner(text)\n\u003e\u003e\u003e show_markup(markup.text, markup.spans)\nЕвропейский союз добавил в санкционный список девять политических \nLOC─────────────                                                  \nдеятелей из самопровозглашенных республик Донбасса — Донецкой народной\n                                          LOC─────   LOC──────────────\n республики (ДНР) и Луганской народной республики (ЛНР) — в связи с \n─────────────────   LOC────────────────────────────────             \nпрошедшими там выборами. Об этом говорится в документе, опубликованном\n в официальном журнале Евросоюза. В новом списке фигурирует Леонид \n                       LOC──────                            PER────\nПасечник, который по итогам выборов стал главой ЛНР. Помимо него там \n────────                                        LOC                  \nприсутствуют Владимир Бидевка и Денис Мирошниченко, председатели \n             PER─────────────   PER───────────────               \nзаконодательных органов ДНР и ЛНР, а также Ольга Позднякова и Елена \n                        LOC   LOC          PER─────────────   PER───\nКравченко, председатели ЦИК обеих республик. Выборы прошли в \n─────────               ORG                                  \nнепризнанных республиках Донбасса 11 ноября. На них удержали лидерство\n                         LOC─────                                     \n действующие руководители и партии — Денис Пушилин и «Донецкая \n                                     PER──────────    ORG──────\nреспублика» в ДНР и Леонид Пасечник с движением «Мир Луганщине» в ЛНР.\n──────────    LOC   PER────────────              ORG──────────    LOC \n Президент Франции Эмманюэль Макрон и канцлер ФРГ Ангела Меркель после\n           LOC──── PER─────────────           LOC PER───────────      \n встречи с украинским лидером Петром Порошенко осудили проведение \n                              PER─────────────                    \nвыборов, заявив, что они нелегитимны и «подрывают территориальную \nцелостность и суверенитет Украины». Позже к осуждению присоединились \n                          LOC────                                    \nСША с обещаниями новых санкций для России.\nLOC                                LOC─── \n\n```\n\n### Morphology\n\nMorphology annotator processes tokenized text. To split the input into sentencies and tokens use \u003ca href=\"https://github.com/natasha/razdel\"\u003eRazdel\u003c/a\u003e.\n\n```python\n\u003e\u003e\u003e from razdel import sentenize, tokenize\n\u003e\u003e\u003e from navec import Navec\n\u003e\u003e\u003e from slovnet import Morph\n\n\u003e\u003e\u003e chunk = []\n\u003e\u003e\u003e for sent in sentenize(text):\n\u003e\u003e\u003e     tokens = [_.text for _ in tokenize(sent.text)]\n\u003e\u003e\u003e     chunk.append(tokens)\n\u003e\u003e\u003e chunk[:1]\n[['Европейский', 'союз', 'добавил', 'в', 'санкционный', 'список', 'девять', 'политических', 'деятелей', 'из', 'самопровозглашенных', 'республик', 'Донбасса', '—', 'Донецкой', 'народной', 'республики', '(', 'ДНР', ')', 'и', 'Луганской', 'народной', 'республики', '(', 'ЛНР', ')', '—', 'в', 'связи', 'с', 'прошедшими', 'там', 'выборами', '.']]\n\n\u003e\u003e\u003e navec = Navec.load('navec_news_v1_1B_250K_300d_100q.tar')\n\u003e\u003e\u003e morph = Morph.load('slovnet_morph_news_v1.tar', batch_size=4)\n\u003e\u003e\u003e morph.navec(navec)\n\n\u003e\u003e\u003e markup = next(morph.map(chunk))\n\u003e\u003e\u003e for token in markup.tokens:\n\u003e\u003e\u003e     print(f'{token.text:\u003e20} {token.tag}')\n         Европейский ADJ|Case=Nom|Degree=Pos|Gender=Masc|Number=Sing\n                союз NOUN|Animacy=Inan|Case=Nom|Gender=Masc|Number=Sing\n             добавил VERB|Aspect=Perf|Gender=Masc|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Act\n                   в ADP\n         санкционный ADJ|Animacy=Inan|Case=Acc|Degree=Pos|Gender=Masc|Number=Sing\n              список NOUN|Animacy=Inan|Case=Acc|Gender=Masc|Number=Sing\n              девять NUM|Case=Nom\n        политических ADJ|Case=Gen|Degree=Pos|Number=Plur\n            деятелей NOUN|Animacy=Anim|Case=Gen|Gender=Masc|Number=Plur\n                  из ADP\n самопровозглашенных ADJ|Case=Gen|Degree=Pos|Number=Plur\n           республик NOUN|Animacy=Inan|Case=Gen|Gender=Fem|Number=Plur\n            Донбасса PROPN|Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing\n                   — PUNCT\n            Донецкой ADJ|Case=Gen|Degree=Pos|Gender=Fem|Number=Sing\n            народной ADJ|Case=Gen|Degree=Pos|Gender=Fem|Number=Sing\n          республики NOUN|Animacy=Inan|Case=Gen|Gender=Fem|Number=Sing\n                   ( PUNCT\n                 ДНР PROPN|Animacy=Inan|Case=Gen|Gender=Fem|Number=Sing\n                   ) PUNCT\n                   и CCONJ\n           Луганской ADJ|Case=Gen|Degree=Pos|Gender=Fem|Number=Sing\n            народной ADJ|Case=Gen|Degree=Pos|Gender=Fem|Number=Sing\n          республики NOUN|Animacy=Inan|Case=Gen|Gender=Fem|Number=Sing\n                   ( PUNCT\n                 ЛНР PROPN|Animacy=Inan|Case=Gen|Gender=Fem|Number=Sing\n                   ) PUNCT\n                   — PUNCT\n                   в ADP\n               связи NOUN|Animacy=Inan|Case=Loc|Gender=Fem|Number=Sing\n                   с ADP\n          прошедшими VERB|Aspect=Perf|Case=Ins|Number=Plur|Tense=Past|VerbForm=Part|Voice=Act\n                 там ADV|Degree=Pos\n            выборами NOUN|Animacy=Inan|Case=Ins|Gender=Masc|Number=Plur\n                   . PUNCT\n\n```\n\n### Syntax\n\nSyntax parser processes sentencies split into tokens. Use \u003ca href=\"https://github.com/natasha/razdel\"\u003eRazdel\u003c/a\u003e for segmentation.\n\n```python\n\u003e\u003e\u003e from ipymarkup import show_dep_ascii_markup as show_markup\n\u003e\u003e\u003e from razdel import sentenize, tokenize\n\u003e\u003e\u003e from navec import Navec\n\u003e\u003e\u003e from slovnet import Syntax\n\n\u003e\u003e\u003e chunk = []\n\u003e\u003e\u003e for sent in sentenize(text):\n\u003e\u003e\u003e     tokens = [_.text for _ in tokenize(sent.text)]\n\u003e\u003e\u003e     chunk.append(tokens)\n\u003e\u003e\u003e chunk[:1]\n[['Европейский', 'союз', 'добавил', 'в', 'санкционный', 'список', 'девять', 'политических', 'деятелей', 'из', 'самопровозглашенных', 'республик', 'Донбасса', '—', 'Донецкой', 'народной', 'республики', '(', 'ДНР', ')', 'и', 'Луганской', 'народной', 'республики', '(', 'ЛНР', ')', '—', 'в', 'связи', 'с', 'прошедшими', 'там', 'выборами', '.']]\n\n\u003e\u003e\u003e navec = Navec.load('navec_news_v1_1B_250K_300d_100q.tar')\n\u003e\u003e\u003e syntax = Syntax.load('slovnet_syntax_news_v1.tar')\n\u003e\u003e\u003e syntax.navec(navec)\n\n\u003e\u003e\u003e markup = next(syntax.map(chunk))\n\n# Convert CoNLL-style format to source, target indices\n\u003e\u003e\u003e words, deps = [], []\n\u003e\u003e\u003e for token in markup.tokens:\n\u003e\u003e\u003e     words.append(token.text)\n\u003e\u003e\u003e     source = int(token.head_id) - 1\n\u003e\u003e\u003e     target = int(token.id) - 1\n\u003e\u003e\u003e     if source \u003e 0 and source != target:  # skip root, loops\n\u003e\u003e\u003e         deps.append([source, target, token.rel])\n\u003e\u003e\u003e show_markup(words, deps)\n              ┌► Европейский         amod\n            ┌►└─ союз                nsubj\n┌───────┌─┌─└─── добавил             \n│       │ │ ┌──► в                   case\n│       │ │ │ ┌► санкционный         amod\n│       │ └►└─└─ список              obl\n│       │   ┌──► девять              nummod:gov\n│       │   │ ┌► политических        amod\n│ ┌─────└►┌─└─└─ деятелей            obj\n│ │       │ ┌──► из                  case\n│ │       │ │ ┌► самопровозглашенных amod\n│ │       └►└─└─ республик           nmod\n│ │         └──► Донбасса            nmod\n│ │ ┌──────────► —                   punct\n│ │ │       ┌──► Донецкой            amod\n│ │ │       │ ┌► народной            amod\n│ │ │ ┌─┌─┌─└─└─ республики          \n│ │ │ │ │ │   ┌► (                   punct\n│ │ │ │ │ └►┌─└─ ДНР                 parataxis\n│ │ │ │ │   └──► )                   punct\n│ │ │ │ │ ┌────► и                   cc\n│ │ │ │ │ │ ┌──► Луганской           amod\n│ │ │ │ │ │ │ ┌► народной            amod\n│ │ └─│ └►└─└─└─ республики          conj\n│ │   │       ┌► (                   punct\n│ │   └────►┌─└─ ЛНР                 parataxis\n│ │         └──► )                   punct\n│ │     ┌──────► —                   punct\n│ │     │ ┌►┌─┌─ в                   case\n│ │     │ │ │ └► связи               fixed\n│ │     │ │ └──► с                   fixed\n│ │     │ │ ┌►┌─ прошедшими          acl\n│ │     │ │ │ └► там                 advmod\n│ └────►└─└─└─── выборами            nmod\n└──────────────► .                   punct\n\n```\n\n## Documentation\n\nMaterials are in Russian:\n\n* \u003ca href=\"https://natasha.github.io/ner\"\u003eArticle about distillation and quantization in Slovnet\u003c/a\u003e \n* \u003ca href=\"https://youtu.be/-7XT_U6hVvk?t=2034\"\u003eSlovnet section of Datafest 2020 talk\u003c/a\u003e\n\n## Evaluation\n\nIn addition to quality metrics we measure speed and models size, parameters that are important in production:\n\n* `init` — time between system launch and first response. It is convenient for testing and devops to have model that starts quickly.\n* `disk` — file size of artefacts one needs to download before using the system: model weights, embeddings, binaries, vocabs. It is convenient to deploy compact models in production.\n* `ram` — average CPU/GPU RAM usage.\n* `speed` — number of input items processed per second: news articles, tokenized sentencies.\n\n### NER\n\n4 datasets are used for evaluation: \u003ca href=\"https://github.com/natasha/corus#load_factru\"\u003e\u003ccode\u003efactru\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/corus#load_gareev\"\u003e\u003ccode\u003egareev\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/corus#load_ne5\"\u003e\u003ccode\u003ene5\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/natasha/corus#load_bsnlp\"\u003e\u003ccode\u003ebsnlp\u003c/code\u003e\u003c/a\u003e. Slovnet is compared to \u003ca href=\"https://github.com/natasha/naeval#deeppavlov_ner\"\u003e\u003ccode\u003edeeppavlov\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#deeppavlov_bert_ner\"\u003e\u003ccode\u003edeeppavlov_bert\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#deeppavlov_slavic_bert_ner\"\u003e\u003ccode\u003edeeppavlov_slavic\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#pullenti\"\u003e\u003ccode\u003epullenti\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#spacy\"\u003e\u003ccode\u003espacy\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#stanza\"\u003e\u003ccode\u003estanza\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#texterra\"\u003e\u003ccode\u003etexterra\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#tomita\"\u003e\u003ccode\u003etomita\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#mitie\"\u003e\u003ccode\u003emitie\u003c/code\u003e\u003c/a\u003e.\n\nFor every column top 3 results are highlighted:\n\n\u003c!--- ner1 ---\u003e\n\u003ctable border=\"0\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003efactru\u003c/th\u003e\n      \u003cth colspan=\"2\" halign=\"left\"\u003egareev\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003ene5\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003ebsnlp\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003ef1\u003c/th\u003e\n      \u003cth\u003ePER\u003c/th\u003e\n      \u003cth\u003eLOC\u003c/th\u003e\n      \u003cth\u003eORG\u003c/th\u003e\n      \u003cth\u003ePER\u003c/th\u003e\n      \u003cth\u003eORG\u003c/th\u003e\n      \u003cth\u003ePER\u003c/th\u003e\n      \u003cth\u003eLOC\u003c/th\u003e\n      \u003cth\u003eORG\u003c/th\u003e\n      \u003cth\u003ePER\u003c/th\u003e\n      \u003cth\u003eLOC\u003c/th\u003e\n      \u003cth\u003eORG\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.959\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.915\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.825\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.977\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.899\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.984\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.973\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.951\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.944\u003c/td\u003e\n      \u003ctd\u003e0.834\u003c/td\u003e\n      \u003ctd\u003e0.718\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet_bert\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.973\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.928\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.831\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.991\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.911\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.996\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.989\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.976\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.960\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.838\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.733\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov\u003c/th\u003e\n      \u003ctd\u003e0.910\u003c/td\u003e\n      \u003ctd\u003e0.886\u003c/td\u003e\n      \u003ctd\u003e0.742\u003c/td\u003e\n      \u003ctd\u003e0.944\u003c/td\u003e\n      \u003ctd\u003e0.798\u003c/td\u003e\n      \u003ctd\u003e0.942\u003c/td\u003e\n      \u003ctd\u003e0.919\u003c/td\u003e\n      \u003ctd\u003e0.881\u003c/td\u003e\n      \u003ctd\u003e0.866\u003c/td\u003e\n      \u003ctd\u003e0.767\u003c/td\u003e\n      \u003ctd\u003e0.624\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov_bert\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.971\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.928\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.825\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.980\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.916\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.997\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.990\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.976\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.954\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.840\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.741\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov_slavic\u003c/th\u003e\n      \u003ctd\u003e0.956\u003c/td\u003e\n      \u003ctd\u003e0.884\u003c/td\u003e\n      \u003ctd\u003e0.714\u003c/td\u003e\n      \u003ctd\u003e0.976\u003c/td\u003e\n      \u003ctd\u003e0.776\u003c/td\u003e\n      \u003ctd\u003e0.984\u003c/td\u003e\n      \u003ctd\u003e0.817\u003c/td\u003e\n      \u003ctd\u003e0.761\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.965\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.925\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.831\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003epullenti\u003c/th\u003e\n      \u003ctd\u003e0.905\u003c/td\u003e\n      \u003ctd\u003e0.814\u003c/td\u003e\n      \u003ctd\u003e0.686\u003c/td\u003e\n      \u003ctd\u003e0.939\u003c/td\u003e\n      \u003ctd\u003e0.639\u003c/td\u003e\n      \u003ctd\u003e0.952\u003c/td\u003e\n      \u003ctd\u003e0.862\u003c/td\u003e\n      \u003ctd\u003e0.683\u003c/td\u003e\n      \u003ctd\u003e0.900\u003c/td\u003e\n      \u003ctd\u003e0.769\u003c/td\u003e\n      \u003ctd\u003e0.566\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003espacy\u003c/th\u003e\n      \u003ctd\u003e0.901\u003c/td\u003e\n      \u003ctd\u003e0.886\u003c/td\u003e\n      \u003ctd\u003e0.765\u003c/td\u003e\n      \u003ctd\u003e0.970\u003c/td\u003e\n      \u003ctd\u003e0.883\u003c/td\u003e\n      \u003ctd\u003e0.967\u003c/td\u003e\n      \u003ctd\u003e0.928\u003c/td\u003e\n      \u003ctd\u003e0.918\u003c/td\u003e\n      \u003ctd\u003e0.919\u003c/td\u003e\n      \u003ctd\u003e0.823\u003c/td\u003e\n      \u003ctd\u003e0.693\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003estanza\u003c/th\u003e\n      \u003ctd\u003e0.943\u003c/td\u003e\n      \u003ctd\u003e0.865\u003c/td\u003e\n      \u003ctd\u003e0.687\u003c/td\u003e\n      \u003ctd\u003e0.953\u003c/td\u003e\n      \u003ctd\u003e0.827\u003c/td\u003e\n      \u003ctd\u003e0.923\u003c/td\u003e\n      \u003ctd\u003e0.753\u003c/td\u003e\n      \u003ctd\u003e0.734\u003c/td\u003e\n      \u003ctd\u003e0.938\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.838\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.724\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003etexterra\u003c/th\u003e\n      \u003ctd\u003e0.900\u003c/td\u003e\n      \u003ctd\u003e0.800\u003c/td\u003e\n      \u003ctd\u003e0.597\u003c/td\u003e\n      \u003ctd\u003e0.888\u003c/td\u003e\n      \u003ctd\u003e0.561\u003c/td\u003e\n      \u003ctd\u003e0.901\u003c/td\u003e\n      \u003ctd\u003e0.777\u003c/td\u003e\n      \u003ctd\u003e0.594\u003c/td\u003e\n      \u003ctd\u003e0.858\u003c/td\u003e\n      \u003ctd\u003e0.783\u003c/td\u003e\n      \u003ctd\u003e0.548\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003etomita\u003c/th\u003e\n      \u003ctd\u003e0.929\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e0.921\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e0.945\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e0.881\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003emitie\u003c/th\u003e\n      \u003ctd\u003e0.888\u003c/td\u003e\n      \u003ctd\u003e0.861\u003c/td\u003e\n      \u003ctd\u003e0.532\u003c/td\u003e\n      \u003ctd\u003e0.849\u003c/td\u003e\n      \u003ctd\u003e0.452\u003c/td\u003e\n      \u003ctd\u003e0.753\u003c/td\u003e\n      \u003ctd\u003e0.642\u003c/td\u003e\n      \u003ctd\u003e0.432\u003c/td\u003e\n      \u003ctd\u003e0.736\u003c/td\u003e\n      \u003ctd\u003e0.801\u003c/td\u003e\n      \u003ctd\u003e0.524\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!--- ner1 ---\u003e\n\n`it/s` — news articles per second, 1 article ≈ 1KB.\n\n\u003c!--- ner2 ---\u003e\n\u003ctable border=\"0\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003einit, s\u003c/th\u003e\n      \u003cth\u003edisk, mb\u003c/th\u003e\n      \u003cth\u003eram, mb\u003c/th\u003e\n      \u003cth\u003espeed, it/s\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e1.0\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e27\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e205\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e25.3\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet_bert\u003c/th\u003e\n      \u003ctd\u003e5.0\u003c/td\u003e\n      \u003ctd\u003e473\u003c/td\u003e\n      \u003ctd\u003e9500\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e40.0 (gpu)\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov\u003c/th\u003e\n      \u003ctd\u003e5.9\u003c/td\u003e\n      \u003ctd\u003e1024\u003c/td\u003e\n      \u003ctd\u003e3072\u003c/td\u003e\n      \u003ctd\u003e24.3 (gpu)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov_bert\u003c/th\u003e\n      \u003ctd\u003e34.5\u003c/td\u003e\n      \u003ctd\u003e2048\u003c/td\u003e\n      \u003ctd\u003e6144\u003c/td\u003e\n      \u003ctd\u003e13.1 (gpu)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov_slavic\u003c/th\u003e\n      \u003ctd\u003e35.0\u003c/td\u003e\n      \u003ctd\u003e2048\u003c/td\u003e\n      \u003ctd\u003e4096\u003c/td\u003e\n      \u003ctd\u003e8.0 (gpu)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003epullenti\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e2.9\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e16\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e253\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e6.0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003espacy\u003c/th\u003e\n      \u003ctd\u003e8.0\u003c/td\u003e\n      \u003ctd\u003e140\u003c/td\u003e\n      \u003ctd\u003e625\u003c/td\u003e\n      \u003ctd\u003e8.0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003estanza\u003c/th\u003e\n      \u003ctd\u003e3.0\u003c/td\u003e\n      \u003ctd\u003e591\u003c/td\u003e\n      \u003ctd\u003e11264\u003c/td\u003e\n      \u003ctd\u003e3.0 (gpu)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003etexterra\u003c/th\u003e\n      \u003ctd\u003e47.6\u003c/td\u003e\n      \u003ctd\u003e193\u003c/td\u003e\n      \u003ctd\u003e3379\u003c/td\u003e\n      \u003ctd\u003e4.0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003etomita\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e2.0\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e64\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e63\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e29.8\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003emitie\u003c/th\u003e\n      \u003ctd\u003e28.3\u003c/td\u003e\n      \u003ctd\u003e327\u003c/td\u003e\n      \u003ctd\u003e261\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e32.8\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!--- ner2 ---\u003e\n\n### Morphology\n\n\u003ca href=\"https://github.com/natasha/corus#load_gramru\"\u003eDatasets from GramEval2020\u003c/a\u003e are used for evaluation:\n\n* `news` — sample from Lenta.ru.\n* `wiki` — UD GSD.\n* `fiction` — SynTagRus + JZ.\n* `social`, `poetry` — social, poetry subset of Taiga.\n\nSlovnet is compated to a number of existing morphology taggers: \u003ca href=\"https://github.com/natasha/naeval#deeppavlov_morph\"\u003e\u003ccode\u003edeeppavlov\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#deeppavlov_bert_morph\"\u003e\u003ccode\u003edeeppavlov_bert\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#rupostagger\"\u003e\u003ccode\u003erupostagger\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#rnnmorph\"\u003e\u003ccode\u003ernnmorph\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#mary\"\u003e\u003ccode\u003emaru\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#udpipe\"\u003e\u003ccode\u003eudpipe\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#spacy\"\u003e\u003ccode\u003espacy\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#stanza\"\u003e\u003ccode\u003estanza\u003c/code\u003e\u003c/a\u003e.\n\nFor every column top 3 results are highlighted. `slovnet` was trained only on news dataset:\n\n\u003c!--- morph1 ---\u003e\n\u003ctable border=\"0\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003enews\u003c/th\u003e\n      \u003cth\u003ewiki\u003c/th\u003e\n      \u003cth\u003efiction\u003c/th\u003e\n      \u003cth\u003esocial\u003c/th\u003e\n      \u003cth\u003epoetry\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.961\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.815\u003c/td\u003e\n      \u003ctd\u003e0.905\u003c/td\u003e\n      \u003ctd\u003e0.807\u003c/td\u003e\n      \u003ctd\u003e0.664\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet_bert\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.982\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.884\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.990\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.890\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.856\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov\u003c/th\u003e\n      \u003ctd\u003e0.940\u003c/td\u003e\n      \u003ctd\u003e0.841\u003c/td\u003e\n      \u003ctd\u003e0.944\u003c/td\u003e\n      \u003ctd\u003e0.870\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.857\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov_bert\u003c/th\u003e\n      \u003ctd\u003e0.951\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.868\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.964\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.892\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.865\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eudpipe\u003c/th\u003e\n      \u003ctd\u003e0.918\u003c/td\u003e\n      \u003ctd\u003e0.811\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.957\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.870\u003c/td\u003e\n      \u003ctd\u003e0.776\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003espacy\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.964\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.849\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.942\u003c/td\u003e\n      \u003ctd\u003e0.857\u003c/td\u003e\n      \u003ctd\u003e0.784\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003estanza\u003c/th\u003e\n      \u003ctd\u003e0.934\u003c/td\u003e\n      \u003ctd\u003e0.831\u003c/td\u003e\n      \u003ctd\u003e0.940\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.873\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.825\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003ernnmorph\u003c/th\u003e\n      \u003ctd\u003e0.896\u003c/td\u003e\n      \u003ctd\u003e0.812\u003c/td\u003e\n      \u003ctd\u003e0.890\u003c/td\u003e\n      \u003ctd\u003e0.860\u003c/td\u003e\n      \u003ctd\u003e0.838\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003emaru\u003c/th\u003e\n      \u003ctd\u003e0.894\u003c/td\u003e\n      \u003ctd\u003e0.808\u003c/td\u003e\n      \u003ctd\u003e0.887\u003c/td\u003e\n      \u003ctd\u003e0.861\u003c/td\u003e\n      \u003ctd\u003e0.840\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003erupostagger\u003c/th\u003e\n      \u003ctd\u003e0.673\u003c/td\u003e\n      \u003ctd\u003e0.645\u003c/td\u003e\n      \u003ctd\u003e0.661\u003c/td\u003e\n      \u003ctd\u003e0.641\u003c/td\u003e\n      \u003ctd\u003e0.636\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!--- morph1 ---\u003e\n\n`it/s` — sentences per second.\n\n\u003c!--- morph2 ---\u003e\n\u003ctable border=\"0\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003einit, s\u003c/th\u003e\n      \u003cth\u003edisk, mb\u003c/th\u003e\n      \u003cth\u003eram, mb\u003c/th\u003e\n      \u003cth\u003espeed, it/s\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e1.0\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e27\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e115\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e532.0\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet_bert\u003c/th\u003e\n      \u003ctd\u003e5.0\u003c/td\u003e\n      \u003ctd\u003e475\u003c/td\u003e\n      \u003ctd\u003e8087\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e285.0 (gpu)\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e4.0\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e32\u003c/td\u003e\n      \u003ctd\u003e10240\u003c/td\u003e\n      \u003ctd\u003e90.0 (gpu)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov_bert\u003c/th\u003e\n      \u003ctd\u003e20.0\u003c/td\u003e\n      \u003ctd\u003e1393\u003c/td\u003e\n      \u003ctd\u003e8704\u003c/td\u003e\n      \u003ctd\u003e85.0 (gpu)\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eudpipe\u003c/th\u003e\n      \u003ctd\u003e6.9\u003c/td\u003e\n      \u003ctd\u003e45\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e242\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e56.2\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003espacy\u003c/th\u003e\n      \u003ctd\u003e8.0\u003c/td\u003e\n      \u003ctd\u003e140\u003c/td\u003e\n      \u003ctd\u003e579\u003c/td\u003e\n      \u003ctd\u003e50.0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003estanza\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e2.0\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e591\u003c/td\u003e\n      \u003ctd\u003e393\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e92.0\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003ernnmorph\u003c/th\u003e\n      \u003ctd\u003e8.7\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e10\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e289\u003c/td\u003e\n      \u003ctd\u003e16.6\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003emaru\u003c/th\u003e\n      \u003ctd\u003e15.8\u003c/td\u003e\n      \u003ctd\u003e44\u003c/td\u003e\n      \u003ctd\u003e370\u003c/td\u003e\n      \u003ctd\u003e36.4\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003erupostagger\u003c/th\u003e\n      \u003ctd\u003e4.8\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e3\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e118\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e48.0\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!--- morph2 ---\u003e\n\n### Syntax\n\nSlovnet is compated to several existing syntax parsers: \u003ca href=\"https://github.com/natasha/naeval#udpipe\"\u003e\u003ccode\u003eudpipe\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#spacy\"\u003e\u003ccode\u003espacy\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#deeppavlov_bert_syntax\"\u003e\u003ccode\u003edeeppavlov\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/natasha/naeval#stanza\"\u003e\u003ccode\u003estanza\u003c/code\u003e\u003c/a\u003e.\n\n\u003c!--- syntax1 ---\u003e\n\u003ctable border=\"0\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth colspan=\"2\" halign=\"left\"\u003enews\u003c/th\u003e\n      \u003cth colspan=\"2\" halign=\"left\"\u003ewiki\u003c/th\u003e\n      \u003cth colspan=\"2\" halign=\"left\"\u003efiction\u003c/th\u003e\n      \u003cth colspan=\"2\" halign=\"left\"\u003esocial\u003c/th\u003e\n      \u003cth colspan=\"2\" halign=\"left\"\u003epoetry\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003euas\u003c/th\u003e\n      \u003cth\u003elas\u003c/th\u003e\n      \u003cth\u003euas\u003c/th\u003e\n      \u003cth\u003elas\u003c/th\u003e\n      \u003cth\u003euas\u003c/th\u003e\n      \u003cth\u003elas\u003c/th\u003e\n      \u003cth\u003euas\u003c/th\u003e\n      \u003cth\u003elas\u003c/th\u003e\n      \u003cth\u003euas\u003c/th\u003e\n      \u003cth\u003elas\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet\u003c/th\u003e\n      \u003ctd\u003e0.907\u003c/td\u003e\n      \u003ctd\u003e0.880\u003c/td\u003e\n      \u003ctd\u003e0.775\u003c/td\u003e\n      \u003ctd\u003e0.718\u003c/td\u003e\n      \u003ctd\u003e0.806\u003c/td\u003e\n      \u003ctd\u003e0.776\u003c/td\u003e\n      \u003ctd\u003e0.726\u003c/td\u003e\n      \u003ctd\u003e0.656\u003c/td\u003e\n      \u003ctd\u003e0.542\u003c/td\u003e\n      \u003ctd\u003e0.469\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet_bert\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.965\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.936\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.891\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.828\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.958\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.940\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.846\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.782\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.776\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.706\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov_bert\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.962\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.910\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.882\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.786\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.963\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.929\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.844\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.761\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.784\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.691\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eudpipe\u003c/th\u003e\n      \u003ctd\u003e0.873\u003c/td\u003e\n      \u003ctd\u003e0.823\u003c/td\u003e\n      \u003ctd\u003e0.622\u003c/td\u003e\n      \u003ctd\u003e0.531\u003c/td\u003e\n      \u003ctd\u003e0.910\u003c/td\u003e\n      \u003ctd\u003e0.876\u003c/td\u003e\n      \u003ctd\u003e0.700\u003c/td\u003e\n      \u003ctd\u003e0.624\u003c/td\u003e\n      \u003ctd\u003e0.625\u003c/td\u003e\n      \u003ctd\u003e0.534\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003espacy\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e0.943\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.916\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.851\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.783\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.901\u003c/td\u003e\n      \u003ctd\u003e0.874\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.804\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.737\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.704\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.616\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003estanza\u003c/th\u003e\n      \u003ctd\u003e0.940\u003c/td\u003e\n      \u003ctd\u003e0.886\u003c/td\u003e\n      \u003ctd\u003e0.815\u003c/td\u003e\n      \u003ctd\u003e0.716\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.936\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.895\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.802\u003c/td\u003e\n      \u003ctd\u003e0.714\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e0.713\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e0.613\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!--- syntax1 ---\u003e\n\n`it/s` — sentences per second.\n\n\u003c!--- syntax2 ---\u003e\n\u003ctable border=\"0\" class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003einit, s\u003c/th\u003e\n      \u003cth\u003edisk, mb\u003c/th\u003e\n      \u003cth\u003eram, mb\u003c/th\u003e\n      \u003cth\u003espeed, it/s\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e1.0\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e27\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e125\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e450.0\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eslovnet_bert\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e5.0\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e504\u003c/td\u003e\n      \u003ctd\u003e3427\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e200.0 (gpu)\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003edeeppavlov_bert\u003c/th\u003e\n      \u003ctd\u003e34.0\u003c/td\u003e\n      \u003ctd\u003e1427\u003c/td\u003e\n      \u003ctd\u003e8704\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e75.0 (gpu)\u003c/b\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eudpipe\u003c/th\u003e\n      \u003ctd\u003e6.9\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e45\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e242\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e56.2\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003espacy\u003c/th\u003e\n      \u003ctd\u003e9.0\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e140\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cb\u003e579\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e41.0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003estanza\u003c/th\u003e\n      \u003ctd\u003e\u003cb\u003e3.0\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003e591\u003c/td\u003e\n      \u003ctd\u003e890\u003c/td\u003e\n      \u003ctd\u003e12.0\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!--- syntax2 ---\u003e\n\n## Support\n\n- Chat — https://telegram.me/natural_language_processing\n- Issues — https://github.com/natasha/slovnet/issues\n- Commercial support — https://lab.alexkuk.ru\n\n## Development\n\nDev env\n\n```bash\npython -m venv ~/.venvs/natasha-slovnet\nsource ~/.venvs/natasha-slovnet/bin/activate\n\npip install -r requirements/dev.txt\npip install -e .\n```\n\nTest\n\n```bash\nmake test\n```\n\nRent GPU\n\n```bash\nyc compute instance create \\\n  --name gpu \\\n  --zone ru-central1-a \\\n  --network-interface subnet-name=default,nat-ip-version=ipv4 \\\n  --create-boot-disk image-folder-id=standard-images,image-family=ubuntu-1804-lts-ngc,type=network-ssd,size=20 \\\n  --cores=8 \\\n  --memory=96 \\\n  --gpus=1 \\\n  --ssh-key ~/.ssh/id_rsa.pub \\\n  --folder-name default \\\n  --platform-id gpu-standard-v1 \\\n  --preemptible\n\nyc compute instance delete --name gpu\n```\n\nSetup instance\n\n```\nsudo locale-gen ru_RU.UTF-8\n\nsudo apt-get update\nsudo apt-get install -y \\\n  python3-pip\n\n# grpcio long install ~10m, not using prebuilt wheel\n# \"it is not compatible with this Python\" \nsudo pip3 install -v \\\n  jupyter \\\n  tensorboard\n\nmkdir runs\nnohup tensorboard \\\n  --logdir=runs \\\n  --host=localhost \\\n  --port=6006 \\\n  --reload_interval=1 \u0026\n\nnohup jupyter notebook \\\n  --no-browser \\\n  --allow-root \\\n  --ip=localhost \\\n  --port=8888 \\\n  --NotebookApp.token='' \\\n  --NotebookApp.password='' \u0026\n\nssh -Nf gpu -L 8888:localhost:8888 -L 6006:localhost:6006\n\nscp ~/.slovnet.json gpu:~\nrsync --exclude data -rv . gpu:~/slovnet\nrsync -u --exclude data -rv 'gpu:~/slovnet/*' .\n```\n\nIntall dev\n\n```bash\npip3 install -r slovnet/requirements/dev.txt -r slovnet/requirements/gpu.txt\npip3 install -e slovnet\n```\n\nRelease\n\n```bash\n# Update setup.py version\n\ngit commit -am 'Up version'\ngit tag v0.6.0\n\ngit push\ngit push --tags\n\n# Github Action builds dist and publishes to PyPi\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatasha%2Fslovnet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnatasha%2Fslovnet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatasha%2Fslovnet/lists"}