Речевые технологии для разработчиков

Вводная статья
Дата публикации:2004
Twitter Facebook Vkontakte

Введение

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

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

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

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

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

В нижеследующих частях этой статьи будет представлен краткий обзор одного из самых популярных на сегодняшний день программных продуктов, позволяющих снабдить приложения операционной системы MS Windows необходимыми средствами речевого ввода и вывода. Этим продуктом является Microsoft Speech Api™.

Microsoft SAPI™ SDK

Microsoft SAPI™ - это программный продукт, созданный фирмой Microsoft специально для работы с речью. SAPI - это сокращение английского словосочетания speech application programming interface, которое подразумевает, что указанный программный продукт предоставляет интерфейсные функции (в данном случае для речевого ввода и вывода) другим приложениям. Следуя своим правилам, Microsoft оформила SAPI в виде набора COM интерфейсов. Однако наличие на компьютере одного только Microsoft SAPI™ (в операционную систему Microsoft Windows Xp этот компонент входит как элемент операционной системы) является необходимым, но недостаточным условием того, чтобы компьютер начал синтезировать или распознавать речь.

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

Для того чтобы просмотреть, какие движки Microsoft SAPI 5 установлены на вашем компьютере и какие языки они поддерживают, нужно обратиться к Панели управления (элемент "Речь" или "Speech"). В Microsoft SAPI версии 4 для той же цели можно воспользоваться программой SpeechControl Center (~900 Кб).

