- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF117:Компьютер слушает
Материал из Linuxformat.
Содержание |
Сфинксов не кормить!
СРР |
---|
|
- Часть 2: Ситуация с системами распознавания речи в Linux в чем-то стандартная для Open Source: их много, но не все они работают. Андрей Боровский разбирается, на что способны лучшие экземпляры.
На первый взгляд может показаться, что программ распознавания речи для Linux не так уж и мало — Википедия упоминает десяток открытых проектов. Однако радоваться рановато. Многие из них, например, cvoicecontrol и Open Mind, взяли хороший старт несколько лет назад, но затем были заброшены своими основателями, а новые разработчики так и не подхватили инициативу. Сказывается, видимо, высокий порог вхождения.
Другие проекты представляют собой оболочки к открытым движкам распознавания речи, работа над которыми далека от завершения. Фактически, таких движков существует только два, причем у одного из них есть скрытые лицензионные ограничения.
С другой стороны, все не так уж и плохо. Открытые системы уже сейчас готовы к распознаванию голосовых команд на компьютерах конечных пользователей, и есть надежда, что в течение нескольких лет мы увидим также открытые системы распознавания слитной речи. Да и не боги горшки обжигают. Вы, наверное, помните эпическую фразу «Dear Aunt, let’s set so double the killer delete select all», которую будущая Windows Vista выдала на презентации встроенных в ОС средств распознавания речи в 2006 году. Так что если сегодня средства распознавания речи для Linux отстают от коммерческих аналогов, это не повод для уныния. На уровне работающей модели такие системы уже существуют. Осталось приложить немного усилий для того, чтобы они смогли работать в реальном мире. В этом обзоре мы не станем останавливаться на многообещающих проектах прошлого (хотя, кто знает: может быть, какой-то из них и будет возрожден). Мы рассмотрим только те программы, которые работают уже сейчас, либо должны заработать в ближайшем будущем.
CMU Sphinx
Sphinx – самый известный и наиболее работоспособный открытый движок распознавания речи на сегодняшний день. Разработка в основном ведется в университете Карнеги-Меллона, хотя в разное время к проекту подключались также Массачусетский технологический институт и корпорация Sun Microsystems. Движок Sphinx (http://cmusphinx.sourceforge.net) распространяется на условиях лицензии BSD и доступен как для коммерческого, так и для некоммерческого использования. Как и все существующие сегодня открытые инструменты распознавания речи, Sphinx ориентирован скорее на исследователей и разработчиков, чем на конечных потребителей, хотя в некоторых областях применения его можно использовать уже сейчас, что и демонстрирует нам проект Gnome Voice-Control, о котором будет сказано ниже. Проект Sphinx идет к своей конечной цели уверенно, но медленно. Стабильные предварительные выпуски появляются раз в несколько лет (правда, последнее обновление официальных релизов Sphinx 3 и Sphinx 4 произошло совсем недавно – в начале 2009 года).
CMU Sphinx давно разделился на несколько ветвей, что может сбить с толку человека, начинающего знакомиться с проектом. Из четырех существующих сегодня воплощений Sphinx мы рассмотрим Sphinx 3, Sphinx 4 и PocketSphinx. В первом приближении каждая система Sphinx состоит из двух компонентов: «тренера» (trainer) и декодера. Тренер необходим для создания акустической модели, адаптированной под конкретные потребности, а декодер выполняет собственно распознавание. Следует подчеркнуть, что под «тренировкой» Sphinx подразумевается именно построение акустической модели, а не адаптация под конкретные речевые особенности, как, например, это делается в процессе установки Dragon Naturally Speaking. Тренер Sphinx предназначен для разработчиков, которые хорошо понимают, как устроено распознавание речи; с рядовым же пользователем система должна взаимодействовать без подготовки. Возможность работы в таком режиме очень полезна при создании общедоступных сервисов, например, автоматизированных телефонных служб, тогда как для систем диктовки текста предпочтительна подстройка под конкретного человека.
Движок Sphinx 3 создавался для оффлайновой обработки речи, т.е. преобразования данных из аудиофайла, и позже был дополнен функцией распознавания «на лету». Демонстрационные программы, входящие в стандартный дистрибутив Sphinx 3, предназначены для работы с файлами, в таком режиме мы и будем их тестировать. Скачайте (или возьмите с LXFDVD) и соберите Sphinx 3 (для этого вам понадобятся библиотеки SphinxBase, чьи исходные тексты также есть на диске).
После выполнения команды make install в вашей системе появится несколько программ, начинающихся с префикса sphinx3_. Нас интересуют две из них: sphinx3_livedecode – распознавание речи в режиме реального времени и sphinx3_livepretend – работа в пакетном режиме (чтение из файла). Прежде чем запускать эти программы, необходимо создать файл конфигурации. Его простой пример, configfile, который вы найдете на диске, выглядит так:
-samprate 16000 -nfft 2048 -hmm /usr/local/share/sphinx3/model/hmm/hub4_cd_continuous_8gau_1s_c_d_dd -dict /usr/local/share/sphinx3/model/lm/an4/an4.dict -fdict /usr/local/share/sphinx3/model/lm/an4/filler.dict -lm /usr/local/share/sphinx3/model/lm/an4/an4.ug.lm.DMP
Параметр -samprate указывает частоту дискретизации входных данных, -nfft представляет собой количество отсчетов для преобразования Фурье: это число должно быть степенью двойки и превышать 1024. Остальные параметры задают местоположение файлов акустической модели и словарей (по умолчанию файлы данных Sphinx 3 устанавливаются в директорию /usr/local/share/sphinx3/). Для улучшения качества распознавания вы можете попробовать изменить значения и других настроек Sphinx 3 (всего их около трех десятков; информация о настройках распечатывается во время выполнения программ). Теперь, когда у нас есть файл конфигурации, мы можем попробовать распознавание речи в режиме реального времени. Скомандуем в окне консоли:
sphinx3_livedecode configfile
Программа предложит нам нажать Enter и начать говорить. Во время своей работы приложение будет выводить множество отладочной информации, промежуточные гипотезы, возникающие в процессе распознавания и сам распознанный фрагмент речи (не расстраивайтесь).
Для тестирования распознавания речи в пакетном режиме нам понадобятся, прежде всего, файлы аудиозаписей. Не переживайте, если у вас плохое произношение и нет знакомых англичан – для того, чтобы получить приличную аудиозапись на английском, живой человек не обязателен. Можно воспользоваться одной из программ синтеза речи, во множестве доступных для Linux, а можно обратить к онлайн-синтезатору по адресу http://www.research.att.com/~ttsweb/tts/demo.php. Sphinx 3 работает с файлами формата RAW (16-битные отсчеты, моно-сигнал, без заголовка). На диске вы найдете два файла – 123july27.raw и recognisethis.raw, которые уже содержат аудиозапись в нужном формате. Руководства по Sphinx 3 советуют размещать отдельные речевые фрагменты в разных RAW-файлах, но в моих экспериментах более высокое качество распознавания было достигнуто при объединении фрагментов в один файл. В дополнение к файлу configfile создадим файл ctl, который должен содержать список имен RAW-файлов с данными (без расширения raw). Например, для того, чтобы прочитать аудио из файла 123july27.raw, запишем в файл ctl
123july27
Теперь можем скомандовать
sphinx3_continuous ctl . configfile
Второй параметр команды (в нашем случае – точка) указывает директорию, в которой находятся RAW-файлы. Если запустить команду для файла 123july27.raw, среди многочисленных строк вывода программы мы найдем и такой:
FWDVIT: ONE TWO K TWO I TWENTY SECOND
Текст, который следует за префиксом «FWDVIT:», и есть распознанная речь (в оригинале было «one two three july twenty seven»). Как видим, программе еще есть чему учиться. Впрочем, не исключаю, что точность распознавания можно повысить с помощью более тонких настроек файла configfile. Получится – черкните нам письмецо.
Русский сфинкс
Надо отдать должное соотечественникам, предпринимающим энергичные усилия по русификации открытых средств распознавания речи. Поддержка русского языка добавляется (или хотя бы упоминается) на сайтах всех крупных проектов в этой области. Однако качество распознавания русской речи существенно уступает качеству распознавания речи английской.
Для тестирования распознавания русского языка в Sphinx 3 мы воспользуемся акустическими моделями и словарями с сайта VoxForge (LXF116): их можно взять с LXFDVD. В результате распаковки у вас появится директория AcousticModels с несколькими подкаталогами. Соответствующие строки в файле конфигурации Sphinx 3 будут выглядеть так:
-samprate 16000 -nfft 2048 -hmm <PATH>/AcousticModels/model_parameters/msu_ru_nsh.cd_cont_1000_8gau_16000 -dict <PATH>/AcousticModels/etc/msu_ru_nsh.dic -fdict <PATH>/AcousticModels/etc/msu_ru_nsh.filler -lm <PATH>/AcousticModels/etc/msu_ru_nsh.lm.dmp
Честно говоря, результаты не впечатляют. Например, тестовый фрагмент «привет один два три» был распознан как «ответ таланты и в эту». Хотя причина, скорее всего, заключается в том, что в речевом корпусе VoxForge все еще мало данных (использование англоязычной модели FoxForge тоже не дает хороших результатов). Так что не забудьте оставить свой голос (в смысле, аудиозапись) на сайте VoxForge.
Демонстрационные программы Sphinx 3 являются оболочками, которые вызывают все необходимые им функции из разделяемых библиотек движка. Если вы пишете программу, использующую Sphinx 3, ничто не мешает вам поступить так же. С некоторых пор у Sphinx 3 появилось нечто вроде официального API (он, правда, уже несколько раз серьезно менялся). В качестве примера использования API Sphinx 3 в собственных приложениях можно рассмотреть программу SpphinxSimpleRec, которую написал Кит Вертанен [Keith Vertanen]. Ее исходный текст доступен по адресу http://www.inference.phy.cam.ac.uk/kv227/simplerec/. Если вы не хотите возиться с API Sphinx 3 в своих проектах, можно использовать готовые программы Sphinx и средства межпроцессного взаимодействия.
Sphinx 4
Движок Sphinx 4 написан целиком на языке Java (на выбор языка программирования, без сомнения, повлияла компания Sun Microsystems, которая участвовала в разработке). Sphinx 4 использует API Java Speech, хотя и не реализует стандартного интерфейса распознавателя речи этой системы. В отличие от Sphinx 3, который предназначен в основном для исследователей, Sphinx 4 стремится стать инструментом конечного пользователя. Для демонстрации возможностей системы разработчики предлагают небольшие словари, предназначенные для применения в специальных областях (например, распознавание числительных). Надо отметить, что входящие в состав Sphinx 4 демонстрационные программы справляются с распознаванием числительных гораздо увереннее, нежели программы Sphinx 3 со стандартным словарем. В принципе, Sphinx 4 уже можно использовать на практике для распознавания, например, голосовых команд – при условии, что их общее число будет невелико. Если вы хотите просто узнать, как работает Sphinx 4, можете взять уже скомпилированный дистрибутив (для его выполнения вам понадобится стандартная среда Java RE версии 1.4 или более поздней). В состав двоичного пакета входит набор демонстрационных консольных и графических программ, которые могут получать данные с микрофона и из файлов WAV.
Как уже отмечалось, большая часть этих программ не понимает ничего, кроме цифр от 0 до 9, зато эти цифры понимает очень хорошо. Демонстрационная программа HlloDigits.jar уверенно распознавала числа при вводе с микрофона (2 ошибки на 100 чисел, и это при моем далеком от идеального английском произношении). А программа Transcriber.java ни разу не ошиблась при чтении данных из аудиозаписей, созданных с помощью упомянутого выше англоязычного синтезатора речи. Впрочем, отдельными числами возможности демо-программ не ограничиваются. Программа HelloNGram.jar может распознавать целые фразы, используя словарь большого объема. Если вы хотите углубиться в детали работы Sphinx 4, получить доступ к дополнительным демонстрационным приложениям и задействовать более объемные словари, вам следует собрать приложение из исходных текстов. Для этого, помимо самих кодов, понадобятся Java 2 SDK и Ant.
Поскольку Sphinx 4 написан на Java, вы сможете использовать его код в своих приложениях только в том случае, если сами пишете на Java. Программирование с использованием Sphinx 4 подробно описано на сайте проекта; кроме того, в вашем распоряжении есть готовые демо-программы. Те, кто пишет не на Java, могут использовать готовые программы из дистрибутива Sphinx 4 как внешние процессы, для чего, однако, все равно потребуется среда времени выполнения Java. Отметим также, что при настройке ввода с микрофона для приложений Java под Linux вы можете столкнуться с некоторыми сложностями. Однако, когда все препятствия преодолены, программировать для Sphinx 4 становится легко и приятно – сказывается присущая Java хорошая организация кода.
По умолчанию демонстрационные программы Sphinx 4 используют две акустических модели – TIDIGITS и Wall Street Journal. Если вы захотите использовать другие модели, их нужно будет сначала скомпилировать в JAR-архивы. Имя используемой модели указывается в конфигурационном файле программы.
Еще одна версия Sphinx 4, PocketSphinx, предназначена, как следует из названия, для карманных устройств. При работе с гаджетом, у которого отсутствует полноценная клавиатура, даже не очень надежный распознаватель речи может оказаться весьма полезным. Движок PocketSphinx используется программой Gnome Voice Control (http://live.gnome.org/GnomeVoiceControl), предназначенной для голосового управления рабочим столом GNOME. Утилита Gnome Voice Control уже включена в репозитории многих дистрибутивов Linux, так что вы можете либо проверить ее работоспособность самостоятельно, либо посмотреть демонстрационное видео на YouTube.
HTK и Julius
Hidden Markov Model Toolkit, инструментарий для исследования и разработки средств распознавания речи с использованием скрытых марковских моделей, разрабатывается в Кембриджском университете под патронажем Microsoft (фактически Microsoft когда-то выкупила этот код у коммерческого предприятия Entropic Cambridge Research Laboratory Ltd, а затем вернула его Кембриджу вместе с ограничивающей лицензией). Исходные тексты HTK доступны всем желающим, и разработчики принимают исправления, внесенные в них третьими лицами, однако использование кода HTK в продуктах, предназначенных для конечных пользователей, запрещено лицензией. Из сказанного следует, что мы не увидим средство распознавания речи для Linux (или другой ОС) на базе HTK. Это, однако, не означает, что HTK бесполезен для Linux-разработчиков: его можно использовать как вспомогательный инструмент при разработке открытых (и коммерческих) средств распознавания речи, что и делают разработчики открытого движка Julius, который разрабатывается в Японии и, что вполне логично, лучше всего работает с японским языком.
Если вы не намерены разговаривать с компьютером на японском, можете загрузить файлы данных для английского языка с сайта проекта VoxForge (для других языков, в том числе русского, готовые файлы пока что отсутствуют). Пакет VoxForge Quick Start включает Julius и файлы данных для английского языка. С его помощью вы всегда сможете проверить, на что годятся последние версии Julius и речевого корпуса VoxForge (входящая в пакет демонстрационная программа предназначена для распознавания изолированных фрагментов речи, вводимых с помощью микрофона). В моих испытаниях VoxForge Quick Start показал себя довольно бледно, хотя дело тут, возможно, не в Julius, а во все еще недостаточном объеме речевого корпуса VoxForge: Sphinx тоже показывает с ним невысокие результаты (с собственными моделями он работает гораздо лучше). Недостатком Julius является отсутствие собственного инструментария для построения языковых моделей. Если у Sphinx есть личный «тренер», то Julius использует инструменты HTK. Для приложений, не требующих индивидуальной подстройки под пользователя, это не страшно, а вот при работе с такими программами, как Simon, возникают проблемы.
Simon
Проект Simon, работа над которым началась еще в 2007 году, до сих пор находится на стадии альфа-версии. Simon демонстрирует нам несколько интересных решений и один серьезный недостаток, который является следствием того, что в проекте используется движок Julius. В своем нынешнем виде Simon не готов к распознаванию речи без индивидуального построения языковых моделей, а для этого приходится использовать инструментарий HTK, который, в силу лицензионных ограничений, нельзя распространять вместе с основным пакетом. После установки Simon вам еще придется регистрироваться на сайте HTK, загружать и устанавливать соответствующие программы. Возможно, в будущем разработчикам Simon удастся создать систему голосового управления, которая будет работать «прямо из коробки», тогда без HTK можно будет обойтись; однако, как показывает опыт Dragon Naturally Speeking (а это самое успешное на сегодня средство распознавания слитной речи), в системах диктовки компьютеру не обойтись без перенастройки моделей, а значит, лицензионные ограничения HTK могут стать фатальными для Simon и Julius. К достоинствам Simon следует отнести распределенную структуру приложения.
Распознаванием речи управляет демон ksimond, который взаимодействует с оболочкой, используя TCP/IP. Таким образом, вычислительно сложные операции распознавания речи могут выполняться на отдельном сервере, клиентская же часть может быть размещена на устройствах небольшой производительности, в том числе на мобильных. Если вы захотите попробовать Simon в работе, учтите, что в настоящее время программа предлагает тренировочные тексты только на немецком языке.
При сегодняшнем состоянии открытых разработок в области распознавания речи появление открытой системы голосового управления рабочим столом (а также другими программами и устройствами) и вообще систем распознавания отдельных слов – дело самого ближайшего будущего (Gnome Voice Control уже сейчас может многое). Что касается распознавания слитной речи, то в этой области все далеко не так радужно, но не безнадежно. Практически приемлемые коммерческие системы распознавания слитной речи существуют уже лет десять. В связи с распространением карманных устройств потребность в них будет возрастать, а значит, будет обостряться и конкуренция.
В настоящее время с технологиями распознавания речи для мобильных устройствактивно экспериментирует Google. Правда, речь идет не о самостоятельном мобильном приложении, а о сервисе Google, доступном устройству, имеющему широкополосный доступ к Сети (в конце концов, это же Google). Учитывая благожелательное отношение компании к открытому ПО, можно надеяться, что в будущем разработчики открытых программ тоже получат доступ к API сервиса. В свое время, исследования в области распознавания речи также вели и многие другие компании. Возможно, одна из этих фирм со временем откроет свои технологии, точно так же как компания Hewlett-Packard открыла движок распознавания текста tesseract. В любом случае, я уверен, что в скором времени стиль общения человека с компьютером изменится. LXF