У попередній статті я розповів про досвід навчання нейронної мережі для розпізнавання автовідповідачів. Проте, це була лише теорія від якої ми поступово рухалися до нового продукту AI AMD. І ось, цей день настав, я хочу поділитися з вами результатами 2-х тижневого тестування на реальних дзвінках. Цікаво? Тоді пірнаємо у Deep Learning!
Реалізація фінального рішення
Найперше кілька слів про фінальний продукт. У тестуванні брав участь вебсервіс написаний на python
, проте для продуктового середовища наш розробник підготував окрему реалізацію сервера на C++
, яка вміє працювати із моделлю навченою та нейронній мережі, яку я навчав з допомогою pyTorch
.
Кожен дзвінок, як тільки надходить аудіо (працює навіть у режимі Early Media
ще до відповіді абонента), ми його дублюємо на AI сервер, який, своєю чергою, бере фрагменти по 2,4 секунди та класифікує їх за чотирма категоріями:
- Гудки
- Тиша
- Автовідповідач
- Людина
Є можливість налаштувати, що саме вважати фіналом розпізнавання. Наприклад, якщо було дві послідовні категорії Автовідповідач
, то це гарантовано голосова пошта й можна більше не продовжувати розпізнавання. Сервер поверне фінальну категорію, а дайлер знатиме чи зʼєднувати цей дзвінок з оператором, чи ні.
Методологія тестування
Як проводилося тестування?
Підключили один IVR дайлер та один предиктивний з участю операторів. Загалом у кожен з них щодня завантажували по 300–500 абонентів, а дайлери виконували близько 3-х тисяч дзвінків у день. У режимі “навчання” AI сервер кешує всі фрагменти, що розпізнає. Це дозволить нам вкінці проаналізувати точність класифікації. Ось так виглядала ручна звірка:
З чим будемо порівнювати?
Порахували розпізнавання поточного модуля AMD
за попередні дні на цих же дайлерах і отримали наступні цифри:
- 77% — правильно розпізнав (HUMAN або MACHINE)
- 13% — не зміг розпізнати (NOTSURE) але там була людина
- 8% — було хибно розпізнано як HUMAN
- 2% — було хибно розпізнано як MACHINE
Перші спроби та помилки
В перші дні ми отримували не ідеальні, проте кращі за звичайний AMD дані:
- 88% — було правильно розпізнано як людину чи автовідповідач
- 2% — було хибно розпізнано як людину
- 10% — було хибно розпізнано як автовідповідач
Після кількох етапів донавчання моделі на фрагментах людей, що їх було розпізнано як автовідповідач, ми отримали нову статистику:
- 90% — було правильно розпізнано як людину чи автовідповідач
- 8% — було хибно розпізнано як людину
- 2% — було хибно розпізнано як автовідповідач
Як бачимо, модель почала точніше розпізнавати, проте тепер у нас чомусь автовідповідачі ідентифікуватися як люди. Я переглянув логи AI серверу і побачив:
097315bc-f749-4d00-a1a3-444f62ef74c9 0 voicemail 3ms
097315bc-f749-4d00-a1a3-444f62ef74c9 1 human 4ms
Що ж виходить? Перший сегмент було коректно класифіковано як “Автовідповідач”, а ось другий — “Людина” і ми отримали фінальний результат “Людина”.
Чому так? Пригадуєте, я вище писав про налаштування правил завершення визначення. Виявляється одне з таких правил я хибно описав логіку… Будемо виправляти.
Фінальні тести
Після донавчання та виправлення правил, ми почали отримувати наступні результати:
- 96% — було правильно розпізнано як людину чи автовідповідач
- 0,4% — було хибно розпізнано як людину
- 3,6% — було хибно розпізнано як автовідповідач
А це вже відповідає графікам із навчання та тестування моделі:
Висновок
Для української моделі ми отримали дуже і дуже хороші результати порівняно зі штатним модулем AMD
. Наступний крок — спробувати моделі для інших країн та мов. Радий, що вже зібралася черга з охочих протестувати 😃