«Схоже на автопілот на Tesla»: як розробляють, навчають і тестують чатботів
Про те, як навчити ботів розпізнавати голос, як вони заважають коригувальникам вогню та чи є tone of voice у робота, в інтерв'ю із Глібом Добжанським, VP of Engineering у компанії Master of Code Global. Компанія розробляє чатботи та застосунки для міжнародних компаній у сфері телекому, туризму, медіа, спорту та моди.
Як месенджери та Covid-19 призвели до розквіту голосових асистентів
SPEKA: Навіщо потрібні чатботи, зокрема голосові?
Боти, або точніше conversation apps, — це розмовні застосунки. Бот — дуже вузьке поняття, боти є у Telegram або Viber, але те, що ми розробляємо, є по суті спеціальним інтерфейсом.
Останні кілька десятків років усі пристрої зменшуються, комп'ютери зменшують, ми дедалі частіше використовуємо мобільний замість ноутбука, на мобільних вже майже немає кнопок. І колись усі фізичні інтерфейсні пристрої зникнуть, а потреба комунікувати з комп'ютерами залишиться. Це будуть смартгодинники чи навушник у вусі або бот.
Економічно найвигідніші боти — віртуальні помічники для мобільних операторів, комунікаційних провайдерів, фінансових установ.
Вони стали шалено популярними через пандемію Covid-19. Навіть якщо у бізнесу були оператори колцентрів, то тривалий час, особливо на Заході, вони фізично не могли прийти на роботу.
Натомість у клієнтів було дуже багато запитань, і живих агентів просто не вистачало. Але крім помічників є розважальні боти або застосунки, які допомагають популяризувати бренд. У них є ігри або інші розваги, щоб залучити користувачів.
Технічне уточнення: фахівці якого напряму потрібно, для того, щоб створити подібний бот?
Розробка бота відрізняється від звичайного програмування тим, що спочатку розробляють мовний інтерфейс. Для цього потрібна команда розробників, а також конверсейшн-дизайнери, мовні дизайнери, які можуть визначити мовну модель для тренування, побудувати діалоги та створити «персону» бота (про створення персони докладніше далі у тексті. — Ред.).
Щоб розробити такі мовні програми, потрібні спеціалісти з мовної моделі. Адже семантика слів буде відрізнятися у різних галузях. Наприклад, слово «ключ» бот банку зрозуміє як спосіб авторизації, а бот автомобільного магазину як ключі до автомобіля.
Є спеціалісти, які тренують бота на відповідну тематику. Ми їх називаємо АІ-тренери — тренери штучного інтелекту.
Про мову голосових ботів та машинне навчання
Як вдається створювати багатомовних ботів?
Ми працюємо переважно з клієнтами з Північної Америки. Тому створюємо ботів білінгвів для США (іспанська та англійська) та Канади (англійська та французька).
Боти повинні вміти перемикатися між мовами, а також розуміти суржик, бо на півдні США будуть клієнти, які вводитимуть запит із половини англійських і половини іспанських слів.
Як навчити систему визначати суржик? Якою мовою вона відповідатиме, якщо, наприклад, ми говоримо про англійську та іспанську?
Складно не відповісти, а навчити алгоритм розуміти, що саме намагається сказати користувач.
Перед тим як дати відповідь, алгоритм проходить кілька етапів. Спершу за окремими словами, характерними для конкретної мови, ми намагаємося визначити, якою мовою сформований запит. Далі бот намагається зрозуміти власне сенс речення. У штучного інтелекту є confidence core — показник того, наскільки рушій алгоритму впевнений, чи він зрозумів сенс запитання.
Підписуйтеся на наші соцмережі
Якщо розмовний застосунок визначив, що це англійська мова і confidence core у нього досить високий, то він готовий надавати підготовлену на такий запит відповідь.
Якщо ж він припускає, що це англійська мова, але не може зрозуміти сенс і confidence core низький, то цю проблему можна вирішити у кілька способів. Можна спробувати застосувати модель іншої мови або створити таку модель, яка містить не лише англійські слова, а й слова інших мов, наприклад, іспанської чи французької.
Зазвичай у бота є мова за замовчуванням, і цією мовою він відповідає одразу. Є сервіси, де ми можемо робити онлайн-переклад. Головна проблема — зрозуміти, що хоче користувач.
Як ви навчаєте алгоритми? Яким чином визначають мову за голосового введення? Чи не виникає проблем через різну швидкість та чіткість вимови, акцент, сленгові слова?
Ми займаємося надбудовою, тобто використовуємо мовні моделі від Amazon. Вони вже готові й доволі хороші. Але нам потрібно натренувати алгоритм для спеціальних цілей. Мовлення неоднорідне і відрізняється у кожній індустрії. Наприклад, є спеціальні терміни для фінансових застосунків.
Коли інформації у запиті мало, контекст та сфера застосування бота допомагає зрозуміти суть. Наприклад, слово cloud ймовірно матиме різне перше значення у застосунку для прогнозу погоди та хмарному сервісі. Якщо визначити контекст одразу не вдається, бот може додатково запитати у користувача, що він мав на увазі, використовуючи те чи інше слово.
Тобто надбудова, навчання спеціальних слів поверх базової моделі та використання контексту — це те, що ми робимо.
Щодо голосових ботів, то це ще один шар, який ми додаємо. Адже тут теж головна мета — зрозуміти сенс користувача. Спочатку нам треба перевести голос у текст і потім виконувати вже згаданий алгоритм. Щоб зрозуміти контекст, на базовому рівні використовують векторне відображення слів. Це нейромережа, яка проаналізувала, що слово «їжа» енну кількість разів зустрічається із словом «ресторан» у одному реченні чи тексті. Також «їжа» зустрічається із словом «роздуми», але рідше. Тож вектори слів «їжа» та «ресторан» будуть ближчими. На базовому рівні це допомагає алгоритму визначити зв'язки між словами. Далі ми використовуємо confidence core.
Щоб розпізнати голос, зазвичай використовуємо готові сервіси від Amazon та Google, також досить непогано для англійської мови працює бібліотека з відкритим кодом Deep Speech від Mozilla. Після того як текст відповіді згенерований, його треба пропустити через синтезатор голосу.
Ботперсона: як застосунки реагують на відповіді
Користувачі люблять використовувати боти не за призначенням, писати безглузді запити, щоб подивитися на відповідь бота. Чи здатен застосунок розпізнати такий запит, і якщо так, то що він відповідає?
Розпізнати такі запити можна, але відповідь залежить від того, чи запрограмований він на таку позаробочу активність. За стандартом бот має підтримувати так званий small talk — розмови ні про що, щоб підняти настрій. Наприклад, Siri — голосовий помічник для iOS відповідає по-різному на запитання, як справи, залежно від низки чинників.
Щоб зробити бота більш схожим на людину, можна зробити, щоб він жартував або підтримував неформальну розмову. Для цього потрібно додати йому блок розуміння загальних запитань. Відповідатиме він запрограмованими словами або згенерованими фразами.
Як ви це реалізовуєте?
У нашій компанії це радше виняток, тому що програма має виконувати певну функцію, але задля експерименту ми робити подібні речі. Використовували для відповіді на ці запитання нейромережу GPT-3, яка вміє генерувати тексти у різних стилях у відповідь на запитання.
Це цікава розвага, але, наприклад, для банківської установи це не надто вдале рішення, тому що там ми не зможемо повністю контролювати текст відповідей.
Чи ставлять клієнти таке завдання щодо tone of voice застосунків? Наприклад, наш бот має відповідати не дуже формально, але не використовувати певні конструкції, або люди мають розуміти, що він приязний і т. д.
Ми запитуємо у клієнта, як саме має поводитися бот. Це так звана ботперсона, і її треба теж прописувати. Це роблять наші дизайнери мови. Набір правил, які визначають стиль комунікації застосунку. Це емоційне забарвлення слів, вживання пунктуації, сленгу, абревіатур, емоджі тощо. Дуже важливо, коли бот розробляють для компанії, щоб ці правила корелювали з brand voice замовника.
Коли бот розпізнає сенс речення, він може виміряти його емоційне забарвлення. І щодо нього ми можемо якось змінити tone of voice. Як і в живому спілкуванні, коли ми бачимо, як з нами говорять, ми адаптуємося.
У такому разі бот буде реагувати лише на слова чи також на розділові знаки або на специфічність пунктуації? Наприклад, люди можуть починати писати капслоком або ставити дуже багато знаків оклику. Ще є регіональна особливість, замість смайликів українці ставлять дужки, а на Заході люди не розуміють, чому так. Чи враховують такі моменти?
Залежить від вихідних даних. Якщо ми натренували модель на датасеті, тобто базі текстів, у яких є приклади емоційно забарвленого тексту, то застосунок їх намагатиметься відгадати.
Важливо також, чи ми використовуємо готову модель, чи додаємо власні напрацювання. Якщо це англійські тексти, то такі рішення вже є.
Про час на розроблення та способи вдосконалення голосових ботів
Скільки часу зазвичай потрібно, щоб дотренувати застосунок?
Важко сказати. Початкове тренування можна зробити досить швидко, за кілька днів він буде готовий. Але коли бот великий і багато людей ним користується, то команда збирає багато даних. Що більше даних ми збираємо, то більше можемо зрозуміти, де бот щось зробив не так, де його треба навчити, де наша модель не спрацювала чи не спрацювала дефолтна модель. Тобто процес вдосконалення може тривати дуже довго.
Як відбувається тестування? Як зрозуміти, що ваш бот готовий впоратися з різними запитами?
Є декілька варіантів, як це робити. Один із ручних варіантів є спосіб, коли бот може передати керування живій людині, наприклад оператору. Ми можемо це робити явно або приховано.
Далі ми можемо збирати ці дані та дивитися, в яких місцях бот не спрацьовує і як його покращити. Це початкові етапи, далі алгоритми здатні до самонавчання на основі попередніх даних. Якщо бачимо, що він часто помиляється, ми складаємо список незрозумілих для нього фраз та перенавчаємо.
Як зрозуміти, що застосунок працює коректно? Користувачі часто закривають вкладку або переривають сесію, тому що вони отримали свою відповідь, їм не потрібно відповідати боту, що все правильно.
Ми можемо аналізувати активність користувача на сайті. Якщо це вебмагазин, то нам треба, щоб користувач щось купив або поклав у кошик, якщо це онлайн-гра, то наша мета — щоб він якомога більше залишався на сторінці. У ботах те саме. Нам треба зрозуміти, навіщо ми його розробили і як він допомагає користувачам.
Застосунок має розговорити користувача, щоб отримати більше інформації. Тоді бот буде більш успішним, але немає загальної метрики. В одному випадку будемо оцінювати кількість часу на сайті, в іншому — проведені покупки після розмови або виконану операцію після того, коли бот надав інформацію.
Я нечасто спілкуюся з ботами, але бачу, який величезний прогрес відбувся за останні кілька років, тобто наскільки вони добре почали розуміти природну мову. А що досі важко зрозуміти алгоритмам? Що ще потрібно зробити, аби боти спілкувалися з користувачем як справжні люди?
Це рух в обох напрямках. Штучний інтелект краще розуміє людей — вони охочіше спілкуються. Що більше вони спілкуються, то краще він працює.
Досі важко працювати з голосовими ботами. Бо з голосом багато обмежень, йому все ще важко розуміти цифри чи точну інформацію. Також бувають шуми або специфічні акценти, хоча й ці моделі покращуються.
Бан коригувальникам вогню та коментатор спортивних ігор: на що ще здатні conversation apps
Поділіться кількома кейсами з цікавими або складними робочими завданнями.
Ми робили застосунок для NВА. У ньому фани могли не тільки стежити за подіями та обговорювати. Там був бот, з яким можна було поспілкуватись, якщо ти не встиг на гру, обговорити її.
Його потрібно було зробити швидко, тому зробили «на коліні» і випустили у перший день. Він працював за принципом стоп-слів. Згодом була справжня АІ-модель.
Спочатку додавали кожне слово окремо до фільтра, але тоді також треба додавати словоформи та різні варіанти написання. Після певного часу роботи бота ми назбирали достатньо прикладів повідомлень зі стратегічною інфою і потім на основі цих прикладів навчали Tensorflow-модель. Для нейромережі кожне слово — це окремий токен. При цьому в коментарях користувачі використовують слова у різних відмінках (наприклад, площа, площі, площею) і різного роду (наприклад, горіла, горіло, горів). Щоб бот ідентифікував ці варіації слів, ми використовували stemming. Цей інструмент робив обрізку закінчень слів у різних відмінках і залишав ключове слово.
А щоб ідентифікувати слова у різних часових вимірах (наприклад, горіло, горітиме, горить) і в однині та множині, ми використовували lemmatization. Завдяки цим інструментам отримуємо одне базове слово, яке потім використовуємо для тренування бота.
Тобто тепер бот дивиться не просто на стоп-слова, але й на значення. І якщо людина пропустила або замінила якісь символи у словах, це не спрацює й користувача заблокують.