| | --- |
| | library_name: transformers |
| | tags: [] |
| | --- |
| | |
| | # RuModernBERT Intent Classifier |
| |
|
| | Данная модель представляет собой классификатор интентов на базе архитектуры RuModernBERT-base, специально оптимизированный для работы в составе диалоговых голосовых систем на русском языке. |
| |
|
| | ### Описание режима |
| |
|
| | Модель работает в режиме классификации без учета контекста. Это означает, что для предсказания намерения используется исключительно последняя реплика пользователя. Модель не требует передачи истории диалога или предыдущих ответов системы, что обеспечивает: |
| |
|
| | * Минимальные вычислительные затраты при инференсе. |
| | * Возможность использования в качестве первого слоя обработки (fast-path) для определения простых команд. |
| | * Независимость от состояния диалога (stateless). |
| |
|
| | --- |
| |
|
| | ## Характеристики модели |
| |
|
| | * **Базовая модель:** deepvk/RuModernBERT-base |
| | * **Тип задачи:** Классификация последовательностей (Multi-class Classification) |
| | * **Основные классы:** GREETING (приветствие), THANKS (благодарность), FAREWELL (прощание) и другие системные токены. |
| | * **Функция потерь:** Focal Loss (использована для коррекции дисбаланса классов в обучающей выборке). |
| |
|
| | --- |
| |
|
| | ## Инструкция по использованию (Inference) |
| |
|
| | ```python |
| | from transformers import AutoTokenizer, AutoModelForSequenceClassification |
| | import torch |
| | import torch.nn.functional as F |
| | |
| | # Загрузка модели и токенизатора |
| | model_name = "galkinv42/RuModernBERT-Intent-Classifier" |
| | tokenizer = AutoTokenizer.from_pretrained("deepvk/RuModernBERT-base") |
| | model = AutoModelForSequenceClassification.from_pretrained(model_name) |
| | |
| | def predict_intent(user_input): |
| | # Токенизация без добавления контекста |
| | inputs = tokenizer( |
| | user_input, |
| | return_tensors="pt", |
| | truncation=True, |
| | max_length=512 |
| | ) |
| | |
| | model.eval() |
| | with torch.no_grad(): |
| | outputs = model(**inputs) |
| | |
| | # Расчет вероятностей |
| | probabilities = F.softmax(outputs.logits, dim=-1) |
| | confidence, class_idx = torch.max(probabilities, dim=-1) |
| | |
| | label = model.config.id2label[class_idx.item()] |
| | return label, confidence.item() |
| | |
| | # Пример вызова |
| | intent, score = predict_intent("Спасибо за помощь, всего доброго") |
| | print(f"Интент: {intent}, Уверенность: {score:.4f}") |
| | |
| | ``` |
| |
|
| | --- |
| |
|
| | ## Обучение |
| |
|
| | 1. **Данные:** Набор данных включает реальные логи диалогов, дополненные синтетическими примерами для повышения точности на минорных классах (благодарности и прощания). |
| | 2. **Аугментация:** В процессе обучения применялась техника RandomWordAug (перестановка слов) для повышения устойчивости модели к вариативности естественной речи. |
| | 3. **Методология:** Валидация проводилась с использованием StratifiedGroupKFold по идентификаторам диалогов, что исключает попадание фраз из одного диалога одновременно в обучающую и валидационную выборки. |
| |
|
| | --- |
| |
|
| | ## Ограничения |
| |
|
| | * Модель не учитывает предыдущие реплики. В случаях, когда интент сильно зависит от контекста (например, краткие ответы "да", "нет", "хорошо"), точность может снижаться. |
| | * Предназначена исключительно для русского языка. |
| |
|
| | --- |
| |
|
| | ### Метрики по классам |
| |
|
| | | Класс | Precision | Recall | F1-Score | Support | |
| | | --- | --- | --- | --- | --- | |
| | | `<ACTION>` | 0.85 | 0.66 | 0.74 | 87 | |
| | | `<FAREWELL>` | 0.91 | 0.83 | 0.87 | 24 | |
| | | `<GREETING>` | 0.92 | 0.96 | 0.94 | 24 | |
| | | `<NOISE>` | 0.68 | 0.59 | 0.63 | 93 | |
| | | `<QUESTION>` | 0.85 | 0.91 | 0.88 | 188 | |
| | | `<STATEMENT>` | 0.62 | 0.74 | 0.67 | 97 | |
| | | `<THANKS>` | 1.00 | 0.67 | 0.80 | 3 | |