Skip to main content

Нейросетевые модели для русского языка: NER, морфология и синтаксис с автоматической загрузкой

Project description

mawo-slovnet

PyPI версия Python 3.10+ Лицензия: MIT

Нейросетевые модели для русского языка: NER, морфология и синтаксис с автоматической загрузкой моделей.

Возможности

  • 3 готовые модели: NER, морфология, синтаксический разбор
  • Автозагрузка: Модели скачиваются автоматически при первом использовании
  • Работа офлайн: После загрузки работает без интернета
  • Гибридный режим: Нейросети + правила (если модели недоступны)
  • Компактные модели: Всего 6.9МБ для всех трёх моделей
  • Качество: 95% accuracy на новостных текстах

Установка

pip install mawo-slovnet

Быстрый старт

Named Entity Recognition (NER)

from mawo_slovnet import NewsNERTagger

# Создаём NER-теггер (модель скачается автоматически при первом запуске)
ner = NewsNERTagger()

# Анализируем текст
text = "Владимир Путин посетил Москву в понедельник."
markup = ner(text)

# Извлекаем именованные сущности
for span in markup.spans:
    print(f"{span.text} -> {span.type}")
# Владимир Путин -> PER
# Москву -> LOC

Морфологический анализ

from mawo_slovnet import NewsMorphTagger

# Создаём морфологический теггер
morph = NewsMorphTagger()

# Анализируем текст
text = "Мама мыла раму."
markup = morph(text)

# Получаем морфологические теги
for token in markup.tokens:
    print(f"{token.text}: {token.pos} {token.feats}")
# Мама: NOUN Case=Nom|Gender=Fem|Number=Sing
# мыла: VERB Gender=Fem|Number=Sing|Tense=Past
# раму: NOUN Case=Acc|Gender=Fem|Number=Sing

Синтаксический разбор

from mawo_slovnet import NewsSyntaxParser

# Создаём синтаксический парсер
syntax = NewsSyntaxParser()

# Разбираем предложение
text = "Кот сидит на коврике."
markup = syntax(text)

# Получаем зависимости
for token in markup.tokens:
    print(f"{token.text} -> {token.head_id} ({token.rel})")
# Кот -> 1 (nsubj)
# сидит -> 1 (root)
# на -> 4 (case)
# коврике -> 1 (obl)

Продвинутое использование

Ручная загрузка моделей

from mawo_slovnet import download_models

# Загрузить все модели заранее
download_models()

# Или загрузить конкретную модель
download_models(["ner"])  # только NER
download_models(["morph", "syntax"])  # морфология + синтаксис

Проверка статуса моделей

from mawo_slovnet import get_model_info

# Проверить, какие модели загружены
info = get_model_info()
print(info)
# {
#     "ner": {"cached": True, "size_mb": 2.2, "path": "..."},
#     "morph": {"cached": True, "size_mb": 2.4, "path": "..."},
#     "syntax": {"cached": True, "size_mb": 2.5, "path": "..."}
# }

Гибридный режим (fallback)

Если модели недоступны, библиотека автоматически использует rule-based подход:

from mawo_slovnet import NewsNERTagger

# Если модели нет - будет использован fallback
ner = NewsNERTagger()

# Работает даже без ML-моделей (хуже качество, но работает)
markup = ner("Пушкин жил в Петербурге")

Типы сущностей (NER)

Модель распознаёт следующие типы:

  • PER (Person): Владимир Путин, А.С. Пушкин
  • LOC (Location): Москва, Россия, Невский проспект
  • ORG (Organization): Газпром, ООН, Министерство финансов

Морфологические признаки

Модель определяет:

  • Часть речи: NOUN, VERB, ADJ, ADV, PRON, etc.
  • Падеж: Nom, Gen, Dat, Acc, Ins, Loc
  • Число: Sing, Plur
  • Род: Masc, Fem, Neut
  • Время: Past, Pres, Fut
  • Наклонение: Ind, Imp
  • Залог: Act, Pass

Синтаксические отношения

Основные типы зависимостей:

  • root: Корень предложения
  • nsubj: Подлежащее
  • obj: Дополнение
  • obl: Обстоятельство
  • amod: Определение (прилагательное)
  • advmod: Обстоятельство (наречие)
  • case: Падежный маркер (предлог)

Файлы моделей

Модели автоматически загружаются в:

~/.cache/mawo_slovnet/models/
├── ner/                    # NER модель (2.2МБ)
├── morph/                  # Морфология (2.4МБ)
└── syntax/                 # Синтаксис (2.5МБ)

Или в директорию пакета:

