Stedjey/VKR_news_classification_system

Jupyter Notebook

0

18 commits

updated Mar 26, 2026

See the code

README

VKR News Classification System

Информационная система автоматической классификации русскоязычных новостных текстов с применением методов искусственного интеллекта.

Проект выполнен в рамках выпускной квалификационной работы и объединяет полный цикл обработки новостных данных: от сбора и предобработки корпуса до обучения моделей, оценки качества и развертывания пользовательских интерфейсов для практического применения.

О проекте

Цель проекта - разработать интеллектуальную систему, способную автоматически определять тематику русскоязычного новостного текста, а также выполнять дополнительный анализ содержимого:

  • классификацию новости по тематической категории;
  • анализ тональности текста;
  • определение доминирующей эмоции;
  • выделение наиболее значимых слов, повлиявших на решение модели;
  • сохранение результатов обработки для дальнейшего анализа.

Система ориентирована на работу с русскоязычными новостными материалами и может использоваться в задачах медиамониторинга, маршрутизации новостей, построения аналитических панелей и поддержки редакционных процессов.

Основные возможности

  • Автоматическая классификация новостей по 17 категориям.
  • Использование дообученной трансформерной модели RuBERT для инференса.
  • Веб-интерфейс на Streamlit для интерактивной проверки текстов.
  • Telegram-бот для быстрого анализа новостей в мессенджере.
  • Анализ тональности текста на русском языке.
  • Анализ эмоций текста.
  • Выделение ключевых слов на основе градиентной важности токенов.
  • Сохранение результатов запросов в SQLite.
  • Jupyter-ноутбуки с экспериментами по классическим моделям, нейросетям, трансформерам, тематическому моделированию и анализу тональности.

Категории классификации

Финальная модель обучена распознавать следующие классы:

  • Бизнес
  • Бывший СССР
  • Дом
  • Забота о себе
  • Из жизни
  • Интернет и СМИ
  • Культура
  • Мир
  • Моя страна
  • Наука и техника
  • Путешествия
  • Россия
  • Силовые структуры
  • Спорт
  • Среда обитания
  • Ценности
  • Экономика

Данные и исследовательская часть

В проекте используется корпус русскоязычных новостей Lenta.ru, дополненный этапами очистки, фильтрации и балансировки.

По материалам ноутбуков проекта:

  • исходный корпус содержит 1 189 509 новостных записей;
  • после очистки удаляются записи без текста или метки темы;
  • в обучающую выборку включаются темы, содержащие не менее 5000 публикаций;
  • далее формируется сбалансированный набор данных: до 10 000 текстов на каждую категорию.

Для экспериментов в проекте рассмотрены несколько семейств моделей:

  • классические алгоритмы машинного обучения;
  • нейросетевые архитектуры LSTM, CNN, FastText;
  • трансформерные модели на базе RuBERT;
  • тематическое моделирование BERTopic и Top2Vec;
  • анализ тональности и эмоций.

Финальная модель

В качестве основной модели системы используется дообученный DeepPavlov/rubert-base-cased, сохраненный в директории rubert_final_model/.

Метрики качества по результатам ноутбука notebooks/3_transformers.ipynb:

  • Accuracy: 0.8961
  • Macro F1-score: 0.8951
  • Weighted F1-score: 0.8956
  • ROC AUC (macro): 0.9944

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

Архитектура решения

Логика системы строится по следующему конвейеру:

  1. Сбор новостных данных из открытых источников.
  2. Предобработка и очистка корпуса.
  3. Формирование сбалансированного датасета.
  4. Обучение и сравнение нескольких классов моделей.
  5. Выбор и сохранение лучшей модели.
  6. Развертывание прикладных интерфейсов для конечного пользователя.
  7. Сохранение результатов анализа в локальную базу данных.

Интерфейсы системы работают поверх одной и той же дообученной модели и используют единый энкодер меток классов.

Технологический стек

  • Python
  • PyTorch
  • Transformers
  • scikit-learn
  • pandas, numpy, scipy
  • Streamlit
  • pyTelegramBotAPI
  • SQLite
  • aiohttp
  • BeautifulSoup
  • Jupyter Notebook
  • Docker / Docker Compose

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

Ниже приведена структура репозитория в понятном виде, близком к схеме проекта:

