Главная · Прочее · Нейросетевой синтез речи своими руками. Обзор синтезаторов речи для андроид Lazarus синтезатор речи

Нейросетевой синтез речи своими руками. Обзор синтезаторов речи для андроид Lazarus синтезатор речи

На сегодняшний день называется технология, способная преобразовывать текстовую информацию в обычную речь. С развитием "умных машин" эта технология становится всё более актуальной, и с каждым днём требует всё большего совершенства. Собственно, на данный момент разработан целый ряд методов синтеза речи, о которых мы и будем говорить.

Синтезаторы речи могут применяться в абсолютно различных сферах, и используются для решения множества задач, начиная от "начитывания" книг, производства "говорящих" детских игрушек, объявления остановок в общественном транспорте или в системах сервисных служб, и заканчивая медициной (тут стоит вспомнить о Стивене Хокинге , пользующемся синтезатором речи для связи с миром).

Итак, рассмотрим подробнее технологию и методы синтеза речи. Как уже упоминалось, существует несколько методов синтеза речи. Таким образом, можно выделить несколько основных подходов:

  • параметрический синтез;
  • конкатенативный (компиляционный) синтез;
  • синтез по правилам (по печатному тексту);

Параметрический синтез позволяет записывать речь для любого языка, однако его нельзя применять для не заданных заранее текстов. Параметрический синтез речи применяют тогда, когда набор сообщений ограничен. Качество же такого метода синтеза может быть очень высоким.

По сути дела, параметрический синтез речи - это реализация принципа работы вокодера . В случае параметрического синтеза звуковой сигнал представлен определённым числом непрерывно изменяющихся параметров. Для формирования гласных звуков используется генератор тонального сигнала, для согласных - генератор шума. Но такой метод обычно применяют для записи голоса в музыкальных композициях, и чаще речь идет даже не о чистом синтезе голоса, а, скорее, о модуляции.

Метод компиляционного синтеза основывается на составлении текстов из заранее записанного "словаря" элементов. Размер элемента системы должен быть не менее слова. Обычно запас элементов ограничивается несколькими сотнями слов, а содержание синтезируемых текстов - объёмом словаря. Этот метод синтеза речи широко используется в повседневной жизни - как правило, в различных справочных службах и технике, требующей оснащения системами речевого ответа.

Полный синтез речи по правилам может воспроизводить речь по заранее неизвестному тексту. Этот метод не использует элементов человеческой речи, а базируется на запрограммированных лингвистических и акустических алгоритмах .

Тут также существует своё разделение - можно выделить два подхода к этому методу синтеза. Первый - это формантный синтез речи по правилам, а второй - артикуляторный синтез. Формантный синтез базируется на формантах - частотных резонансах речевой акустической системы. Алгоритм формантного синтеза моделирует работу речевого тракта человека, работающего как набор резонаторов. Сегодня, к сожалению, большинство синтезаторов , работающих исключительно на формантном синтезе, понять без подготовки сложно, но, несомненно, это универсальная и перспективная технология. Артикуляторный метод пытается доработать недостатки формантного путем добавления в модель фонетических особенностей произнесения отдельных звуков.

Также существует технология синтеза речи по правилам, которая использует записанные отрезки естественной речи. Поскольку всё-таки чаще всего применяются компиляционные методы, скажем о них пару слов подробнее.

В зависимости от того, насколько велики "отрывки" речи, используемые для синтеза, выделяют такие типы синтеза:

  • микросегментный (микроволновый);
  • аллофонический;
  • дифонный;
  • полуслоговой;
  • слоговой;
  • синтез из единиц произвольного размера.

Чаще всего используются аллофонический и дифонный методы. Для дифонного метода синтеза речи базовыми элементами являются всевозможные двучленные комбинации фонем, а для аллофонного - сочетания левого и правого контекста (аллофон - вариант фонемы, который обусловлен её конкретным фонетическим окружением). При этом различные типы контекстов объединяются в классы по степени акустической близости.

Преимущество таких систем состоит в том, что они дают возможность синтезировать текст по не заданному заранее тексту, а недостаток - в том, что качество синтезированной речи несопоставимо с качеством речи естественной (на границах сшивки элементов могут возникать искажения). Также весьма трудно управлять интонационными характеристиками речи, так как характеристики отдельных слов могут изменяться в зависимости от контекста или типа фразы.

Впрочем, это всё в теории. На практике, на современном этапе развития, несмотря на активное продвижение в этой области, разработчики технологии синтеза речи всё-таки испытывают некоторые трудности, в основном связанные с искусственностью синтезируемой речи, отсутствием в ней эмоциональной окраски и с низкой помехоустойчивостью.

Дело в том, что любая синтезированная речь, как правило, воспринимается человеком с трудом. Это связано с тем, что пробелы в синтезированном тексте заполняет человеческий мозг , который задействует для этого дополнительные ресурсы, и человек может нормально воспринимать синтезированную речь только около 20 минут.

На восприятие речи также влияет её эмоциональная окраска. В случае с синтезированной речью она отсутствует. Хотя стоит отметить, что некоторые алгоритмы всё же позволяют в некоторой степени имитировать эмоциональную окраску речи путём изменения длительности фонем, пауз и модуляции тембра, но пока их работа далека от идеала.

Что касается третьей названной проблемы - низкой помехоустойчивости, то эксперименты показывают, что восприятию синтезированного текста мешают любые, даже самые небольшие посторонние шумы. Это опять-таки связано с тем, что для обработки синтезированной речи человеческий мозг задействует дополнительные центры, которые не используются при восприятии речи естественной.

В конце этой статьи мне хотелось бы привести некоторые примеры существующих синтезаторов речи.

Всем известны так называемые "читалки " - программы для более удобного чтения текста с монитора. Многие из нах используют программы речевого синтеза для озвучивания текста, например, Balabolka и Govorilka .

Для того чтобы подобные программы озвучивали тексты, необходимо также установить библиотеку SAPI (Speech API) и голосовые движки. Наиболее распространение две версии Speech API: SAPI4 и SAPI5.Обе библиотеки могут работать на одном компьютере. В операционных системах Windows XP, Windows Vista и Windows 7 уже установлены библиотеки SAPI5.

Помимо читалок, распространены программы экранного доступа. Примерами таких программ являются:

VIRGO 4 . Программа была создана для комфортной работы слепых и слабовидящих пользователей с Windows. Она позволяет выбрать ту информацию, которая будет произноситься голосом и ту, которая будет показываться на брайлевском дисплее. Для слабовидящих пользователей предусмотрена системой увеличения экрана "Галилео".

Программа Кобра 9.1 также упрощает работу с Windows для слепых и слабовидящих пользователей. Эта программа может выводить выводит информацию с компьютерного монитора с помощью речи, брайлевского дисплея и имеет функцию увеличения экрана.

Недавно передо мной встала проблема выбора голосового синтезатора речи. Основные требования — это поддержка русского языка и более-менее нормальное произношение.
Для тех, кто не в курсе того, что такое синтезатор речи, расскажу — это специальная программа, смысл работы которой заключается в преобразовании письменного текста в устную речь. Это и есть так называемый синтез.
Зачем это надо? Ну, например, когда надо записать голосовое сообщение чужим голосом. Иностранцам оно может быть полезно для того, чтобы услышать произношение того или иного слова. Синтезатор речи удобен для чтения, когда надо включить ребенку сказку, которой нет в аудиокнигах. Да и вообще, ситуации всякие бывают.
Так вот, в процессе выбора я нашел несколько очень полезных инструментов, среди которых работающих в режиме онлайн с поддержкой русского языка и сейчас я Вам о них и расскажу.

Переводчик Google

Вот поистине многоцелевой продукт, которых можно использовать совершенно по-разному. Главные преимущества:
— это совершенно бесплатный сервис;
— работа в режиме Онлайн без установки. Нужен только доступ в Интернет;
— на мой взгляд этот синтезатор речи имеет лучший голосовой модуль, самое близкое к натуральному;
— наверное самая лучшая команда разработчиков и техподдержка в мире;
— самое большое количество поддерживаемых языков.
К сожалению, вариант голоса только один — женский. Выбора я не нашел.

RHVoice

Отличный многоязычный синтезатор речи от российского разработчика — Ольги Яковлевой. Есть версии, как для операционных систем семейства Windows, так и для Linux. Разработчик синтезатора - Ольга Яковлева. Программа распространяется совершенно бесплатно и доступна на официальном сайте в двух вариантах: как SAPI5-совместимая самостоятельная версия и как модуль для бесплатной программы экранного доступа NVDA. Этот синтезатор голосовой речи умеет озвучивать русские тексты тремя голосами — Елена, Ирина и Александр.

Acapela

Acapela - это, пожалуй, один из самых популярных и распространенных голосовых синтезаторов в мире. Главная особенность — это озвучка текстов более чем на тридцати языках мира. Если рассматривать русский язык, то тут доступны два голоса - Николай и Алена. Причем последний более совершенен и естественен в плане произношения. В демонстрационном режиме на сайте доступен только голос Алена.
Программа доступна для скачивания на официальном сайте и поддерживает все популярные современные операционные системы — Windows, Linux, Mac. Есть даже версии для Android u iOS.

Vokalizer

Женских голос Milena — это ещё один очень популярный движок голосового синтезатора речи от компании Nuance — он очень высококачественный и естественно звучащий. Его Вы можете услышать в call-центрах и в различных сетевых речевых системах, а также в различных приложениях приложениях — таких как Moon+ Reader Pro, Full Screen Caller ID , Cool Reader, в навигационной программах TomTom, iGo Primo.
Среди плюсов можно отметить возможность установки различных словарей, регулировки громкости, ударения и скорости чтения.
Код программы открытый, скачать его бесплатно можно на официальном сайте, собственно как и инсталлятор самой программы.

Festival

Festival - это не просто очередной голосовой речевой синтезатор, а уже целая система распознавания и синтеза речи с различными API. Разработчик — Исследовательский Центр Речевых Технологий университета Эдинбурга.
Festival предназначен для поддержки нескольких языков. По умолчанию поддерживает английский, валлийский и испанский языки. Но есть возможность подключить голосовые пакеты других языков: чешский, финский, хинди, итальянский, маратхи, польский, русский и телугу.
Код программы открытый, сам голосовой синтезатор распространяется по лицензии open source и доступна только для операционных систем Linux. Правда есть портированная версия по Макинтош.

