Speech recognition что это

Распознавание и анализ речи с помощью библиотеки SPEECH RECOGNITION, PYAUDIO и LIBROSA

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

Если простыми словами скрытую марковскую модель можно объяснить на примере.

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

В последствии мы сопоставляем фонемы и эти векторы, а так как звук фонемы изменяется от источника к источнику, то процесс сопоставления требует обучения.

Для python существует несколько пакетов которые используются в данной сфере речи, такие как apiai, assemblyai и другие, но Speech Recognition выделяется среди них довольно высокой простотой использования.

Библиотека Speech Recognition — это, инструмент для передачи речевых API от компаний (google, microsoft, sound hound, ibm, а также pocketsphinx), который в отличие от остальных имеет возможность работы офлайн.

Для демонстрации работы в данной статье я буду использовать дефолтный Google Speech API.

Также для работы с инструментами потребуется библиотека pyAudio.

Установим библиотеку для распознавания речи:

Для работы с инструментами звукозаписи

Бываю некие сложности с установкой pyaudio через pip, поэтому альтернативный вариант — установка pipwin или conda

Для анализа звуковых данных

Для работы с wave файлами

и импортируем в код

Для начала нужно выставить параметры записи звука:

Далее нужно создать объект для обращения к устройству звукозаписи:

и открыть поток для записи звука:

Дальше нам нужно записать оцифрованную звуковую дорожку в файл.

Для этого нам и пригодится библиотека wave:

В итоге мы получаем готовую звуковую дорожку записанную с микрофона устройства и готовую к распознаванию для этого нам потребуется библиотека Speech Recognition:

Непосредственно для распознавания текста нам потребуется класс Recognizer он имеет множество функций, а также определяет каким API мы будем пользоваться:

Открываем записанный файл.

Для расшифровки сигнала мы будем использовать метод recognize_google().

Для использования данного метода необходим объект AudioData и для дальнейшей работы требуется преобразовать сигнал в объект модуля Speech_recognition для этого существует метод record():

но, перед тем как передать сигнал на расшифровку, нужно очистить его от шумов. У библиотеки speech_recognition есть для этого метод adjust_for_ambient_noise()

Так как выбранный нами Api поддерживает русский язык мы можем им воспользоваться:

Распознаватель возвращает: «Привет»

Таким образом у нас получается небольшой распознаватель речи буквально в пару строк кода. В момент, когда речь прекращается он автоматически переводит ее в текст.

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

в данном случае мы получаем значения временного ряда звука в качестве массива с частотой дискретизации.

Далее мы можем вернуть график массива нашей звуковой дорожки. Для работы с графиком импортируем pyplot из библиотеки matplotlib и используем librosa.display.waveplot() для построения графика массива:

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

Источник

Распознавание речи для чайников

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

Пролог

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

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

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

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что этоSpeech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

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

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

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

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

Фреймы

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

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

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

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

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

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

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

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

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

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

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

Представим наш фрейм в виде вектора Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это, где N — размер фрейма.

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

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

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

Обратное преобразование выглядит так (запомним её как «формула-2»):
Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

График зависимости mel / частота:
Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

Далее, для того, что бы построить 10 треугольных фильтров нам потребуется 12 опорных точек:

m[i] = [401.25, 622.50, 843.75, 1065.00, 1286.25, 1507.50, 1728.74, 1949.99, 2171.24, 2392.49, 2613.74, 2834.99]

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

h[i] = [300, 517.33, 781.90, 1103.97, 1496.04, 1973.32, 2554.33, 3261.62, 4122.63, 5170.76, 6446.70, 8000]

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

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

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

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

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

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

В данном случае используется DCTII без каких-либо домножений на Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это (scale factor).

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Реализация

Внимательный читатель заметил, что статья содержит множество ссылок на GitHub-проект. Тут стоит отметить, что это мой первый проект на С++ со времён университета. Так же это моя первая попытка рассчитать что-то сложнее среднего арифметического со времён того же университета… Другими словами it comes with absolutely no warranty (с) 🙂

Источник

Распознавание речи: очень краткий вводный курс

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это

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

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

Важные вехи в истории распознавания речи

История распознавания электронными машинами человеческой речи началась чуть раньше, чем принято думать: в большинстве случаев принято вести отсчёт с 1952 года, но на самом деле одним из первых устройств, реагировавшим на голосовые команды, был робот Televox, о котором мы уже писали. Созданный в 1927 году в США робот Герберт Телевокс представлял собой несложное устройство, в котором различные реле реагировали на звуки разной частоты. В роботе было три камертона, каждый из которых отвечал за свою тональность. В зависимости от того, какой камертон срабатывал, включалось то или иное реле.

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это
Фактически вся «начинка» Телевокса, включая систему распознавания команд, располагалась на стойке в районе туловища «робота». Закрыть её крышкой было нельзя, иначе камертоны не смогли бы корректно «слышать» звуки. Источник: Acme Telepictures / Wikimedia

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

