- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF116:Компьютер слушает!
Материал из Linuxformat.
Содержание |
Научи компьютер слышать!
- Как известно, hardware в случае неисправности можно обругать или пнуть, а software – только обругать, но поймет ли оно вас? Усилиями сообщества свободного ПО и Андрея Боровского – всенепременно.
Человек может без труда научить компьютер тому, что он сам придумал. Математические расчеты, обработка информации, представленной в виде потока символов – со всем этим компьютеры справляются гораздо лучше нас. Однако существует множество видов деятельности, в которых компьютеры и управляемые ими системы уступают живым существам. В решении таких задач, как перевод с одного языка на другой, ходьба по пересеченной местности, распознавание лиц и речи, машины до сих пор не могут сравниться с живыми организмами. Одна из причин, конечно же, заключается в том, что не мы изобрели лингвистическую компетентность (способность выражать свои мысли на неформальном языке), ходьбу, зрение и слух. Формализация этих действий так же трудна, как и вообще любое описание явлений окружающего мира формальными средствами. Впрочем, как и другие науки, имитация человеческой деятельности не стоит на месте, и сегодня компьютеры уже могут делать то, что казалось невозможным еще вчера.
Термин «машинное распознавание речи» используется для обозначения самых разных приложений, начиная с систем ввода голосовых команд и поиска аудиоконтента по фрагментам и заканчивая системами электронной диктовки. В мире коммерческого ПО ситуация с разработкой систем распознавания речи стабильная: компания Nuance, разработчик пакета Dragon Naturally Speeking, твердо занимает лидирующие позиции. На втором месте расположилась, конечно, Microsoft с ее Speech API. Во многих отношениях эти компании похожи друг на друга: агрессивный маркетинг, скупка конкурентов, почти монопольное положение в своей области. Уместно провести аналогию с разработкой операционных систем. Ни один коммерческий разработчик не смог создать ОС, способную конкурировать с Windows, и для того, чтобы бросить вызов империи Microsoft, понадобилась совершенно иная модель разработки. Точно так же ни одна закрытая компания не сможет в обозримом будущем конкурировать с лидерами отрасли распознавания речи. Альтернативный продукт может придти только из мира открытого ПО.
Камень преткновения
Почему же Open Source отстает от коммерческих программ в области распознавания текста и речи? Давайте взглянем на проблему шире. Может ли классический коллектив разработчиков открытого ПО (то есть тот, который состоит исключительно из добровольцев) самостоятельно создать «высокоинтеллектуальноемкий» и конкурентоспособный продукт? К сожалению, ответ, скорее всего, будет отрицательным. Наиболее интеллектуальные и успешные открытые и полуоткрытые проекты на разных этапах получали (и получают) серьезную поддержку со стороны коммерческих разработчиков. Почему группа свободных энтузиастов не может создать нечто подобное? Проблемы, вероятно, лежат в организационной плоскости.
- Квалификация Разработка таких проектов, как оптимизирующий компилятор или система распознавания речи, требуют некоторых специальных знаний, которыми владеет далеко не каждый профессиональный программист. В силу одного этого факта собрать команду добровольцев для работы над подобным проектом труднее, чем собрать команду разработчиков классического офисного приложения. Коммерческая компания обладает большими возможностями в плане найма программистов-специалистов, равно как и в плане повышения квалификации уже имеющихся сотрудников.
- Мотивация Вспомним основные принципы открытой модели разработки: «делайте ранние и частые релизы», «превращайте своих пользователей в участников проекта». Если вдуматься в эти тезисы, становится очевидно, что они подходят не всем проектам, а в основном таким, которые могут быть работоспособны (хотя бы частично) на самых ранних стадиях разработки. Бессмысленно делать ранние релизы, если ты не можешь показать что-то хотя бы схематично работоспособное. В то же время при работе над сложными проектами требуется затратить очень много труда, прежде чем появится хоть какой-то результат. Модель, где сторонние люди начинают использовать и исправлять проект на самых ранних стадиях его существования, тут просто не сработает.
Все это, конечно, не означает, что сложные проекты, в том числе проекты распознавания, не могут быть открытыми. Один из источников высокоинтеллектуального открытого кода уже упоминался – коммерческие предприятия, поддерживающие открытое ПО. Такая поддержка может принимать разные формы: коммерческий разработчик может включиться в работу над уже существующим открытым проектом, а может и просто «подарить» сообществу исходные тексты. Так, например, компания Hewlett-Packard открыла исходные тексты программы tesseract – по-видимому, лучшего на сегодняшний день открытого движка для распознавания текстов (http://code.google.com/p/tesseract-ocr/). Еще один источник наукоемкого открытого кода – университетские исследовательские группы. Они, как правило, не предполагают извлекать прибыль непосредственно из своей разработки. При этом исследовательские группы свободны от некоторых недостатков, присущих группам разработчиков-добровольцев: в них сконцентрированы программисты, обладающие специальными знаниями, и они могут работать длительное время, даже не имея наглядных результатов.
Может ли система распознавания речи заменить клавиатуру? Очевидно, нет. Она хорошо подходит для ввода текста, не содержащего формул и сложного форматирования, но непригодна для ввода текстов на формальных языках (попробуйте, например, в качестве эксперимента, прочитать текст программы, написанной на C++). Практически невозможно управлять с помощью голоса такими операциями, как редактирование текста (включающее множество удалений, копирований и вставок).
В этой статье мы сосредоточимся на двух применениях технологий распознавания речи, которые чаще всего используются на компьютерах общего назначения: системах голосовых команд и электронной диктовки. Хотя они во многом схожи между собой, сложность задач, которые им приходится решать, различается на порядки. Как следствие, различаются и распространенность, и практическая пригодность приложений, предназначенных для решения этих задач. Системы распознавания голосовых команд ошибаются сравнительно редко и способны «расслышать» оператора даже в очень неблагоприятных условиях. Системы электронной диктовки требуют индивидуальной настройки и высококачественного аудиосигнала, и ошибаются порой настолько часто, что по производительности уступают даже человеку, не имеющему опыта работы на клавиатуре. История развития смежных областей (распознавание символов, например) позволяет надеяться, что ситуация эта временная, и с развитием технологий различия между электронной диктовкой и голосовыми командами сойдут на нет; однако нельзя сказать заранее, сколько на это потребуется времени.
Процесс диктовки текста системе распознавания речи тоже оказывается гораздо более трудоемким, чем кажется на первый взгляд. Основная проблема заключается, конечно, в том, что компьютер, в отличие от человека, не понимает того, что ему диктуют.
Данные
Как оценить надежность системы распознавания речи? Самую простую и очевидную оценку надежности можно выразить как отношение количества ошибочно распознанных слов к их общему числу. Такая оценка, однако, недостаточно информативна, поскольку разные виды ошибок (неправильно распознанные слова, пропущенные слова, лишние слова, которые появляются в результате ошибочной интерпретации звукового шума как речи) встречаются с разной частотой. Более точную характеристику системы можно получить, учитывая каждый тип ошибок в отдельности. Проблема осложняется тем, что естественная слитная речь (в отличие от письменного текста) не разбивается на отдельные слова. В обычной речи (патологические случаи мы не рассматриваем) паузы делаются между группами слов, а не между отдельными словами, причем разбиение на группы определяется как смыслом, так и простотой произношения (сравните, например, звучание фрагментов «открыть окно» и «словообразование», произносимых в обычном темпе). По этой причине базовой единицей при распознавании речи является не слово, а речевой фрагмент (в англоязычных источниках – utterance). Важную роль в выделении речевых фрагментов играет обнаружение пауз (silence detection). Без правильного обнаружения пауз невозможно корректное разбиение речевого сигнала на речевые фрагменты, а значит, и корректное распознавание. Из сказанного следует, что системы распознавания речи весьма чувствительны к шумам, особенно к таким, которые система может «перепутать» с речевым сигналом.
Речевые фрагменты объединяются в речевой корпус – собрание вариантов произношения различных речевых фрагментов. При составлении речевого корпуса необходимо учитывать, что произношение зависит от множества параметров, самыми важными из которых являются пол, возраст и особенности диалекта. Все системы распознавания речи весьма чувствительны к произношению (что особенно заметно при работе с иноязычными вариантами). Составители речевых корпусов в первую очередь учитывают особенности произношения различных групп оригинальных носителей языка. Впрочем, создаются и специализированные речевые корпусы для иностранных носителей. На основе речевого корпуса строится акустическая модель, которая статистически описывает речевые фрагменты и соответствующие им текстовые переводы. Акустическую модель можно рассматривать как «словарь», с помощью которого система переводит аудиозапись в текстовую форму.
Если бы распознавание речи зависело исключительно от распознавания отдельных слов, надежность такой системы была бы невелика (даже человек не всегда способен распознать речевые фрагменты вне контекста). Для правильного распознавания речи система должна располагать данными о семантической структуре вводимого текста. Такие данные предоставляет грамматика распознавания речи. По своей структуре грамматики распознавания речи более всего похожи на грамматики формальных языков и, соответственно, лучше всего проявляют себя в тех областях, где вводимые речевые данные подчиняются формальным правилам. Акустическая модель и речевая грамматика – это тот набор сведений, с которым работают конечные системы распознавания речи.
Теперь нам нетрудно понять, почему системы распознавания команд более просты в реализации и более устойчивы в работе, чем системы диктовки. Во-первых, объем речевого корпуса, требуемый для распознавания команд, гораздо меньше объема, необходимого для распознавания произвольного текста, а во-вторых, произнося команды и последовательности чисел, мы очень четко разбиваем их на речевые фрагменты.
Алгоритмы
В основе алгоритмов распознавания речи лежат скрытые марковские модели (а сам речевой сигнал рассматривается как марковский процесс). Представим себе систему, которая в каждый момент времени находится в одном из возможных состояний (общее число которых конечно). С течением времени система либо остается в том же состоянии, либо переходит в другое; при этом каждый переход между двумя состояниями, в том числе «переход» из данного состояния в него же, имеет определенную вероятность. Последняя зависит только от текущего состояния системы, но не от предыдущих состояний.
Состояния, в которых находится система, скрыты от нас, но мы можем наблюдать изменение значений некоторого параметра, который зависит от состояния системы. Каждое значение скрытого состояния соответствует, в общем случае, нескольким значениям наблюдаемого параметра (каждой паре «скрытый параметр – наблюдаемый параметр» присвоена определенная вероятность), и одно и то же значение наблюдаемого параметра может соответствовать нескольким скрытым параметрам. Задача, которую при распознавании речи решают с помощью скрытых марковских моделей, заключается в том, чтобы, имея описание системы и зная последовательность значений наблюдаемого параметра, найти наиболее вероятную из соответствующих ей последовательностей значений скрытого параметра. Данные, которые обрабатывает скрытая модель Маркова при распознавании речи, представляют собой результат кепстрального преобразования, примененного к входным аудиоотсчетам.
Кепстральное преобразование (русский термин происходит от английского cepstral transform и, судя по всему, стал уже общеупотребительным в соответствующих кругах) можно получить, применяя преобразование Фурье к результатам преобразования Фурье исходных данных. Компоненты результирующего вектора позволяют судить о том, как меняется спектр частот исходного сигнала (при распознавании речи нас интересуют не сами значения частот речевого сигнала, которые у каждого человека свои, а изменения этих частот во времени). Таким образом можно достаточно уверенно идентифицировать речевые фрагменты и даже отдельные фонемы. Важным преимуществом алгоритмов, основанных на скрытых марковских моделях, является возможность сделать системы распознавания речи обучаемыми.
Как это обычно бывает, сравнительные качества конкретных систем распознавания, работающих в реальном мире, определяются не фундаментальными алгоритмами, которые у всех систем одинаковые, а различными остроумными «придумками», призванными повысить надежность распознавания. В различных системах используются различные варианты кепстральной нормализации (cepstral normalization), позволяющей устранить шумы и искажения. Применяются и другие нормализации, цель которых заключается в том, чтобы привести речевые фрагменты к единому виду, не зависящему, насколько это возможно, от индивидуальных особенностей говорящего. Широко применяются различные системы «догадок», основанные на общем контексте.
Распознавание речи и Linux
Историю разработки систем распознавания речи для Linux следует начать с другой операционной системы – OS/2. В сентябре 1996 года IBM выпустила OS/2 Warp 4 (Merlin) – последний аргумент в борьбе с триумфальным шествием ОС Windows. OS/2 Warp 4 была весьма продвинутой системой: например, механизм «перетащить и бросить» был поднят на невиданную для тех времен высоту. Если вы хотели изменить цвет одного из элементов рабочего стола OS/2, все, что вам требовалось сделать – выбрать нужный цвет в палитре и перетащить его на желаемый элемент (точно так же можно было изменять шрифты). Помимо прочего, OS/2 была снабжена системой распознавания речи – неплохой результат для ОС, способной работать на процессоре 80486 (однако по собственному опыту могу сказать, что на 486м OS/2 работала очень медленно, тогда как Windows 95 «бегала» вполне сносно [не совсем так - дело в том что для нормальной работы OS/2 надо было минимум 8Мб оперативной памяти, а для Windows95 достаточно было 4х, но при установке 8Гб и более системы показывали одинаковую производительность нп одном и том же оборудовании, а стабильность OS/2 была ни в пример выше]). Вскоре OS/2 сошла со сцены (хотя формально IBM поддерживала ее до 2006 года), но многие ее компоненты продолжили независимое существование. Одним из них был движок распознавания речи, который превратился в самостоятельный продукт под именем IBM Viavoice. Поскольку благосклонность IBM обратилась на Linux, нет ничего удивительного в том, что Viavoice был портирован на эту ОС. Так Linux одним махом обзавелась передовой для своего времени технологией распознавания речи.
Впрочем, судьба нового движка складывалась не так, как хотелось бы сторонникам Linux. IBM Viavoice для Linux распространялся бесплатно, но исходные тексты так и не были открыты (хотя одно время IBM распускала слухи о том, что сделает это). Позднее права на технологию Viavoice были проданы компании Nuance – разработчику самого успешного пакета распознавания речи Dragon Dictate (в настоящее время – Dragon Naturally Speeking). Официальное распространение Viavoice для Linux прекращено, однако за то недолгое время, в течение которого Viavoice был доступен линуксоидам, к этому движку было создано немало программ-интерфейсов, самым известным из которых был, пожалуй, XVoice. В принципе, вы можете найти и установить эту программу и сегодня, однако зависимость от двоичных пакетов, собранных несколько лет назад, означает, что у нее нет будущего.
Чтобы ориентироваться в мире открытого ПО, предназначенного для распознавания речи, необходимо помнить один из основополагающих принципов архитектуры Linux – разделение движка и интерфейса. Наиболее интеллектуальную работу выполняет программа-движок, которая обычно представляет собой немногословное консольное приложение. Взаимодействие с пользователем обеспечивает программа-интерфейс. Создание программыинтерфейса не представляет особых проблем, основные усилия должны быть направлены на разработку открытых движков, выполняющих само преобразование речи в текст.
VoxForge
Построение хорошей акустической модели распознавания речи требует наличия хорошего речевого корпуса. По понятным причинам, полностью открытая система распознавания речи должна использовать открытый речевой корпус. Вместе с тем, речевой корпус – это не то, что может создать отдельный разработчик или даже небольшой коллектив: для этого необходимо собрать и обработать записи множества людей. На первый взгляд может показаться, что решение подобной задачи группе разработчиков открытого ПО не по плечу, но это не так. На помощь приходит Интернет, а точнее – то, что сейчас модно называть Web 2.0. При нынешнем распространении сетей организовать сбор записей среди потенциальных пользователей систем распознавания речи совсем не сложно.
Именно этим и занимается проект VoxForge (http://www.voxforge.org). Он позволит вам приобщиться к созданию открытых систем распознавания речи даже в том случае, если вы ничего не знаете об автоматическом распознавании и вообще не умеете программировать. Все, что требуется от рядовых участников проекта – записать и отправить на сайт проекта небольшой фрагмент речи. Фактически, для того, чтобы участвовать в составлении базы данных VoxForge, вам не обязателен даже компьютер – запись можно передать по телефону, хотя удобнее, конечно, воспользоваться ПК. Для создания аудиозаписи можно использовать любую звукозаписывающую программу или специальный апплет Java, доступный на сайте проекта. Подключаем микрофон, убеждаемся, что никакие посторонние шумы не препятствуют качественной записи, и произносим в микрофон требуемую фразу. Разумеется, помимо собственно аудиозаписей, речевой корпус должен включать дополнительную информацию – прежде всего, фонетическую транскрипцию, без которой речевая запись буквально не имеет смысла для системы распознавания.
Впрочем, механизм построения речевого корпуса, основанный на усилиях добровольцев, тоже не идеален. Как отмечалось выше, для построения хорошего речевого корпуса важна репрезентативность выборки, а в проекте, где аудиозаписи добавляются добровольцами, сформировать репрезентативную выборку трудно.
Помимо самих речевых корпусов и программных моделей, на сайте VoxForge есть пакет QuickStart, позволяющий оценить
технологию в деле. В него входит открытый движок распознавания речи Julius, а также необходимые файлы акустической модели и грамматики. Функциональность пакета QuickStart ограничена распознаванием отдельных команд, причем качество распознавания не очень высокое (если сравнивать с демонстрационными программами Sphinx 4, о которых мы поговорим в следующем месяце). Сами разработчики объясняют невысокое качество
небольшим [пока что] объемом собранного речевого корпуса, так что дальнейший прогресс технологии зависит от нас.
Сам по себе сервер Julius выполняет только перевод речи в текст, и если вы хотите, чтобы ваши команды выполнялись, вам придется установить один из менеджеров окон (не путать с менед- жером окон X Window!), например, Simon, о котором мы также поговорим в следующий раз. LXF