9 класс

Лучшие синтезаторы речи онлайн. Chrome-расширение SpeakIt!: синтезатор речи внутри браузера для тех, кому лень читать

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

Недавно наткнулся на комплекс речевых технологий Яндекса, включающий распознавание и синтез речи, голосовую активацию и выделение смысловых объектов в произносимом тексте. Речевые технологии научился распознавать голосовую активацию, с её помощью можно записывать sms сообщения и оставлять заметки голосом, не используя клавиатуру, напрямую обращаться к тому бэкэнду, который успешно применяется в мобильных приложениях Яндекса. Например SpeechKit Mobile SDK позволяет встроить распознавание и синтез речи, а также голосовую активацию Яндекса в мобильное приложение для iOS, Android (на данный момент русский, английский, турецкий и украинский языки) или Windows Phone (русский язык). Голосовое управление сделает ваше приложение более удобным для пользователя, особенно если у пользователя заняты руки. Не касаясь экрана, он сможет вызвать нужную функцию одной фразой.

Меня всегда привлекала технология синтеза речи, которая позволяет переводить текст в речь. Быстро набросал текст, озвучил его голосом (Milena TTS [Русский]) и впихнул в ролик, на любую тематику. Особенно это будет интересно пользователям имеющим проблемы с речью или тем кто по каким-либо причинам стесняется своего голоса.

Голоса от Яндекс показались своеобразными, симпатичными и легко воспринимаемыми человеческим ухом, особенно мужские голоса zahar и ermil. Женские голоса jane, oksana, alyss и omazh дико напугали и на мой взгляд не дотягивают до вершин SuperDazhki. Так как же услышать новые голоса на обычном домашнем компьютере? Для этого пришлось перелопатить интернет и решение было найдено в виде обычно скрипта.

1. Для начала нам нужно оказаться на странице и нажать на кнопку «Кабинет разработчика».


Сразу попадаете в личный кабинет и нажимаем кнопку «Получить ключ». Далее жмакаем по кнопке «SpeechKit Cloud».


Заполняем все поля помеченные красной звёздочкой и нажимаем кнопку «Отправить».


Ключ мгновенно будет получен, после чего его нужно скопировать.


Теперь перейдём по этой , где увидим различные параметры запроса, speaker (голос синтезированной речи), формат ответов и примеры URL. Эта Китайская грамота обычному пользователю покажется слишком сложной, поэтому упростим наши действия (или наоборот усложним) организовав простой скрипт.

2. Качаем программу Notepad++ на свой компьютер (). Устанавливаем.

3. Создадим файл index.html. У кого нет желания создавать в ручную, скачайте по этой .


Меняем имя файла: index.html. Тип файла: Все файлы. Кодировка: UTF-8. Нажимаем кнопку «Сохранить». Важно сохранить файл index.html в корне системного диска или в любой папке на системном диске.


Теперь сохранённый файл нужно отредактировать. Откройте файл при помощи Notepad++.


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

В дальнейшем два раза щёлкаем по файлу index.html и в браузере получаем следующее.


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

Помогите проекту в его развитии:
Карта Сбербанка: 676280139020834994
Яндекс.Деньги: 410012054992141
Webmoney: WMR-кошелёк R429054927097
WMZ-кошелёк Z401294377967

Вы жаждете информации, но ваш мозг устал её зрительно воспринимать? В конце рабочего дня не осталось концентрации внимания? А может быть вам просто лень читать?

Прежде чем искоренять в себе лень, не лишним будет с ней подружиться. На самом деле это верная и мудрая подруга, которая в содружестве с парочкой импульсов мозга может научить многим тонкостям в жизни, где обойти можно не то что большие горы, но даже маленькие пригорки. Как можно жить, не напрягаясь? Лень знает ответ на этот вопрос по каждой отдельной ситуации.

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

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

Chrome-расширение SpeakIt!: синтезатор речи внутри браузера для тех, кому лень читать

