Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#937

Как спроектировать систему Intent Detection для чат-бота на русском языке (классика + LLM)?

Краткий тезис

Проектирование системы Intent Detection для русскоязычного чат-бота требует комбинации классических методов (быстрые и дешёвые интенты) и LLM-подхода (гибкие и сложные сценарии). Отказ от единого подхода в пользу гибридной архитектуры позволяет достичь оптимального баланса скорости, точности и стоимости. В разборе рассматриваются три архитектуры: чистый классификатор (fastText/BERT), LLM с few-shot промптингом и гибридная схема с роутером. Особое внимание уделяется русскоязычным ограничениям (морфология, редкие интенты) и метрикам качества.

-----|-------|--------|---------------------| | FastText | Очень быстрая, работает с морфологией русского (субсловные n-граммы), поддерживает OOV | Нет контекста, чувствительна к синонимии | «Закажи пиццу» → intent_order | | BERT (RuBERT / LaBSE) | Учитывает контекст, лучше обрабатывает перефразировки | Требует GPU, latency >100 мс | «Не могли бы вы подсказать, как оформить заказ?» → intent_order |

Рекомендация: для русского языка RuBERT от DeepPavlov даёт F1 ~0.95 при 50 классах, но fastText (cbow, lr=0.5, dim=200) часто достаточен для 10–20 интентов.

1.3. Архитектура пайплайна

Пользовательский запрос → Токенизация (Natasha / spaCy) → Эмбеддинг → Классификатор (softmax) → Постобработка (confidence threshold) → Выбор сценария

Код примера (fastText):

import fasttext

# Обучение на русских фразах
model = fasttext.train_supervised("train_ru.txt", lr=0.5, epoch=25, wordNgrams=2)
# Предсказание
labels, probs = model.predict("Хочу вернуть товар", k=1)

Типичный порог confidence = 0.7; если ниже → отправляем на fallback (LLM или оператор).


2. LLM-подход: промптинг + few-shot

2.1. Когда использовать LLM

  • Новые или редкие интенты без размеченных данных;
  • Сложные намерения, требующие логики (например, «Мне нужно отменить бронь, если не прошло 24 часа»);
  • Многоязычный бот – одна LLM покрывает несколько языков.

2.2. Промптинг для Intent Detection

Структура промпта:

Ты – классификатор намерений чат-бота. Определи intent (строго один из списка) для запроса пользователя на русском языке.
Список intent: [order, cancel, support, feedback].
Примеры:
- "Закажи доставку" → order
- "У меня проблема с оплатой" → support
- "Оставить отзыв" → feedback
Запрос: {user_utterance}
Intent:

Рекомендации:

  • Используй few-shot (3–5 примеров на интент);
  • Добавь format enforcement: output only the intent label;
  • Для русских запросов проявляет себя хорошо GPT-4o или YandexGPT (более дешёвый).

2.3. Ограничения

  • Стоимость: каждый запрос платный;
  • Латентность: 1–3 секунды в среднем;
  • Нестабильность: может выдать маловероятный intent при двусмысленности.

3. Гибрид: классификатор для быстрых интентов, LLM для сложных

3.1. Архитектура роутера (Two-stage)

Запрос → Классификатор (fastText) → confidence ≥0.8 → intent найден → сценарий
                                      ↓ confidence <0.8
                               → LLM (few-shot) → intent
                                      ↓ unknown
                               → Оператор / fallback

Схема:

[Пользователь] → [Router] → [High confidence] → [Action: order, cancel...]
                          → [Low confidence]  → [LLM Intent Classifier] → [Intent]
                                              → [Still unknown] → [Transfer to human]

3.2. Преимущества гибрида

  • 80% запросов обрабатываются быстрым классификатором (латентность <50 мс);
  • Оставшиеся 20% – сложные/новые – идут на LLM (точность выше 95%);
  • Снижение стоимости: LLM вызывается только при необходимости.

3.3. Выбор порогов

Пороги динамичны: для бизнес-критических интентов (например, «отмена заказа с возвратом денег») порог повышают до 0.9, для информационных – 0.7.


4. Измерение качества

4.1. Ключевые метрики

МетрикаФормулаИнтерпретация для Intent Detection
Accuracy(TP+TN)/(все)Базовая, но не подходит для несбалансированных классов
Precision (точность)TP/(TP+FP)Насколько редко система ошибается, назначая intent
Recall (полнота)TP/(TP+FN)Как часто система находит нужный intent
F1-microгармоническое среднее precision/recallРекомендуется для multi-class
Confidence CalibrationECE (Expected Calibration Error)Важно для роутерных порогов

4.2. Разметка русскоязычного датасета

  • Используй Active Learning: начинай с 50 примеров на интент, доразмечай сложные случаи;
  • Учитывай регистр, падежи, слова-паразиты («ну», «типа»);
  • Пример датасета в формате JSON:
{"text": "Подскажите, как отменить заказ?", "intent": "cancel"}

4.3. Тестирование на Offline + Online

  • Offline: разделение на train/test (80/20), кросс-валидация по пользователям;
  • Online: A/B-тест гибрида против классического подхода (метрика: успешное разрешение диалога, FCR).

5. Пет-проект для закрепления

Задача: Разработать чат-бот для пиццерии с 5 интентами (order, change_order, cancel, feedback, help) на русском языке, используя гибридную архитектуру.

Инструменты: Python, fastText, OpenAI API (или YandexGPT), FastAPI, Docker.

Шаги:

  1. Собрать 200 фраз на каждый интент (например, с помощью краудсорсинга или генерации синонимов);
  2. Обучить fastText на 80% данных;
  3. Написать роутер с порогом confidence = 0.8;
  4. Для low confidence запросов вызывать LLM через промпт с few-shot (3 примера на интент);
  5. Развернуть как REST-сервис на FastAPI;
  6. Измерить метрики (F1, latency, cost per request).

Ожидаемый результат: Кириллический чат-бот, который корректно определяет intent в 95% случаев, при этом 80% запросов обрабатывается за <50 мс и без затрат на LLM.


Связь с другими вопросами

ВопросТема
914Выбор эмбеддингов для классификатора
917Предобработка текста для NLP

Навигация

  • Предыдущий: 936
  • Следующий: 938
  • Индекс: 00. Индекс разборов