Распознавание речи для чайников. Разбираемся с современными системами распознавания речи в Linux

03.10.2023

В «Фейсбуке» нам задали вопрос:
«Для работы с текстом мне нужно расшифровать 3 часа диктофонной записи. Пробовал загрузить аудиофайл с картинкой в YouTube и воспользоваться их расшифровщиком текста, но получается какая-то абракадабра. Подскажите, как можно решить это технически? Спасибо!
Александр Коновалов»

Александр, простое техническое решение есть – но результат будет зависеть исключительно от качества вашей записи. Поясню, о каком качестве речь.

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

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

Несложно придерживаться этих условий, если вы, вместо того, чтобы обращаться к интернет-сервису распознавания речи напрямую, применяете в качестве промежуточного устройства-посредника диктофон. К слову, такой «персональный секретарь» особенно незаменим, когда у вас нет доступа к онлайну. Естественно, лучше использовать хотя бы недорогой профессиональный диктофон, нежели записывающее устройство, встроенное в дешевый mp3-плеер или смартфон. Это даст гораздо больше шансов «скормить» полученные записи сервису распознавания речи.

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

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

Будем надеяться, что качество вашей диктофонной записи – достаточно высокое, чтобы ее удалось расшифровать в автоматическом режиме .

Если же нет – практически при любом качестве записи вы сможете провести расшифровку в полуавтоматическом режиме .

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

Итак, по порядку.

1. Автоматическое распознавание речи

Многие советуют расшифровывать диктофонные записи на YouTube. Но этот метод заставляет пользователя тратить время на этапе загрузки аудиофайла и фоновой картинки, а затем – в ходе очистки итогового текста от меток времени. Между тем, это время несложно сэкономить. 🙂

Вы можете распознавать аудиозаписи прямо со своего компьютера, воспользовавшись возможностями одного из интернет-сервисов, работающих на движке распознавания Google (рекомендую Speechpad.ru или Speechlogger.com). Все, что нужно – проделать маленький трюк: вместо вашего голоса, воспроизводимого с микрофона, перенаправить на сервис аудиопоток, воспроизводимый вашим компьютерным проигрывателем.

Этот трюк называется программным стерео микшером (его обычно применяют для записи музыки на компьютере или ее трансляции с компьютера в интернет).

Стерео микшер входил в состав Windows XP – но был удален разработчиками из более поздних версий этой операционной системы (говорят, в целях защиты авторских прав: чтобы геймеры не воровали музыку из игр и т.п.). Однако стерео микшер нередко поставляется вместе с драйверами аудиокарт (например, карт Realtec, встраиваемых в материнскую плату). Если вы не найдете стерео микшер на своем ПК с помощью предлагаемых ниже скриншотов – попробуйте переустановить аудиодрайверы с CD-диска, который шел в комплекте с материнской платой – либо с сайта ее производителя.

Если и это не поможет – установите на компьютер альтернативную программу. Например – бесплатный VB-CABLE Virtual Audio Device : использовать его рекомендует владелец вышеупомянутого сервиса Speechpad.ru.

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

Для этого нажмите по иконке громкоговорителя в правом нижнем углу (возле часов) – либо выберите раздел «Звук» в «Панели управления». Во вкладке «Запись» открывшегося окна щелкните правой кнопкой мыши и поставьте птички напротив пунктов «Показать отключенные устройства» и «Показать отсоединенные устройства». Нажмите правой кнопкой по иконке микрофона и выберите пункт «Отключить» (вообще, отключите все устройства, отмеченные зеленым значком).

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

Если вы решили использовать VB-CABLE – то тем же способом включите его во вкладке «Запись».

А также – во вкладке «Воспроизведение».

Второй шаг. Включите аудиозапись в любом проигрывателе (если нужно расшифровать аудиодорожку видеоролика – можно запустить и видеопроигрыватель). Параллельно загрузите в браузере Chrome сервис Speechpad.ru и нажмите в нем кнопку «Включить запись». Если запись достаточно высокого качества, вы увидите, как сервис на глазах превращает речь в осмысленный и близкий к оригиналу текст. Правда, без знаков препинания, которые вам придется расставить самостоятельно.

В качестве аудиопроигрывателя советую использовать AIMP, о котором будет подробнее рассказано в третьей подглавке. Сейчас лишь отмечу, что этот плеер позволяет замедлить запись без искажений речи, а также исправить некоторые другие погрешности. Это может несколько улучшить распознавание не слишком качественной записи. (Иногда даже советуют предварительно подвергать плохие записи обработке в профессиональных программах редактирования звука. Однако, на мой взгляд, это слишком трудоемкая задача для большинства пользователей, которые гораздо быстрее наберут текст вручную. 🙂)

2. Полуавтоматическое распознавание речи

Тут все просто. Если запись некачественная и распознавание «захлебывается» либо сервис выдает слишком много ошибок – помогите делу сами, «встроившись» в цепочку: «аудиоплеер – диктор – система распознавания».

Ваша задача: прослушивать в наушниках записанную речь – и параллельно надиктовывать ее через микрофон интернет-сервису распознавания. (Естественно, вам не нужно, как в предыдущем разделе, переключаться в списке записывающих устройств с микрофона на стерео микшер или виртуальный кабель). А в качестве альтернативы упоминавшимся выше интернет-сервисам можете использовать смартфонные приложения вроде бесплатной «Яндекс.Диктовки» либо функцию диктовки в iPhone с операционной системой iOS 8 и выше.

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

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

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

3. Расшифровка диктофонной записи в ручном режиме

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

Во всех этих случаях вам поможет мой фирменный способ расшифровки вручную (прослушиваете запись в AIMP – набираете текст в Word). С его помощью вы превратите запись в текст быстрее, чем это сделают многие профессиональные журналисты, чья скорость набора на клавиатуре аналогична вашей! При этом вы потратите гораздо меньше, чем они, сил и нервов. 🙂

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

Пользователь постоянно протягивает руку то к диктофону, то к клавиатуре компьютера. Остановил воспроизведение – набрал прослушанный отрывок в текстовом редакторе – снова включил воспроизведение – отмотал неразборчивую запись назад – и т.д., и т.п.

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

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

  • возможность замедлить воспроизведение диктофонной записи без ее искажения и понижения тона (замедлить скорость воспроизведения позволяют многие плееры – но, увы, при этом человеческий голос превращается в монструозный голос робота, который сложно воспринимать на слух продолжительное время);
  • возможность остановить запись или откатить ее на заданное количество секунд и вернуть обратно, не останавливая набор текста и не сворачивая окно текстового редактора.

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

«Войдя в настройки AIMP, найдите раздел Глобальные клавиши и перенастройте Стоп/Пуск на клавишу Эскейп (Esc). Поверьте, это наиболее удобно, поскольку не придется задумываться и палец не попадет случайно на другие клавиши. Пункты «Немного перейти назад» и «Немного перейти вперед» настройте, соответственно, на клавиши Ctrl + клавиши курсора назад/вперед (у вас на клавиатуре есть четыре клавиши со стрелками – выберите две из них). Эта функция нужна, чтобы заново прослушать последний фрагмент или перейти немного вперед.

Затем, вызвав эквалайзер, вы можете уменьшить значения «Скорость» и «Темп» – и увеличить значение «Питч». При этом Вы заметите, что скорость воспроизведения замедлится, но высота голоса (если хорошо подберете значение «Питч») – не изменится. Подберите эти два параметра так, чтобы вы практически синхронно успевали набирать текст, лишь изредка останавливая его.

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

Могу только добавить к сказанному, что, если запись не очень качественная – вы можете попытаться улучшить ее воспроизведение, экспериментируя с другими настройками в «Менеджере звуковых эффектов» AIMP.

А количество секунд, на которое вам будет наиболее удобно перемещаться по записи назад или вперед с помощью горячих клавиш – установите в разделе «Плеер» окна «Настройки» (которое можно вызвать нажатием горячих клавиш «Ctrl + P»).

Желаю сэкономить побольше времени на рутинных задачах – и плодотворно использовать его для главных дел! 🙂 И не забудьте включить микрофон в списке записывающих устройств, когда соберетесь поговорить по скайпу! 😉

3 способа расшифровки диктофонной записи: распознавание речи, диктовка, ручной режим

) на реальном Hello World примере управления домашней техникой.
Почему именно домашней техникой? Да потому что благодаря такому примеру можно оценить ту скорость и точность , которой можно добиться при использовании полностью локального распознавания речи без серверов типа Google ASR или Яндекс SpeechKit .
К статье я также прилагаю все исходники программы и саму сборку под Android .

С чего вдруг?

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

Зачем нам что-то еще кроме Яндекса и Google?

В качестве того самого «практического применения» я выбрал тему голосового управления умным домом .
Почему именно такой пример? Потому что на нем можно увидеть те несколько преимуществ полностью локального распознавания речи перед распознаванием с использованием облачных решений. А именно:
  • Скорость - мы не зависим от серверов и поэтому не зависим от их доступности, пропускной способности и т.п. факторов
  • Точность - наш движок работает только с тем словарем, который интересует наше приложение, повышая тем самым качество распознавания
  • Стоимость - нам не придется платить за каждый запрос к серверу
  • Голосовая активация - как дополнительный бонус к первым пунктам - мы можем постоянно «слушать эфир», не тратя при этом свой трафик и не нагружая сервера

Примечание

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

Так Android же умеет распознавать речь без интернета!
Да-да… Только на JellyBean. И только с полуметра, не более. И это распознавание - это та же диктовка, только с использованием гораздо меньшей модели. Так что управлять ею и настраивать ее мы тоже не можем. И что она вернет нам в следующий раз - неизвестно. Хотя для СМС-ок в самый раз!

Что будем делать?

Будем реализовывать голосовой пульт управления домашней техникой, который будет работать точно и быстро, с нескольких метров и даже на дешевом тормозном хламе очень недорогих Android смартфонах, планшетах и часах.
Логика будет простой, но очень практичной. Активируем микрофон и произносим одно или несколько названий устройств. Приложение их распознает и включает-выключает их в зависимости от текущего состояния. Либо получает от них состояние и произносит его приятным женским голосом. Например, текущая температура в комнате.

Вариантов практического применения масса

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

Транскрипции



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

Транскрипции описываются с помощью специального синтаксиса. Например:
умный uu m n ay j дом d oo m

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

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

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

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

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

Активация по датчику приближения

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

Запускаем распознование

Pocketsphinx предоставляет удобный API для конфигурирования и запуска процесса распознавания. Это классы SppechRecognizer и SpeechRecognizerSetup .
Вот как выглядит конфигурация и запуск распознавания:

PhonMapper phonMapper = new PhonMapper(getAssets().open("dict/ru/hotwords")); Grammar grammar = new Grammar(names, phonMapper); grammar.addWords(hotword); DataFiles dataFiles = new DataFiles(getPackageName(), "ru"); File hmmDir = new File(dataFiles.getHmm()); File dict = new File(dataFiles.getDict()); File jsgf = new File(dataFiles.getJsgf()); copyAssets(hmmDir); saveFile(jsgf, grammar.getJsgf()); saveFile(dict, grammar.getDict()); mRecognizer = SpeechRecognizerSetup.defaultSetup() .setAcousticModel(hmmDir) .setDictionary(dict) .setBoolean("-remove_noise", false) .setKeywordThreshold(1e-7f) .getRecognizer(); mRecognizer.addKeyphraseSearch(KWS_SEARCH, hotword); mRecognizer.addGrammarSearch(COMMAND_SEARCH, jsgf);

Здесь мы сперва копируем все необходимые файлы на диск (Pocketpshinx требует наличия на диске аккустической модели, грамматики и словаря с транскрипциями). Затем конфигурируется сам движок распознавания. Указываются пути к файлам модели и словаря, а также некоторые параметры (порог чувствительности для активационной фразы). Далее конфигурируется путь к файлу с грамматикой, а также активационная фраза.

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

MRecognizer.startListening(KWS_SEARCH);
А вот так - распозанвание речи по заданной грамматике:

MRecognizer.startListening(COMMAND_SEARCH, 3000);
Второй аргумент (необязательный) - количество миллисекунд, после которого распознавание будет автоматически завершаться, если никто ничего не говорит.
Как видите, можно использовать только один движок для решения обеих задач.

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

Чтобы получить результат распознавания, нужно также указать слушателя событий, имплементирующего интерфейс RecognitionListener .
У него есть несколько методов, которые вызываются pocketsphinx-ом при наступлении одного из событий:
  • onBeginningOfSpeech - движок услышал какой-то звук, может быть это речь (а может быть и нет)
  • onEndOfSpeech - звук закончился
  • onPartialResult - есть промежуточные результаты распознавания. Для активационной фразы это значит, что она сработала. Аргумент Hypothesis
  • onResult - конечный результат распознавания. Этот метод будет вызыван после вызова метода stop у SpeechRecognizer . Аргумент Hypothesis содержит данные о распознавании (строка и score)

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

@Override public void onEndOfSpeech() { Log.d(TAG, "onEndOfSpeech"); if (mRecognizer.getSearchName().equals(COMMAND_SEARCH)) { mRecognizer.stop(); } } @Override public void onPartialResult(Hypothesis hypothesis) { if (hypothesis == null) return; String text = hypothesis.getHypstr(); if (KWS_SEARCH.equals(mRecognizer.getSearchName())) { startRecognition(); } else { Log.d(TAG, text); } } @Override public void onResult(Hypothesis hypothesis) { mMicView.setBackgroundResource(R.drawable.background_big_mic); mHandler.removeCallbacks(mStopRecognitionCallback); String text = hypothesis != null ? hypothesis.getHypstr() : null; Log.d(TAG, "onResult " + text); if (COMMAND_SEARCH.equals(mRecognizer.getSearchName())) { if (text != null) { Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); process(text); } mRecognizer.startListening(KWS_SEARCH); } }

Когда мы получаем событие onEndOfSpeech, и если при этом мы распознаем команду для выполнения, то необходимо остановить распознавание, после чего сразу будет вызван onResult.
В onResult нужно проверить, что только что было распознано. Если это команда, то нужно запустить ее на выполнение и переключить движок на распознавание активационной фразы.
В onPartialResult нас интересует только распознавание активационной фразы. Если мы его обнаруживаем, то сразу запускаем процесс распознавания команды. Вот как он выглядит:

Private synchronized void startRecognition() { if (mRecognizer == null || COMMAND_SEARCH.equals(mRecognizer.getSearchName())) return; mRecognizer.cancel(); new ToneGenerator(AudioManager.STREAM_MUSIC, ToneGenerator.MAX_VOLUME).startTone(ToneGenerator.TONE_CDMA_PIP, 200); post(400, new Runnable() { @Override public void run() { mMicView.setBackgroundResource(R.drawable.background_big_mic_green); mRecognizer.startListening(COMMAND_SEARCH, 3000); Log.d(TAG, "Listen commands"); post(4000, mStopRecognitionCallback); } }); }
Здесь мы сперва играем небольшой сигнал для оповещения пользователя, что мы его услышали и готовы к его команде. На это время микрофон долже быть выключен. Поэтому мы запускаем распознавание после небольшого таймаута (чуть больше, чем длительность сигнала, чтобы не услышать его эха). Также запускается поток, который остановит распознавание принудительно, если пользователь говорит слишком долго. В данном случае это 3 секунды.

Как превратить распознанную строку в команды

Ну тут все уже специфично для конкретного приложения. В случае с нагим примером, мы просто вытаскиваем из строчки названия устройств, ищем по ним нужное устройство и либо меняем его состояние с помощью HTTP запроса на контроллер умного дома, либо сообщаем его текущее состояние (как в случае с термостатом). Эту логику можно увидеть в классе Controller .

Как синтезировать речь

Синтез речи - это операция, обратная распознаванию. Здесь наоборот - нужно превратить строку текста в речь, чтобы ее услышал пользователь.
В случае с термостатом мы должны заставить наше Android устройство произнести текущую температуру. С помощью API TextToSpeech это сделать довольно просто (спасибо гуглу за прекрасный женский TTS для русского языка):

Private void speak(String text) { synchronized (mSpeechQueue) { mRecognizer.stop(); mSpeechQueue.add(text); HashMap params = new HashMap(2); params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, UUID.randomUUID().toString()); params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC)); params.put(TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS, "true"); mTextToSpeech.speak(text, TextToSpeech.QUEUE_ADD, params); } }

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

Private final TextToSpeech.OnUtteranceCompletedListener mUtteranceCompletedListener = new TextToSpeech.OnUtteranceCompletedListener() { @Override public void onUtteranceCompleted(String utteranceId) { synchronized (mSpeechQueue) { mSpeechQueue.poll(); if (mSpeechQueue.isEmpty()) { mRecognizer.startListening(KWS_SEARCH); } } } };

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

И это все?

Да! Как видите, быстро и качественно распознать речь прямо на устройстве совсем несложно, благодаря наличию таких замечательных проектов, как Pocketsphinx. Он предоставляет очень удобный API, который можно использовать в решении задач, связанных с распознаванием голосовых команд.

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

Да только воз и ныне там.
И.А. Крылов. Басня «Лебедь, Щука и Рак»

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

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

