Распознавание речи. Pаспознавание речи и мгновенный перевод

Распознавание речи -- процесс преобразования речевого сигнала в цифровую информацию (например, текстовые данные). Обратной задачей является синтез речи. Первое устройство для распознавания речи появилось в 1952 году, оно могло распознавать произнесённые человеком цифры. В 1962 году на ярмарке компьютерных технологий в Нью-Йорке было представлено устройство IBM Shoebox. Все большую популярность применение распознавания речи находит в различных сферах бизнеса, например, врач в поликлинике может проговаривать диагнозы, которые тут же будут внесены в электронную карточку. Или другой пример. Наверняка каждый хоть раз в жизни мечтал с помощью голоса выключить свет или открыть окно. В последнее время в телефонных интерактивных приложениях все чаще стали использоваться системы автоматического распознавания и синтеза речи. В этом случае общение с голосовым порталом становится более естественным, так как выбор в нём может быть осуществлен не только с помощью тонового набора, но и с помощью голосовых команд. При этом системы распознавания являются независимыми от дикторов, то есть распознают голос любого человека.

Классификация систем распознавания речи.

Системы распознавания речи классифицируются:

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

Для систем автоматического распознавания речи, помехозащищённость обеспечивается, прежде всего, использованием двух механизмов:

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

Архитектура систем распознавания

Типичная архитектура статистических систем автоматической обработки речи.

  • · Модуль шумоочистки и отделение полезного сигнала.
  • · Акустическая модель -- позволяет оценить распознавание речевого сегмента с точки зрения схожести на звуковом уровне. Для каждого звука изначально строится сложная статистическая модель, которая описывает произнесение этого звука в речи.
  • · Языковая модель -- позволяют определить наиболее вероятные словесные последовательности. Сложность построения языковой модели во многом зависит от конкретного языка. Так, для английского языка, достаточно использовать статистические модели (так называемые N-граммы). Для высокофлективных языков (языков, в которых существует много форм одного и того же слова), к которым относится и русский, языковые модели, построенные только с использованием статистики, уже не дают такого эффекта -- слишком много нужно данных, чтобы достоверно оценить статистические связи между словами. Поэтому применяют гибридные языковые модели, использующие правила русского языка, информацию о части речи и форме слова и классическую статистическую модель.
  • · Декодер -- программный компонент системы распознавания, который совмещает данные, получаемые в ходе распознавания от акустических и языковых моделей, и на основании их объединения, определяет наиболее вероятную последовательность слов, которая и является конечным результатом распознавания слитной речи.

Этапы распознавания:

  • 1. Обработка речи начинается с оценки качества речевого сигнала. На этом этапе определяется уровень помех и искажений.
  • 2. Результат оценки поступает в модуль акустической адаптации, который управляет модулем расчета параметров речи, необходимых для распознавания.
  • 3. В сигнале выделяются участки, содержащие речь, и происходит оценка параметров речи. Происходит выделение фонетических и просодических вероятностных характеристик для синтаксического, семантического и прагматического анализа. (Оценка информации о части речи, форме слова и статистические связи между словами.)
  • 4. Далее параметры речи поступают в основной блок системы распознавания -- декодер. Это компонент, который сопоставляет входной речевой поток с информацией, хранящейся в акустических и языковых моделях, и определяет наиболее вероятную последовательность слов, которая и является конечным результатом распознавания.
  • · Голосовое управление
  • · Голосовые команды
  • · Голосовой ввод текста
  • · Голосовой поиск

Успешными примерами использования технологии распознавания речи в мобильных приложениях являются: ввод адреса голосом в Яндекс Навигаторе, голосовой поиск Google Now.

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

  • · Телефония: автоматизация обработки входящих и исходящих звонков путём создания голосовых систем самообслуживание в частности для: получения справочной информации и консультирования, заказа услуг/товаров, изменения параметров действующих услуг, проведения опросов, анкетирования, сбора информации, информирования и любые другие сценарии;
  • · Решения "Умный дом": голосовой интерфейс управления системами «Умный дом»;
  • · Бытовая техника и роботы: голосовой интерфейс электронных роботов; голосовое управление бытовой техникой и т.д.;
  • · Десктопы и ноутбуки: голосовой ввод в компьютерных играх и приложениях;
  • · Автомобили: голосовое управление в салоне автомобиля -- например, навигационной системой;
  • · Социальные сервисы для людей с ограниченными возможностями.

программный автоматизация ввод распознавание

