Самая главная формула успеха – умение общаться с людьми, любил повторять небезызвестный Теодор Рузвельт. В случае робота эта формула принимает критическое значение, ведь без способности к общению робот превращается в обычный, пусть и высокотехнологичный механизм. Что кроется за понятием общения для робота, рассказали инженеры компании «Промобот» Валерий Титов и Владислав Сазонов. И как выяснилось, пара «микрофон-динамик» здесь устарела ещё в прошлом веке, а найти подходящую «голову» практически невозможно.
Для людей слышать и понимать речь собеседника является обыденным делом. Человек слышит – человек отвечает. Но когда речь заходит о том, чтобы нас услышал и понял не человек, а робот, начинаются проблемы. Общение с роботом может проходить в сложных условиях: множество источников шума, несколько одновременно говорящих с разных сторон людей. Обычные микрофоны могут реагировать даже на речь самого робота. В своей жизни человек даже не замечает, насколько сложен процесс общения с технической точки зрения. Чтобы научить роботов «Промобота» общаться, нам пришлось найти идеальные уши и рот и, главное, научить их правильно работать.
«Хонда» для российского робота
Для идеального слуха роботу требуется две вещи: хорошие уши и надежная голова, способная понять, что же уловили уши. Решением вполне может стать аппаратно-программный комплекс на базе микрофонного массива.
С набором микрофонов всё просто: на корпусе робота их можно разместить там, где требуется. С программным обеспечением всё значительно сложнее. Дело в том, что работая с «ушами» «голова» должна как минимум:
- вырезать в услышанном речь робота;
- очистить звук от шума;
- определить, есть ли в услышанном и очищенном речь;
- определить источник речи;
- сформировать луч (по английски процедура называется beamforming), чтобы усилить исходный звуковой сигнал от источника;
- распознать речь в звуковой дорожке после всех манипуляций.
Как правило последний шаг выносится за пределы зоны ответственности микрофонного массива.
Готовых решений на мировом рынке оказалось не так много. Подходящих уровню «Промобота» – и того меньше. Наиболее перспективной нам показалась совместная разработка Японского исследовательского института Хонды и Киотского университета под названием HARK (Honda research institute Japan Audition for Robots with Kyoto university).
HARK изначально проектировалась для роботов, работающих в антропоморфной среде, где требуется услышать и разобрать команды от человека. Это ПО с открытым кодом можно было связать с Robot Operating System (ROS), процесс обработки звука с микрофонов легко настраивался. Дополнительным преимуществом стала заявленная возможность одновременного определения нескольких источников звука. Казалось, это то, что нам нужно. Японцы настолько очаровали нас своей разработкой, что мы скоропостижно перестали искать альтернативу.
Смертельные миллиметры звука
Для первых тестов в 2014 году мы использовали микрофонный массив RASP LC на 8 микрофонов. На корпусе робота 4 располагались на центральной части груди, вокруг экрана, 3 на верхней части груди, ближе к шее, и 1 сзади по центру, у основания шеи. Уже после первого теста мы выявили две проблемы критического уровня: вибрация и сложность расчётов.
Дело в том, что робот сам по себе – это механизм с огромным количеством движущихся деталей. И каждое движение создавало так называемые наводки на микрофон – фоновый шум, требующий постоянного анализа.
Вторая проблема заключалась в обработке полученных аудиоданных. Разработчики HARK заложили два принципиально разных подхода аналитики аудиопотоков. Первый назван геометрическим и сводится к точному (до десятых долей миллиметра) описанию расположения микрофонов в пространстве с учетом их направлений. Второй, без специального названия, опирается на калибровочную модель. Её создают путем многократной записи через массив одной и той же записи с разных точек пространства вокруг массива.
По заверениям создателей, геометрическая модель должна была показывать себя хорошо в большинстве случаев. С первым прототипом общающегося промобота этого не случилось. Принципиальной проблемой оказалась точность размещения микрофонов. Многие этапы сборки до сих пор проходят вручную, чего уж говорить о семилетней давности. Идеально повторить изделие у человека получается не всегда. И если для человеческого глаза расхождение в миллиметр совершенно не критично, то для точных алгоритмов это оказалось смертельно. В итоге, когда программа пытается рассчитать корреляцию между 8 кусочками аудио, длительностью по 10 мс, полученных с 8 разных микрофонов, на основании неточной модели расположения, результат получился весьма удручающим.
Самовлюблённый робот
Второй прототип получил собственную плату с микрофонным массивом. Её снабдили мощным микроконтроллером общего назначения, который отвечал за синхронизацию собранных данных с микрофонов. А сами микрофоны располагались вокруг экрана на груди робота. Уже в самой модели была заметна важная проблема: робот слышит себя. Мы решили использовать эхоподавление (в английской литературе преобладает термин AEC – acoustic echo cancellation) речи робота в данных с микрофонов на стороне микрофонного массива.
Первая реализация была достаточно простой. Аудиосигнал с речью робота перед динамиками поступал в микрофонный массив и на основе фурье-преобразования проводилось вычитание речи робота из данных с микрофонов. Красивый на пальцах план столкнулся с проблемой рассинхронизации. Мгновенный по меркам человека процесс произнесения роботом речи и попадания данных на микрофоны с точки зрения алгоритмов и техники не был таким уж мгновенным. Задержка была достаточной, чтобы существенно ухудшить качество подавления, оставляя хоть и искажённый, но вполне узнаваемый голос робота, паразитным сигналом отравляющим данные с микрофонов.
Мы не сдавались и продолжили искать варианты. Новое решение показалось простым и изящным. Периодически проигрывать специальный аудиосигнал, ловить его микрофонами, рассчитывать задержку и с этими данными проводить вычитание речи робота из сигнала с микрофонов. Но на этом этапе тестирования мы выяснили, что ресурса микроконтроллера не хватает для полноценного вычитания, а ставить более дорогой контроллер, который сможет делать хорошее вычитание, уже не оправдано с точки зрения финансов. Да и периодически пикающий робот вызывал бы у пользователей обоснованные вопросы.
Организовывать подавление уже на стороне операционной системы робота казалось достаточно дорого с точки зрения разработки и потребляемых вычислительных ресурсов. Тем более, что в этом случае задержка в получении данных с разных источников становилась еще менее предсказуемой.
Зайдя в тупик, мы всё же нашли компромисс. На микрофонном массиве отключались микрофоны в момент, когда на динамики шёл аудиосигнал. Явный плюс: робот себя точно не услышит. Это очень просто и работает без сбоев. Минусом стала самовлюблённость робота, ведь он перестал слышать кого-либо, пока говорит сам. Но таковой для нас оказалась цена компромисса.
Подходящий калибр
Робот-эгоист – не то, что хотелось бы поставлять во все страны мира, а потому отдел аппаратной разработки «Промобота» продолжал работы по поиску оптимального расположения микрофонов и проводил тестирование HARK с геометрической моделью. Даже несмотря на отдельную жёсткую плату без вибраций, геометрическая модель отказывалась работать так, как нам хотелось бы. Так был дан старт исследованию о процессе создания калибровочной модели для нашего микрофонного массива.
Калибровка происходит следующим образом: на некотором расстоянии от микрофонного массива располагается источник звука. Он воспроизводит специальный звуковой файл, содержащий окно частот в диапазоне от 8к до 0 герц, меняющихся в течении секунды. На каждой из заранее определенных координат эта дорожка проигрывается 3 раза и записывается микрофонным массивом в калибровочный файл. По итогу формируется набор калибровочных аудиофайлов для каждой из координат, в которых HARK будет улавливать речь.
Имея на руках набор записей, мы передаем на вход одному из приложений HARK набор файлов с указанием, какой файл соответствует точке пространства относительно микрофонного массива. На выходе получаем то, что называется моделью: перечень источников в пространстве, из которых для HARK может поступать звук, и набор коэффициентов для каждого источника. Эти коэффициенты будут использоваться в сложных аналитических процедурах, позволяющих провести локализацию и выделение звука из всего потока данных.
Процедура не самая быстрая, а ошибки, допущенные на любом из шагов, оказались способны легко погубить итоговую модель.
Первое, что стало для нас очевидным при создании собственной калибровочной модели, вокруг много шума. Очень. Самого разного. То, что мы не замечаем в повседневной жизни, оказывается критическим при создании такой хрупкой вещи, как чистая запись звука. Кто-то неудачно топнул при записи – записывай снова. Мы стали работать по ночам. Но ночью стало явно слышно эхо. Постоянно наступая на собственные грабли, мы пришли к созданию своей первой калибровочной комнаты. Из одной из переговорных мы вынесли всю мебель, стены задрапировали плотной тканью и ночью отрабатывали процесс калибровки. Но даже ночью на улице недостаточно тихо. Устав перезаписываться из-за случайно проехавшей машины, мы в первый раз съездили в студию звукозаписи.
Но то, что работает в лабораторных условиях, не всегда хорошо показывает себя «в поле». На ближайшей выставке наш новый промобот показал далеко не то качество, на которое мы рассчитывали – слишком шумно и слишком разные источники звука.
В офисе «Промобота» появилась собственная звукозписывающая студия. Мы стали глушить внешние звуки, мы стали учитывать естественные шумы включённого робота, мы стали обрабатывать варианты разного звучания одного слова. И наша калибровочная лаборатория составила огромный список проблем, мешающих роботу полноценно общаться.
Робот не любит скромных
Несмотря на все свои преимущества, HARK во многих аспектах оставался для нас чёрным ящиком. Он хорошо вёл себя в каких-то определенных сценариях, но если начать манипулировать параметрами, поведение могло стать трудно предсказуемым.
К примеру, выяснилось, что робот не слышит тихие голоса. Как будто он не любит скромных. Для того, чтобы не перегрузить систему в целом, мы пытаемся отсечь от обработки в модуле распознавания речи сторонние шумы и прочий паразитный сигнал. Единственным доступным для нас методом в HARK было задание пороговой чувствительности в децибелах. Выставив определенный порог, мы защитили себя от обработки «мусора». Но за это заплатили люди с тихим голосом. Если слишком сильно снижать порог, робот начинает слышать людей в 20 метрах от себя и тратить ресурсы на обработку каждого пука. С другой стороны, на тех же выставках порой царит такой шум, что вручную приходится в процессе работы корректировать настройки HARK на роботе, повышая порог чувствительности, чтобы робот слышал только тех, кто громко говорит рядом с роботом.
Пока робот говорит, он никого не слышит. Между словами есть конечно небольшие паузы, в которые он может слышать и по голосу человека в этот момент понять, что ему что-то говорят, и прерваться. Но срабатывало это крайне редко.
От аппаратного эхоподавления после множества исследования к тому времени мы отказывались уже трижды. При этом гарантированно превосходящих по характеристикам HARK систем мы так и не нашли. Выбрав свой путь, мы были вынуждены по нему идти до конца.
Сегодня разработчики «Промобота» создали собственный алгоритм определения наличия речи в звуковом сигнале (в английской литературе используется термин VAD – voice activity detection). Он работает в связке с HARK, подготавливая сигнал для обработки. Промоботы стали тактичнее, они научились лучше слушать и отвечать впопад, в чём любой желающий может убедиться на ближайшей выставке или ярмарке. Но как инженеры, мы знаем, что человеческое общение и общение робота с человеком – это две, как говорится, больших разницы. Чтобы приблизить робота к уровню человеческого общения, нам ещё предстоит огромная работа. Радует, что когда мы создадим новое программное решение, даже модели прошлых лет можно будет просто обновить. Чего уже не скажешь о человеке.
Авторы: Валерий Титов и Владислав Сазонов