Казалось бы, почему не заняться решением этой проблемы программно, с использованием «умных» компьютеров? Ведь и производители подобных продуктов вроде бы имеются, и мощность компьютеров непрерывно растет, и технологии совершенствуются. Однако успехи в области автоматического распознавания речи и преобразования ее в текст, похоже, находятся на том же уровне, что и 20-40 лет назад. Помнится, еще в середине 90-х годов компания IBM уверенно заявила о наличии такого рода инструментов в OS/2, а чуть позже и Microsoft подключилась к внедрению подобных технологий. Пыталась заниматься распознаванием речи и компания Apple, но в начале 2000 года она официально объявила об отказе от этого проекта. Продолжают работать в этой области компании IBM (Via Voice) и Philips, причем функцию распознавания речи IBM не только встраивала в свою операционную систему OS/2 (ныне уже канувшую в лету), но и до сих пор выпускает в качестве отдельного продукта. Пакет для распознавания слитной речи Via Voice (http://www-306.ibm.com/software/voice/viavoice) от IBM отличался тем, что с самого начала даже без обучения распознавал до 80% слов. При обучении же вероятность правильного распознавания повышалась до 95%, а к тому же параллельно с настройкой программы на конкретного пользователя происходило освоение будущим оператором навыков работы с системой. Сейчас ходят слухи о том, что подобные новации будут реализованы и в составе Windows XP, хотя глава и основатель корпорации Билл Гейтс неоднократно заявлял, что считает речевые технологии еще не готовыми для массового применения.

Когда-то американская компания Dragon Systems создала, наверное, первую коммерческую систему распознавания речи — Naturally Speaking Preferred, которая работала еще в 1982 году на IBM PC (даже не XT!). Правда, эта программа больше напоминала игру и с тех пор никаких серьезных подвижек компания так и не сделала, а к 2000 году и вовсе разорилась, причем ее последняя версия Dragon Dictate Naturally Speaking была продана компании Lernout&Hauspie Speech Products (L&H), являвшейся тоже одним из лидеров в области систем и методов распознавания и синтеза речи (Voice Xpress). L&H, в свою очередь, тоже дошла до банкротства с распродажей активов и имущества (к слову сказать, Dragon Systems была продана почти за 0,5 млрд. долл., а L&H — уже за 10 млн., так что своими масштабами в этой области впечатляет не прогресс, а регресс!). Технологии L&H и Dragon Systems перешли к компании ScanSoft, которая занималась до этого распознаванием оптических образов (в ее ведении сегодня находятся некоторые известные программы распознавания печатного текста типа OmniPage), но там, похоже, этим никто серьезно не занимается.

Российская компания Cognitive Technologies, достигнувшая значительных успехов в области распознавания символов, сообщила в 2001 году о совместном проекте с Intel по созданию систем распознавания русской речи — для Intel был подготовлен речевой корпус русского языка RuSpeech. Собственно, RuSpeech представляет собой речевую базу данных, которая содержит фрагменты непрерывной русской речи с соответствующими текстами, фонетической транскрипцией и дополнительной информацией о дикторах. Cognitive Technologies ставила перед собой цель создать «дикторонезависимую» систему распознавания непрерывной речи, а речевой интерфейс состоял из системы сценария диалога, синтеза речи по тексту и системы распознавания речевых команд.

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

«Ну все, тебе конец», — сказал Иван Царевич, глядя прямо в глаза третьей голове Змея Горыныча. Она растерянно посмотрела на две другие. Те в ответ злорадно ухмыльнулись.

Анекдот

1997 году выход на коммерческий рынок знаменитого «Горыныча» (по существу адаптации программы Dragon Dictate Naturally Speaking, проведенной силами малоизвестной до того времени российской компании White Group, официального дистрибьютора Dragon Systems) стал своеобразной сенсацией. Программа казалась вполне работоспособной, а ее цена представлялась весьма умеренной. Однако время идет, «Горынычи» меняют интерфейсы и версии, но никаких ценных свойств не приобретают. Может быть, ядро Dragon Naturally Speaking было как-то настроено на особенности англоязычной речи, но даже после последовательной замены драконьей головы на три головы «Горыныча» оно дает не более 30-40% распознавания среднего уровня лексики, причем при тщательном проговаривании. Да и кому это вообще нужно? Как известно, по заявлениям разработчиков компаний Dragon Systems, IBM и Lernout&Hauspie, их программы при непрерывной диктовке были способны правильно распознавать до 95% текста, но ведь и они давно уже не выпускаются, ибо известно, что для комфортной работы точность распознавания необходимо довести до 99%. Надо ли говорить, что для завоевания подобных высот в реальных условиях требуются, мягко говоря, немалые усилия.

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

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

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

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

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

Анализируя возможности программы, мы все больше склоняемся к мнению специалистов, что лингвистический анализ текста — обязательная стадия процесса автоматического ввода под диктовку. Без этого современное качество распознавания не может быть достигнуто, да и многие эксперты связывают перспективы речевых систем именно с дальнейшим развитием содержащихся в них лингвистических механизмов. Как следствие, речевые технологии делаются все более зависимыми от того языка, с которым они работают. А это значит, во-первых, что распознавание, синтез и обработка русской речи являются тем делом, заниматься которым должны именно российские разработчики, а во-вторых, только специализированные отечественные продукты, изначально ориентированные именно на русский язык, смогут по-настоящему решить ту задачу. Правда, здесь следует отметить, что отечественные специалисты петербургского «Центра речевых технологий» (ЦРТ) считают, что создание собственной системы диктовки в нынешних российских условиях не окупится.

Прочие игрушки

ока технологии распознавания речи российскими разработчиками успешно применяются в основном в интерактивных обучающих системах и играх вроде «Мой говорящий словарь», Talk to Me или «Профессор Хиггинс», созданных фирмой «ИстраСофт». Используются они для контроля произношения у изучающих английский язык и аутентификации пользователя. Развивая программу «Профессор Хиггинс», сотрудники «ИстраСофт» научились членить слова на элементарные сегменты, которые соответствуют звукам речи и не зависят ни от диктора, ни от языка (прежде системы распознавания речи не производили такой сегментации, а наименьшей единицей для них было слово). При этом выделение фонем из потока слитной речи, их кодирование и последующее восстановление происходит в режиме реального времени. Указанная технология распознавания речи нашла довольно остроумное применение — она позволяет существенно сжимать файлы с диктофонными записями или речевыми сообщениями. Способ, предложенный фирмой «ИстраСофт», допускает сжатие речи в 200 раз, причем при сжатии менее чем в 40 раз качество речевого сигнала практически не ухудшается. Интеллектуальная обработка речи на уровне фонем перспективна не только как способ сжатия, но и как шаг на пути к созданию нового поколения систем распознавания речи, ведь теоретически машинное распознавание речи, то есть ее автоматическое представление в виде текста, как раз и является крайней степенью сжатия речевого сигнала.

Сегодня фирма «ИстраСофт» помимо обучающих программ предлагает на своем сайте (http://www.istrasoft.ru/user.html) и программы для сжатия/проигрывания звуковых файлов, а также демонстрационную программу голосонезависимого распознавания команд русского языка Istrasoft Voice Commander.

Казалось бы, теперь для того, чтобы создать основанную на новой технологии систему распознавания, осталось сделать совсем немного…

), которая работает в этой области с 1990 года, похоже, добилась определенных успехов. ЦРТ имеет в своем арсенале целый набор программных и аппаратных средств, предназначенных для шумоочистки и для повышения качества звуковых, и в первую очередь речевых, сигналов — это компьютерные программы, автономные устройства, платы (DSP), встраиваемые в устройства каналов записи или передачи речевой информации (мы уже писали об этой фирме в статье «Как улучшить разборчивость речи?» в № 8’2004). «Центр речевых технологий» известен как разработчик средств шумоподавления и редактирования звука: Clear Voice, Sound Cleaner, Speech Interactive Software, Sound Stretcher и др. Специалисты фирмы принимали участие в восстановлении аудиоинформации, записанной на борту затонувшей подлодки «Курск» и на потерпевших катастрофы воздушных судах, а также в расследовании ряда уголовных дел, для которых требовалось установить содержание фонограмм речи.

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

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

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

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

Разумеется, гораздо проще реализовать программу, способную распознавать только ограниченный, небольшой набор управляющих команд и символов. Это, например, могут быть цифры от 0 до 9 в телефоне, слова «да»/«нет» и односложные команды вызова нужных абонентов и т.д. Такие программы появились самыми первыми и уже давно применяются в телефонии для голосового набора номера или выбора абонента.

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

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

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

Человека всегда привлекала идея управлять машиной естественным языком. Возможно, это отчасти связано с желанием человека быть НАД машиной. Так сказать, чувствовать свое превосходство. Но основной посыл - это упрощение взаимодействия человека с искусственным интеллектом. Управление голосом в Linux с переменным успехом реализуется без малого уже четверть века. Давай разберемся в вопросе и попробуем сблизиться с нашей ОС настолько, насколько это только возможно.

Суть дела

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

Следует различать собственно системы распознавания речи (перевод речи в текст или в команды), такие как, например, CMU Sphinx, Julius, а также приложения на основе этих двух движков, и голосовые ассистенты, ставшие популярными с развитием смартфонов и планшетов. Это, скорее, побочный продукт систем распознавания речи, дальнейшее их развитие и воплощение всех удачных идей распознавания голоса, применение их на практике. Для Linux-десктопов таких пока мало.

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

Что было раньше

Исторически сложилось так, что все системы работы с речью в Linux развивались не спеша и скачкообразно. Причина не в криворукости разработчиков, а в высоком уровне вхождения в среду разработки. Написание кода системы для работы с голосом требует высокой квалификации программиста. Поэтому, перед тем как начать разбираться с системами работы с речью в Linux, необходимо сделать небольшой экскурс в историю. Была когда-то в IBM такая чудесная операционная система - OS/2 Warp (Merlin). Вышла она в сентябре далекого уже 1996 года. Кроме того, что она обладала очевидными преимуществами перед всеми остальными операционками, OS/2 была укомплектована весьма продвинутой системой распознавания речи - IBM ViaVoice . Для того времени это было очень круто, учитывая, что ОС работала на системах с 486-м процессором с объемом ОЗУ от 8 Мбайт (!).

Как известно, OS/2 проиграла битву Windows, однако многие ее компоненты продолжили существовать независимо. Одним из таких компонентов стала та самая IBM ViaVoice, превратившаяся в самостоятельный продукт. Так как IBM всегда любила Linux, ViaVoice была портирована на эту ОС, что дало детищу Линуса Торвальдса самую передовую для своего времени систему распознавания речи.

К сожалению, судьба ViaVoice сложилась не так, как хотели бы линуксоиды. Сам движок распространялся бесплатно, но его исходники оставались закрытыми. В 2003 году IBM продала права на технологию канадо-американской компании Nuance. Nuance, разработавшая, пожалуй, самый успешный коммерческий продукт для распознавания речи - Dragon Naturally Speeking , здравствует и ныне. На этом бесславная история ViaVoice в Linux практически закончилась. За то короткое время, что ViaVoice была бесплатной и доступной линуксоидам, к ней разработали несколько интерфейсов, таких, например, как Xvoice. Однако проект давно заброшен и ныне практически неработоспособен.

INFO

Самое сложное звено в машинном распознавании речи - естественный человеческий язык.

Что сегодня?

Сегодня все гораздо лучше. В последние годы, после открытия исходников Google Voice API, ситуация с развитием систем распознавания речи в Linux значительно улучшилась, выросло качество распознавания. Например, проект Linux Speech Recognition на основе Google Voice API показывает очень неплохие результаты для русского языка. Все движки работают примерно одинаково: сначала звук с микрофона устройства юзера попадает в систему распознавания, после чего либо голос обрабатывается на локальном устройстве, либо запись отправляется на удаленный сервер для дальнейшей обработки. Второй вариант больше подходит для смартфонов или планшетов. Собственно, именно так и работают коммерческие движки - Siri, Google Now и Cortana.

Из всего многообразия движков для работы с человеческим голосом можно выделить несколько активных на данный момент.

WARNING

Установка многих из описанных систем распознавания речи - нетривиальная задача!

CMU Sphinx

Большая часть разработки CMU Sphinx ведется в университете Карнеги - Меллона. В разное время над проектом работали и Массачусетский технологический институт, и покойная ныне корпорация Sun Microsystems. Исходники движка распространяются под лицензией BSD и доступны как для коммерческого, так и для некоммерческого использования. Sphinx - это не пользовательское приложение, а, скорее, набор инструментов, который можно применить в разработке приложений для конечных пользователей. Sphinx сейчас - это крупнейший проект по распознаванию речи. Он состоит из нескольких частей:

  • Pocketsphinx - небольшая быстрая программа, обрабатывающая звук, акустические модели, грамматики и словари;
  • библиотека Sphinxbase, необходимая для работы Pocketsphinx;
  • Sphinx4 - собственно библиотека распознавания;
  • Sphinxtrain - программа для обучения акустическим моделям (записям человеческого голоса).

Проект развивается медленно, но верно. И главное - его можно использовать на практике. Причем не только на ПК, но и на мобильных устройствах. К тому же движок очень хорошо работает с русской речью. При наличии прямых рук и ясной головы можно настроить распознавание русской речи с помощью Sphinx для управления домашней техникой или умным домом. По сути, можно обычную квартиру превратить в умный дом, чем мы и займемся во второй части этого обзора. Реализации Sphinx имеются для Android, iOS и даже Windows Phone. В отличие от облачного способа, когда работа по распознаванию речи ложится на плечи серверов Google ASR или Яндекс SpeechKit, Sphinx работает точнее, быстрее и дешевле. И полностью локально. При желании можно научить Sphinx русской языковой модели и грамматике пользовательских запросов. Да, придется немного потрудиться при установке. Равно как и настройка голосовых моделей и библиотек Sphinx - занятие не для новичков. Так как основа CMU Sphinx - библиотека Sphinx4 - написана на Java, можно включать ее код в свои приложения для распознавания речи. Конкретные примеры использования будут описаны во второй части нашего обзора.

VoxForge

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

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


HTK, Julius и Simon

HTK - Hidden Markov Model Toolkit - это инструментарий для исследования и разработки средств распознавания речи с использованием скрытых марковских моделей, разрабатывается в Кембриджском университете под патронажем Microsoft (Microsoft когда-то выкупила этот код у коммерческого предприятия Entropic Cambridge Research Laboratory Ltd, а затем вернула его Кембриджу вместе с ограничивающей лицензией). Исходники проекта доступны всем желающим, но использование кода HTK в продуктах, предназначенных для конечных пользователей, запрещено лицензией.

Однако это не означает, что HTK бесполезен для Linux-разработчиков: его можно использовать как вспомогательный инструмент при разработке открытых (и коммерческих) средств распознавания речи, что и делают разработчики открытого движка Julius, который разрабатывается в Японии. Julius лучше всего работает с японским языком. Великий и могучий тоже не обделен, ведь в качестве голосовой базы данных используется все тот же VoxForge.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов.

Да только воз и ныне там.
И.А. Крылов. Басня «Лебедь, Щука и Рак»

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

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

Казалось бы, почему не заняться решением этой проблемы программно, с использованием «умных» компьютеров? Ведь и производители подобных продуктов вроде бы имеются, и мощность компьютеров непрерывно растет, и технологии совершенствуются. Однако успехи в области автоматического распознавания речи и преобразования ее в текст, похоже, находятся на том же уровне, что и 20-40 лет назад. Помнится, еще в середине 90-х годов компания IBM уверенно заявила о наличии такого рода инструментов в OS/2, а чуть позже и Microsoft подключилась к внедрению подобных технологий. Пыталась заниматься распознаванием речи и компания Apple, но в начале 2000 года она официально объявила об отказе от этого проекта. Продолжают работать в этой области компании IBM (Via Voice) и Philips, причем функцию распознавания речи IBM не только встраивала в свою операционную систему OS/2 (ныне уже канувшую в лету), но и до сих пор выпускает в качестве отдельного продукта. Пакет для распознавания слитной речи Via Voice (http://www-306.ibm.com/software/voice/viavoice) от IBM отличался тем, что с самого начала даже без обучения распознавал до 80% слов. При обучении же вероятность правильного распознавания повышалась до 95%, а к тому же параллельно с настройкой программы на конкретного пользователя происходило освоение будущим оператором навыков работы с системой. Сейчас ходят слухи о том, что подобные новации будут реализованы и в составе Windows XP, хотя глава и основатель корпорации Билл Гейтс неоднократно заявлял, что считает речевые технологии еще не готовыми для массового применения.

Когда-то американская компания Dragon Systems создала, наверное, первую коммерческую систему распознавания речи — Naturally Speaking Preferred, которая работала еще в 1982 году на IBM PC (даже не XT!). Правда, эта программа больше напоминала игру и с тех пор никаких серьезных подвижек компания так и не сделала, а к 2000 году и вовсе разорилась, причем ее последняя версия Dragon Dictate Naturally Speaking была продана компании Lernout&Hauspie Speech Products (L&H), являвшейся тоже одним из лидеров в области систем и методов распознавания и синтеза речи (Voice Xpress). L&H, в свою очередь, тоже дошла до банкротства с распродажей активов и имущества (к слову сказать, Dragon Systems была продана почти за 0,5 млрд. долл., а L&H — уже за 10 млн., так что своими масштабами в этой области впечатляет не прогресс, а регресс!). Технологии L&H и Dragon Systems перешли к компании ScanSoft, которая занималась до этого распознаванием оптических образов (в ее ведении сегодня находятся некоторые известные программы распознавания печатного текста типа OmniPage), но там, похоже, этим никто серьезно не занимается.

Российская компания Cognitive Technologies, достигнувшая значительных успехов в области распознавания символов, сообщила в 2001 году о совместном проекте с Intel по созданию систем распознавания русской речи — для Intel был подготовлен речевой корпус русского языка RuSpeech. Собственно, RuSpeech представляет собой речевую базу данных, которая содержит фрагменты непрерывной русской речи с соответствующими текстами, фонетической транскрипцией и дополнительной информацией о дикторах. Cognitive Technologies ставила перед собой цель создать «дикторонезависимую» систему распознавания непрерывной речи, а речевой интерфейс состоял из системы сценария диалога, синтеза речи по тексту и системы распознавания речевых команд.

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

«Ну все, тебе конец», — сказал Иван Царевич, глядя прямо в глаза третьей голове Змея Горыныча. Она растерянно посмотрела на две другие. Те в ответ злорадно ухмыльнулись.

Анекдот

1997 году выход на коммерческий рынок знаменитого «Горыныча» (по существу адаптации программы Dragon Dictate Naturally Speaking, проведенной силами малоизвестной до того времени российской компании White Group, официального дистрибьютора Dragon Systems) стал своеобразной сенсацией. Программа казалась вполне работоспособной, а ее цена представлялась весьма умеренной. Однако время идет, «Горынычи» меняют интерфейсы и версии, но никаких ценных свойств не приобретают. Может быть, ядро Dragon Naturally Speaking было как-то настроено на особенности англоязычной речи, но даже после последовательной замены драконьей головы на три головы «Горыныча» оно дает не более 30-40% распознавания среднего уровня лексики, причем при тщательном проговаривании. Да и кому это вообще нужно? Как известно, по заявлениям разработчиков компаний Dragon Systems, IBM и Lernout&Hauspie, их программы при непрерывной диктовке были способны правильно распознавать до 95% текста, но ведь и они давно уже не выпускаются, ибо известно, что для комфортной работы точность распознавания необходимо довести до 99%. Надо ли говорить, что для завоевания подобных высот в реальных условиях требуются, мягко говоря, немалые усилия.

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

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

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

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

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

Анализируя возможности программы, мы все больше склоняемся к мнению специалистов, что лингвистический анализ текста — обязательная стадия процесса автоматического ввода под диктовку. Без этого современное качество распознавания не может быть достигнуто, да и многие эксперты связывают перспективы речевых систем именно с дальнейшим развитием содержащихся в них лингвистических механизмов. Как следствие, речевые технологии делаются все более зависимыми от того языка, с которым они работают. А это значит, во-первых, что распознавание, синтез и обработка русской речи являются тем делом, заниматься которым должны именно российские разработчики, а во-вторых, только специализированные отечественные продукты, изначально ориентированные именно на русский язык, смогут по-настоящему решить ту задачу. Правда, здесь следует отметить, что отечественные специалисты петербургского «Центра речевых технологий» (ЦРТ) считают, что создание собственной системы диктовки в нынешних российских условиях не окупится.

Прочие игрушки

ока технологии распознавания речи российскими разработчиками успешно применяются в основном в интерактивных обучающих системах и играх вроде «Мой говорящий словарь», Talk to Me или «Профессор Хиггинс», созданных фирмой «ИстраСофт». Используются они для контроля произношения у изучающих английский язык и аутентификации пользователя. Развивая программу «Профессор Хиггинс», сотрудники «ИстраСофт» научились членить слова на элементарные сегменты, которые соответствуют звукам речи и не зависят ни от диктора, ни от языка (прежде системы распознавания речи не производили такой сегментации, а наименьшей единицей для них было слово). При этом выделение фонем из потока слитной речи, их кодирование и последующее восстановление происходит в режиме реального времени. Указанная технология распознавания речи нашла довольно остроумное применение — она позволяет существенно сжимать файлы с диктофонными записями или речевыми сообщениями. Способ, предложенный фирмой «ИстраСофт», допускает сжатие речи в 200 раз, причем при сжатии менее чем в 40 раз качество речевого сигнала практически не ухудшается. Интеллектуальная обработка речи на уровне фонем перспективна не только как способ сжатия, но и как шаг на пути к созданию нового поколения систем распознавания речи, ведь теоретически машинное распознавание речи, то есть ее автоматическое представление в виде текста, как раз и является крайней степенью сжатия речевого сигнала.

Сегодня фирма «ИстраСофт» помимо обучающих программ предлагает на своем сайте (http://www.istrasoft.ru/user.html) и программы для сжатия/проигрывания звуковых файлов, а также демонстрационную программу голосонезависимого распознавания команд русского языка Istrasoft Voice Commander.

Казалось бы, теперь для того, чтобы создать основанную на новой технологии систему распознавания, осталось сделать совсем немного…

), которая работает в этой области с 1990 года, похоже, добилась определенных успехов. ЦРТ имеет в своем арсенале целый набор программных и аппаратных средств, предназначенных для шумоочистки и для повышения качества звуковых, и в первую очередь речевых, сигналов — это компьютерные программы, автономные устройства, платы (DSP), встраиваемые в устройства каналов записи или передачи речевой информации (мы уже писали об этой фирме в статье «Как улучшить разборчивость речи?» в № 8’2004). «Центр речевых технологий» известен как разработчик средств шумоподавления и редактирования звука: Clear Voice, Sound Cleaner, Speech Interactive Software, Sound Stretcher и др. Специалисты фирмы принимали участие в восстановлении аудиоинформации, записанной на борту затонувшей подлодки «Курск» и на потерпевших катастрофы воздушных судах, а также в расследовании ряда уголовных дел, для которых требовалось установить содержание фонограмм речи.

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

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

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

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

Разумеется, гораздо проще реализовать программу, способную распознавать только ограниченный, небольшой набор управляющих команд и символов. Это, например, могут быть цифры от 0 до 9 в телефоне, слова «да»/«нет» и односложные команды вызова нужных абонентов и т.д. Такие программы появились самыми первыми и уже давно применяются в телефонии для голосового набора номера или выбора абонента.

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

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

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