Визначення намірів для чат-бота: таксономія, модель, моніторинг

Чат-бот переводить на оператора там, де питання можна закрити самому, — і ви втрачаєте клієнтів. Ми налаштовуємо визначення намірів під ключ: збираємо таксономію, навчаємо модель і передаємо регламенти супроводу. Хибні переведення на оператора зникають, а частка самостійних рішень зростає.
Часті запитання

Чому intent detection ламається на живому трафіку

У пілоті розпізнавання намірів дає точність під 95% на розміченому наборі в кілька сотень реплік. На живому трафіку та сама модель помиляється на кожній третій фразі, і частка ручного переведення на оператора зростає з перших днів роботи.

Перше джерело помилок — довгий хвіст запитів. Люди пишуть так, як модель не бачила: «а можна з доставкою, але не цього тижня», «підкажіть, я заплуталася в тарифах».

Кожне таке формулювання трапляється один раз, до навчальної вибірки не потрапляє, а в сумі ці репліки дають половину звернень.

Друге — неоднозначні формулювання та змішані теми в одній репліці. «Поверніть гроші та відключіть підписку» — це два різних наміри в одному повідомленні, а класифікатор навчений вибирати один клас і мовчки губить другий. Користувач не отримує відповіді на половину питання і повторює його, вже роздратовано.

Третє — відсутність єдиного словника. Поки розмітники й аналітики не домовилися, де межа між «скасувати замовлення» та «змінити замовлення», схожі фрази роз'їжджаються в різні класи.

Таксономія розпливається, метрика на відкладеній вибірці виглядає пристойно, а помилки розпізнавання намірів спливають уже в діалозі.

Згори лягає шум введення — одруки, трансліт, розпізнане мовлення. Саме на ньому ламається все, що добре працювало в демо. Далі розбираємо, як це закривається.

Що дає керована таксономія намірів

Поки наміри зібрані списком фраз «як вийшло», близькі класи перекриваються, і бот відповідає не в тему. Керована таксономія — це ієрархія домен → інтент → під-інтент, де в кожного класу є правило відповіді, а для всього непокритого заведений окремий клас поза сценарієм. Точність рахується по кожному домену окремо, і слабкий домен не розмиває загальну картину.

Варіант Коли підходить Обмеження
Плоский список, 30–50 інтентів Один сценарій підтримки, вузька продуктова база Нові теми падають у найближчий інтент — зростають хибні спрацювання
Ієрархія домен → інтент → під-інтент Кілька напрямів, різні команди Потрібна розмітка й арбітраж спірних прикладів
Таксономія з явним класом поза сценарієм Відкрита база, потік незнайомих формулювань Потребує регулярного перегляду: частина нових тем переводиться в реальні інтенти

Ефект видно на трьох метриках. Частка автовідповідей зростає з 50–60% до 85%: модель перестає вгадувати між схожими намірами. Частка ручних переведень падає в 2–3 рази — оператор підключається лише при впевненості нижче порога або при явному запиті поза сценарієм.

Стійкість на нових темах дає клас поза сценарієм: незнайоме формулювання не притягується до найближчого інтенту, а потрапляє в чергу на розбір, і таксономія переглядається за цими прикладами.

Зникає й цілий клас відмов — «бот упевнено відповів не те», який дорожчий за чесне переведення на оператора. Поріг впевненості по кожному домену та явна ієрархія — відпрацьована практика у відкритих платформах на кшталт Rasa.

Підходи до intent detection: правила, навчання, гібрид

Підхід Коли підходить Обмеження
Правила та словники 10–30 інтентів, стабільні формулювання, розмітки поки немає рветься на перефразуваннях та одруках; словник зростає швидше, ніж точність
Навчання на розмічених діалогах живе мовлення, тисячі прикладів, інтенти перетинаються потрібна розмітка та її перезбирання при зміні таксономії; рідкісні інтенти просідають
Гібридний підхід правила як швидкий шар на критичних інтентах, модель — на решті складніше налагодження: помилка живе або в правилі, або в моделі

Вибір тут визначається не модою, а обсягом діалогів і стабільністю предметної області. Правила та словники дають передбачуваність на вузькому наборі інтентів, навчання на розмітці — узагальнення на перефразування, гібрид — компроміс між керованістю та гнучкістю.

Гібрид зазвичай збирається каскадом: словниковий шар знімає однозначні звернення, модель розподіляє залишок, а поріг впевненості вирішує, відповідати автоматично чи уточнювати.

Поріг підбирається за матрицею помилок — завищений жене частку передач оператору вгору, занижений збільшує кількість неправильних відповідей. Ми фіксуємо його на валідації та переглядаємо при кожній зміні таксономії, інакше якість тихо з'їжджає.

Що вибрати — залежить від того, що дорожче саме вам: хибна відповідь чи зайве переведення оператору. Опишіть задачу та покажіть логи діалогів — повернемося з оцінкою, який із трьох варіантів закриє ваші інтенти.