ESpeak

Последняя в моём обзоре система синтеза речи — программа ESpeak — разрабатывается уже около 8 лет. Последняя версия — 1.48.04 от 6 апреля 2014. Данный голосовой синтезатор речи кроссплатформенный — есть версии под Windows, Linux, Mac OS X, и даже под RISC OS, хотя последние две уже давно не поддерживаются.
Отдельно отмечу, что eSpeak используется в мобильных операционных системах Android, правда имеет при этом ряд существенных ошибок.
Программа поддерживает пятидесяти различных языков, поддержка которых указывается при установке программы.
Один из главных минусов это голосового синтезатора — генерирование голоса только в файл формата WAV. Скачать программу бесплатно можно на официальном сайте.

От себя добавлю лишь, что мне понравились RHVoice и Vokalizer, хотя тут во много дело индивидуальное и во многом зависит от того, что Вы хотите получить. Так что пробуйте, ставьте и смотрите. Я думаю, что один из представленных вариантов Вам обязательно должен подойти.

Сегодня синтезаторы речи, применяемые в стационарных компьютерных системах или мобильных устройствах, чем-то необычным уже не кажутся. Технологии шагнули далеко вперед и позволили воспроизвести человеческий голос. Как все это работает, где применяется, каков лучший речевой синтезатор и с какими потенциальными проблемами может столкнуться пользователь, смотрите ниже.

Что представляют собой речевые синтезаторы и где они применяются?

Синтезаторы речи представляют собой специальные программы, состоящие из нескольких модулей, которые позволяют переводить набранный на клавиатуре текст в обычную человеческую речь в виде звукового сопровождения.

Было бы наивно полагать, что сопутствующие библиотеки содержат абсолютно все слова или возможные фразы, записанные в студиях реальными людьми. Это просто физически невозможно. К тому же библиотеки фраз имели бы такой размер, что установить их даже на современные винчестеры большого объема, не говоря уже о мобильных девайсах, просто не представлялось бы возможным.

Для этого была разработана технология, получившая название Text-to-Speech (перевод текста в речь).

Наиболее широкое распространение синтезаторы речи получили в нескольких областях, к которым можно отнести самостоятельное изучение иностранных языков (программы нередко имеют поддержку в 50 языков и более), кода нужно услышать правильное произношение слова, прослушивание текстов книг вместо чтения, создание речевых и вокальных партий в музыке, использование их людьми с ограниченными возможностями, выдача поисковых запросов в виде озвученных слов и фраз и т. д.

Разновидности программ

В зависимости от области применения, все программы можно разделить на два основных типа: стандартные, непосредственно преобразующие текст в речь, и речевые или вокальные модули, применяемые в музыкальных приложениях.

Для более полного понимания картины рассмотрим оба класса, но больший упор будет сделан все-таки на синтезаторы речи в их непосредственном назначении.

Плюсы и минусы простейших речевых приложений

Что же касается преимуществ и недостатков программ такого типа, сначала рассмотрим все-таки недостатки.

Прежде всего нужно четко понимать, что компьютер - он и есть компьютер, который на данном этапе развития человеческую речь может синтезировать весьма приблизительно. В простейших программах зачастую наблюдаются проблемы с постановкой ударений в словах, пониженное качество звука, а в мобильных устройствах - повышенное энергопотребление, а иногда и несанкционированная загрузка речевых модулей.

Но и преимуществ хватает, ведь очень многие звуковую информацию воспринимают гораздо лучше, нежели визуальную. Удобство восприятия налицо.

Как пользоваться синтезатором речи?

Теперь несколько слов об основных принципах использования программ такого типа. Установить синтезатор речи любого типа можно без особых проблем. В стационарных системах используется стандартный инсталлятор, где основной задачей станет выбор поддерживаемых языковых модулей. Для мобильных девайсов установочный файл можно скачать из официального магазина или хранилища вроде Google Play или AppStore, после чего приложение инсталлируется в автоматическом режиме.

Как правило, при первом запуске никаких настроек, кроме установки языка по умолчанию, производить не нужно. Правда, иногда программа может предложить выбрать качество звучания (в стандартном варианте, применяемом повсеместно, частота дискретизации 4410 Гц, глубина 16 бит и битрейт 128 кбит/с). В мобильных устройствах эти показатели ниже. Тем не менее за основу берется определенный голос. С использованием стандартного шаблона произношения путем применения фильтров и эквалайзеров достигается звучание именно такого тембра.

В использовании можно выбрать несколько вариантов перевода вручную, озвучивание уже имеющего текста из файла, интеграция в другие приложения (например, веб-браузеры) с активацией выдачи поисковых результатов или прочтения текстового содержимого на страницах онлайн. Достаточно выбрать нужный вариант действий, язык и голос, которым все это будет произноситься. Многие программы имеют несколько разновидностей голосов: как мужских, так и женских. Для активации процесса воспроизведения обычно используется кнопка старта.