Расширение для браузеров на базе Chromium SpeakIt! может читать текст на более чем 50-ти языках, включая русский. Русскоязычные голосовые движки в него уже установлены, так что не нужно никаких дополнительных телодвижений по установке отдельных программных компонентов. Всё, что нужно сделать, преодолев на пару минут свою лень, это установить из магазина Google Chrome расширение SpeakIt!. Оно поставляется совершенно бесплатно.

После установки расширение SpeakIt! встраивается в панель инструментов браузера кнопкой в виде значка динамика. Нажатие левой клавишей мышки откроет мини-интерфейс расширения с кнопкой запуска воспроизведения речи и кнопкой остановки.

Правый клик по кнопке SpeakIt! откроет контекстное меню, где нам нужно выбрать команду «Параметры».

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

Выбор русскоязычного диктора мужским или женским голосом присутствует только для голосового движка iSpeech. Движок Speakit! может читать только женским голосом. А движок native могут смело выставлять те, кто привыкли к бархатистому голосу Digalo Николая. Вводим в поле «Проверка» любую фразу и тестируем несколько голосовых движков и дикторов. Это поможет каждому подобрать для себя оптимальное воспроизведение речи. Если интернет-публикация на английском, соответственно, тестируем англоязычные голосовые движки.

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

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

  1. Клиент звонит в интернет – магазин и ему предлагают ввести номер заказа;
  2. Введенные абонентом значения по DTMF передаются в AGI скрипт;
  3. По номеру заказа, мы формируем SQL – запрос к базе данных, где храним информацию о заказах. Из соответствующей таблицы мы получаем статус заказа и имя клиента;
  4. Мы формируем строку, которую необходимо озвучить клиенту и отправляем ее на аудио-генерацию в сторону API Yandex.SpeechKit (TTS технология – text to speech);
  5. Получаем аудио файл от Yandex, декодируем его в нужный нам формат (.wav, 8k) и воспроизводим клиенту;
  6. Удаляем воспроизведенный файл и завершаем звонок клиента;

На наш взгляд это любопытная автоматизация. Приступаем к настройке? :)

Получение API - токена Yandex.SpeechKit

Для знакомства с технологией Яндекс предоставляет бесплатный тестовый период в 1 месяц с момента отправки первого запроса. После этого, чтобы продолжить использование Yandex. SpeechKit Cloud нужно заключить договор. Подробности условия использования можно прочитать .

Первым делом перейдите в кабинет разработчика по ссылке https://developer.tech.yandex.ru и нажмите Получить ключ :

  • Имя ключа - введите имя для ключа. Например, Asterisk + TTS ;
  • Подключение - выберите из списка SpeechKit Cloud ;

Запоминаем значение, которое выделено красным на скриншоте выше – это и есть ваш токен. Переходим к настройке AGI – скрипта.

Создаем таблицу с заказами

Создадим SQL – таблицу, в которой будем хранить данные о заказах. В лабораторных целях, мы развернем ее на том же хосте, что и IP – АТС Asterisk (+ это снизит задержку и процессинг по времени). Итак, вводим следующие команды в консоли сервера (предварительно подключитесь по SSH):

Use asteriskcdrdb; CREATE TABLE zakazy(name varchar(20),phone varchar(20),nomerzakaza varchar(20),status varchar(20)); INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Александр", "79257777777", 300388, "Отправлен"); INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Иван", "79251111111", 476656, "Оплачен"); INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Сергей", "79252222222", 0089822, "Доставлен");

Мы создали и наполнили таблицу. Теперь необходимо создать пользователя, который сможет иметь SELECT – доступ к таблице:

CREATE USER "логин_mysql"@"localhost" IDENTIFIED BY "пароль_mysql"; GRANT SELECT ON asteriskcdrdb.zakazy TO "логин_mysql";

Запомните ваш логин и пароль и переходите к следующему шагу – адаптации скрипта AGI. Традиционно, комментарии к коду после двойного слеша // :

AGI - скрипт

Ниже представлена структура скрипта:

#!/usr/bin/php -q get_data("custom/generate", 6000, 10); //принимаем DTMF от клиента; $number= $result["result"]; //записываем в переменную введенный клиентом номер заказа; $hostname = "localhost"; // у нас localhost. У вас может быть IP адрес сервера, на котором хранится БД с заказами (настройте предварительно pg_hba.conf на удаленном хосте); $username = "логин_mysql"; // логин, который вы создали этапом ранее; $password = "пароль_mysql"; // пароль, который вы создали этапом ранее; $dbName = "asteriskcdrdb"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName) or die(mysql_error()); $query = "SELECT * FROM zakazy WHERE `nomerzakaza`="$number";"; // подключаемся и парсим данные по номеру заказа; $res=mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_assoc($res)) { $status = $row["status"]; $name = $row["name"]; // имя и статус, полученные из SQL пишем в переменные; }; $str = "Дорогой ".$name."! Статус вашего заказа ".$status." Спасибо за обращение, всего доброго!"; // формируем строку, которую необходимо синтезировать; $qs = http_build_query(array("format" => "wav","lang" => "ru-RU","speaker" => "jane","key" => "ваш_токен","emotion" => "good", "text" => $str)); //описываем переменные, которые будем отправлять в сторону API Яндекса. Вы можете регулировать формат файла, локаль, спикера (мужской или женский голоса) и эмоциональный окрас. Заменить "ваш_токен" на ключ, полученный от API Yandex. SpeechKit Cloud; $ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n"))); $soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); $file = fopen("file1.wav", "w"); fwrite($file, $soundfile); fclose($file); // получаем аудио файл (сохраняем его как file1.wav); shell_exec("sox -t raw -r 48k -e signed-integer -b 16 -c 1 file1.wav -t wav -r 8k -c 1 /var/lib/asterisk/sounds/ru/custom/output1.wav"); // выполняем преобразование аудио в нужный для Asterisk аудио-формат и копируем его в директорию /var/lib/asterisk/sounds/ru/custom/; shell_exec("chown asterisk:asterisk /var/lib/asterisk/sounds/ru/custom/output1.wav"); shell_exec("chmod 775 /var/lib/asterisk/sounds/ru/custom/output1.wav"); // даем файлу нужные пермишны; $agi->exec("Playback","custom/output1"); // передаем в AGI команду проиграть полученный аудио – файл; shell_exec("rm -f /var/lib/asterisk/sounds/ru/custom/output1.wav"); shell_exec("rm -f file1.wav"); // удаляем оба файла; ?> Скачать скрипт AGI

После загрузки файла, сохраните его с расширением.php

Сохраните скрипт под именем tts.php в директории /var/lib/asterisk/agi-bin и дайте следующие команды в консоль сервера:

Dos2unix /var/lib/asterisk/agi-bin/tts.php chown asterisk:asterisk /var/lib/asterisk/agi-bin/tts.php chmod 775 /var/lib/asterisk/agi-bin/tts.php

Адаптируем функционал в «продакшн»

Итак, первым делом, открываем файл /etc/asterisk/extensions_custom.conf для редактирования и добавляем в него следующую запись:

Exten => s,1,Answer() exten => s,2,AGI(tts.php)

Очень хорошо. Сделаем вызов кастомного контекста из FreePBX. Для этого воспользуемся модулем . Переходим по пути Admin Custom Destinations и нажимаем Add Destination :


Нажимаем Submit и Apply Config . Мы хотим чтобы из главного IVR – меню клиент при нажатии 4 мог бы узнать статус своего заказа. Переходим в главный IVR и в секции IVR Entries добавляем следующее:

Готово. Если что – либо не получилось, напишите нам в комментариях, постараемся помочь:)

Полезна ли Вам эта статья?

Пожалуйста, расскажите почему?

Нам жаль, что статья не была полезна для вас:(Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

технология распознавания речи

Yandex Speechkit Автопоэт .

Подготовка текста

Произношение и интонирование

странице или на специальном ресурсе сайт

Многим из вас наверняка доводилось управлять компьютером или смартфоном с помощью голоса. Когда вы говорите Навигатору «Поехали на Гоголя, 25» или произносите в приложении Яндекс поисковый запрос, технология распознавания речи преобразует ваш голос в текстовую команду. Но есть и обратная задача: превратить текст, который есть в распоряжении компьютера, в голос.

В Яндексе для озвучивания текстов используется технология синтеза речи из комплекса Yandex Speechkit . Она, например, позволяет узнать, как произносятся иностранные слова и фразы в Переводчике. Благодаря синтезу речи собственный голос получил и Автопоэт .

Подготовка текста

Произношение и интонирование

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

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

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

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

","contentType":"text/html","amp":"

Многим из вас наверняка доводилось управлять компьютером или смартфоном с помощью голоса. Когда вы говорите Навигатору «Поехали на Гоголя, 25» или произносите в приложении Яндекс поисковый запрос, технология распознавания речи преобразует ваш голос в текстовую команду. Но есть и обратная задача: превратить текст, который есть в распоряжении компьютера, в голос.

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

В Яндексе для озвучивания текстов используется технология синтеза речи из комплекса Yandex Speechkit . Она, например, позволяет узнать, как произносятся иностранные слова и фразы в Переводчике. Благодаря синтезу речи собственный голос получил и Автопоэт .

Подготовка текста

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

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

Произношение и интонирование

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

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

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

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

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

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

","instantArticle":"

Многим из вас наверняка доводилось управлять компьютером или смартфоном с помощью голоса. Когда вы говорите Навигатору «Поехали на Гоголя, 25» или произносите в приложении Яндекс поисковый запрос, технология распознавания речи преобразует ваш голос в текстовую команду. Но есть и обратная задача: превратить текст, который есть в распоряжении компьютера, в голос.

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

В Яндексе для озвучивания текстов используется технология синтеза речи из комплекса Yandex Speechkit . Она, например, позволяет узнать, как произносятся иностранные слова и фразы в Переводчике. Благодаря синтезу речи собственный голос получил и Автопоэт .

Подготовка текста

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

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

Произношение и интонирование

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

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

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

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

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

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

"},"proposedBody":{"source":"

Многим из вас наверняка доводилось управлять компьютером или смартфоном с помощью голоса. Когда вы говорите Навигатору «Поехали на Гоголя, 25» или произносите в приложении Яндекс поисковый запрос, технология распознавания речи преобразует ваш голос в текстовую команду. Но есть и обратная задача: превратить текст, который есть в распоряжении компьютера, в голос.

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

В Яндексе для озвучивания текстов используется технология синтеза речи из комплекса Yandex Speechkit . Она, например, позволяет узнать, как произносятся иностранные слова и фразы в Переводчике. Благодаря синтезу речи собственный голос получил и Автопоэт .

Подготовка текста

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

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

Произношение и интонирование

Когда транскрипция готова, компьютер рассчитывает, как долго будет звучать каждая фонема, то есть сколько в ней фреймов — так называют фрагменты длиной 25 миллисекунд. Затем каждый фрейм описывается по множеству параметров: частью какой фонемы он является и какое место в ней занимает; в какой слог входит эта фонема; если это гласная, то ударная ли она; какое место она занимает в слоге; слог — в слове; слово — в фразе; какие знаки препинания есть до и после этой фразы; какое место фраза занимает в предложении; наконец, какой знак стоит в конце предложения и какова его главная интонация.

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

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

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

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

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

Многим из вас наверняка доводилось управлять компьютером или смартфоном с помощью голоса. Когда вы говорите Навигатору «Поехали на Гоголя, 25» или произносите в приложении Яндекс поисковый запрос, технология распознавания речи преобразует ваш голос в текстовую команду. Но есть и обратная задача: превратить текст, который есть в распоряжении компьютера, в голос.

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

В Яндексе для озвучивания текстов используется технология синтеза речи из комплекса Yandex Speechkit . Она, например, позволяет узнать, как произносятся иностранные слова и фразы в Переводчике. Благодаря синтезу речи собственный голос получил и Автопоэт .

Подготовка текста

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

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

Произношение и интонирование

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

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

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

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

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

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

","contentType":"text/html"},"authorId":"24151397","slug":"kak-eto-rabotaet-sintez-rechi","canEdit":false,"canComment":false,"isBanned":false,"canPublish":false,"viewType":"minor","isDraft":false,"isOnModeration":false,"isOutdated":false,"isSubscriber":false,"commentsCount":55,"modificationDate":"Tue Apr 03 2018 18:56:00 GMT+0000 (UTC)","isAutoPreview":false,"showPreview":true,"approvedPreview":{"source":"

Когда вы говорите Навигатору «Поехали на Гоголя, 25» или произносите вслух поисковый запрос, технология распознавания речи преобразует ваш голос в текстовую команду. Есть и обратная задача: превратить текст в голос. Иногда достаточно пригласить диктора и просто записать нужные слова и фразы, но с произвольными текстами это не сработает. Здесь пригодится технология синтеза речи.

","contentType":"text/html"},"proposedPreview":{"source":"

Когда вы говорите Навигатору «Поехали на Гоголя, 25» или произносите вслух поисковый запрос, технология распознавания речи преобразует ваш голос в текстовую команду. Есть и обратная задача: превратить текст в голос. Иногда достаточно пригласить диктора и просто записать нужные слова и фразы, но с произвольными текстами это не сработает. Здесь пригодится технология синтеза речи.

Когда вы говорите Навигатору «Поехали на Гоголя, 25» или произносите вслух поисковый запрос, технология распознавания речи преобразует ваш голос в текстовую команду. Есть и обратная задача: превратить текст в голос. Иногда достаточно пригласить диктора и просто записать нужные слова и фразы, но с произвольными текстами это не сработает. Здесь пригодится технология синтеза речи.

","contentType":"text/html"},"titleImage":{"h32":{"height":32,"path":"/get-yablogs/47421/file_1475751201967/h32","width":58,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/h32"},"major1000":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/major1000","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major1000"},"major288":{"height":156,"path":"/get-yablogs/47421/file_1475751201967/major288","width":287,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major288"},"major300":{"path":"/get-yablogs/47421/file_1475751201967/major300","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major300","width":300,"height":150},"major444":{"path":"/get-yablogs/47421/file_1475751201967/major444","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major444","width":444,"height":246},"major900":{"path":"/get-yablogs/47421/file_1475751201967/major900","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major900","width":444,"height":246},"minor288":{"path":"/get-yablogs/47421/file_1475751201967/minor288","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/minor288","width":288,"height":160},"orig":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/orig","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/orig"},"touch288":{"path":"/get-yablogs/47421/file_1475751201967/touch288","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/touch288","width":444,"height":246},"touch444":{"path":"/get-yablogs/47421/file_1475751201967/touch444","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/touch444","width":444,"height":246},"touch900":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/touch900","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/touch900"},"w1000":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w1000","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w1000"},"w260h260":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w260h260","width":260,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w260h260"},"w260h360":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w260h360","width":260,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w260h360"},"w288":{"height":156,"path":"/get-yablogs/47421/file_1475751201967/w288","width":282,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w288"},"w288h160":{"height":160,"path":"/get-yablogs/47421/file_1475751201967/w288h160","width":288,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w288h160"},"w300":{"height":162,"path":"/get-yablogs/47421/file_1475751201967/w300","width":292,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w300"},"w444":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w444","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w444"},"w900":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w900","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w900"},"major620":{"path":"/get-yablogs/47421/file_1475751201967/major620","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major620","width":444,"height":150}},"tags":[{"displayName":"технологии Яндекса","slug":"tekhnologii-yandeksa","url":"/blog/company??tag=tekhnologii-yandeksa"},{"displayName":"как это работает?","slug":"kak-eto-rabotaet","url":"/blog/company??tag=kak-eto-rabotaet"}],"isModerator":false,"isTypography":false,"metaDescription":"","metaKeywords":"","relatedTitle":"","isAutoRelated":false,"commentsEnabled":true,"url":"/blog/company/kak-eto-rabotaet-sintez-rechi","urlTemplate":"/blog/company/%slug%","fullBlogUrl":"https://yandex.ru/blog/company","addCommentUrl":"/blog/createComment/company/kak-eto-rabotaet-sintez-rechi","updateCommentUrl":"/blog/updateComment/company/kak-eto-rabotaet-sintez-rechi","addCommentWithCaptcha":"/blog/createWithCaptcha/company/kak-eto-rabotaet-sintez-rechi","changeCaptchaUrl":"/blog/api/captcha/new","putImageUrl":"/blog/image/put","urlBlog":"/blog/company","urlEditPost":"/blog/57f4dd21ccb9760017cf4ccf/edit","urlSlug":"/blog/post/generateSlug","urlPublishPost":"/blog/57f4dd21ccb9760017cf4ccf/publish","urlUnpublishPost":"/blog/57f4dd21ccb9760017cf4ccf/unpublish","urlRemovePost":"/blog/57f4dd21ccb9760017cf4ccf/removePost","urlDraft":"/blog/company/kak-eto-rabotaet-sintez-rechi/draft","urlDraftTemplate":"/blog/company/%slug%/draft","urlRemoveDraft":"/blog/57f4dd21ccb9760017cf4ccf/removeDraft","urlTagSuggest":"/blog/api/suggest/company","urlAfterDelete":"/blog/company","isAuthor":false,"subscribeUrl":"/blog/api/subscribe/57f4dd21ccb9760017cf4ccf","unsubscribeUrl":"/blog/api/unsubscribe/57f4dd21ccb9760017cf4ccf","urlEditPostPage":"/blog/company/57f4dd21ccb9760017cf4ccf/edit","urlForTranslate":"/blog/post/translate","urlRelateIssue":"/blog/post/updateIssue","urlUpdateTranslate":"/blog/post/updateTranslate","urlLoadTranslate":"/blog/post/loadTranslate","urlTranslationStatus":"/blog/company/kak-eto-rabotaet-sintez-rechi/translationInfo","urlRelatedArticles":"/blog/api/relatedArticles/company/kak-eto-rabotaet-sintez-rechi","author":{"id":"24151397","uid":{"value":"24151397","lite":false,"hosted":false},"aliases":{"13":"chistyakova"},"login":"amarantta","display_name":{"name":"Света Чистякова","avatar":{"default":"24700/24151397-15660497","empty":false}},"address":"[email protected]","defaultAvatar":"24700/24151397-15660497","imageSrc":"https://avatars.mds.yandex.net/get-yapic/24700/24151397-15660497/islands-middle","isYandexStaff":true},"originalModificationDate":"2018-04-03T15:56:07.719Z","socialImage":{"h32":{"height":32,"path":"/get-yablogs/47421/file_1475751201967/h32","width":58,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/h32"},"major1000":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/major1000","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major1000"},"major288":{"height":156,"path":"/get-yablogs/47421/file_1475751201967/major288","width":287,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major288"},"major300":{"path":"/get-yablogs/47421/file_1475751201967/major300","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major300","width":300,"height":150},"major444":{"path":"/get-yablogs/47421/file_1475751201967/major444","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major444","width":444,"height":246},"major900":{"path":"/get-yablogs/47421/file_1475751201967/major900","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major900","width":444,"height":246},"minor288":{"path":"/get-yablogs/47421/file_1475751201967/minor288","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/minor288","width":288,"height":160},"orig":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/orig","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/orig"},"touch288":{"path":"/get-yablogs/47421/file_1475751201967/touch288","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/touch288","width":444,"height":246},"touch444":{"path":"/get-yablogs/47421/file_1475751201967/touch444","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/touch444","width":444,"height":246},"touch900":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/touch900","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/touch900"},"w1000":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w1000","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w1000"},"w260h260":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w260h260","width":260,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w260h260"},"w260h360":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w260h360","width":260,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w260h360"},"w288":{"height":156,"path":"/get-yablogs/47421/file_1475751201967/w288","width":282,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w288"},"w288h160":{"height":160,"path":"/get-yablogs/47421/file_1475751201967/w288h160","width":288,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w288h160"},"w300":{"height":162,"path":"/get-yablogs/47421/file_1475751201967/w300","width":292,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w300"},"w444":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w444","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w444"},"w900":{"height":246,"path":"/get-yablogs/47421/file_1475751201967/w900","width":444,"fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/w900"},"major620":{"path":"/get-yablogs/47421/file_1475751201967/major620","fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1475751201967/major620","width":444,"height":150}}}}}">

Сегодня наше приложение Диктовка для интерактивного написания и редактирования текста голосом появилось в AppStore и Google Play . Его главная задача - продемонстрировать часть новых возможностей комплекса речевых технологий Яндекса. Именно о том, чем интересны и уникальны наши технологии распознавания и синтеза речи, я хочу рассказать в этом посте.

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

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

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

Всеядное ASR и качество распознавания

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

За прошедший год относительная доля ошибочно распознанных слов (Word Error Rate) понизилась на 30%. Например, сегодня SpeechKit правильно распознаёт 95% адресов и географических объектов, вплотную приблизившись к человеку, который понимает 96–98% услышанных слов. Полнота распознавания новой модели для диктовки разных текстов сейчас составляет 82%. С таким уровнем можно создать полноценное решение для конечных пользователей, что мы и хотели показать на примере Диктовки.

Изначально SpeechKit работал только для поисковых запросов: общей тематики и геонавигационных. Хотя уже тогда мы задумывали сделать не просто дополнительный инструмент ввода, «голосовую» клавиатуру, а универсальный интерфейс, который полностью заменит любое взаимодействие с системой живым разговором.

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

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

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

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

Коэффициенты поступают на вход акустической модели, которая вычисляет распределение вероятностей для примерно 4000 сенонов в каждом фрейме. Сенон - это начало, середина или конец фонемы.

Акустическая модель SpeechKit построена на комбинации скрытых Марковских моделей и глубокой нейронной сети прямого распространения (feedforward DNN). Это уже проверенное решение, и в прошлой статье мы рассказывали, как отказ от гауссовых смесей в пользу DNN дал почти двукратный скачок в качестве.

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

Финальная обработка происходит во второй языковой модели. К ней подключена RNN , рекуррентная нейронная сеть, и эта модель ранжирует полученные гипотезы, помогая выбрать самый правдоподобный вариант. Сеть рекуррентного типа особенно эффективна для языковой модели. Определяя контекст каждого слова, она может учитывать влияние не только ближайших слов, как в нейронной сети прямого распространения (скажем, для триграммной модели - это два предшествующих слова), но и дальше отстоящих, как бы «запоминая» их.

Распознавание длинных связных текстов доступно в SpeechKit Cloud и SpeechKit Mobile SDK - для использования новой языковой модели в параметрах запроса нужно выбрать тему «notes».

Голосовая активация

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

В отличие от, например, решения Google - их разработчики используют для распознавания коронной фразы «Окей, Google» глубокую нейронную сеть. DNN даёт высокое качество, но система активации при этом ограничена единственной командой, и для обучения нужно огромное количество данных. Скажем, модель для распознавания всем знакомой фразы обучалась на примере более чем 40 тысяч пользовательских голосов, которые обращались к своим смартфонам с Google Now.

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

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

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

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

Синтез речи

Третий основной компонент речевой технологии - это синтез речи (text-to-speech). TTS -решение SpeechKit позволяет озвучить любой текст мужским или женским голосом, да ещё и задав нужную эмоцию. Ни у одного из известных нам голосовых движков на рынке нет такой возможности.

Есть несколько принципиально разных технологий синтеза речи, и в большинстве современных систем используется конкатенативный синтез методом «unit selection». Заранее записанный образец голоса режется на определенные составные элементы (например, контекстно-зависимые фонемы), из которых составляется речевая база. Затем любые нужные слова собираются из отдельных юнитов. Получается правдоподобная имитация человеческого голоса, но воспринимать его тяжело - скачет тембр, возникают неестественные интонации и резкие переходы на стыках отдельных юнитов. Особенно это заметно при озвучивании длинного связного текста. Качество такой системы можно повышать, увеличивая объём речевой базы, но это долгий и кропотливый труд, требующий привлечения профессионального и очень терпеливого диктора. И полнота базы всегда остаётся узким местом системы.

В SpeechKit мы решили использовать статистический (параметрический) синтез речи на базе скрытых Марковских моделей. Процесс, по сути, аналогичен распознаванию, только происходит в обратном направлении. Исходный текст передаётся в модуль G2P (grapheme-to-phoneme), где преобразуется в последовательность фонем.

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

Тембр такого голоса несколько «компьютерный», зато у него естественные и плавные интонации. При этом гладкость речи не зависит от объёма и длины читаемого текста, а голос легко настраивать. Достаточно указать в параметрах запроса один ключ, и модуль синтеза выдаст голос с соответствующей эмоциональной окраской. Разумеется, никакая система unit selection на такое не способна.

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

Не все модификации голоса построены на обучении. Например, SpeechKit позволяет также окрасить синтезированный голос параметрами «drunk» и «ill». Наши разработчики пожалели Женю, и ей не пришлось напиваться перед записью или бегать на морозе, чтобы хорошенько простудиться.

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

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

Выделение смысловых объектов

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

Сейчас в SpeechKit реализовано выделение дат и времени, ФИО, адресов. В гибридной системе сочетаются контекстно-свободные грамматики, словари ключевых слов и статистические данные поиска и разных сервисов Яндекса, а также алгоритмы машинного обучения. Например, во фразе «поехали на улицу Льва Толстого» слово «улица» помогает системе определить контекст, после чего в базе данных Яндекс.Карт находится соответствующий объект.

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

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

Например, есть две фразы: «вставить „привет, друг“ в начало» и «вставить из буфера». Система определяет, что в первом случае после «вставить» (действие редактирования) идёт произвольный текст, а во втором - известный ей объект («буфер обмена»), и по-разному реагирует на эти команды. В традиционной системе это потребовало бы написания правил или грамматик вручную, а в новой технологии Яндекса анализ контекста происходит автоматически.

Автопунктуация

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

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

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

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

Начать пришлось с чистого листа - мы решили расставлять знаки препинания уже на этапе пост-обработки. Начали с одного из простейших методов, который, как ни странно, показал в итоге вполне приемлемый результат. Паузы между словами получают одну из меток: пробел, точка, запятая, вопросительный знак, восклицательный знак, двоеточие. Чтобы предсказать, какая метка соответствует конкретной паузе, используется метод условных случайных полей (CRF - conditional random fields). Для определения контекста учитываются три предшествующих и два последующих слова, и эти нехитрые правила позволяют с достаточно высокой точностью расставлять знаки. Но мы продолжаем экспериментировать и с полноценными моделями, которые смогут ещё на этапе распознавания голоса правильно интерпретировать интонации человека с точки зрения пунктуации.

Планы на будущее

Сегодня SpeechKit активно используется для решения «боевых» задач в массовых сервисах для конечных пользователей. Следующая веха - научиться распознавать спонтанную речь в живом потоке, чтобы можно было прямо в реальном времени расшифровать интервью или автоматически конспектировать лекцию, получая на выходе уже размеченный текст, с выделенными тезисами и ключевыми фактами. Это огромная и очень наукоёмкая задача, которую пока не удалось решить никому в мире - а других мы и не любим!

Для развития SpeechKit очень важна обратная связь. Поставьте