Впровадження: від аудиту діалогів до передачі регламентів

Впровадження intent detection — це не разове тренування моделі, а цикл: аудит реальних діалогів задає таксономію, розмітка її уточнює, а відкладена вибірка показує, де класифікатор помиляється на нових формулюваннях.

Ідемо етапами, після кожного видно вимірюваний результат — частка вірних спрацювань, кількість зайвих уточнень, глибина черги на оператора.

  1. Аудит діалогів. Вивантажуємо історію звернень за період, рахуємо частку нерозпізнаних і сценарії з повторними уточненнями. Так видно, які наміри варто виділяти окремо, а які закриває звичайне меню.
  2. Схема таксономії. Збираємо наміри в ієрархію: згори задача клієнта, нижче уточнення та сутності. Перевіряємо перетини класів, щоб близькі запити не сперечалися за одну мітку.
  3. Розмітка намірів. Пишемо правила для спірних випадків і тримаємо контрольну вибірку для перевірки узгодженості. Розходження розмітників вище порога повертає нас до правок схеми, а не до навчання.
  4. Налаштування впевненості. Задаємо поріг, нижче якого бот ставить уточнювальне питання замість здогаду, і правило переведення оператору. Хибна впевненість на рідкісному класі коштує дорожче за зайве уточнення.
  5. Відкладена вибірка. Набір діалогів, що не потрапив у навчання, проганяємо перед викаткою: дивимося матрицю помилок по класах, а не одну загальну точність — інакше рідкісні наміри ховаються за середнім.
  6. Перевірка та передача регламентів. Випускаємо в тіньовому режимі: модель класифікує, відповідає поки старий сценарій. Потім віддаємо регламент оновлення — періодичність перенавчання, метрики деградації, відповідальний за правки таксономії.

Комплект постачання: таксономія, схема, регламенти

Артефакти, які описують, що ми вважаємо наміром і як поводимося з кожною відповіддю, залишаються в замовника разом із кодом. Без них модель через місяць перетворюється на чорну скриньку, а будь-яка зміна сценарію вимагає повернення до підрядника. Нижче — комплект, який фіксуємо в прийманні.

  • Словник намірів (таксономія). Дерево інтентів з описом, прикладами фраз на кожен клас, межами між близькими намірами та правилами розмітки спірних випадків. Окремим блоком — те, що свідомо не відносимо до жодного інтенту.
  • Схема маршрутизації. Таблиця «намір → сценарій або оператор», пороги впевненості, поведінка при низькій впевненості та пріоритети, якщо спрацювало кілька класів одночасно.
  • Політики обробки. Що потрапляє в логи, що маскується або не зберігається взагалі, термін зберігання, ролі доступу та порядок вивантаження даних для розбору помилок.
  • Документація таксономії. Порядок додавання та перейменування намірів, версіонування словника, власник з боку замовника та точки узгодження з бізнесом.
  • Регламент перенавчання. Тригери оновлення (частка нерозпізнаних, зсув формулювань користувачів), частота, хто розмічає нові приклади і як перевіряємо якість до викатки.
  • Контрольний набір і звіт якості. Фіксована вибірка діалогів, метрики по кожному наміру, порівняння з попередньою версією та порядок відкату при просіданні.
  • Інструкції для підтримки. Куди заводити нетипові звернення, як ескалювати і хто оновлює словник, щоб нові випадки не губилися між командами.

Кейс: як прибрали хибні переведення на оператора

Що було

Клієнт прийшов із ботом підтримки, який переводив на оператора більше третини діалогів — включно з тими, де відповідь уже лежала в базі знань.

Таксономія намірів збиралася вручну і містила перетинні класи: «статус замовлення» та «де посилка» йшли в різні категорії, а модель із рівною впевненістю відносила запит до обох. Поріг впевненості зафіксували при запуску і не переглядали.

На відкладеній вибірці частка вірних розпізнавань становила 72%, частка хибних переведень на оператора — 34%. Кожен третій діалог забирав час оператора, хоча автоматика закрила б його швидше.

Що змінили

Перезібрали таксономію: прибрали перетини, розвели близькі наміри та додали окремий клас «не розпізнано» замість натягування запиту на найближчу категорію. Розмітили стратифіковану відкладену вибірку в Label Studio — тепер метрики рахуються на одних і тих самих даних.

Поріг впевненості підібрали за матрицею помилок: хибне переведення дорожче за уточнювальне питання, тому бот спочатку перепитує, а не кличе людину.

Що стало

Частка вірних розпізнавань на тій самій вибірці — 94%, хибні переведення на оператора — 7%. Частка діалогів, закритих без участі оператора, зросла з 58% до 88%.

Моніторинг повісили на частку низьковпевнених розпізнавань, розподіл намірів по днях і розходження з ручною розміткою: після правки формулювань в інтерфейсі зростання таких відповідей було видно того ж дня, і перенавчання зайняло години замість тижня скарг.