Если говорить о том, как отключить синтезатор речи, тут может быть несколько вариантов. В самом простом случае используется кнопка остановки воспроизведения в самой программе. В случае интеграции в браузер деактивация производится в настройках расширений или полным удалением плагина. А вот с мобильными устройствами, несмотря на непосредственное отключение, могут быть проблемы, о которых будет сказано отдельно.

В музыкальных программах настройки и ввод текста намного сложнее. Например, в приложении FL Studio есть свой речевой модуль, в котором можно выбрать несколько изменить настройки тональности, скорости воспроизведения и т. д. Для постановки ударений перед слогом используется символ «_». Но и такой синтезатор годится только для создания роботизированных голосов.

Но вот пакет Vocaloid от Yamaha относится к программам профессионального типа. Технология Text-to-Speech здесь реализована в наиболее полном объеме. В настройках, помимо стандартных параметров, можно выставить артикуляцию, глиссандо, использовать библиотеки с вокалом профессиональных исполнителей, составлять слова и фразы, подгоняя их под ноты, и еще кучу всего. Неудивительно, что пакет только с одним вокалом занимает порядка 4 Гб и более в установочном дистрибутиве, а после распаковки - вдвое-втрое больше.

Синтезаторы речи с русскими голосами: краткий обзор самых популярных

Но вернемся к самым простым приложениям и рассмотрим самые популярные из них.

RHVoice - по мнению большинства экспертов, лучший синтезатор речи, являющийся российской разработкой авторства В стандартном варианте доступно три голоса (Александр, Ирина, Елена). Настройки просты. А само приложение может использоваться и как самостоятельная программа, совместимая с SAPI5, и как экранный модуль.

Acapela - достаточно интересное приложение, главной особенностью которого является почти идеальная озвучка текста более чем на 30 языках мира. В обычной версии, правда, доступен только один голос (Алена).

Vocalizer - мощное приложение с женским голосом Milena. Очень часто эта программа применяется в call-центрах. Имеется множество настроек постановки ударения, громкости, скорости чтения и установки дополнительных словарей. Главное отличие состоит в том, что речевой движок может встраиваться в программы вроде Cool Reader, Moon+ Reader Pro или Full Screen Caller ID.

Festival - мощнейшая утилита синтеза и распознавания речи, созданная для систем Linux и Mac OS X. Приложение поставляется с открытым исходным кодом и, помимо стандартных языковых пакетов, имеет поддержку даже финского языка и хинди.

eSpeak - речевое приложение, поддерживающее более 50 языков. Главным недостатком считается сохранение файлов с синтезированной речью исключительно в формате WAV, который занимает уж очень много места. Зато программа является кроссплатформенной и может использоваться даже в мобильных системах.

Проблемы с синтезатором речи в Google Android

При установке «родного» синтезатора речи от Google, пользователи постоянно жалуются на то, что он самопроизвольно включает загрузку дополнительных языковых модулей, что может не только занимать достаточно длительный промежуток времени, но еще и расходует трафик.

Избавиться от этого в Android-системах можно очень просто. Для этого используем меню настроек, далее переходим в раздел языка и голосового ввода, выбираем голосовой поиск и на параметре распознавания речи оффлайн нажимаем на крестик (отключение). Дополнительно рекомендуется почистить кэш приложений и перезагрузить устройство. Иногда может потребоваться в самом приложении отключить показ уведомлений.

Что в итоге?

Поводя некий итог, можно сказать, что в большинстве случаев рядовым пользователям подойдут самые простые программы. Во всех рейтингах лидирует RHVoice. Но для музыкантов, которые хотят добиться естественного звучания голоса, чтобы разница между живым вокалом и компьютерным синтезом не ощущалась на слух, лучше отдать предпочтение программам типа Vocaloid, тем более что для них выпускается множество дополнительных голосовых библиотек, а настройки имеют столько возможностей, что примитивные приложения, как говорится, и рядом не стояли.

Синтез речи на сегодняшний день применяется в самых разных областях. Это и голосовые ассистенты, и IVR-системы, и умные дома, и еще много чего. Сама по себе задача, на мой вкус, очень наглядная и понятная: написанный текст должен произноситься так, как это бы сделал человек.

Некоторое время назад в область синтеза речи, как и во многие другие области, пришло машинное обучение. Выяснилось, что целый ряд компонентов всей системы можно заменить на нейронные сети, что позволит не просто приблизиться по качеству к существующим алгоритмам, а даже значительно их превзойти.

Синтез речи

Чтобы построить систему синтеза речи, нужна целая команда специалистов из разных областей. По каждой из них существует целая масса алгоритмов и подходов. Написаны докторские диссертации и толстые книжки с описанием фундаментальных подходов. Давайте для начала поверхностно разберемся с каждой их них.