mawo_slovnet/
├── slovnet_ner_news_v1.tar.neural.gz       # 2.2МБ
├── slovnet_morph_news_v1.tar.neural.gz     # 2.4МБ
└── slovnet_syntax_news_v1.tar.neural.gz    # 2.5МБ

Производительность

Скорость обработки

Модель Скорость Качество
NER ~1000 токенов/сек 95% F1
Морфология ~800 токенов/сек 97% accuracy
Синтаксис ~600 токенов/сек 92% UAS

На CPU (Intel i7), однопоточно

Использование памяти

Компонент Память
NER модель ~150МБ
Морф модель ~180МБ
Синтакс модель ~200МБ

Батч-обработка

from mawo_slovnet import NewsNERTagger

ner = NewsNERTagger()

# Обработка нескольких текстов
texts = [
    "Пушкин родился в Москве.",
    "Толстой жил в Ясной Поляне.",
    "Достоевский писал в Петербурге."
]

for text in texts:
    markup = ner(text)
    for span in markup.spans:
        print(f"{text}: {span.text} ({span.type})")

Интеграция с другими библиотеками

С mawo-pymorphy3

from mawo_slovnet import NewsMorphTagger
from mawo_pymorphy3 import create_analyzer

# SlovNet для быстрой обработки
morph_slovnet = NewsMorphTagger()

# pymorphy3 для детального анализа
morph_deep = create_analyzer()

text = "стали"
# Быстрый разбор
slovnet_result = morph_slovnet(text)

# Детальный анализ
for parse in morph_deep.parse(text):
    print(parse.tag, parse.normal_form)

С mawo-natasha

from mawo_slovnet import NewsNERTagger
from mawo_natasha import MAWODoc

ner = NewsNERTagger()
doc = MAWODoc("Пушкин жил в Москве")

# Обогащение документа NER-метками
markup = ner(doc.text)
doc.spans = markup.spans

Источники моделей

Модели основаны на:

  • SlovNet v0.6.0 от Alexander Kukushkin
  • Yandex Cloud Storage: Официальные предобученные модели
  • Архитектура: CNN-CRF с Navec embeddings
  • Обучение: Новостные корпуса (RIA, Lenta.ru, etc.)

Решение проблем

Модели не загружаются

# Попробуйте загрузить вручную
from mawo_slovnet import download_models
download_models(force=True)

Ошибка импорта

pip install --upgrade mawo-slovnet

Нехватка памяти

# Загружайте только нужные модели
from mawo_slovnet import NewsNERTagger  # Только NER

# Не импортируйте все сразу

Разработка

Настройка окружения

git clone https://github.com/mawo-ru/mawo-slovnet.git
cd mawo-slovnet
pip install -e ".[dev]"

Запуск тестов

pytest tests/

Благодарности

Основано на SlovNet от Alexander Kukushkin (github.com/natasha/slovnet).

Улучшения MAWO:

  • Автоматическая загрузка моделей
  • Offline-first архитектура
  • Гибридный режим (ML + rules)
  • Оптимизация памяти

Лицензия

Лицензия MIT - см. файл LICENSE.

Ссылки


Сделано с ❤️ командой MAWO

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mawo_slovnet-1.0.2.tar.gz (7.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mawo_slovnet-1.0.2-py3-none-any.whl (7.2 MB view details)

Uploaded Python 3

File details

Details for the file mawo_slovnet-1.0.2.tar.gz.

File metadata

  • Download URL: mawo_slovnet-1.0.2.tar.gz
  • Upload date:
  • Size: 7.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mawo_slovnet-1.0.2.tar.gz
Algorithm Hash digest
SHA256 41b34a37e43066608172960f46fdb9f7252e4cf2a5049b2ef99489ccc26fa4ec
MD5 fe7fef107800e7380c69ba65b760a7d5
BLAKE2b-256 ef219f7181d81a489d0d8ae46189ce1c3b44c83fca764a69610512a418624f33

See more details on using hashes here.

Provenance

The following attestation bundles were made for mawo_slovnet-1.0.2.tar.gz:

Publisher: publish.yml on mawo-ru/mawo-slovnet

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mawo_slovnet-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: mawo_slovnet-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 7.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mawo_slovnet-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d1a1f1cf4e734c31d77cc984439f2c3896a391fad9bc10bbe17547f060226733
MD5 12d80e4853030980094bba7e61b3f31c
BLAKE2b-256 bbda628fdb92a6686a1363be89208deb2c7c2720db33584eb173695b0c894b77

See more details on using hashes here.

Provenance

The following attestation bundles were made for mawo_slovnet-1.0.2-py3-none-any.whl:

Publisher: publish.yml on mawo-ru/mawo-slovnet

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page