Spaces:
Sleeping
Sleeping
| 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 |