Болезни Военный билет Призыв

Синтез речи на базе Yandex SpeechKit Cloud. Лучшие синтезаторы речи онлайн

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

Translate.google.com — бесплатный сервис для перевода текста и его синтеза

Гугл переводчик является одним из самых популярных и наилучших сервисов, который предоставляет комплекс самых разных услуг. Например, всем известный переводчик имеет функцию озвучивания веденного текста, причем на всех поддерживаемых языках. Качество озвучки местами низкое, но в целом приемлемое. Если вы переводите печатный текст в речь для изучения языка, то синтезатор Google Translate подойдет вам идеально. Самое важное в этом сервисе то, что он является простым и доступным каждому пользователю в сети Интернет.


Как синтезировать текст в Translate.google.com

Для того, чтобы воспользоваться сервисом от Гугл:

  1. Перейдите на страницу https://translate.google.com ;
  2. Выберите необходимый язык, нажав кнопку «Определить язык»;
  3. Затем введите текст в окне там, где выбирали язык;
  4. Теперь нажмите на пиктограмму граммофона внизу окна, и вы сможете услышать воспроизведение текста женским голосом.

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

Acapela — бесплатная программа по озвучке текста

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


Как пользоваться Acapela

Для настройки синтеза устной речи в режиме онлайн используйте блок с левой стороны на странице http://www.acapela-group.com/voices/demo/ .

Итак, как это работает:

  1. В первой строке выберите язык озвучиваемого текста.
  2. Вторая строка не понадобиться, если вы выберите русский, потому-как вариант только один – Alyona.
  3. В третьей строке введите свой текст, который нужно озвучить. Ввести можно до 300 символов.
  4. Далее согласитесь с правилами сервиса, поставив галочку на пункте «i agree with terms & conditions».
  5. И нажмите ниже кнопку «Please accept terms & conditions».

Озвучка через данный сервис среднего качества. Интонации практически во всех словах правильные. Продукт доступен для всех платформ.

Next.2yxa.mobi — онлайн сервис для озвучивания текста

Онлайн сервис Next.2yxa.mobi является простым и доступным синтезатором для воспроизведения напечатанного текста. Сайт разрабатывался для мобильных устройств, поэтому войдя в него через web-браузер, мы будем иметь легкий и быстрый инструмент для синтеза текста. В связи с этим сайт имеет некоторые ограничения в работе. Например, если вам нужно «прочитать» закаченный текст, то размер файла не должен превышать 100 kb. Вы можете напечатать текст и сразу озвучить его.

Для этого вам необходимо:


Vocalizer — голосовой синтезатор для онлайн воспроизведения текста

Еще одним среди лучших речевых синтезаторов по озвучке теста онлайн, созданный иностранными разработчиками является Vocalizer. Доступен он по ссылке http://www.nuance.com/landing-pages/playground/Vocalizer_Demo2/vocalizer_modal.html . Это простой и понятный сервис. Меню и интерфейс полностью на английском, но разобраться будет очень просто. Онлайн сервисом мы можем воспользоваться в качестве Demo-версии. В системе вам доступно 100 различных голосовых вариантов озвучивания и 47 языков.


Как пользоваться Vocalizer

Синтезировать речь в режиме онлайн с помощью этой программы очень просто. Для этого:

  1. В пункте «Language/Dialect» выберите язык;
  2. В «Gender» выберите мужской или женский голос озвучки (male – мужской, female – женский);
  3. Ниже в большом блоке введите текст для озвучивания и нажмите синюю кнопку сбоку для воспроизведения.

Сегодня хотим рассказать про любопытный сценарий, которой наверняка может быть полезен в сфере 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 добавляем следующее:

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

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

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

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

SpeechKit Cloud - это программа, которая открывает разработчикам доступ к технологиям распознавания и синтеза речи Яндекса. Интеграция реализуется при помощи модуля Yandex TTS, доступного через Маркет дополнений системы MajorDoMo.

Процедура установки и настройки очень проста и выполняется в несколько шагов.

1. Зайти в Панель управления

2. Зайти в Маркет дополнений

3. Зайти в раздел "Взаимодействие"

4. Добавляем модуль в систему MajorDomo - Панель управления - Маркет дополнений - Взаимодействие - Yandex TTS - Добавить:

5. Об успешной установке система нам сообщит и перенаправит на страницу "Маркет дополнений":

6. Для дальнейшей настройки модуля необходим Yandex Api Key, который можно бесплатно получить в кабинете разработчика при помощи существующей учётной записи Яндекса:

7. Присваиваем имя создаваемому ключу и нажимаем SpeechKit Cloud:

8. Заполняем необходимые поля данными и нажимаем кнопку "Отправить":

9. Если всё сделали правильно, то в списке справа появится сгенерированный API-ключ, который необходимо скопировать в буфер обмена:

10. Открываем настройки модуля Yantex TTS (MajorDoMo - Панель управления - Приложения - Yandex TTS), в поле API-key вставляем скопированный на предыдущем шаге ключ, выбираем голос, настроение, а также убеждаемся, что модуль активирован:

11. Настройка выполнена!

Внимание! Тестовый Yandex Api Key генерируется на 1 месяц, после истечения которого система перестанет озвучивать новые (не кэшированные) фразы. Для получения постоянного ключа необходимо выполнить направить в Yandex письмо с просьбой перевести ключ в постоянный.

Сегодня наше приложение Диктовка для интерактивного написания и редактирования текста голосом появилось в 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 очень важна обратная связь. Поставьте