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

Сегодня много кто решает повседневные задачи на ходу — с телефона. С его помощью можно проверить почту, отправить документы и фотографии, найти ближайший банкомат или построить автомобильный маршрут. Не для всех подобных задач удобно пользоваться клавиатурой, поэтому сейчас одно из самых актуальных направлений мобильной разработки — это управление голосом.
В основе голосового управления лежит технология распознавания речи. В ней задействованы достижения различных областей: от компьютерной лингвистики до цифровой обработки сигналов. На конференции YaC 2013 в начале октября 2013 Яндекс представил свою технологию распознавания речи — SpeechKit.

Акустическая модель

Если сказать голосовому поиску «Лев Толстой», смартфон услышит не имя и фамилию, не два слова, а звуковой сигнал, в котором звуки плавно перетекают друг в друга, не имея чётких границ. Задача системы распознавания речи — восстановить по этому сигналу, что было сказано. Ситуацию осложняет то, что одна и та же фраза, произнесённая разными людьми в разной обстановке, будет давать совершенно непохожие друг на друга сигналы. Правильно интерпретировать их помогает система акустического моделирования.
https://avatars.mds.yandex.net/get-bunker/50064/0d2fab13a547fe449cd974cfffbe8c4e85691141/orig
Когда вы произносите голосовой запрос, например, в Яндекс.Навигаторе, смартфон записывает его и отправляет на сервер Яндекса. На сервере запись разделяется на много маленьких фрагментов (фреймов) длиной 25 миллисекунд, внахлёст, с шагом 10 миллисекунд. То есть из одной секунды вашей речи получается сто фреймов.
Дальше каждый из них пропускают через акустическую модель — функцию, которая определяет, какие звуки вы произнесли. На основе этих данных система, натренированная методами машинного обучения, определяет варианты слов, которые вы видите в результатах поиска. Мобильный Браузер в ответ на запрос «Лев Толстой» найдёт сайты о великом писателе, а Навигатор и Карты предложат улицу Льва Толстого.
Точность результатов напрямую зависит от того, насколько хорошо система определяет произнесённые звуки. Для этого достаточно точным и полным должен быть фонетический алфавит, с которым она работает.

Фонетический алфавит Яндекса

В русском языке, по разным теориям, около 40 фонем (звуковых единиц). Наша система распознавания речи сопоставляет входящий речевой сигнал с фонемами, а потом уже из них собирает слова. Например, слово «Яндекс» состоит из семи фонем — [й][а][н][д][э][к][с]. Фонемы могут обладать различной длительностью, и в разбивке по фреймам слово «Яндекс» может выглядеть, например, так — [й][й][а][а][а][а][а][а][а][а][а][а][н][н][д][д][э][к][с]. Произношение любой фонемы зависит от её соседей и позиции в слове. То есть звук [а] в начале, в середине и в конце слова — это три разных [а], а звук [а] между двумя гласными в сочетании «на аудиозаписи» отличается от [а] между согласными в слове «бак». Поэтому для хорошего распознавания фонема — слишком грубая единица.
Чтобы точнее смоделировать произношение фонемы, мы, во-первых, делим каждую фонему на три части: условные начало, середину и конец. Во-вторых, мы разработали свой фонетический алфавит, который учитывает позицию и контекст фонем. Брать в работу все возможные варианты контекстно-зависимых фонем было бы неблагоразумно, так как многие из них не встречаются в реальной жизни. Поэтому мы научили нашу программу рассматривать похожие звуки вместе. В результате мы получили набор из 4000 элементарных единиц — сенонов. Это и есть фонетический алфавит Яндекса, с которым работает наша технология распознавания речи.

Вероятности

В идеальном мире программа безошибочно определяет, какая фонема соответствует каждому фрагменту голосового запроса. Но даже человек иногда может не понять или не расслышать все звуки и достраивает слово исходя из контекста. И если человек опирается на собственный речевой опыт, то наша система оперирует вероятностями.
Во-первых, каждый фрагмент голосового запроса (фрейм) сопоставляется не с одной фонемой, а с несколькими, подходящими с разной степенью вероятности. Во-вторых, есть таблица вероятностей переходов, которая указывает, что после «а» с одной вероятностью будет тоже «а», с другой — «б» и так далее. Это позволяет определить варианты последовательности фонем, а потом, по имеющимся у программы данным о произношении, морфологии и семантике — варианты слов, которые вы могли сказать.
Программа также умеет восстанавливать слова по смыслу. Если вы находитесь в шумном месте, говорите не очень чётко или используете неоднозначные слова, она достроит ваш запрос исходя из контекста и статистики. Например, фразу «мама мыла…» программа с большей вероятностью продолжит как «мама мыла раму», а не как «мама мыла рану». Благодаря машинному обучению на множестве данных наша программа устойчива к шуму, хорошо распознаёт речь с акцентом, качество распознавания практически не зависит от пола и возраста говорящего.
Технология распознавания речи правильно определяет около 94% слов в Навигаторе и мобильных Картах и около 84% слов в мобильном Браузере. На распознавание уходит около секунды. Это весьма достойный результат, но работа продолжается. Вполне вероятно, что через через несколько лет голосовой интерфейс ввода не будет уступать классическим способам.