В будущем, как нам кажется, люди будут взаимодействовать с устройствами с помощью голоса. Уже сейчас приложения распознают точные голосовые команды, заложенные в них разработчиками, но с развитием технологий искусственного интеллекта они научатся понимать смысл произвольных фраз и даже поддерживать разговор на любые темы. Сегодня мы расскажем читателям Хабра о том, как мы приближаем это будущее на примере Алисы – первого голосового помощника, который не ограничивается набором заранее заданных ответов и использует для общения нейронные сети.
Несмотря на кажущуюся простоту, голосовой помощник – один из самых масштабных технологических проектов Яндекса. Из этого поста вы узнаете, с какими сложностями сталкиваются разработчики голосовых интерфейсов, кто на самом деле пишет ответы для виртуальных помощников, и что общего у Алисы с искусственным интеллектом из фильма «Она».
На заре своего существования компьютеры в основном применялись на крупных научных или оборонных предприятиях. Про голосовое управление тогда размышляли лишь фантасты, а в реальности операторы загружали программы и данные с помощью куска картона. Не самый удобный способ: одна ошибка, и все нужно начинать сначала.
С годами компьютеры становятся доступнее и начинают применяться в компаниях поменьше. Специалисты управляют ими с помощью текстовых команд, вводимых в терминале. Хороший, надежный способ – он применяется в профессиональной среде и по сей день, но требует подготовки. Поэтому когда компьютеры стали появляться в домах обычных пользователей, инженеры принялись искать более простые способы взаимодействия машины и человека.
В лаборатории компании Xerox зарождается концепция графического интерфейса WIMP (Windows, Icons, Menus, Point-n-Click) – массовое применение она нашла в продуктах уже других компаний. Заучивать текстовые команды для управления домашним компьютером больше не требовалось — им на смену пришли жесты и клики мышью. Для своего времени это было настоящей революцией. И теперь мир приближается к следующей.
Теперь почти у каждого в кармане лежит смартфон, вычислительных мощностей которого достаточно, чтобы посадить корабль на Луну. Мышь и клавиатуру заменили пальцы, но ими мы совершаем все те же жесты и клики. Это удобно делать, сидя на диване, но не в дороге или на ходу. В прошлом для взаимодействия с компьютерными интерфейсами человеку приходилось осваивать язык машин. Мы верим, что сейчас пришло время научить устройства и приложения общаться на языке людей. Именно эта идея легла в основу голосового помощника Алиса.
У Алисы можно спросить [Где поблизости выпить кофе?], а не диктовать что-то вроде [кофейня улица космонавтов]. Алиса заглянет в Яндекс и предложит подходящее место, а на вопрос [Отлично, а как туда пройти?] — даст ссылку на уже построенный маршрут в Яндекс.Картах. Она умеет отличать точные фактовые вопросы от желания увидеть классическую поисковую выдачу, хамство – от вежливой просьбы, команду открыть сайт – от желания просто поболтать.
Может даже показаться, что где-то в облаке работает нейронная чудо-сеть, которая в одиночку решает любые задачи. Но в реальности за любым ответом Алисы скрывается целая цепочка технологических задач, решать которые мы учимся уже 5 лет. И начнем мы свой экскурс с самого первого звена – со способности слушать.
Привет, Алиса
Искусственный интеллект из научной фантастики умеет слушать – людям не приходится нажимать на специальные кнопки, чтобы включить «режим записи». А для этого нужна голосовая активация – приложение должно понимать, что человек к нему обращается. Сделать это не так легко, как может показаться.
Если вы просто начнете записывать и обрабатывать на сервере весь входящий звуковой поток, то очень быстро разрядите батарейку устройства и потратите весь мобильный трафик. В нашем случае это решается с помощью специальной нейронной сети, которая обучена исключительно на распознавание ключевых фраз («Привет, Алиса», «Слушай, Яндекс» и некоторых других). Поддержка ограниченного числа таких фраз позволяет выполнять эту работу локально и без обращения к серверу.
Если сеть обучается понимать лишь несколько фраз, вы могли бы подумать, что сделать это достаточно просто и быстро. Но нет. Люди произносят фразы далеко не в идеальных условиях, а в окружении совершенно непредсказуемого шума. Да и голоса у всех разные. Поэтому для понимания лишь одной фразы необходимы тысячи обучающих записей.
Даже небольшая локальная нейронная сеть потребляет ресурсы: нельзя просто взять и начать обрабатывать весь поток с микрофона. Поэтому на передовой применяется менее тяжеловесный алгоритм, который дешево и быстро распознает событие «началась речь». Именно он включает нейросетевой движок распознавания ключевых фраз, который в свою очередь запускает самую тяжелую часть – распознавание речи.
Если для обучения лишь одной фразе необходимы тысячи примеров, то вы можете себе представить, насколько трудоемко обучить нейросеть распознаванию любых слов и фраз. По этой же причине распознавание выполняется в облаке, куда передается звуковой поток, и откуда возвращаются уже готовые ответы. Точность ответов напрямую зависит от качества распознавания. Именно поэтому главный вызов – научиться распознавать речь настолько же качественно, насколько это делает человек. Кстати, люди тоже совершают ошибки. Считается, что человек распознает 96-98% речи (метрика WER). Нам удалось добиться точности в 89-95%, что уже не только сопоставимо с уровнем живого собеседника, но и уникально для русского языка.
Но даже идеально преобразованная в текст речь ничего не будет значить, если мы не сможем понять смысл сказанного.
Какая погода завтра в Питере?
Если вы хотите, чтобы ваше приложение выводило прогноз погоды в ответ на голосовой запрос [погода], то здесь все просто – сравниваете распознанный текст со словом «погода» и если получаете совпадение, выводите ответ. И это очень примитивный способ взаимодействия, потому что в реальной жизни люди задают вопросы иначе. Человек может спросить у помощника [Какая погода завтра в Питере?], и тот не должен растеряться.
Первое, что делает Алиса при получении вопроса, это распознает сценарий. Отправить запрос в поиск и показать классическую выдачу с 10 результатами? Поискать один точный ответ и сразу выдать его пользователю? Совершить действие, например открыть сайт? А, может, просто поговорить? Невероятно сложно научить машину безошибочно распознавать сценарии поведения. И любая ошибка здесь малоприятна. К счастью, у нас есть вся мощь поисковой машины Яндекса, которая каждый день сталкивается с миллионами запросов, ищет миллионы ответов и учится понимать, какие из них хорошие, а какие – нет. Это огромная база знаний, на основе которых можно обучить еще одну нейронную сеть – такую, которая бы с высокой вероятностью «понимала», чего именно хочет человек. Ошибки, конечно же, неизбежны, но их совершают и люди.
С помощью машинного обучения Алиса «понимает», что фраза [Какая погода завтра в Питере?] – это запрос погоды (кстати, это заведомо простой пример для наглядности). Но о каком городе идет речь? На какую дату? Здесь начинается этап извлечения из пользовательских реплик именованных объектов (Named Entity Recognition). В нашем случае важную информацию несут два таких объекта: «Питер» и «завтра». И Алиса, у которой за плечами стоят поисковые технологии, «понимает», что «Питер» – синоним «Санкт-Петербурга», а «завтра» – «текущая дата + 1».
Естественный язык – не только внешняя форма наших реплик, но и их связность. В жизни мы не обмениваемся короткими фразами, а ведем диалог – он невозможен, если не помнить контекст. Алиса его помнит – это помогает ей разбираться со сложными лингвистическими явлениями: например, справляться с эллипсисом (восстанавливать пропущенные слова) или разрешать кореференции (определять объект по местоимению). Так, если спросить [Где находится Эльбрус?], а потом уточнить [А какая у него высота?], то помощник в обоих случаях найдет верные ответы. А если после запроса [Какая погода сегодня?] спросить [А завтра?], Алиса поймет, что это продолжение диалога про погоду.
И кое-что еще. Помощник должен не только понимать естественный язык, но и уметь говорить на нем – как человек, а не как робот. Для Алисы мы синтезируем голос, в оригинале принадлежащий актрисе дубляжа Татьяне Шитовой (официальный голос Скарлетт Йоханссон в России). Она озвучивала искусственный интеллект в фильме «Она», хотя вы могли запомнить ее и по озвучке чародейки Йеннифэр в «Ведьмаке». Причем речь идет о достаточно глубоком синтезе с применением нейронных сетей, а не о нарезке готовых фраз – записать все их многообразие заранее невозможно.
Выше мы описали особенности естественного общения (непредсказуемая форма реплик, отсутствующие слова, местоимения, ошибки, шум, голос), с которыми нужно уметь работать. Но у живого общения есть еще одно свойство – мы далеко не всегда требуем от собеседника конкретного ответа или действия, иногда нам просто хочется поговорить. Если приложение будет отправлять такие запросы в поиск, то вся магия разрушится. Именно поэтому популярные голосовые ассистенты используют базу редакторских ответов на популярные фразы и вопросы. Но мы пошли еще дальше.
А поболтать?
Мы научили машину отвечать на наши вопросы, вести диалог в контексте определённых сценариев и решать задачи пользователя. Это хорошо, но можно ли сделать ее менее бездушной и наделить человеческими свойствами: дать ей имя, научить рассказывать о себе, поддерживать разговор на свободные темы?
В индустрии голосовых помощников эта задача решается с помощью редакторских ответов. Специальная команда авторов берет сотни наиболее популярных у пользователей вопросов и пишет по несколько вариантов ответов на каждый. В идеале это нужно делать в едином стиле, чтобы из всех ответов складывалась цельная личность помощника. Для Алисы мы тоже пишем ответы – но у нас есть кое-что еще. Кое-что особенное.
Помимо топа популярных вопросов существует длинный хвост из низкочастотных или даже уникальных фраз, на которые заранее подготовить ответ невозможно. Вы уже догадались, с помощью чего мы решаем эту проблему, не так ли? С помощью еще одной нейросетевой модели. Для ответов на неизвестные ей вопросы и реплики Алиса использует нейросеть, обученную на огромной базе текстов из интернета, книг и фильмов. Знатоков машинного обучения, возможно, заинтересует то, что начинали мы с 3-слойной нейронной сети, а теперь экспериментируем с огромной 120-слойной. Детали прибережем для специализированных постов, а здесь скажем, что уже текущая версия Алисы старается отвечать на произвольные фразы с помощью «нейросетевой болталки» – так мы ее называем внутри.
Алиса учится на огромном количестве самых разных текстов, в которых люди и персонажи далеко не всегда ведут себя вежливо. Нейросеть может научиться совсем не тому, чему мы хотим ее научить.
– Закажи мне сэндвич.
– Обойдетесь.
Как и любого ребенка, Алису нельзя научить не хамить, ограждая ее от всех проявлений хамства и агрессии – то есть обучая нейросеть на «чистой» базе, где нет грубостей, провокаций и прочих неприятных вещей, часто встречающихся в реальном мире. Если Алиса не будет знать о существовании подобных выражений, она будет отвечать на них бездумно, случайными фразами – для неё они останутся неизвестными словами. Пусть лучше она знает, что это такое – и выработает определённую позицию по этим вопросам. Если ты знаешь, что такое мат, ты можешь либо ругнуться в ответ, либо сказать, что не станешь разговаривать с ругающимся. И мы моделируем поведение Алисы так, чтобы она выбирала второй вариант.
Бывает так, что сама по себе реплика Алисы вполне нейтральна, но вот в контексте, заданном пользователем, ответ перестаёт быть безобидным. Однажды, еще во время закрытого тестирования, мы попросили пользователя найти какие-то заведения – кафе или что-то подобное. Он сказал: «Найди другое такое же». И в этот момент в Алисе случился баг, и она вместо запуска сценария поиска организации дала довольно дерзкий ответ – что-то вроде «на карте поищи». И не стала ничего искать. Пользователь сначала удивился, а потом удивил и нас, похвалив поведение Алисы.
Когда Алиса использует «нейросетевую болталку», в ней может проявиться миллион разных личностей, так как нейросеть вобрала в себя немного от автора каждой реплики из обучающей выборки. В зависимости от контекста Алиса может быть вежливой или грубой, жизнерадостной или депрессивной. Мы же хотим, чтобы персональный помощник представлял собой целостную личность со вполне определенным набором качеств. Здесь на помощь приходят наши редакторские тексты. Их особенность в том, что они изначально написаны от лица той личности, которую мы хотим воссоздать в Алисе. Получается, что можно продолжать обучать Алису на миллионах строк случайных текстов, но отвечать она будет с оглядкой на эталон поведения, заложенный в редакторских ответах. И это то, над чем мы уже работаем.
Алиса стала первым известным нам голосовым помощником, который старается поддерживать общение не только с помощью редакторских ответов, но и используя обученную нейронную сеть. Конечно же, мы еще очень далеки от того, что изображают в современной фантастике. Алиса не всегда точно распознает суть реплики, что влияет на точность ответа. Поэтому работы у нас еще много.
Мы планируем сделать Алису самым человекоподобным помощником в мире. Привить ей эмпатию и любознательность. Сделать её проактивной – научить ставить цели в диалоге, проявлять инициативу и вовлекать собеседника в разговор. Сейчас мы одновременно и в самом начале пути, и на переднем крае наук, изучающих эту область. Чтобы двигаться дальше, придется этот край подвинуть.
Поговорить с Алисой можно в приложении Яндекс для Android и iOS, в бета-версии для Windows, а скоро и в Яндекс.Браузере. Нам было бы интересно обсудить, каким вы видите будущее голосовых интерфейсов и сценарии его использования.