"Движки", по своему назначению, подразделяются на две большие группы:

  • для синтеза речи по тексту (Text-To-Speech или TTS Engine);
  • для распознавания речи (Speech Recognition).

    В свою очередь "движки" для распознавания речи подразделяются на:

  • для распознавания устных команд (Speech Recognition или SR Engine for PC command&control applications);
  • для диктовки текста (Speech Recognition или SR Engine for Dictation).

    Microsoft бесплатно предоставляет разработчикам "движков" свой программный продукт Microsoft SAPI™ и SAPI SDK, который представляет собой набор средств, описаний и примеров, необходимых разработчику для применения речевых технологий в своих приложениях, работающих в среде Microsoft Windows™.

    Ознакомиться и получить эти программные продукты можно на сайте Microsoft. На момент написания этой статьи последней версией SAPI SDK является версия 5.1 (до нее были 2.0, 3.0, 4.0 и 5.0). Для версии 4.0 существуют несколько русскоязычных "движков" синтеза речи по тексту (text-to-speech engine).

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

    Что же позволяет делать SAPI SDK и кому он может быть полезен? В первую очередь разработчикам все тех же "движков", так как снабжает их необходимым инструментарием, позволяющим не ломать голову над совместимостью программ, а заниматься лишь улучшением качества синтеза и распознавания речи. Во-вторых, разработчикам приложений, которые используют речь, как средство общения с пользователем, так как в этом случае разработчик может не задумываться о том, как реализовать ввод и вывод речи на низком уровне (ибо это уже решено в "движках"), а целиком заняться обработкой полученных речевых данных, преобразованных в текстовый формат, или формированием текстовых сообщений, которые будут преобразованы в речь средствами SAPI. В версии SAPI 5.1 декларируется поддержка таких языков программирования, как Visual C++, Visual Basic, Microsoft C#, JScript, но поскольку SAPI реализован на базе технологии COM, то любая среда программирования, поддерживающая работу с OLE и COM приложениями, может получить доступ к Microsoft SAPI.

    Для разработчиков Microsoft создала и поддерживает новостные группы Microsoft Newsgroups, где на форумах можно найти ответы на многие вопросы. Также консультационную помощь можно получить, направив запрос по электронной почте:sapi5@microsoft.com. Множество материалов и статей, посвященных Microsoft SAPI,можно найти на странице Microsoft Speech.NET Technologies.

    Если вы относитесь к разработчикам "движков" или создаете приложения, использующие речевые технологии, то имеет смысл поближе познакомиться с Microsoft SAPI SDK. Если вы еще не решили, к чему приложить свои знания и способности, то речевые технологии могут стать для вас возможной сферой деятельности. На сегодняшний день речевые технологии являются передовым краем технологий компьютерных. Как синтез, так и распознавание речи невозможны без систем искусственного интеллекта, так как произношение (а оно нередко определяет смысл слова) зависит от речевого контекста. Что это означает? Всего лишь то, что для полноценных синтеза и распознавания речи компьютер должен понимать(!), о чем идет речь...

    Системы, взаимодействующие с человеком при помощи речи, считаются весьма перспективным направлением компьютерной индустрии, а само это направление является престижным, но... не в России. У нас в стране этот сегмент рынка остается малонаселенным. Может быть, там не хватает вас?!

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

    Синтез речи в Microsoft SAPI 5.1

    Для того чтобы получить все необходимые компоненты для использования MS SAPI 5.1 в своих программах, а также чтобы получить полную документацию, следует обратиться на страницу Microsoft Speech - Speech SDK 5.1 for Windows® applications.

    Интерфейс ISpVoice

    Приложения, использующие Microsoft SAPI, могут управлять синтезом речи, используя COM (component object model) интерфейс ISpVoice.

    После того как приложение создало объект ISpVoice, ему достаточно вызвать ISpVoice::Speak, чтобы произвести речевой вывод какого-либо текста. Кроме того, интерфейс ISpVoice также содержит несколько методов, позволяющих изменить голос и параметры синтеза. Например, скорость речи (ISpVoice:: SetRate), громкость звука (ISpVoice::SetVolume), или вообще сменить голос (ISpVoice:: SetVoice).

    Microsoft SAPI поддерживает специальные управляющие конструкции, которые могут быть помещены в текст, предназначенный для синтеза. Эти конструкции позволяют в реальном времени контролировать параметры синтеза (например, голос, высота тона, паузы, произношение, скорость и громкость). Такая речевая разметка текста (sapi xsd) использующая стандарты формата XML, является простым и одновременно мощным средством настройки параметров синтезируемой речи, независимо от используемого речевого "движка" или текущего голоса.

    Метод ISpVoice::Speak может синтезировать речь синхронно, т.е. вернуть управление только после окончания синтеза, либо асинхронно, т.е. вернуть управление немедленно, при этом процесс синтеза речи будет идти параллельно работе основного приложения. В асинхронном режиме (флаг SPF_ASYNC во втором параметре метода) информация о состоянии синтеза и текущем положении указателя синтезируемого текста можно получить при помощи метода ISpVoice:: GetStatus. В этом режиме речевой синтез нового текста может прервать текущий речевой фрагмент и воспроизвести текст немедленно (флаг SPF_PURGEBEFORESPEAK), или новый текст может быть автоматически добавлен в конец текущего текстового блока.

    У интерфейса ISpVoice нет отдельного метода для остановки речи, вместо этого используется метод ISpVoice::Speak с "пустым" текстовым фрагментом и флагом SPF_PURGEBEFORESPEAK. Для временной приостановки речи можно использовать метод ISpVoice::Pause, а для ее возобновления -- метод ISpVoice::Resume.

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

    События

    Microsoft SAPI взаимодействует с приложениями, генерируя события и используя стандартные механизмы направления сообщений в оконную процедуру обработки сообщений. При синтезе речи по тексту события используются преимущественно для синхронизации вывода речи. Приложения могут реагировать на события в реальном времени, поскольку события возникают на границах слов, фонем, на закладках, помещенных самим приложением, и т.п. Приложения могут получать дескрипторы этих событий, используя интерфейсы ISpNotifySource, ISpNotifySink, ISpNotifyTranslator, ISpEventSink, ISpEventSource, ISpNotifyCallback.

    Словари

    Приложения могут изменять произношение слов для речевого "движка", используя методы, предоставляемые объектами ISpContainerLexicon, ISpLexicon и ISpPhoneConverter.

    Ресурсы

    Поиск и выбор SAPI данных и компонентов (например, голосов, аудио-устройств, способов вывода информации или словарей) осуществляются при помощи интерфейсов ISpDataKey,ISpRegDataKey, ISpObjectTokenInit, ISpObjectTokenCategory, ISpObjectToken, IEnumSpObjectTokens, ISpObjectWithToken, ISpResourceManager и ISpTask.

    Звук

    Также существует интерфейс для управления параметрами звуковоспроизведения (например, для телефонии или специальной аппаратуры): ISpAudio, ISpMMSysAudio, ISpStream, ISpStreamFormat, ISpStreamFormatConverter.

    Распознавание речи в Microsoft SAPI 5.1

    ISpRecoContext является главным COM интерфейсом для распознавания речи. Так же, как ISpVoice, этот интерфейс использует ISpEventSource, чтобы уведомить приложение о всех событиях, происходящих в процессе распознавания речи.

    Приложение может выбрать один из двух типов "движков" распознавания речи ( ISpRecognizer).

    Общий ресурс распознавания речи, который может быть поделен между несколькими приложениями и который рекомендуется использовать в большинстве случаев. Чтобы создать ISpRecoContext с общим ресурсом ISpRecognizer, приложению достаточно вызвать CoCreateInstance с указанием CLSID_SpSharedRecoContext. В этом случае SAPI установит параметры звукового ввода, согласно настройкам по умолчанию.

    Для больших серверных приложений, которые используют все ресурсы системы, не разделяя их ни с кем и для которых производительность является наиболее важным показателем, должен быть создан ISpRecoContext с InProc ISpRecognizer. Приложение должно вызвать CoCreateInstance с CLSID_SpInprocRecoInstance, чтобы создать его собственный внутрипроцессный (InProc) ISpRecognizer. Затем приложение должно вызвать метод ISpRecognizer:: SetInput, чтобы задать параметры звукового ввода. Наконец, приложение может вызвать метод ISpRecognizer:: CreateRecoContext и получить ISpRecoContext.

    На следующем шаге приложение должно выбрать те события, в уведомлении о которых оно заинтересовано. Как ISpRecognizer, так и ISpEventSource, Которым в свою очередь является ISpNotifySource, приложение может вызвать один из методов ISpNotifySource для его ISpRecoContext, чтобы указать те события, о которых ISpRecoContext должен сообщить. Необходимо вызвать метод ISpEventSource:: SetInterest, чтобы указать события, о которых надо уведомлять. Наиболее важным событием является SPEI_RECOGNITION, которое указывает, что ISpRecognizer распознал фрагмент речи для этого ISpRecoContext.

    Информацию об остальных событиях, возникающих при распознавании речи, можно найти в описании структуры SPEVENTENUM в Microsoft SAPI SDK.

    Наконец, приложение должно создать, загрузить и активировать объект с интерфейсом ISpRecoGrammar, который позволяет управлять словами и фразами при распознавании и указывает тип распознавания, т.е. диктовку или голосовое управление.

    Сначала приложение создает ISpRecoGrammar, используя метод ISpRecoContext::CreateGrammar. Затем приложение загружает соответствующую грамматику, вызывая ISpRecoGrammar::LoadDictation Для диктовки или один из методов ISpRecoGrammar::LoadCmdxxx для голосового управления.

    Теперь, чтобы активировать эти грамматики и приступить к распознаванию речи, приложение вызывает метод ISpRecoGrammar:: SetDictationState для диктовки или ISpRecoGrammar::SetRuleState Или ISpRecoGrammar::SetRuleIdState для голосового управления.

    Когда распознавание речи уведомляет приложение о событии, то параметр lParam в структуре SPEVENT содержит интерфейс ISpRecoResult, с помощью которого приложение может определить, для какого ISpRecoGrammar из какого ISpRecoContext было произведено распознавание и чем оно завершилось. Это необходимо потому, что любой ISpRecognizer, общий или InProc, может быть связанным с несколькими ISpRecoContextsс, каждый из которых может уведомлять о своих событиях. ISpRecoContext может иметь несколько ISpRecoGrammars, чтобы распознавать различные виды речевого ввода.

    Кто разрабатывает «движки»

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

  • Digital Equipment Corporation
  • Elan Speech
  • Digalo (популярный "движок" от ELAN)
  • EloquentTechnology
  • IBM
  • Lernout &Hauspie
  • Lucent
  • Telephonica I+D
  • TELES

    Среди разработчиков на территории бывшего СНГ своими разработками наиболее заметна компания Сакрамент (г.Минск).

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



    Распространение материалов сайта означает, что распространитель принимает условия лицензионного соглашения.
    Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2017
    Rambler's Top100