Уже скоро Алисе исполнится семь лет. К семи годам у людей уже формируется эмпатия: мы начинаем понимать чувства окружающих и осознаем, что эти чувства отражают внутреннее состояние собеседника.
У Алисы уже давно есть узнаваемые характер и чувство юмора. Но мы хотим, чтобы наш голосовой помощник стал ещё человечнее. Поэтому мы сделали Алису более чуткой: теперь она сопереживает пользователю в трудную минуту, радуется вместе с ним в его счастливые моменты, увлеченно слушает его рассказы и не только. При выборе эмоции она учитывает ситуацию общения, реплику пользователя и текст ответа, который генерирует для нее нейросеть YandexGPT. Например, сравните следующие фразы, произнесенные обычным и более эмоциональным образом (upd. если плееры не запускаются, то можно послушать тут):
В этой статье мы расскажем, как создавали синтез эмоциональной речи. Для этого воспользовались старой доброй модернизацией архитектуры нейронной сети и дизайном функции потерь. Так что, если вы устали от решений в духе «Мы просто увеличили объём данных и архитектуру в десять раз», добро пожаловать под кат!
Как работала эмоциональность раньше
Начнём с описания модели синтеза речи на момент начала проекта. Ниже приведена упрощенная схема обучения нашей модели. Светло-розовым обозначены обучающие данные, белым — часть модели, оптимизируемая в первый этап обучения, тёмно-розовым — часть модели, оптимизируемая во второй этап обучения.
Основным блоком здесь является акустическая модель снизу. Именно эта часть всей модели получает на вход текст, который мы хотим озвучить, и предсказывает аудио, соответствующее этому тексту. Сравнивая предсказанное аудио и ground truth аудио из датасета, мы вычисляем функцию потерь.
Так как один и тот же текст можно произнести множеством разных способов, каждый из которых будет корректен, мы позволяем модели «подсмотреть» генерируемое аудио во время обучения. Вся подсмотренная информация передается через небольшое число вещественных чисел . Эта «утечка» позволяет модели сконцентрироваться на генерации выразительной речи вместо поиска усредненного, часто роботного, звучания, за которое не сильно штрафует функция потерь.
Часть модели, предсказывающая параметры , называется предиктором стиля, а сами параметры будем называть внешними стилевыми параметрами.
Итого, на первом этапе обучения, модель синтезирует звук на основе текста генерируемой речи и подсмотренной информации с генерируемого аудио. Средняя квадратичная ошибка относительно ground truth аудио и алгоритм обратного распространения ошибки обновляют веса модели так, чтобы синтез становился более похож на записанный в обучающих данных.
На втором этапе обучения, мы учимся приближать идеальные параметры с помощью одного лишь текста, так как на инференсе не будет аудио, которое можно подглядеть.
Эта же схема, но другими словами, была описана в статье. С помощью описанной схемы уже удавалось генерировать эмоции и ранее: бодрому стилю речи утреннего шоу и флегматичному переводу видео голосом Алисы уже пару лет. Всё действительно так. И на этом наблюдении нам придется спуститься дальше в кроличью нору.
Проблема старой схемы
В нашем случае, как и почти всегда, акустическая модель является авторегрессионной моделью. То есть она предсказывает свой результат по «кусочку», при этом опираясь на все предыдущие предсказанные части.
При этом невозможно предсказать правильно последний кусок аудио, если все предыдущие предсказаны неверно. Но в начале обучения модель гарантированно предсказывает ерунду. Поэтому при обучении авторегрессионных моделей используют следующий трюк: при предсказании каждого куска данных, все предыдущие предсказанные виртуально заменяются на истинно правильные. Таким образом, при каждой итерации мы учим модель делать предсказания на основе корректного, а не хаотичного входа.
Во время инференса же модель работает по аналогии с обучением, а именно генерирует каждый следующий кусок так, чтобы он был согласован с уже сгенерированными. Это позволяет создавать ровные конгруэнтные аудио.
Итого, на самом деле модель «подглядывает» ground truth аудио дважды: через внешние стилевые параметры, а также через классический метод обучения авторегрессии. И мы по умолчанию никак не контролируем, какую информацию модель будет брать из внешних стилевых параметров, а какую информацию из уже предсказанного начального куска речи. При этом внешние стилевые параметры мы можем контролировать на этапе инференса, тогда как авторегрессия сама решает в какую сторону ей идти.
Так уж получилось, что наши предыдущие модели закладывали бодрость/флегматичность речи во внешние стилевые параметры, которые мы могли контролировать. Что мы и делали для различных сценариев использования. Но стоило нам досыпать больше эмоций в обучающие данные, как все изменилось.
Нейронная сеть — простой зверь. У неё есть скаляр — функция потерь, которую сеть всеми силами пытается сделать меньше. И нейронной сети неинтересна человеческая интуиция про то, как этого стоит достигать. Вот и в нашем случае оказалось, что на наших новых данных лучше всего функция потерь минимизируется тогда, когда во внешних стилевых параметрах закладывается информация об акустике: реверберация в студии записи для этого аудио, условный тонус голосовых связок диктора и тому подобное. А информация же об эмоции извлекалась нейронной сетью из уже доступного куска речи. Такое распределение нагрузки не позволяло контролировать эмоцию на выходе. То есть просто не работало для наших целей.
Новый эмоциональный синтез
Первая идея, которая возникает для возвращения контроля над эмоцией синтеза — подача эмбеддинга эмоции на вход. Так мы можем одинаковым образом подавать информацию об эмоции и при обучении, и на инференсе. Но, к сожалению, это просто не работает на ожидаемом уровне.
Как мы рассуждали ранее, речь с точки зрения людей и с точки зрения нейронной сети устроена по-разному. Такой грубый сигнал, как лейбл эмоции, плохо воспринимается сетью, так как является человеческой условностью. Безусловно, с помощью известных инженерных трюков удалось бы выжать из такого подхода большее. Но решение становилось усложненным и переставало быть элегантным уже на начальном этапе разработки. Это указывало, что стоит смотреть в другую сторону.
И вновь обратимся к тезису, что не надо решать за модель, что и как ей делать. Что мы хотим от нашей модели для эмоционального синтеза? Чтобы информацию об эмоции модель извлекала из внешних контролируемых стилевых параметров. Тогда мы сможем форсировать эту информацию и на инференсе. При этом мы хотим минимизировать воздействие на модель для поддержания максимального качества синтеза.
Учитывая описанные два пожелания, остается как-будто единственный верный способ направления модели в нужную нам сторону: мы будем обучать модель так, чтобы во внешних стилевых параметрах содержалась информация об эмоции. При этом мы не будем контролировать, как именно эта информация должна быть там представлена. Здесь мы делаем ставку на то, что нейронные сети, помимо прочего, в основном обучаются по пути наименьшего сопротивления. То есть раз информация об эмоции будет доступна во внешних стилевых параметрах, то и незачем тратить ограниченные ресурсы, чтобы извлечь эту информацию откуда-либо еще. Тем самым мы убираем зависимость эмоции от слабо-контролируемой авторегрессии.
Далее приводим схему, как выглядит полученное решение:
Логика простая: если мы можем предсказать эмоцию с помощью только внешних стилевых параметров, значит информация об эмоции там содержится. Соответственно, мы добавляем к нашей модели обучаемую часть, которая будет предсказывать эмоцию по внешним стилевым параметрам. Градиенты от неё будут доходить до предиктора стиля, заставляя его в каком-то виде сохранять информацию об эмоции. При этом градиенты от классификатора эмоций никак не влияют на акустическую модель, не мешая ей заниматься главным — генерировать с лучшим возможным качеством.
На втором же этапе мы вновь учимся выдавать оптимальные внешние стилевые параметры, но в этот раз для этого мы используем не только текст, но и эмоцию.
По итогу получаем работающий синтез эмоциональной речи:
Эмоциональные оттенки
Наши внешние стилевые параметры принимают произвольные значения из n-мерного евклидова пространства. То есть по своей природе они являются непрерывными величинами, в отличие, например, от дискретных по своей природе эмбеддингов эмоций. Благодаря этому, взвешенная сумма внешних стилевых параметров также является валидными внешними стилевыми параметрами. Опять же в отличие от эмбеддингов, где среднее двух эмбеддингов часто разламывает модель.
Так, взвешенно сложив внешние стилевые параметры нейтральной эмоции и какой-нибудь новой эмоции из датасета, мы получили синтез с менее выраженной, но всё ещё читаемой эмоцией. Хотя в обучающих данных никаких полутонов не было. Мы замерили на наших асессорах, различают ли они разницу в выразительности эмоции. Оказалось, что большинство асессоров могут правильно ранжировать синтез по силе эмоции, что подтверждает способности контролировать не только эмоцию как класс, но и ее насыщенность.
Дальше — больше. В исходной модели одни и те же внешние стилевые параметры использовались на каждом шаге авторегрессии. Однако, никто не запрещает использовать различные параметры. Например, мы можем плавно переходить от нейтральных внешних стилевых параметров к эмоционально окрашенным к концу предложения. Отчего на выходе получаем синтез, где эмоция постепенно захлестывает Алису. Хотя в обучающих данных мы всегда имеем строго одну эмоцию на текст.
С продуктовой точки зрения это помогло нам со следующим сценарием. Эмоциональный окрас ответа Алисы может постепенно меняться в рамках одного ответа. Если менять эмоцию «по рубильнику», то получается довольно резкий и неестественный на слух переход. Мы же плавно перетекаем от одной эмоции к другой с помощью простой интерполяции внешних стилевых параметров. Сравните, например, эти два ответа Алисы:
Мы верим, что сделали очередной шаг по направлению к более человечному и эмпатичному виртуальному помощнику. И мы точно на этом не остановимся.
Надеемся, что вам будет интересно найти все эмоции обновлённой Алисы, и что она разделит с вами ваши яркие моменты.