Коммерческие программы по распознаванию речи появились в начале девяностых годов. Обычно их используют люди, которые из-за травмы руки не в состоянии набирать большое количество текста. Эти программы (например, Dragon NaturallySpeaking, VoiceNavigator) переводят голос пользователя в текст, таким образом, разгружая его руки. Надёжность перевода у таких программ не очень высока, но с годами она постепенно улучшается.

Увеличение вычислительных мощностей мобильных устройств позволило и для них создать программы с функцией распознавания речи. Среди таких программ стоит отметить приложение Microsoft Voice Command, которое позволяет работать со многими приложениями при помощи голоса. Например, можно включить воспроизведение музыки в плеере или создать новый документ.

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

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

Следующим шагом технологий распознавания речи можно считать развитие так называемых Silent Speech Interfaces (SSI) (Интерфейсов Безмолвного Доступа). Эти системы обработки речи базируются на получении и обработке речевых сигналов на ранней стадии артикулирования. Данный этап развития распознавания речи вызван двумя существенными недостатками современных систем распознавания: чрезмерная чувствительность к шумам, а также необходимость четкой и ясной речи при обращении к системе распознавания. Подход, основанный на SSI, заключается в том, чтобы использовать новые сенсоры, не подверженные влиянию шумов в качестве дополнения к обработанным акустическим сигналам.

На сегодняшний день можно выделить пять основных направлений использования систем распознавания речи:

Голосовое управление - способ взаимодействия и управления работой устройства при помощи голосовых команд. Системы голосового управления малоэффективны для ввода текста, зато удобны для ввода команл, таких как:

Виды систем

На сегодняшний день существует два типа систем распознавания речи - работающие «на клиенте» (client-based) и по принципу «клиент-сервер» (client-server). При использовании клиент-серверной технологии речевая команда вводится на устройстве пользователя и через Интернет передается на удаленный сервер, где обрабатывается и возвращается на устройство в виде команды (Google Voice, Vlingo, пр.); ввиду большого количества пользователей сервера система распознавания получает большую базу для обучения. Первый вариант работает на иных математических алгоритмах и встречается редко (Speereo Software) - в этом случае команда вводится на устройстве пользователя и обрабатывается в нем же. Плюс обработки «на клиенте» в мобильности, независимости от наличия связи и работы удаленного оборудования. Так, система, работающая «на клиенте» кажется надежнее, но ограничивается, порой, мощностью устройства на стороне пользователя.

В 1964 году на ярмарке компьютерных технологий в Нью-Йорке было представлено устройство IBM Shoebox.

Коммерческие программы по распознаванию речи появились в начале девяностых годов. Обычно их используют люди, которые из-за травмы руки не в состоянии набирать большое количество текста. Эти программы (например, Dragon NaturallySpeaking, VoiceNavigator) переводят голос пользователя в текст, таким образом, разгружая его руки. Надёжность перевода у таких программ не очень высока, но с годами она постепенно улучшается.

Увеличение вычислительных мощностей мобильных устройств позволило и для них создать программы с функцией распознавания речи. Среди таких программ стоит отметить приложение Microsoft Voice Command, которое позволяет работать со многими приложениями при помощи голоса. Например, можно включить воспроизведение музыки в плеере или создать новый документ.

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

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

Следующим шагом технологий распознавания речи можно считать развитие так называемых Silent Speech Interfaces (SSI) (Интерфейсов Безмолвного Доступа). Эти системы обработки речи базируются на получении и обработке речевых сигналов на ранней стадии артикулирования. Данный этап развития распознавания речи вызван двумя существенными недостатками современных систем распознавания: чрезмерная чувствительность к шумам, а также необходимость четкой и ясной речи при обращении к системе распознавания. Подход, основанный на SSI, заключается в том, чтобы использовать новые сенсоры, не подверженные влиянию шумов в качестве дополнения к обработанным акустическим сигналам.

Виды систем

На сегодня существует два типа систем распознавания речи - работающие «на клиенте» (client-based) и по принципу «клиент-сервер» (client-server). При использовании клиент-серверной технологии речевая команда вводится на устройстве пользователя и через Интернет передается на удаленный сервер, где обрабатывается и возвращается на устройство в виде команды (Google Voice , Vlingo, пр.); ввиду большого количества пользователей сервера система распознавания получает большую базу для обучения. Первый вариант работает на иных математических алгоритмах и встречается редко (Speereo Software) - в этом случае команда вводится на устройстве пользователя и обрабатывается в нем же. Плюс обработки «на клиенте» в мобильности, независимости от наличия связи и работы удаленного оборудования. Так, система, работающая «на клиенте» кажется надежнее, но ограничивается, порой, мощностью устройства на стороне пользователя.

