galkinv42's picture
Update README.md
b062c09 verified
---
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 |