В русскоязычном сегменте интернета не так много информации о том, как устроены системы распознавания речи. В этой статье мы, команда проекта Amvera Speech (ООО "Клэрити"), расскажем нюансы технологии и опишем путь создания собственного решения. В конце статьи – бесплатный телеграм-бот для теста системы распознавания речи, построенной на архитектуре, описанной в статье.  Есть распространенное мнение, что распознавание речи - давно решенный кейс, но это не совсем так. Действительно, задача решена для определенных ситуаций, но универсального решения пока не существует. Это происходит из-за ряда проблем, с которыми сталкиваются разработчики:  Зависимость от домена a)     Разные дикторы b)    «акустический» канал записи звука: кодеки, искажения c)     Разное окружение: шум в телефоне, в городе, фоновые дикторы d)    Разный темп и подготовленность речи e)    Разная стилистика и тематика речи  Большие и «неудобные» наборы данных Не всегда интуитивно понятная метрика качества  Качество распознавания измеряется по метрике WER (Word Error Rate). Insertions – вставки слов, которых нет в исходной аудиозаписи  Substitutions – замены слов на некорректные   Deletions – система слово не распознала и сделала пропуск  Исходные данные: Стационарный (неразборчивая речь) телефон зазвонил поздней ночью Гипотеза: Стационарный синийi айфонs прозвонилs поздней ночью  WER = 100*(1+2+0)/5 = 60% (т.е. ошибка равна 60%). При этом есть как простые заблуждения при подсчете метрики, так и более сложные. Е/е с точками. Система переводит речь в текст и везде использует букву Е без точек, в то время как эталон, с которым сравнивается транскрипция, содержит Е с точками. Это  неправомерно увеличивает количество Substitutions и увеличивает WER на 1%.  разное написание таких слов, как алло, але, алле и т.д. строчные и заглавные буквы  усреднение по текстам, а не подсчет общего количества слов. Бывает, что в одном тексте WER 0,6, в другом 0,5, а в третьем – 0,8. Неверно будет вывести WER как среднее арифметическое из этих значений. Правильнее – подсчитать общее количество слов на всех текстах и на основе этого рассчитать WER.  Более сложные заблуждения могут быть вызваны тем, что на разных тестовых выборках WER будет разным. Иногда на одной конкретной аудиодорожке испытываемое решение работает лучше или хуже, чем решения конкурентов. Но делать из этого общий вывод о качестве работы решения – некорректно. Необходимы результаты на большом объеме данных.  Системы распознавания речи бывают двух видов – гибридные и end2end. End2end переводят последовательность звуков в последовательность букв. Гибридные системы содержат акустическую и языковую модель, работающие независимо. Решение Amvera Speech построено на гибридной архитектуре.  Принцип работы гибридной системы распознавания речи:  Нейронная сеть классифицирует каждый конкретный фрейм звука, HMM моделирует «динамику», «лексикон», «лексику», опираясь на постериоры NN, Алгоритм Viterbi (Viterbi decoder, beam-search) занимается поиском по HMM   оптимального пути, с учетом постериоров классификатора. Первым шагом в гибридной модели распознавания речи выделяются признаки. Как правило, это MFCC коэффициенты. Затем акустическая модель решает задачу классификации фреймов. Далее используется Viterbi-decoder (поиск по лучу). Он использует предсказание акустической модели и статистику языковой модели, которая по ngram показывает вероятность встречаемости звуков и слов. Затем производится рескоринг и выдается наиболее вероятное слово. Ниже – иллюстрация классификации фреймов. Продемонстрированы фонемы в фреймах для слов «да и нет». Вероятность каждой из фонем записана в соответствующую ячейку.    № фрейма/графема 0 1 2 3 4 5 6 7 8 Д 0 0 0,6 0,7 0 0 0 0 0 А 0 0.1 0 0.1 0.4 0.5 0.4 0.1 0 Н 0 0 0 0 0 0 0 0 0 Е 0 0.1 0.1 0.1 0.6 0.5 0.4 0 0 Т 0 0 0.3 0 0 0 0.1 0 0 Тишина (SIL) 1 0.8 0 0.1 0 0 0.1 0.9 1  Представьте, что у вас в первом фрейме классификатор обнаружил фонему «д», и так 10 раз подряд. Цикл будет выполняться, пока не обнаружится фонема «а», и если слово содержится в словаре, оно будет записано.  Аналогично, алгоритм отработает слово «нет» и закончит работу, когда вканале наступит тишина «SIL». Совместим визуализацию поискового графа в связке с фреймами для большей наглядности:    Рассмотрим общий принцип обучения классификатора акустической модели, принцип сопоставления фреймов с фонемами, количество классов и способы улучшения решения. Возьмем графемы. Пример – М, А, Ш, А Представим их в виде фонем, получится m* i1 sh a0 Для русской речи на обучающей выборке в 80 часов фонемы на 1 процент лучше, при 4 тысячах часов – разницы уже нет. Используем бифоны/биграфемы Моделируют влияние соседних фонем Левые: SIL (sil)M (м)А (а)Ш (ш)А SIL Правые: SIL M(a) A(ш) Ш(а) А(sil) SIL Можно использовать трифоны SIL (sil)M(a) (м)А(ш) (а)Ш(а) (ш)А(sil) SIL Либо использовать многостейтовые фонемы/графемы/трифоны …   Проще всего это описать фразой «натянуть сову на глобус». Для этого используем связку алгоритмов Flat-start+Viterbi forced alignment:    берем пару звук-текст  получаем фонемную запись  разбиваем звук на равные части по числу фонем, приписывая соответствующие лейблы  обучаем классификатор (обычно GMM).  делаем forced alignment, получаем уточненные labels  Повторяем пункт 4 После нескольких итераций, получаем labels, пригодные для обучения нейронной сети. Если используются {би, три} {фоны, графемы}, то: Проблема 1: классов слишком много Бифоны: 57 фонем^2 – 3249 Двустейтовые бифоны: (2 стейта*57 фонем )^2=12996 Трифоны: 57фонем^3 = 185193 Проблема 2: размеры классов не сбалансированы Решение – кластеризация Объединяет похожие классы (5-10 тыс. классов) Балансирует размеры классов (класс называют сеноном для фонемных, ченоном для графемных моделей) Используем MMI или MPE/sMBR Строится CE-модель Строится «числитель» - множество вариантов распознавания, приводящих к правильному ответу Строится «знаменатель» - много неправильных вариантов распознавания Loss = f(числитель)/f(знаменатель) т.е. «поднять» правильные и «опустить неправильные» Достоинства: sMBR несколько поднимает качество Недостатки: стремится оттянуть выдачу label, следовательно портит time-разметку и latency. Акустическая модель отделена от языковой. Языковую модель легко дополнить дополнительной информацией (новые слова и т.д.).  Можно быстро получить NBest списки для улучшения с помощью языковой модели. Для обучения достаточно несколько десятков часов аудиозаписей.  Не умеют распознавать слова, которых нет в словаре. Не модно. Как итог - мы рассмотрели принцип устройства классической гибридной архитектуры распознавания речи. Бонус для дочитавших: наш телеграм бот @AmVeraSpeechBot. В боте вы можете проверить качество работы нашего решения (Amvera Speech) по распознаванию речи на основе классической гибридной архитектуры. Просто отправьте в бот короткую аудиодорожку или голосовое сообщение – и получите текстовую расшифровку.