russian-ner / README.md
dnkdm's picture
Update README with new model info
47b9e43
---
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](https://huggingface.co/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](https://huggingface.co/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 название турнира |
| "ВТБ" | Сокращения могут не распознаваться |
| "пойти в яндекс" | Неформальное написание |
## 🚀 Как использовать
### Локальный запуск
```bash
# Клонировать репозиторий
git clone https://huggingface.co/spaces/YOUR_USERNAME/russian-ner
# Установить зависимости
pip install -r requirements.txt
# Запустить приложение
python app.py
```
### Пакетная обработка
1. Подготовьте CSV-файл с колонкой `text`:
```csv
text
"Иван Петров работает в Яндексе."
"Мария Сидорова живёт в Казани."
```
2. Или TXT-файл (каждая строка — отдельный текст):
```
Иван Петров работает в Яндексе.
Мария Сидорова живёт в Казани.
```
3. Загрузите файл во вкладке "Пакетная обработка"
## 🔒 Правила безопасного использования
⚠️ **ВАЖНО: Не вводите реальные персональные данные!**
- Это демонстрационное приложение
- Данные не сохраняются на сервере, но проходят через модели Hugging Face
- Для обработки конфиденциальных данных используйте локальный запуск
- Не используйте для обработки паспортных данных, медицинских записей и т.п.
## 📁 Структура проекта
```
russian-ner/
├── app.py # Точка входа приложения
├── config.py # Константы и настройки
├── processing.py # Логика NER-обработки
├── ui.py # Gradio интерфейс
├── requirements.txt # Зависимости Python
└── README.md # Документация (этот файл)
```
## 🛠️ Технологии
- **Gradio** — веб-интерфейс
- **Transformers** — работа с моделями NLP
- **PyTorch** — бэкенд для моделей
- **Pandas** — обработка табличных данных
## 📚 Ссылки
- [Hugging Face Transformers](https://huggingface.co/docs/transformers)
- [Gradio Documentation](https://gradio.app/docs/)
- [WikiNEuRal Paper](https://aclanthology.org/2021.findings-emnlp.215/)
## 📝 Лицензия
MIT License