Сейчас применяется также технология SIND (без привязки к голосу конкретного человека).

Применение

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

  • Голосовой набор в различной технике (мобильники , компьютеры , и пр.)
  • Голосовой ввод текстовых сообщений в смартфонах и прочих мобильных компьютерах

См. также

  • Цифровая обработка сигналов

Примечания

Ссылки

Категории:

  • Распознавание речи
  • Речевая коммуникация
  • Применение искусственного интеллекта
  • Средства реабилитации для людей с нарушением опорно-двигательного аппарата
  • Средства реабилитации для людей с нарушением зрения

Wikimedia Foundation . 2010 .

Смотреть что такое "Распознавание речи" в других словарях:

    Процесс преобразования речи в текст. Системы распознавания речи характеризуются: объемом словаря понимаемых слов; допустимой беглостью речи; степенью зависимости от настойки на речь конкретного лица. По английски: Speech recognition См. также:… … Финансовый словарь

    распознавание речи - — Тематики электросвязь, основные понятия EN speech recognition …

    распознавание речи - kalbos atpažinimas statusas T sritis automatika atitikmenys: angl. speech perception; speech recognition; voice recognition vok. Spracherkennung, f rus. распознавание речи, n pranc. reconnaissance de parole, f; reconnaissance vocale, f … Automatikos terminų žodynas

    распознавание речи, зависящее от особенностей голоса - Процедура распознавания, основанная на учете особенностей голоса говорящего. Распознаваемый речевой сигнал обычно разделяется на короткие фрагменты, каждый из которых сравнивается с образцами речи, хранимыми в памяти. Выбирается тот, с которым… … Справочник технического переводчика

    распознавание речи, не зависящее от особенностей голоса - Метод преобразования речи в осмысленную текстовую информацию без настройки на тембр голоса конкретного абонента. [Л.М. Невдяев. Телекоммуникационные технологии. Англо русский толковый словарь справочник. Под редакцией Ю.М. Горностаева. Москва,… … Справочник технического переводчика

    автоматическое распознавание речи - Процесс или технология, которые воспринимают сигнал обычной речи в качестве входного сигнала и выдают в качестве выходного сигнала кодированную версию сказанного (слово, команда, выражение, предложение и т. д.) (МСЭ Т Y.2271, МСЭ Т P.10/ G.100).… … Справочник технического переводчика

    Образов Оптическое распознавание символов Распознавание рукописного ввода Распознавание речи … Википедия

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

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

Книги

  • Распознавание и понимание смысла речи в шумах на основе стохастики , В. В. Насыпный. Стохастика - это стохастическая информационная технология, разработанная в России. Она позволяет создавать эффективные интеллектуальные системы, работающие в реальном времени и исключающие…

Титровщик телефона для глухих и слабослышащих

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

Автоматическая транскрипция

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

Автоматический устный и письменный переводчик

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

Изучайте иностранные языки и улучшайте навыки произношения

Speechlogger является отличным инструментом для изучения языков и может быть использован u200b u200Bin несколько способов. Вы можете использовать его, чтобы узнать словарный запас, говоря на вашем родном языке и давая программного обеспечения перевести его. Вы можете учиться и практиковать правильное произношение, разговаривая на иностранном языке и, видя, понимает ли Speechlogger или нет. Если расшифрованы текст в черным шрифтом это означает, что вы произнес это хорошо.

Генерирование субтитров для фильмов

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

Диктуйте вместо ввода

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

Забавная игра:)

Вы можете имитировать китайскую динамик? Французский? Что о русском языке? Попробуйте имитировать иностранный язык и увидеть то, что вы только что сказали, с Speechlogger. Используйте синхронный перевод Speechlogger, чтобы понять, что вы только что сказали. Получить удивительные результаты - это очень весело!

  • Tutorial

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

Пролог

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

Таким вот образом механические колебания превращаются в набор чисел, пригодный для обработки на современных ЭВМ.

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

Давайте разберемся, как, собственно, это самое «сопоставление» может быть реализовано.

Входные данные

Допустим у нас есть некоторый файл/поток с аудиоданными. Прежде всего нам нужно понять, как он устроен и как его прочесть. Давайте рассмотрим самый простой вариант - WAV файл.

Формат подразумевает наличие в файле двух блоков. Первый блок - это заголовка с информацией об аудиопотоке: битрейте, частоте, количестве каналов, длине файла и т.д. Второй блок состоит из «сырых» данных - того самого цифрового сигнала, набора значений амплитуд.

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

Распознавание

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

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

Поэтому мы пойдем несколько иным путём.

Фреймы

Первым делом разобьём наши данные по небольшим временным промежуткам - фреймам. Причём фреймы должны идти не строго друг за другом, а “внахлёст”. Т.е. конец одного фрейма должен пересекаться с началом другого.

Фреймы являются более подходящей единицей анализа данных, чем конкретные значения сигнала, так как анализировать волны намного удобней на некотором промежутке, чем в конкретных точках. Расположение же фреймов “внахлёст” позволяет сгладить результаты анализа фреймов, превращая идею фреймов в некоторое “окно”, движущееся вдоль исходной функции (значений сигнала).

Опытным путём установлено, что оптимальная длина фрейма должна соответствовать промежутку в 10мс, «нахлёст» - 50%. С учётом того, что средняя длина слова (по крайней мере в моих экспериментах) составляет 500мс - такой шаг даст нам примерно 500 / (10 * 0.5) = 100 фреймов на слово.

Разбиение слов

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

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

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

Как вы уже догадались, речь сейчас пойдёт о последнем пункте:) Начнём с того, что энтропия - это мера беспорядка, “мера неопределённости какого-либо опыта” (с). В нашем случае энтропия означает то, как сильно “колеблется” наш сигнал в рамках заданного фрейма.

  • предположим, что наш сигнал пронормирован и все его значения лежат в диапазоне [-1;1];
  • построим гистограмму (плотность распределения) значений сигнала фрейма:
рассчитаем энтропию, как ;

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

Тем не менее проблемы на этом не заканчиваются:(Энтропия может проседать по середине слова (на гласных), а может внезапно вскакивать из-за небольшого шума. Для того, что бы бороться с первой проблемой, приходится вводить понятие “минимально расстояния между словами” и “склеивать” близ лежачие наборы фреймов, разделённые из-за проседания. Вторая проблема решается использованием “минимальной длины слова” и отсечением всех кандидатов, не прошедших отбор (и не использованных в первом пункте).

Если же речь в принципе не является “членораздельной”, можно попробовать разбить исходный набор фреймов на определённым образом подготовленные подпоследовательности, каждая из которых будет подвергнута процедуре распознавания. Но это уже совсем другая история:)

И так, мы у нас есть набор фреймов, соответствующих определённому слову. Мы можем пойти по пути наименьшего сопротивления и в качестве численной характеристики фрейма использовать средний квадрат всех его значений (Root Mean Square). Однако, такая метрика несёт в себе крайне мало пригодной для дальнейшего анализа информации.

Вот тут в игру и вступают Мел-частотные кепстральные коэффициенты (Mel-frequency cepstral coefficients). Согласно Википедии (которая, как известно, не врёт) MFCC - это своеобразное представление энергии спектра сигнала. Плюсы его использования заключаются в следующем:

  • Используется спектр сигнала (то есть разложение по базису ортогональных [ко]синусоидальных функций), что позволяет учитывать волновую “природу” сигнала при дальнейшем анализе;
  • Спектр проецируется на специальную mel-шкалу , позволяя выделить наиболее значимые для восприятия человеком частоты;
  • Количество вычисляемых коэффициентов может быть ограничено любым значением (например, 12), что позволяет “сжать” фрейм и, как следствие, количество обрабатываемой информации;

Давайте рассмотрим процесс вычисления MFCC коэффициентов для некоторого фрейма.

Представим наш фрейм в виде вектора , где N - размер фрейма.

Разложение в ряд Фурье

Первым делом рассчитываем спектр сигнала с помощью дискретного преобразования Фурье (желательно его “быстрой” FFT реализацией).

То есть результатом будет вектор следующего вида:

Важно понимать, что после этого преобразования по оси Х мы имеем частоту (hz) сигнала, а по оси Y - магнитуду (как способ уйти от комплексных значений):

Расчёт mel-фильтров

Начнём с того, что такое mel. Опять же согласно Википедии, mel - это “психофизическая единица высоты звука”, основанная на субъективном восприятии среднестатистическими людьми. Зависит в первую очередь от частоты звука (а так же от громкости и тембра). Другими словами, эта величина, показывающая, на сколько звук определённой частоты “значим” для нас.

Преобразовать частоту в мел можно по следующей формуле (запомним её как «формула-1»):

Обратное преобразование выглядит так (запомним её как «формула-2»):

График зависимости mel / частота:

Но вернёмся к нашей задаче. Допустим у нас есть фрейм размером 256 элементов. Мы знаем (из данных об аудиоформате), что частота звука в данной фрейме 16000hz. Предположим, что человеческая речь лежит в диапазоне от hz. Количество искомых мел-коэффициентов положим M = 10 (рекомендуемое значение).

Для того, что бы разложить полученный выше спектр по mel-шкале, нам потребуется создать “гребёнку” фильтров. По сути, каждый mel-фильтр это треугольная оконная функция , которая позволяет просуммировать количество энергии на определённом диапазоне частот и тем самым получить mel-коэффициент. Зная количество мел-коэффициентов и анализируемый диапазон частот мы можем построить набор таких вот фильтров:

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

Но мы опять отвлеклись. И так для нашего случая диапазон интересующих нас частот равен . Согласно формуле-1 в на мел-шкале этот диапазон превращается в .

m[i] =

Обратите внимание, что на мел-шкале точки расположены равномерно. Переведём шкалу обратно в герцы с помощью формулы-2:

h[i] =

Как видите теперь шкала стала постепенно растягиваться, выравнивая тем самым динамику роста “значимости” на низких и высоких частотах.

Теперь нам нужно наложить полученную шкалу на спектр нашего фрейма. Как мы помним, по оси Х у нас находится частота. Длина спектра 256 - элементов, при этом в него умещается 16000hz. Решив нехитрую пропорцию можно получить следующую формулу:

f(i) = floor((frameSize+1) * h(i) / sampleRate)

Что в нашем случае эквивалентно

f(i) = 4, 8, 12, 17, 23, 31, 40, 52, 66, 82, 103, 128

Вот и всё! Зная опорные точки на оси Х нашего спектра, легко построить необходимые нам фильтры по следующей формуле:

Применение фильтров, логарифмирование энергии спектра

Применение фильтра заключается в попарном перемножении его значений со значениями спектра. Результатом этой операции является mel-коэффициент. Поскольку фильтров у нас M, коэффициентов будет столько же.

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

Косинусное преобразование

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

В данном случае используется DCTII без каких-либо домножений на (scale factor).

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

Примеры код для вышележащих методов можно найти .

Алгоритм распознавания

Вот тут, дорогой читатель, тебя и ждёт главное разочарование. В интернетах мне довелось увидеть множество высокоинтеллектуальных (и не очень) споров о том, какой же способ распознавания лучше. Кто-то ратует за Скрытые Марковские Модели, кто-то - за нейронные сети, чьи-то мысли в принципе невозможно понять:)

В любом случае немало предпочтений отдаётся именно СММ , и именно их реализацию я собираюсь добавить в свой код… в будущем:)

На данный момент, предлагаю остановится на гораздо менее эффективном, но в разы более простом способе.

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

Теперь возьмем в руки айфон/андроид и пройдёмся по L коллегам с просьбой продиктовать эти слова под запись. Далее поставим в соответствие (в какой-нибудь локальной БД или простом файле) каждому слову L наборов mfcc-коэффициентов соответствующих записей.

Это соответствие мы назовём “Модель”, а сам процесс - Machine Learning! На самом деле простое добавление новых образцов в базу имеет крайне слабую связь с машинным обучением… Но уж больно термин модный:)

Теперь наша задача сводится к подбору наиболее “близкой” модели для некоторого набора mfcc-коэффициентов (распознаваемого слова). На первый взгляд задачу можно решить довольно просто:

  • для каждой модели находим среднее (евклидово) расстояние между идентифицируемым mfcc-вектором и векторами модели;
  • выбираем в качестве верной ту модель, среднее расстояние до которой будет наименьшим;

Однако, одно и тоже слово может произносится как Андреем Малаховым, так и каким-нибудь его эстонским коллегой. Другими словами размер mfcc-вектора для одного и того же слова может быть разный.

К счастью, задача сравнения последовательностей разной длины уже решена в виде Dynamic Time Warping алгоритма. Этот алгоритм динамическо программирования прекрасно расписан как в буржуйской Wiki , так и на православном .

Единственное изменение, которое в него стоит внести - это способ нахождения дистанции. Мы должны помнить, что mfcc-вектор модели - на самом деле последовательность mfcc-“подвекторов” размерности M, полученных из фреймов. Так вот, DTW алгоритм должен находить дистанцию между последовательностями эти самых “подвекторов” размерности M. То есть в качестве значений матрицы расстояний должны использовать расстояния (евклидовы) между mfcc-“подвекторами” фреймов.

Эксперименты

У меня не было возможности проверить работу данного подхода на большой “обучающей” выборке. Результаты же тестов на выборке из 3х экземпляров для каждого слова в несинтетических условиях показали мягко говоря нелучший результат - 65% верных распознаваний.

Тем не менее моей задачей было создание максимального простого приложения для распознавания речи. Так сказать “proof of concept” :) Добавить метки