russian-ner / README.md
dnkdm's picture
Update README with new model info
47b9e43

A newer version of the Gradio SDK is available: 6.6.0

Upgrade
metadata
title: Russian NER - Извлечение именованных сущностей
emoji: 🏷️
colorFrom: blue
colorTo: green
sdk: gradio
sdk_version: 6.4.0
app_file: app.py
pinned: false
license: mit

🏷️ Russian NER — Извлечение именованных сущностей

Веб-приложение для автоматического извлечения именованных сущностей (Named Entity Recognition) из текстов на русском языке.

📋 Описание задачи

Named Entity Recognition (NER) — это задача извлечения и классификации именованных сущностей в тексте. Приложение распознаёт следующие типы сущностей:

Тип Описание Примеры
PER Персоны (ФИО) Владимир Путин, Иван Петров
ORG Организации Яндекс, Сбербанк, МГУ
LOC Локации (места) Москва, Россия, Невский проспект
MISC Прочее Названия событий, продуктов и т.д.

🤖 Выбранные модели

Модель 1: WikiNEuRal (multilingual)

  • Hugging Face: Babelscape/wikineural-multilingual-ner
  • Архитектура: mBERT (multilingual BERT)
  • Почему выбрана:
    • Поддержка 9 языков, включая русский
    • Распознаёт все 4 типа сущностей (PER, ORG, LOC, MISC)
    • 457K+ загрузок — проверенная сообществом
    • Хорошо работает на текстах общей тематики

Модель 2: BERT Russian NER

  • Hugging Face: Gherman/bert-base-NER-Russian
  • Архитектура: BERT (multilingual, fine-tuned)
  • Почему выбрана:
    • Специально обучена для русского языка
    • Высокая точность на русских текстах
    • Альтернатива для сравнения результатов

✨ Функциональность

Базовые функции

  • ✅ Ввод текста с ограничением 2000 символов
  • ✅ Извлечение сущностей с указанием типа и уверенности
  • ✅ Визуальная подсветка сущностей в тексте (цветовая маркировка)
  • ✅ Блок примеров для быстрого тестирования
  • ✅ Корректная обработка ошибок

Расширенные функции (на "отлично")

  • Переключатель моделей — выбор из 2 моделей через Dropdown
  • Сравнение моделей — side-by-side результаты обеих моделей
  • Измерение latency — отображение времени обработки в миллисекундах
  • История запросов — последние 10 запросов с результатами
  • Пакетная обработка — загрузка CSV/TXT и выдача результатов таблицей

📊 Примеры работы

Вход:

Владимир Путин встретился с президентом Франции Эммануэлем Макроном в Москве для обсуждения вопросов безопасности.

Выход:

Текст Тип Описание Уверенность
Владимир Путин PER Персона (ФИО) 99.2%
Франции LOC Локация (место) 98.7%
Эммануэлем Макроном PER Персона (ФИО) 98.9%
Москве LOC Локация (место) 99.1%

Подсветка в тексте:

  • 🔵 Владимир Путин — PER
  • 🔵 Эммануэлем Макроном — PER
  • 🟠 Франции — LOC
  • 🟠 Москве — LOC

Вход:

Компания Яндекс открыла новый офис в Санкт-Петербурге рядом с Невским проспектом.

Выход:

Текст Тип Описание Уверенность
Яндекс ORG Организация 98.5%
Санкт-Петербурге LOC Локация (место) 99.3%
Невским проспектом LOC Локация (место) 97.8%

⚠️ Ограничения решения

Технические ограничения

  • CPU-режим: Приложение работает без GPU для совместимости с бесплатным Hugging Face Spaces
  • Лимит текста: Максимум 2000 символов на один запрос
  • Лимит пакетной обработки: Максимум 100 строк в файле
  • Время загрузки: Первый запрос может занять 30-60 секунд (загрузка модели)

Ограничения моделей

  • Модели обучены на Wikipedia и новостных текстах — могут хуже работать на сленге, диалектах
  • Редкие имена и новые организации могут не распознаваться
  • Сложные случаи (омонимия, сокращения) могут давать ошибки
  • MISC-категория может быть неточной

Примеры сложных случаев

Текст Проблема
"Петров выиграл Петрова" Омонимия: фамилия vs название турнира
"ВТБ" Сокращения могут не распознаваться
"пойти в яндекс" Неформальное написание

🚀 Как использовать

Локальный запуск

# Клонировать репозиторий
git clone https://huggingface.co/spaces/YOUR_USERNAME/russian-ner

# Установить зависимости
pip install -r requirements.txt

# Запустить приложение
python app.py

Пакетная обработка

  1. Подготовьте CSV-файл с колонкой text:
text
"Иван Петров работает в Яндексе."
"Мария Сидорова живёт в Казани."
  1. Или TXT-файл (каждая строка — отдельный текст):
Иван Петров работает в Яндексе.
Мария Сидорова живёт в Казани.
  1. Загрузите файл во вкладке "Пакетная обработка"

🔒 Правила безопасного использования

⚠️ ВАЖНО: Не вводите реальные персональные данные!

  • Это демонстрационное приложение
  • Данные не сохраняются на сервере, но проходят через модели Hugging Face
  • Для обработки конфиденциальных данных используйте локальный запуск
  • Не используйте для обработки паспортных данных, медицинских записей и т.п.

📁 Структура проекта

russian-ner/
├── app.py              # Точка входа приложения
├── config.py           # Константы и настройки
├── processing.py       # Логика NER-обработки
├── ui.py               # Gradio интерфейс
├── requirements.txt    # Зависимости Python
└── README.md           # Документация (этот файл)

🛠️ Технологии

  • Gradio — веб-интерфейс
  • Transformers — работа с моделями NLP
  • PyTorch — бэкенд для моделей
  • Pandas — обработка табличных данных

📚 Ссылки

📝 Лицензия

MIT License