Лингвистика

  1. Нормализация текста . Для начала нам нужно развернуть все сокращения, числа и даты в текст. 50е годы XX века должно превратиться в пятидесятые годы двадцатого века , а г. Санкт-Петербург, Большой пр. П.С. в город Санкт-Петербург, Большой проспект Петроградской Стороны . Это должно происходить так естественно, как если бы человека попросили прочитать написанное.
  2. Подготовка словаря ударений . Расстановка ударений может производиться по правилам языка. В английском ударение часто ставится на первый слог, а в испанском - на предпоследний. При этом из этих правил существует целая масса исключений, не поддающихся какому-то общему правилу. Их обязательно нужно учитывать. Для русского языка в общем смысле правил расстановки ударения вообще не существует, так что без словаря с расставленными ударениями совсем никуда не деться.
  3. Снятие омографии . Омографы - это слова, которые совпадают в написании, но различаются в произношении. Носитель языка легко расставит ударения: дверной замок и замок на горе . А вот ключ от замка - задача посложнее. Полностью снять омографию без учета контекста невозможно.

Просодика

  1. Выделение синтагм и расстановка пауз . Синтагма представляет относительно законченный по смыслу отрезок речи. Когда человек говорит, он обычно вставляет паузы между фразами. Нам нужно научиться разделять текст на такие синтагмы.
  2. Определение типа интонации . Выражение завершенности, вопроса и восклицания - самые простые интонации. А вот выразить иронию, сомнение или воодушевление задача куда сложнее.

Фонетика

  1. Получение транскрипции . Так как в конечном итоге мы работаем с произнесением, а не с написанием, то очевидно вместо букв (графем), логично использовать звуки (фонемы). Преобразование графемной записи в фонемную - отдельная задача, состоящая из множества правил и исключений.
  2. Вычисление параметров интонации . В этот момент нужно решить как будет меняться высота основного тона и скорость произнесения в зависимости от расставленных пауз, подобранной последовательности фонем и типа выражаемой интонации. Помимо основного тона и скорости есть и другие параметры, с которыми можно долго экспериментировать.

Акустика

  1. Подбор звуковых элементов . Системы синтеза оперируют так называемыми аллофонами - реализациями фонемы, зависящими от окружения. Записи из обучающих данных нарезаются на кусочки по фонемной разметке, которые образуют аллофонную базу. Каждый аллофон характеризуется набором параметров, таких как контекст (фонемы соседи), высота основного тона, длительность и прочие. Сам процесс синтеза представляет собой подбор правильной последовательности аллофонов, наиболее подходящих в текущих условиях.
  2. Модификация и звуковые эффекты . Для получившихся записей иногда нужна постобработка, какие-то специальные фильтры, делающие синтезируемую речь чуть ближе к человеческой или исправляющие какие-то дефекты.
Если вдруг вам показалось, что все это можно упростить, прикинуть в голове или быстро подобрать какие-то эвристики для отдельных модулей, то просто представьте, что вам нужно сделать синтез на хинди. Если вы не владеете языком, то вам даже не удастся оценить качество вашего синтеза, не привлекая кого-то, кто владел бы языком на нужном уровне. Мой родной язык русский, и я слышу, когда синтез ошибается в ударениях или говорит не с той интонацией. Но в тоже время, весь синтезированный английский для меня звучит примерно одинаково, не говоря уже о более экзотических языках.

Реализации

Мы попытаемся найти End-2-End (E2E) реализацию синтеза, которая бы взяла на себя все сложности, связанные с тонкостями языка. Другими словами, мы хотим построить систему, основанную на нейронных сетях, которая бы на вход принимала текст, а на выходе давала бы синтезированную речь. Можно ли обучить такую сеть, которая позволила бы заменить целую команду специалистов из узких областей на команду (возможно даже из одного человека), специализирующуюся на машинном обучении?

На запрос end2end tts Google выдает целую массу результатов. Во главе - реализация Tacotron от самого Google. Самым простым мне показалось идти от конкретных людей на Github, которые занимаются исследованиям в этой области и выкладывают свои реализации различных архитектур.

Я бы выделил троих:

Загляните к ним в репозитории, там целый кладезь информации. Архитектур и подходов к задаче E2E-синтеза довольно много. Среди основных:
  1. Tacotron (версии 1, 2).
  2. DeepVoice (версии 1, 2, 3).
  3. Char2Wav.
  4. DCTTS.
  5. WaveNet.
Нам нужно выбрать одну. Я выбрал Deep Convolutional Text-To-Speech (DCTTS) от Kyubyong Park в качестве основы для будущих экспериментов. Оригинальную статью можно посмотреть по ссылке . Давайте поподробнее рассмотрим реализацию.