VKR_news_classification/
|
|-- app/                                  # Основной прикладной код системы
|   |-- bot.py                            # Telegram-бот для классификации текстов
|   `-- streamlit_app.py                  # Веб-интерфейс на Streamlit
|
|-- notebooks/                            # Ноутбуки с исследованиями и обучением моделей
|   |-- 1_base_models.ipynb               # Базовые модели классификации
|   |-- 2_neural_models.ipynb             # Нейросетевые модели
|   |-- 3_transformers.ipynb              # Трансформерные модели и RuBERT
|   |-- 4_topic_modeling.ipynb            # Тематическое моделирование
|   |-- 5_sentiment_analysis.ipynb        # Анализ тональности и эмоций
|   `-- analysis.ipynb                    # Дополнительный анализ данных
|
|-- scripts/                              # Служебные скрипты подготовки данных и обучения
|   |-- parse_lenta_ru.py                 # Парсинг новостных данных с Lenta.ru
|   |-- preprocessing.py                  # Очистка и балансировка датасета
|   `-- rubert_train.py                   # Скрипт обучения финальной модели RuBERT
|
|-- rubert_final_model/                   # Дообученная модель RuBERT и ее конфигурация
|   |-- config.json                       # Конфигурация модели
|   |-- model.safetensors                 # Весовые параметры модели (не добавлен в GitHub из-за большого размера)
|   |-- special_tokens_map.json           # Специальные токены
|   |-- tokenizer.json                    # Файл токенизатора
|   |-- tokenizer_config.json             # Конфигурация токенизатора
|   |-- training_args.bin                 # Параметры обучения
|   `-- vocab.txt                         # Словарь токенизатора
|
|-- rubert_label_encoder.pkl              # Кодировщик категорий
|-- requirements.txt                      # Основные зависимости для запуска приложения
|-- requirements-research.txt             # Дополнительные зависимости для ноутбуков
|-- Dockerfile                            # Сборка контейнера приложения
|-- docker-compose.yml                    # Конфигурация запуска контейнера
|-- compose.sh                            # Скрипт пересборки и запуска Docker
|-- .dockerignore                         # Исключения для Docker build context
`-- README.md                             # Документация по проекту

Примечание: на исходной схеме проекта фигурирует create_db.py, однако в текущей версии репозитория инициализация SQLite встроена непосредственно в app/bot.py и app/streamlit_app.py.

Быстрый запуск

1. Клонирование репозитория

git clone https://github.com/Stedjey/VKR_news_classification_system.git
cd VKR_news_classification_system

2. Создание виртуального окружения

python -m venv .venv
source .venv/bin/activate

Для Windows:

.venv\Scripts\activate

3. Установка зависимостей

Для запуска приложения и основных скриптов:

pip install -r requirements.txt

Если планируется работа с исследовательскими ноутбуками и дополнительными экспериментами:

pip install -r requirements-research.txt

4. Запуск Streamlit-интерфейса

Из корня проекта:

streamlit run app/streamlit_app.py

После запуска интерфейс будет доступен по адресу http://localhost:8501.

5. Запуск Telegram-бота

export TELEGRAM_BOT_TOKEN=your_token_here
python app/bot.py

Для Windows PowerShell:

$env:TELEGRAM_BOT_TOKEN="your_token_here"
python app/bot.py

Токен Telegram-бота вынесен в переменную окружения TELEGRAM_BOT_TOKEN.

Запуск в Docker

1. С переменной окружения

Linux/macOS:

export TELEGRAM_BOT_TOKEN=your_token_here
docker compose up --build

Windows PowerShell:

$env:TELEGRAM_BOT_TOKEN="your_token_here"
docker compose up --build

2. Через вспомогательный скрипт

bash compose.sh

После запуска:

  • Streamlit будет доступен по адресу http://localhost:8501;
  • базы SQLite будут сохраняться в каталоге db/;
  • кэш моделей Hugging Face будет сохраняться в каталоге hf-cache/.

Примечание: при первом запуске контейнеру потребуется доступ в интернет, чтобы скачать модели для анализа тональности и эмоций.

Пользовательские интерфейсы

Streamlit-приложение

Веб-интерфейс позволяет:

  • ввести произвольный новостной текст;
  • получить предсказанную категорию;
  • посмотреть уверенность модели;
  • увидеть ключевые слова, повлиявшие на решение;
  • получить тональность и эмоцию текста;
  • сохранить результат анализа в локальную базу SQLite.

Telegram-бот

Бот предоставляет аналогичные возможности через Telegram:

  • принимает текстовое сообщение;
  • возвращает категорию новости;
  • показывает вероятность предсказания;
  • определяет тональность и эмоцию;
  • сохраняет историю запросов в bot_messages.db.

Исследовательские ноутбуки

Ноутбуки в каталоге notebooks/ отражают исследовательскую часть дипломной работы:

Практическая ценность проекта

Разработанная система может применяться для:

  • автоматической рубрикации новостей;
  • ускорения работы редакторов и аналитиков;
  • мониторинга информационной повестки;
  • тематической агрегации новостных потоков;
  • построения аналитических сервисов на основе текстов СМИ;
  • изучения эмоционального и тонального фона публикаций.

Ограничения и направления развития

Текущая версия проекта имеет ряд ограничений:

  • система ориентирована на русскоязычные тексты;
  • максимальная длина обрабатываемого текста ограничена токенизатором модели;
  • часть инфраструктурных файлов репозитория требует синхронизации с текущей структурой проекта;
  • для промышленного использования необходимо вынести секреты и конфигурацию в переменные окружения.

В дальнейшем проект можно расширить за счет:

  • REST API для интеграции с внешними системами;
  • пакетной обработки новостных потоков;
  • дообучения на более широком корпусе;
  • сравнения с современными русскоязычными LLM и энкодерными моделями;
  • развертывания в облачной инфраструктуре;
  • автоматического обновления модели на новых данных.

Автор

Проект разработан в рамках ВКР на тему:

«Разработка информационной системы автоматической классификации русскоязычных новостных текстов с применением методов искусственного интеллекта»

Если вы используете данный репозиторий в учебных или исследовательских целях, рекомендуется ссылаться на него как на часть выпускной квалификационной работы по тематике интеллектуального анализа текстов и автоматической классификации новостей.

Stedjey/VKR_news_classification_system

Jupyter Notebook

0

18 commits

updated Mar 26, 2026

See the code

README

VKR News Classification System

Информационная система автоматической классификации русскоязычных новостных текстов с применением методов искусственного интеллекта.

Проект выполнен в рамках выпускной квалификационной работы и объединяет полный цикл обработки новостных данных: от сбора и предобработки корпуса до обучения моделей, оценки качества и развертывания пользовательских интерфейсов для практического применения.

О проекте

Цель проекта - разработать интеллектуальную систему, способную автоматически определять тематику русскоязычного новостного текста, а также выполнять дополнительный анализ содержимого:

  • классификацию новости по тематической категории;
  • анализ тональности текста;
  • определение доминирующей эмоции;
  • выделение наиболее значимых слов, повлиявших на решение модели;
  • сохранение результатов обработки для дальнейшего анализа.

Система ориентирована на работу с русскоязычными новостными материалами и может использоваться в задачах медиамониторинга, маршрутизации новостей, построения аналитических панелей и поддержки редакционных процессов.

Основные возможности

  • Автоматическая классификация новостей по 17 категориям.
  • Использование дообученной трансформерной модели RuBERT для инференса.
  • Веб-интерфейс на Streamlit для интерактивной проверки текстов.
  • Telegram-бот для быстрого анализа новостей в мессенджере.
  • Анализ тональности текста на русском языке.
  • Анализ эмоций текста.
  • Выделение ключевых слов на основе градиентной важности токенов.
  • Сохранение результатов запросов в SQLite.
  • Jupyter-ноутбуки с экспериментами по классическим моделям, нейросетям, трансформерам, тематическому моделированию и анализу тональности.

Категории классификации

Финальная модель обучена распознавать следующие классы:

  • Бизнес
  • Бывший СССР
  • Дом
  • Забота о себе
  • Из жизни
  • Интернет и СМИ
  • Культура
  • Мир
  • Моя страна
  • Наука и техника
  • Путешествия
  • Россия
  • Силовые структуры
  • Спорт
  • Среда обитания
  • Ценности
  • Экономика

Данные и исследовательская часть

В проекте используется корпус русскоязычных новостей Lenta.ru, дополненный этапами очистки, фильтрации и балансировки.

По материалам ноутбуков проекта:

  • исходный корпус содержит 1 189 509 новостных записей;
  • после очистки удаляются записи без текста или метки темы;
  • в обучающую выборку включаются темы, содержащие не менее 5000 публикаций;
  • далее формируется сбалансированный набор данных: до 10 000 текстов на каждую категорию.

Для экспериментов в проекте рассмотрены несколько семейств моделей:

  • классические алгоритмы машинного обучения;
  • нейросетевые архитектуры LSTM, CNN, FastText;
  • трансформерные модели на базе RuBERT;
  • тематическое моделирование BERTopic и Top2Vec;
  • анализ тональности и эмоций.

Финальная модель

В качестве основной модели системы используется дообученный DeepPavlov/rubert-base-cased, сохраненный в директории rubert_final_model/.

Метрики качества по результатам ноутбука notebooks/3_transformers.ipynb:

  • Accuracy: 0.8961
  • Macro F1-score: 0.8951
  • Weighted F1-score: 0.8956
  • ROC AUC (macro): 0.9944

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

Архитектура решения

Логика системы строится по следующему конвейеру:

  1. Сбор новостных данных из открытых источников.
  2. Предобработка и очистка корпуса.
  3. Формирование сбалансированного датасета.
  4. Обучение и сравнение нескольких классов моделей.
  5. Выбор и сохранение лучшей модели.
  6. Развертывание прикладных интерфейсов для конечного пользователя.
  7. Сохранение результатов анализа в локальную базу данных.

Интерфейсы системы работают поверх одной и той же дообученной модели и используют единый энкодер меток классов.

Технологический стек

  • Python
  • PyTorch
  • Transformers
  • scikit-learn
  • pandas, numpy, scipy
  • Streamlit
  • pyTelegramBotAPI
  • SQLite
  • aiohttp
  • BeautifulSoup
  • Jupyter Notebook
  • Docker / Docker Compose

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

Ниже приведена структура репозитория в понятном виде, близком к схеме проекта:

VKR_news_classification/
|
|-- app/                                  # Основной прикладной код системы
|   |-- bot.py                            # Telegram-бот для классификации текстов
|   `-- streamlit_app.py                  # Веб-интерфейс на Streamlit
|
|-- notebooks/                            # Ноутбуки с исследованиями и обучением моделей
|   |-- 1_base_models.ipynb               # Базовые модели классификации
|   |-- 2_neural_models.ipynb             # Нейросетевые модели
|   |-- 3_transformers.ipynb              # Трансформерные модели и RuBERT
|   |-- 4_topic_modeling.ipynb            # Тематическое моделирование
|   |-- 5_sentiment_analysis.ipynb        # Анализ тональности и эмоций
|   `-- analysis.ipynb                    # Дополнительный анализ данных
|
|-- scripts/                              # Служебные скрипты подготовки данных и обучения
|   |-- parse_lenta_ru.py                 # Парсинг новостных данных с Lenta.ru
|   |-- preprocessing.py                  # Очистка и балансировка датасета
|   `-- rubert_train.py                   # Скрипт обучения финальной модели RuBERT
|
|-- rubert_final_model/                   # Дообученная модель RuBERT и ее конфигурация
|   |-- config.json                       # Конфигурация модели
|   |-- model.safetensors                 # Весовые параметры модели (не добавлен в GitHub из-за большого размера)
|   |-- special_tokens_map.json           # Специальные токены
|   |-- tokenizer.json                    # Файл токенизатора
|   |-- tokenizer_config.json             # Конфигурация токенизатора
|   |-- training_args.bin                 # Параметры обучения
|   `-- vocab.txt                         # Словарь токенизатора
|
|-- rubert_label_encoder.pkl              # Кодировщик категорий
|-- requirements.txt                      # Основные зависимости для запуска приложения
|-- requirements-research.txt             # Дополнительные зависимости для ноутбуков
|-- Dockerfile                            # Сборка контейнера приложения
|-- docker-compose.yml                    # Конфигурация запуска контейнера
|-- compose.sh                            # Скрипт пересборки и запуска Docker
|-- .dockerignore                         # Исключения для Docker build context
`-- README.md                             # Документация по проекту

Примечание: на исходной схеме проекта фигурирует create_db.py, однако в текущей версии репозитория инициализация SQLite встроена непосредственно в app/bot.py и app/streamlit_app.py.

Быстрый запуск

1. Клонирование репозитория

git clone https://github.com/Stedjey/VKR_news_classification_system.git
cd VKR_news_classification_system

2. Создание виртуального окружения

python -m venv .venv
source .venv/bin/activate

Для Windows:

.venv\Scripts\activate

3. Установка зависимостей

Для запуска приложения и основных скриптов:

pip install -r requirements.txt

Если планируется работа с исследовательскими ноутбуками и дополнительными экспериментами:

pip install -r requirements-research.txt

4. Запуск Streamlit-интерфейса

Из корня проекта:

streamlit run app/streamlit_app.py

После запуска интерфейс будет доступен по адресу http://localhost:8501.

5. Запуск Telegram-бота

export TELEGRAM_BOT_TOKEN=your_token_here
python app/bot.py

Для Windows PowerShell:

$env:TELEGRAM_BOT_TOKEN="your_token_here"
python app/bot.py

Токен Telegram-бота вынесен в переменную окружения TELEGRAM_BOT_TOKEN.

Запуск в Docker

1. С переменной окружения

Linux/macOS:

export TELEGRAM_BOT_TOKEN=your_token_here
docker compose up --build

Windows PowerShell:

$env:TELEGRAM_BOT_TOKEN="your_token_here"
docker compose up --build

2. Через вспомогательный скрипт

bash compose.sh

После запуска:

  • Streamlit будет доступен по адресу http://localhost:8501;
  • базы SQLite будут сохраняться в каталоге db/;
  • кэш моделей Hugging Face будет сохраняться в каталоге hf-cache/.

Примечание: при первом запуске контейнеру потребуется доступ в интернет, чтобы скачать модели для анализа тональности и эмоций.

Пользовательские интерфейсы

Streamlit-приложение

Веб-интерфейс позволяет:

  • ввести произвольный новостной текст;
  • получить предсказанную категорию;
  • посмотреть уверенность модели;
  • увидеть ключевые слова, повлиявшие на решение;
  • получить тональность и эмоцию текста;
  • сохранить результат анализа в локальную базу SQLite.

Telegram-бот

Бот предоставляет аналогичные возможности через Telegram:

  • принимает текстовое сообщение;
  • возвращает категорию новости;
  • показывает вероятность предсказания;
  • определяет тональность и эмоцию;
  • сохраняет историю запросов в bot_messages.db.

Исследовательские ноутбуки

Ноутбуки в каталоге notebooks/ отражают исследовательскую часть дипломной работы:

Практическая ценность проекта

Разработанная система может применяться для:

  • автоматической рубрикации новостей;
  • ускорения работы редакторов и аналитиков;
  • мониторинга информационной повестки;
  • тематической агрегации новостных потоков;
  • построения аналитических сервисов на основе текстов СМИ;
  • изучения эмоционального и тонального фона публикаций.

Ограничения и направления развития

Текущая версия проекта имеет ряд ограничений:

  • система ориентирована на русскоязычные тексты;
  • максимальная длина обрабатываемого текста ограничена токенизатором модели;
  • часть инфраструктурных файлов репозитория требует синхронизации с текущей структурой проекта;
  • для промышленного использования необходимо вынести секреты и конфигурацию в переменные окружения.

В дальнейшем проект можно расширить за счет:

  • REST API для интеграции с внешними системами;
  • пакетной обработки новостных потоков;
  • дообучения на более широком корпусе;
  • сравнения с современными русскоязычными LLM и энкодерными моделями;
  • развертывания в облачной инфраструктуре;
  • автоматического обновления модели на новых данных.

Автор

Проект разработан в рамках ВКР на тему:

«Разработка информационной системы автоматической классификации русскоязычных новостных текстов с применением методов искусственного интеллекта»

Если вы используете данный репозиторий в учебных или исследовательских целях, рекомендуется ссылаться на него как на часть выпускной квалификационной работы по тематике интеллектуального анализа текстов и автоматической классификации новостей.