Следующим ключевым изобретением, открывшим путь к настоящему распознаванию человеческой речи, стала машина Audrey, разработанная в 1952 году в кузнице инноваций Bell Labs. Огромная Audrey потребляла кучу электроэнергии и была размером с хороший шкаф, но вся её функциональность сводилась к распознаванию произнесённых цифр от нуля до девяти. Всего десять слов, да, но не будем забывать, что и Audrey была аналоговой машиной.
Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это
К сожалению, история не сохранила публичных фотографий Audrey, есть только принципиальная схема. Простая на бумаге, сложная в воплощении — по воспоминаниям современников, компоненты Audrey занимали целый шкаф. Источник: Bell Labs

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

Это был прорыв, но реальной пользы от Audrey не было и быть не могло — машина распознавала голос своего создателя с точностью до 97%, другие специально тренированные дикторы получали точность 70-80%. Посторонние люди, впервые контактирующие с Audrey, как бы ни старались, видели на табло свою цифру только в 50% случаев.

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

Презентация похожей на Audrey, только гораздо меньших размеров, машины — IBM Shoebox. Хорошо видна скорость работы Shoebox. Машина также могла выполнять простейшие математические операции сложения и вычитания

В начале 1960-х работы по созданию машин для распознавания речи велись в Японии, Великобритании, США и даже СССР, где изобрели очень важный алгоритм динамической трансформации временной шкалы (DTW), с помощью которого удалось построить систему, знающую около 200 слов. Но все наработки были похожи друг на друга, а общим недостатком стал принцип распознавания: слова воспринимались как целостные звуковые отпечатки, и затем их сверяли с базой образцов (словарём). Любые изменения скорости, тембра и чёткости проговаривания слов значительно влияли на качество распознавания. Перед учёными встала новая задача: научить машину слышать отдельные звуки, фонемы или слоги и затем составлять из них слова. Такой подход позволил бы нивелировать эффект смены диктора, когда в зависимости от говорящего уровень распознавания резко различался.

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

Описание принципа работы Harpy. Видео работы программы не сохранилось.

Опыт Harpy показал, что наращивать словари целостных звуковых отпечатков бесполезно — это лишь увеличивает время распознавания и радикально снижает точность, поэтому исследователи всего мира пошли по другому пути — распознавания фонем. В середине 1980-х машина IBM Tangora могла научиться понимать речь любого диктора с любым акцентом, диалектом и особенностями произношения, для этого лишь требовалась 20-минутная тренировка, в ходе которой накапливалась база образцов фонем и аллофонов. Применение скрытой марковской модели повысило словарный запас IBM Tangora до впечатляющих 20 000 слов — в 20 раз больше, чем было у Harpy, и уже сравнимо со словарным запасом подростка.

Все системы распознавания речи с 1950-х до середины 1990-х годов не умели считывать естественную разговорную речь человека — слова приходилось произносить отдельно, делая паузы между ними. По-настоящему революционным событием стало внедрение разработанной в 1980-х скрытой марковской модели — статистической модели, строившей точные предположения о неизвестных элементах на основе вытекающих из них известных. Упрощённо говоря, с помощью всего нескольких распознанных фонем в одном слове скрытая марковская модель очень точно подбирает недостающие фонемы, тем самым значительно повышая точность распознавания речи.

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

Первым универсальным движком распознавания естественной речи стала программа Dragon NaturallySpeaking 1997-го года. При работе с нею диктору (т. е. пользователю) не требовалось проходить тренировку или оперировать определённым лексиконом, как в случае с MedSpeak, — с NaturallySpeaking мог работать любой человек, даже ребёнок, программа не ставила никаких правил произношения.

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это
Несмотря на уникальность Dragon NaturallySpeaking, ИТ-обозреватели не выказывали особого восторга от распознавания естественной речи. Среди недостатков отмечались ошибки распознавания и некорректная обработка команд, обращённых к самой программе. Источник: itWeek

Примечательно, что движок распознавания был готов ещё в 1980-х, но из-за недостаточной мощности компьютеров разработка Dragon Systems (сейчас компанией владеет Nuance Communications) не успевала «на лету» определять промежутки между словами, что необходимо для распознавания естественной речи. Без этого слова «пока лечится», например, могли быть услышаны компьютером как «покалечится».

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

Как услышать сказанное и додумать нерасслышанное?

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

Нейросетевая темпоральная классификация модели (CTC) выделяет в записанном аудиопотоке (слове, фразе) отдельные фонемы и расставляет их в том порядке, в котором они были произнесены. После многократного анализа, CTC очень чётко выделяет определённые фонемы, а их текстовая запись сравнивается с базой слов нейросети и затем превращается в распознанное слово.

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

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

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

А если контекст расплывчатый? Возьмём другой текст, в котором одно слово не сможет быть распознано: «Наше всё, Александр Сергеевич Пушкин, трагически погиб в расцвете лет после дуэли с Дантесом. Именем поэта назван Пушкинский театральный фестиваль». Если убрать слово «Пушкинский», RNN попросту не сможет угадать его, опираясь на контекст предложения, ведь в нём упомянуты лишь театральный фестиваль и отсылка к имени неизвестного поэта — возможных вариантов масса!