Автор выложил результаты работы синтеза по трем различным базам и на разных стадиях обучения. На мой вкус, как не носителя языка, они звучат весьма прилично. Последняя из баз на английском языке (Kate Winslet"s Audiobook) содержит всего 5 часов речи, что для меня тоже является большим преимуществом, так как моя база содержит примерно сопоставимое количество данных.

Через некоторое время после того, как я обучил свою систему, в репозитории появилась информация о том, что автор успешно обучил модель для корейского языка. Это тоже довольно важно, так как языки могут сильно разниться и робастность по отношению к языку - это приятное дополнение. Можно ожидать, что в процессе обучения не потребуется особого подхода к каждому набору обучающих данных: языку, голосу или еще каким-то характеристикам.

Еще один важный момент для такого рода систем - это время обучения. Tacotron на том железе, которое у меня есть, по моим оценкам учился бы порядка 2 недель. Для прототипирования на начальном уровне мне показалось это слишком ресурсоемким. Педали, конечно, крутить не пришлось бы, но на создание какого-то базового прототипа потребовалось бы очень много календарного времени. DCTTS в финальном варианте учится за пару дней.

У каждого исследователя есть набор инструментов, которыми он пользуется в своей работе. Каждый подбирает их себе по вкусу. Я очень люблю PyTorch. К сожалению, на нем реализации DCTTS я не нашел, и пришлось использовать TensorFlow. Возможно в какой-то момент выложу свою реализацию на PyTorch.

Данные для обучения

Хорошая база для реализации синтеза - это основной залог успеха. К подготовке нового голоса подходят очень основательно. Профессиональный диктор произносит заранее подготовленные фразы в течение многих часов. Для каждого произнесения нужно выдержать все паузы, говорить без рывков и замедлений, воспроизвести правильный контур основного тона и все это в купе с правильной интонацией. Кроме всего прочего, не все голоса одинаково приятно звучат.

У меня на руках была база порядка 8 часов, записанная профессиональным диктором. Сейчас мы с коллегами обсуждаем возможность выложить этот голос в свободный доступ для некоммерческого использования. Если все получится, то дистрибутив с голосом помимо самих записей будет включать в себя точные текстовки для каждой из них.

Начнем

Мы хотим создать сеть, которая на вход принимала бы текст, а на выходе давала бы синтезированный звук. Обилие реализаций показывает, что это возможно, но есть конечно и ряд оговорок.

Основные параметры системы обычно называют гиперпараметрами и выносят в отдельный файл, который называется соответствующим образом: hparams.py или hyperparams.py , как в нашем случае. В гиперпараметры выносится все, что можно покрутить, не трогая основной код. Начиная от директорий для логов, заканчивая размерами скрытых слоев. После этого гиперпараметры в коде используются примерно вот так:

From hyperparams import Hyperparams as hp batch_size = hp.B # размер батча берем из гиперпараметров
Далее по тексту все переменные имеющие префикс hp. берутся именно из файла гиперпараметров. Подразумевается, что эти параметры не меняются в процессе обучения, поэтому будьте осторожны перезапуская что-то с новыми параметрами.

Текст

Для обработки текста обычно используются так называемый embedding-слой, который ставится самым первым. Суть его простая - это просто табличка, которая каждому символу из алфавита ставит в соответствие некий вектор признаков. В процессе обучения мы подбираем оптимальные значения для этих векторов, а когда синтезируем по готовой модели, просто берем значения из этой самой таблички. Такой подход применяется в уже довольно широко известных Word2Vec, где строится векторное представление для слов.

Для примера возьмем простой алфавит:

["a", "b", "c"]
В процессе обучения мы выяснили, что оптимальные значения каждого их символов вот такие:

{ "a": , "b": , "c": }
Тогда для строчки aabbcc после прохождения embedding-слоя мы получим следующую матрицу:

[, , , , , ]
Эта матрица дальше подается на другие слои, которые уже не оперируют понятием символ.

В этот момент мы видим первое ограничение, которое у нас появляется: набор символов, который мы можем отправлять на синтез, ограничен. Для каждого символа должно быть какое-то ненулевое количество примеров в обучающих данных, лучше с разным контекстом. Это значит, что нам нужно быть осторожными в выборе алфавита.

В своих экспериментах я остановился на варианте:

# Алфавит задается в файле с гиперпараметрами vocab = "E абвгдеёжзийклмнопрстуфхцчшщъыьэюя-"
Это алфавит русского языка, дефис, пробел и обозначение конца строки. Тут есть несколько важных моментов и допущений:

  1. Я не добавлял в алфавит знаки препинания. С одной стороны, мы действительно их не произносим. С другой, по знакам препинания мы делим фразу на части (синтагмы), разделяя их паузами. Как система произнесет казнить нельзя помиловать ?
  2. В алфавите нет цифр. Мы ожидаем, что они будут развернуты в числительные перед подачей на синтез, то есть нормализованы. Вообще все E2E-архитектуры, которые я видел, требуют именно нормализованный текст.
  3. В алфавите нет латинских символов. Английский система уметь произносить не будет. Можно попробовать транслитерацию и получить сильный русский акцент - пресловутый лет ми спик фром май харт .
  4. В алфавите есть буква ё . В данных, на который я обучал систему, она стояла там, где нужно, и я решил этот расклад не менять. Однако, в тот момент, когда я оценивал получившиеся результаты, выяснилось, что теперь перед подачей на синтез эту букву тоже нужно ставить правильно, иначе система произносит именно е , а не ё .
В будущих версиях можно уделить каждому из пунктов более пристальное внимание, а пока оставим в таком немного упрощенном виде.

Звук

Почти все системы оперируют не самим сигналом, а разного рода спектрами полученными на окнах с определенным шагом. Я не буду вдаваться в подробности, по этой теме довольно много разного рода литературы. Сосредоточимся на реализации и использованию. В реализации DCTTS используются два вида спектров: амплитудный спектр и мел-спектр.

Считаются они следующим образом (код из этого листинга и всех последующих взят из реализации DCTTS, но видоизменен для наглядности):

# Получаем сигнал фиксированной частоты дискретизации y, sr = librosa.load(wavename, sr=hp.sr) # Обрезаем тишину по краям y, _ = librosa.effects.trim(y) # Pre-emphasis фильтр y = np.append(y, y - hp.preemphasis * y[:-1]) # Оконное преобразование Фурье linear = librosa.stft(y=y, n_fft=hp.n_fft, hop_length=hp.hop_length, win_length=hp.win_length) # Амплитудный спектр mag = np.abs(linear) # Мел-спектр mel_basis = librosa.filters.mel(hp.sr, hp.n_fft, hp.n_mels) mel = np.dot(mel_basis, mag) # Переводим в децибелы mel = 20 * np.log10(np.maximum(1e-5, mel)) mag = 20 * np.log10(np.maximum(1e-5, mag)) # Нормализуем mel = np.clip((mel - hp.ref_db + hp.max_db) / hp.max_db, 1e-8, 1) mag = np.clip((mag - hp.ref_db + hp.max_db) / hp.max_db, 1e-8, 1) # Транспонируем и приводим к нужным типам mel = mel.T.astype(np.float32) mag = mag.T.astype(np.float32) # Добиваем нулями до правильных размерностей t = mel.shape num_paddings = hp.r - (t % hp.r) if t % hp.r != 0 else 0 mel = np.pad(mel, [, ], mode="constant") mag = np.pad(mag, [, ], mode="constant") # Понижаем частоту дискретизации для мел-спектра mel = mel[::hp.r, :]
Для вычислений почти во всех проектах E2E-синтеза используется библиотека LibROSA (https://librosa.github.io/librosa/). Она содержит много полезного, рекомендую заглянуть в документацию и посмотреть, что в ней есть.

Теперь давайте посмотрим как амплитудный спектр (magnitude spectrum) выглядит на одном из файлов из базы, которую я использовал:


Такой вариант представления оконных спекторов называется спектрограммой. На оси абсцисс располагается время в секундах, на оси ординат - частота в герцах. Цветом выделяется амплитуда спектра. Чем точка ярче, тем значение амплитуды больше.

Мел-спектр - это амплитудный спектр, но взятый на мел-шкале с определенным шагом и окном. Количество шагов мы задаем заранее, в большинстве реализаций для синтеза используется значение 80 (задается параметром hp.n_mels ). Переход к мел-спектру позволяет сильно сократить количество данных, но этом сохранить важные для речевого сигнала характеристики. Мел-спектрограмма для того же файла выглядит следующим образом:


Обратите внимание на прореживание мел-спектров во времени на последней строке листинга. Мы берем только каждый 4 вектор (hp.r == 4 ), соответственно уменьшая тем самым частоту дискретизации. Синтез речи сводится к предсказанию мел-спектров по последовательности символов. Идея простая: чем меньше сети приходится предсказывать, тем лучше она будет справляться.

Хорошо, мы можем получить спектрограмму по звуку, но послушать мы ее не можем. Соответственно нам нужно уметь восстанавливать сигнал обратно. Для этих целей в системах часто используется алгоритм Гриффина-Лима и его более современные интерпретации (к примеру, RTISILA, ссылка). Алгоритм позволяет восстановить сигнал по его амплитудным спектрам. Реализация, которую использовал я:

Def griffin_lim(spectrogram, n_iter=hp.n_iter): x_best = copy.deepcopy(spectrogram) for i in range(n_iter): x_t = librosa.istft(x_best, hp.hop_length, win_length=hp.win_length, window="hann") est = librosa.stft(x_t, hp.n_fft, hp.hop_length, win_length=hp.win_length) phase = est / np.maximum(1e-8, np.abs(est)) x_best = spectrogram * phase x_t = librosa.istft(x_best, hp.hop_length, win_length=hp.win_length, window="hann") y = np.real(x_t) return y
А сигнал по амплитудной спектрограмме можно восстановить вот так (шаги, обратные получению спектра):

# Транспонируем mag = mag.T # Денормализуем mag = (np.clip(mag, 0, 1) * hp.max_db) - hp.max_db + hp.ref_db # Возвращаемся от децибел к аплитудам mag = np.power(10.0, mag * 0.05) # Восстанавливаем сигнал wav = griffin_lim(mag**hp.power) # De-pre-emphasis фильтр wav = signal.lfilter(, , wav)
Давайте попробуем получить амплитудный спектр, восстановить его обратно, а затем послушать.

Оригинал:


Восстановленный сигнал:
На мой вкус, результат стал хуже. Авторы Tacotron (первая версия также использует этот алгоритм) отмечали, что использовали алгоритм Гриффина-Лима как временное решение для демонстрации возможностей архитектуры. WaveNet и ему подобные архитектуры позволяют синтезировать речь лучшего качества. Но они более тяжеловесные и требуют определенных усилий для обучения.

Обучение

DCTTS, который мы выбрали, состоит из двух практически независимых нейронных сетей: Text2Mel и Spectrogram Super-resolution Network (SSRN).


Text2Mel предсказывает мел-спектр по тексту, используя механизм внимания (Attention), который увязывает два энкодера (TextEnc, AudioEnc) и один декодер (AudioDec). Обратите внимание, что Text2Mel восстанавливает именно разреженный мел-спектр.

SSRN восстанавливает из мел-спектра полноценный амплитудный спектр, учитывая пропуски кадров и восстанавливая частоту дискретизации.

Последовательность вычислений довольно подробно описана в оригинальной статье. К тому же есть исходный код реализации, так что всегда можно отладиться и вникнуть в тонкости. Обратите внимание, что автор реализации отошел в некоторых местах от статьи. Я бы выделил два момента:

  1. Появились дополнительные слои для нормализации (normalization layers), без которых, по словам автора, ничего не работало.
  2. В реализации используется механизм исключения (dropout) для лучшей регуляризации. В статье этого нет.
Я взял голос, включающий в себя 8 часов записей (несколько тысяч файлов). Оставил только записи, которые:
  1. В текстовках содержат только буквы, пробелы и дефисы.
  2. Длина текстовок не превышает hp.max_N .
  3. Длина мел-спектров после разреживания не превышает hp.max_T .
У меня получилось чуть больше 5 часов. Посчитал для всех записей нужные спекты и поочередно запустил обучение Text2Mel и SSRN. Все это делается довольно безхитростно:

$ python prepro.py $ python train.py 1 $ python train.py 2
Обратите внимание, что в оригинальном репозитории prepro.py именуется как prepo.py . Мой внутренний перфекционист не смог этого терпеть, так что я его переименовал.

DCTTS содержит только сверточные слои, и в отличие от RNN реализаций, вроде Tacotron, учится значительно быстрее.

На моей машине с Intel Core i5-4670, 16 Gb RAM и GeForce 1080 на борту 50 тыс. шагов для Text2Mel учится за 15 часов, а 75 тыс. шагов для SSRN - за 5 часов. Время требуемое на тысячу шагов в процессе обучения у меня почти не менялось, так что можно легко прикинуть, сколько потребуется времени на обучение с большим количеством шагов.

Размер батча можно регулировать параметром hp.B . Периодически процесс обучения у меня валился с out-of-memory, так что я просто делил на 2 размер батча и перезапускал обучение с нуля. Полагаю, что проблема кроется где-то в недрах TensorFlow (я использовал не самый свежий) и тонкостях реализации батчинга. Я с этим разбираться не стал, так как на значении 8 все падать перестало.

Результат

После того, как модели обучились, можно наконец запустить и синтез. Для этого заполняем файлик с фразами и запускаем:

$ python synthesize.py
Я немного поправил реализацию, чтобы генерировать фразы из нужного файла.

Результаты в виде WAV-файлов будут сохранены в директорию samples . Вот примеры синтеза системой, которая получилась у меня:

Выводы и ремарки

Результат превзошел мои личные ожидания по качеству. Система расставляет ударения, речь получается разборчивой, а голос узнаваем. В целом получилось неплохо для первой версии, особенно с учетом того, что для обучения использовалось всего 5 часов обучающих данных.

Остаются вопросы по управляемости таким синтезом. Пока невозможно даже исправить ударение в слове, если оно неверное. Мы жестко завязаны на максимальную длину фразы и размер мел-спектрограммы. Нет возможности управлять интонацией и скоростью воспроизведения.

Я не выкладывал мои изменения в коде оригинальной реализации. Они коснулись только загрузки обучающих данных и фраз для синтеза уже по готовой системе, а также значений гиперпараметров: алфавит (hp.vocab ) и размер батча (hp.B ). В остальном реализация осталась оригинальная.

В рамках рассказа я совсем не коснулся темы продакшн реализации таких систем, до этого полностью E2E-системам синтеза речи пока очень далеко. Я использовал GPU c CUDA, но даже в этом случае все работает медленнее реального времени. На CPU все работает просто неприлично медленно.

Все эти вопросы будут решаться в ближайшие годы крупными компаниями и научными сообществами. Уверен, что это будет очень интересно.

Теги: Добавить метки

VoiceFabric - это интернет-сервис, позволяющий озвучивать синтезированным голосом любую текстовую информацию.
На сайте voicefabric.ru доступен демо-синтез с различными голосами, с его помощью Вы можете оценить качество синтеза. На сегодняшний день доступно 8 голосов (женских и мужских), которые умеют говорить на 3-х языках (русский, английский, казахский).

Синтез речи от ЦРТ полезен при необходимости персонификации исходящих голосовых сообщений. Решение позволяет полностью отказаться от услуг диктора и предзаписи звуковых роликов в IVR-меню, то есть написанный текст моментально преобразуется в звукозапись и озвучивается клиенту в телефонную линию.

Также, используя синтезированные голоса, можно озвучивать книги, видеоролики, записывать голосовые открытки без потери «естественной» интонации. Voicefabric гарантирует грамотную расстановку ударений, правильное чтение сокращений, чисел, аббревиатур.

Вы можете зарегистрироваться на сайте voicefabric.ru и получить бесплатные секунды синтеза, а также доступ к программному интерфейсу сервиса.