File size: 4,962 Bytes
c19ab85
 
 
 
 
ab5d35b
c19ab85
ab5d35b
c19ab85
ab5d35b
c19ab85
ab5d35b
c19ab85
ab5d35b
 
 
c19ab85
ab5d35b
c19ab85
ab5d35b
c19ab85
ab5d35b
 
 
 
c19ab85
ab5d35b
c19ab85
ab5d35b
 
 
 
 
 
 
 
 
b062c09
ab5d35b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c19ab85
ab5d35b
c19ab85
ab5d35b
c19ab85
ab5d35b
 
 
c19ab85
ab5d35b
c19ab85
ab5d35b
c19ab85
ab5d35b
 
c19ab85
ab5d35b
c19ab85
61ea059
 
 
 
3dc0f35
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
---
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 |