Чим відрізняється намір від сценарію діалогу

Намір — це те, що людина хоче отримати однією реплікою: повернути замовлення, дізнатися статус доставки, змінити адресу. Сценарій — послідовність кроків і станів діалогу, яка це бажання обслуговує: уточнення деталей, слоти, виклики внутрішніх систем, точка завершення.

Шари живуть за різними законами: намір визначається моделлю за текстом і оновлюється перенавчанням на розмітці, сценарій описаний графом переходів і оновлюється правкою вітки.

Якщо змішати їх в одній схемі, кожне нове формулювання клієнта перетворюється на окрему вітку графа. Таксономія розростається, кількість переходів зростає комбінаторно, і будь-яка правка формулювання вимагає регресії всього діалогу цілком.

Гірше інше: репліки зі змішаними темами — «хочу повернути замовлення і заразом змінити адресу» — нікуди покласти, бо вітка графа передбачає одну ціль на вході.

Між цими шарами потрібен шар маршрутизації. Він отримує репліку, рахує оцінку впевненості по кожному наміру з таксономії, застосовує поріг і правило вирішення конфліктів, і лише потім передає управління сценарію разом із поточним станом діалогу.

Сценарій при цьому нічого не знає про формулювання, а модель — про слоти та кроки. Правки з обох боків залишаються локальними, і регресія не роз'їжджається по всій схемі.

Уточнювальне питання — частина маршрутизації, а не окрема вітка. Коли два наміри близькі за впевненістю або в репліці змішані теми, роутер ставить уточнювальне питання і утримує діалог, поки не вибере одну ціль.

Так граф сценаріїв залишається лінійним і передбачуваним, а спірні випадки вирішуються в одному місці — там, де їм і належить вирішуватися.

Технічні сумніви перед стартом

Перед стартом замовник перевіряє не саму модель, а її експлуатацію: як переноситься поточна логіка, скільки потрібно даних і що буде з якістю через пів року. Нижче — п'ять питань, які найчастіше розбираємо на технічному обговоренні.

Що робити зі старими правилами?

Залишаємо їх окремим шаром: регулярки закривають жорсткі випадки на кшталт номерів замовлень, модель — вільні формулювання. Пріоритет при конфлікті задається явно і видно в логах.

Скільки фраз потрібно розмітити вручну?

Обсяг рахуємо від кількості інтентів і варіативності формулювань, а не «на око». Старт — кілька сотень фраз на клас, далі вибірка зростає за невпевненими передбаченнями.

Куди дівати нерозпізнані фрази?

У чергу розбору, а не в заглушку. Вводимо поріг впевненості та клас «не зрозумів»; частка таких звернень — метрика, що показує, де таксономії не вистачає.

Модель деградує з часом?

Так, якщо змінюється мова клієнтів. Стежимо за розподілом запитів і точністю на контрольній вибірці, при просіданні доучуємо на свіжих даних — у стеку на Rasa це регулярний цикл.

Як оновлюється таксономія?

Нові класи заводимо за статистикою нерозпізнаних фраз, зберігаючи сумісність назв. Старі не видаляємо різко — переводимо в архів, щоб звіти залишалися зіставними.

Обговоримо задачу та повернемося з оцінкою

Для оцінки потрібні не загальні побажання, а ваші дані: на першій розмові розбираємо, як бот обробляє запити зараз і де втрачає користувачів. Якщо є вивантаження листування та список інтеграцій, обсяг таксономії інтентів і склад робіт прикидаємо вже за підсумками розмови.

Що обговоримо і які ввідні знадобляться з вашого боку:

  • Аудит поточного бота — який шар відповідає за розпізнавання: правила, регулярні вирази чи навчена модель, і на яких запитах він помиляється.
  • Ввідні по діалогах — вивантаження логів за період, частка нерозпізнаних реплік, кілька сотень розмічених прикладів за ключовими сценаріями.
  • Межі таксономії — перелік сценаріїв і бажана деталізація: великі інтенти чи підкласи з окремою реакцією на неясний ввід.
  • Дані та доступи — канали (месенджери, веб-віджет, телефон), інтеграції з CRM або довідником, тестовий контур для прогону моделі.
  • Мова та стиль — мови й діалекти, що обслуговуються, частка одруків і трансліту, чи потрібна обробка голосових повідомлень.
  • Критерії приймання — цільова частка вірних спрацювань, допустимий рівень хибних, на якій вибірці рахуємо якість.
  • Порядок старту — що робимо в першу чергу: замір поточної якості, розмітка, чернетка таксономії.
  • План робіт — етапи, точки звірки, склад команди та порядок передачі моделі вашим інженерам.

Після розмови повернемося з оцінкою, планом робіт і переліком ризиків. Опишіть задачу та надішліть вивантаження логів — цього достатньо, щоб рухатися далі.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142