Вот тут вступает в дело архитектура долгой краткосрочной памяти (Long short-term memory, LSTM) для рекуррентных нейросетей, созданная в 1997 году (подробная статья о LSTM). Она специально разрабатывалась для того, чтобы добавить RNN умение учитывать контекст, удалённый от обрабатываемого события, — результаты решения предыдущих задач (то есть, распознаваний слов) проносятся сквозь весь процесс распознавания, сколь бы длинным не был монолог, и учитываются в каждом случае сомнений. Причём расстояние удаления почти не влияет на эффективность работы архитектуры. С помощью LSTM нейросеть при необходимости угадать слово будет учитывать весь имеющийся в рамках задачи опыт: в нашем примере RNN заглянет в предыдущее предложение, обнаружит, что ранее упоминались Пушкин и Дантес, поэтому «Именем поэта» скорее всего указывает на кого-то из них. Так как нет никаких данных о существовании театрального фестиваля Дантеса, то речь идёт о Пушкинском (тем более что звуковой отпечаток нераспознанного слова очень похож) — такой фестиваль был в базе для обучения нейросети.

«Исповедь голосового помощника». Когда в дело вступает хорошо обученная нейросеть, голосовой ассистент может точно додумать, что же нужно сделать с «зелёными тапочками»

Как распознавание речи делает мир лучше?

В каждом случае применения по-разному — кому-то оно помогает общаться с гаджетами, причём по данным PricewaterhouseCoopers более половины пользователей смартфонов отдают устройствам голосовые команды — среди взрослых людей (25-49 лет) доля тех, кто постоянно пользуется голосовыми интерфейсами, даже выше, чем среди молодёжи (18-25) — 65% против 59%. А в России хотя бы раз с Siri, Google Assitant или «Алисой» общались не менее 71% населения. 45 млн россиян постоянно общаются с «Алисой» от «Яндекса», причём на долю «Яндекс.Карт»/«Яндекс.Навигатора» приходится только 30% запросов.

Кому-то распознавание речи реально помогает в работе — например, как мы говорили выше, врачам: в медицине с 1996 года (когда вышел IBM MedSpeak) распознавание применяется для записи анамнеза и при исследовании снимков — медик может продолжать работу, не отвлекаясь на записи в компьютер или бумажную карту. Кстати, работа над диктовкой в медицине ведётся не только на Западе — в России существует программа Voice2Med от «Центра речевых технологий».

Есть и иные примеры — в том числе наш собственный. Организация бизнеса Toshiba подразумевает полную инклюзию, то есть равные права и возможности для людей с различными ограничениями здоровья, в том числе для сотрудников с нарушениями слуха. У нас есть корпоративная программа Universal Design Advisor System, в рамках которой люди с различными видами инвалидности участвуют в разработке продуктов Toshiba, внося предложения для повышения их удобства людям с ограничениями здоровья — то есть мы не предполагаем, как можно сделать лучше, а оперируем реальным опытом и отзывами сотрудников.

Несколько лет назад в главном офисе Toshiba в Японии мы столкнулись с очень интересной задачей, потребовавшей разработать новую систему распознавания речи. Во время работы Universal Design Advisor System мы получили важный инсайт: сотрудники с нарушениями слуха хотят участвовать в обсуждениях на встречах и лекциях в реальном времени, а не ограничиваться чтением обработанной стенограммы часы или дни спустя. Запуск распознавания речи через смартфон в таких случаях даёт очень слабый результат, поэтому специалистам Toshiba пришлось взяться за разработку специализированной системы распознавания. И, конечно, мы сразу столкнулись с проблемами.

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

Speech recognition что это. Смотреть фото Speech recognition что это. Смотреть картинку Speech recognition что это. Картинка про Speech recognition что это. Фото Speech recognition что это
Так выглядит ноутбук с комплектом периферии для распознавания голоса с помощью ИИ Toshiba (слева) и приложение с результатами для конечных устройств (справа). Источник: Toshiba

Тут пригодилась LSTM, без которой точность распознавания была недостаточной для того, чтобы полученный текст можно было читать и понимать без усилий. Причём LSTM пригодилась не только для более точного предугадывания слов в контексте, но и для корректной обработки пауз в середине предложения и междометий-паразитов — для этого мы обучили нейросеть вот этим паразитам и паузам, естественным для разговорной речи.

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

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

Сейчас ИИ Toshiba работает с английской, японской и китайской речью, причём возможен даже перевод между языками на лету. Его не обязательно использовать для стенографирования на лету — ИИ может быть адаптирован для работы с голосовыми ассистентами, которые наконец научатся адекватно воспринимать междометия, паузы и запинки при произношении человеком команды. В марте 2019 года система успешно использовалась для добавления субтитров к видеотрансляции IPSJ National Convention, проводимой в Японии. В ближайших планах — превращение ИИ Toshiba в общедоступный сервис и опыты с внедрением распознавания голоса на производствах.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *