Skip to content

Repository files navigation

Классификатор членов предложения

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

Описание

Приложение позволяет:

  • Автоматически определять члены предложения (подлежащее, сказуемое, определение, дополнение, обстоятельство)
  • Обрабатывать текст как в пакетном режиме, так и в интерактивном
  • Визуализировать результаты анализа через графический интерфейс (GUI)
  • Сохранять результаты обработки

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

├── src/
│   ├── back/                      # Бэкенд: логика анализа
│   │   ├── bert_onnx_inference.*  # ONNX-инференс модели BERT
│   │   ├── simple_tokenizer.*     # Токенизатор
│   │   ├── statistics.*           # Сбор статистики
│   │   ├── save_result.*          # Сохранение результатов
│   │   ├── text_splitter.*        # Разбиение текста на предложения
│   │   ├── unistring.*            # Работа с Unicode строками
│   │   ├── onnx_model.*           # Обёртка над ONNX моделью
│   │   └── cJSON.*                # JSON парсер (C библиотека)
│   └── front/                     # Фронтенд: GUI на Qt
│       ├── MainWindow.*           # Главное окно приложения
│       ├── InputPage.*            # Страница ввода текста
│       ├── ResultPage.*           # Страница результатов
│       ├── SearchPage.*           # Страница поиска
│       ├── LoadingPage.*          # Страница загрузки
│       ├── SearchFilterCore.*     # Логика фильтрации поиска
│       └── lib/                   # Библиотеки UI компонентов
│           ├── FlowLayout.*       # Поток layout для виджетов
│           ├── TextMarkupWidget.* # Виджет разметки текста
│           └── SearchResultsList.*# Список результатов поиска
├── modelling/                     # Обучение и подготовка модели
│   ├── main.py                    # CLI интерфейс для всех операций
│   ├── model.py                   # Архитектура модели (BERT + CRF)
│   ├── train.py                   # Скрипт обучения
│   ├── inference.py               # Скрипт инференса
│   ├── dataset.py                 # Классы датасетов
│   ├── config.py                  # Конфигурация и гиперпараметры
│   ├── metrics.py                 # Метрики качества
│   ├── prepare_tokenizer.py       # Подготовка токенизатора
│   ├── export_vocab.py            # Экспорт словаря токенов
│   ├── quantize_model.py          # Квантование ONNX модели
│   ├── analyze_attention.py       # Анализ внимания модели
│   ├── dataset_generator.py       # Генерация датасетов
│   └── data/                      # Датасеты для обучения
├── tests/                         # Юнит-тесты (Google Test)
│   ├── test_tokenizer.cpp         # Тесты токенизатора
│   └── test_statistics.cpp        # Тесты статистики
├── resources/                     # Ресурсы приложения
│   ├── app.svg                    # Иконка приложения
│   └── templates/                 # HTML шаблоны
├── CMakeLists.txt                 # Основной файл сборки CMake
├── compile_flags.txt              # Флаги компиляции для clangd
├── gui.cpp                        # Точка входа GUI приложения
└── tui.cpp                        # Точка входа TUI (консольная версия)

Требования

Для сборки C++ части:

  • CMake ≥ 3.16
  • C++17 совместимый компилятор (GCC, Clang, MSVC)
  • Qt6 (модули Core, Widgets)
  • ONNX Runtime (для работы с моделью)
  • Google Test (для тестов)

Для Python части (обучение модели):

  • Python ≥ 3.13
  • uv (менеджер пакетов, рекомендуется)
  • PyTorch ≥ 2.9
  • Transformers ≥ 4.57
  • ONNX Runtime ≥ 1.23
  • PyTorch CRF ≥ 0.7.2
  • NumPy ≥ 2.3
  • SciKit-Learn ≥ 1.8
  • Matplotlib ≥ 3.10
  • Seaborn ≥ 0.13
  • NLTK ≥ 3.9
  • tqdm ≥ 4.67

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

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

# Создание директории сборки
mkdir build && cd build

# Конфигурация
cmake ..

# Сборка
make

Запуск

Графический интерфейс (GUI)

./TextAnalyzer

Консольный интерфейс (TUI)

# TUI версия компилируется вместе с основным проектом через CMake
./TextAnalyzerTUI

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

Консольный режим

После запуска TUI версии:

  1. Введите текст для анализа
  2. Получите результат с разбивкой по членам предложения
  3. Введите пустую строку для выхода

Графический интерфейс

GUI предоставляет:

  • Страница ввода — ввод текста для анализа
  • Страница результатов — отображение найденных членов предложения
  • Страница поиска — поиск и фильтрация по типам членов предложения

Обучение модели

Для обучения собственной модели перейдите в директорию modelling/:

cd modelling

# Установка зависимостей через uv (рекомендуется)
uv sync

# Или через pip
pip install -e .

# Обучение модели
python main.py --train

# Интерактивный режим предсказания
python main.py --predict

# Обработка файла
python main.py --file input.txt --output output.txt

# Показать информацию о проекте
python main.py --info

# Показать список меток
python main.py --labels

# Статистика датасета
python main.py --stats

# Оценка модели на тестовом датасете
python main.py --evaluate --test_data path/to/test/data --output_dir results

Основные скрипты Python

Скрипт Описание
main.py Главный скрипт с CLI для обучения, инференса и оценки
model.py Архитектура нейронной сети (BERT + CRF)
train.py Функции и цикл обучения модели
inference.py Загрузка модели и предсказание на новых данных
dataset.py Классы PyTorch Dataset для загрузки и обработки данных
config.py Конфигурация проекта (пути, гиперпараметры, константы)
metrics.py Метрики качества (accuracy, precision, recall, F1, confusion matrix)
export_vocab.py Экспорт словаря токенов для C++ токенизатора
quantize_model.py Квантование ONNX модели для ускорения инференса
prepare_tokenizer.py Подготовка и сохранение токенизатора
analyze_attention.py Визуализация и анализ внимания (attention weights)
dataset_generator.py Утилиты для генерации и аугментации датасетов

Датасеты

В директории modelling/data/ находятся следующие файлы:

Файл Описание
dataset.json Основной датасет для обучения
dataset_latest.json Последняя версия датасета
dataset_old.json Старая версия датасета (для сравнения)
dataset_short.json Короткая версия для быстрого тестирования
news.json Датасет новостных текстов
tests/ Тестовые данные для валидации

Тестирование

cd build
cmake .. -DBUILD_TESTS=ON
cmake --build .
ctest

Тесты C++

Файл Описание
test_tokenizer.cpp Юнит-тесты для простого токенизатора
test_statistics.cpp Юнит-тесты для модуля статистики

GitHub Actions

Проект использует GitHub Actions для автоматической сборки и тестирования:

Workflow Описание
build.yml Автоматическая сборка проекта при push и pull request

Поддерживаемые члены предложения

Тип (EN) Тип (RU) Описание
SUBJECT Подлежащее Главный член предложения, обозначающий предмет речи
PREDICATE Сказуемое Член предложения, обозначающий действие или состояние
DEFINITION Определение Член предложения, характеризующий предмет
ADDITION Дополнение Член предложения, обозначающий объект действия
ADVERBIAL Обстоятельство Член предложения, указывающий на место, время, образ действия
O Не член предложения Слова, не являющиеся членами предложения

vocab.txt

Словарь токенов для токенизатора (формат BERT). Расположен в корне проекта. Используется C++ токенизатором для совместимости с Python моделью. Для экспорта словаря из модели используйте:

cd modelling
python export_vocab.py

Конфигурация сборки

Переменные CMake

Переменная Описание Значение по умолчанию
CMAKE_BUILD_TYPE Тип сборки Release
BUILD_TESTS Сборка тестов OFF
Qt6_DIR Путь к Qt6 автоопределение

Опции компилятора

  • MSVC: /W3, /O2 (Release), /Od (Debug)
  • GCC/Clang: -std=c++17, -O2 (Release)

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages