Проблеми інтерпретації голосового введення - як це працює у нас

    Стопами публікацій habrahabr.ru/company/croc/blog/235565/ і habrahabr.ru/company/megafon/blog/228899/ , а так же коментарів до них, я вирішив розповісти, як ми вирішуємо проблему інтерпретації голосового вводу в нашій діалогової системі.
 
Для початку дозвольте продемонструвати невеликий відеоролик з нашого інтерфейсу прототипирования і розробки діалогів, знятий спеціально для статті. Знятий він за мотивами коментарів до публікації Мегафона (дивитися, по можливості, в дозволі 720+):
 
  
Хотілося б відзначити, що система не вимагає будь-якої попередньої підготовки — з ролика, сподіваюся, очевидно, що я створюю і тестую діалог «на льоту».
 
 

Основні відмінності нашого підходу до створення діалогів

По-перше, ми не змушуємо дизайнера діалогів перераховувати всі можливі рекомбінації варіантів виголошення фраз. Пошук здійснюється в семантичному просторі, в якому близькі за змістом слова та вирази знаходяться поруч. Відео добре це демонструє — я використав слова «непрацюючих», «Роумінг» і «Ірландія», хоча говорив «відсутній роумінг в Дубліні». Або, я написав «Твоє ім'я», хоча питав «як тебе звати». Система добре розпізнає стійкі вирази — наприклад, вираз «стільниковий оператор» дуже близько до вираження «оператор мобільного зв'язку». Для морфологічно багатьох мов ми нормалізіруя порівнювані вирази.
 
По-друге, система — чистий WYSIWYG. Клієнт чує рівно те, що чує дизайнер діалогу; код однаковий для всіх версій. Time to market будь-якої зміни обчислюється буквально секундами. Приміром, якщо у провайдера ліг маршрутизатор, то нове питання-відповідь, яка пояснювала клієнтам ситуацію, може бути доданий прямо на льоту.
 
По-третє, питання можна задавати як «вглиб» діалогу, так і у зворотний бік. Т.е. ми намагаємося імітувати живе спілкування, де немає якогось однозначного «поточного стану» (скажіть «так» чи «ні») і можна задати будь-яке питання в будь-який час.
 
По-четверте, ми підтримуємо поточний контекст. Т.е. якщо в двох гілках знаходяться однакові питання, скажімо, вартість СМС, і я запитав щось у дусі «вартість СМС в тарифі Дощ», то я можу поставити уточнююче запитання — «а в тарифі Радуга?», що по суті буде еквівалентно питанню «вартість СМС в тарифі Радуга».
 
 

Як це працює?

 
     
  1. Для кожної мови ми будуємо векторну семантичну модель — unsupervised word representation. Дуже поширений і добре зарекомендував себе підхід. Стійкі вирази тренуються нарівні з окремими словами. На поточний момент ми не розділяємо слова на множинні прототипи за значенням — якось не дійшли поки руки, та й в діалогових системах кількість використовуваних доменів зазвичай значно менше, ніж у дикій природі.
  2.  
  3. Граф з питаннями, вказується користувачем (ми називаємо їх «канонічними питаннями»), конвертується в набір векторів.
  4.  
  5. Для кожного заданого питання ми шукаємо підходящу комбінацію векторів, використовуючи відносно просту евристику пріоритетів. На цьому етапі ми враховуємо поточний контекст виходячи з попередніх запитань, а також порівнюємо питання з ієрархією «вглиб» і назад.
  6.  
І така, відносно проста схема, досить добре працює навіть для великих графів. У загальному і цілому, при правильному підході до структурування, будувати стійкі діалоги за такої схеми досить легко.
 
З основних проблем хотілося б відзначити проблеми з розпізнаванням мови. Для діалогових систем, на нашу думку, в принципі збитковим є декодування голосу в текст і наступна обробка у вигляді тексту, так як втрачаються важливі деталі, такі як паузи та інтонації в словах.
 
Саме тому ми зараз розробляємо ASR, який працюватиме у вигляді плагіна до нашого семантичному процесору і декодувати звук безпосередньо в семантичні вектора. Однією з переваг такої схеми буде можливість використовувати адаптивні граммар. Справді, адже діалогова система завжди знає, який словник вона розуміє. Тому природним засобом боротьби з ростом дерева гіпотез і, відповідно, з неточностями в розпізнаванні, є приоритезация певного словника (граммар). Але такі граммар, очевидно, для більш менш практичною діалогової системи, все одно містили б тисячі слів. Плюс труднощі з їх ручним побудовою. А якщо ще й для морфологічно багатого мови…
 
Адаптивний граммар використовує для цих цілей семантичну мовну модель. Якщо одним із очікуваних слів є, приміром, слово «ціна», то очевидно, що підійде і слово «вартість». Або слово «тариф». Загалом, використовується той же підхід, що і для пошуку відповідного «канонічного питання».
 
 

Обробка мови — майбутнє?

Варто визнати, що наш поточний підхід до мови не є «розумінням мови», в тому сенсі, як його «розуміють» люди. Хоча векторні семантичні моделі, як нам здається, досить успішно моделюють деякі частини цього процесу.
 
На сьогоднішній день ми почали експериментувати з математичним підходом до загальної теорії мови за авторством Зелліга Харріса. Можливо і когось з вас надихне його теорія operator grammar. Мені вона здається дуже і дуже цікавою, особливо в контексті діалогових систем.
 
Ще одним з напрямків, в якому ми експериментуємо, є єдине семантичний простір для всіх підтримуваних мов. На практиці це означає сумісні один з одним семантичні моделі. Т.е. після трансформації в векторну форму мене абсолютно не турбує початковий мову текстового вираження. Таким чином, я можу, наприклад, здійснювати пошук в документі, використовуючи зручний мені мову, а не мову документа.
 
З точки зору розробки діалогової системи єдине семантичний простір дозволить вказувати «канонічні питання» тільки один раз. Т.е. наприклад, система хоч і відповідає російською, але здатна при цьому зрозуміти питання від говорить білоруською мовою.
 
 

Практика

А на практиці, якщо раптом вам різко захотілося пограти з нашою бетою — киньте в мене листом на tridemax@sapiensapi.com і я дам вам доступ до системи. З інструментарію вам знадобиться тільки браузер Chrome. Заздалегідь вибачте, якщо буде деяка затримка з відповіддю — нам доведеться вибудувати певну чергу, щоб не вбити наш улюблений сервер.
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.