Задача большинства ученых-логоведов не в том, чтобы придумать концептуально новые алгоритмы.
Компании в основном ориентируются на существующие подходы.
Машинный интеллект уже может распознавать и синтезировать голоса, но не всегда в реальном времени, не всегда локально и не всегда «выборочно» — когда нужно реагировать только на ключевые фразы, робот может допускать ошибки.
Разработчики заняты такими проблемами.
Муаммар аль-Шедиват Лайтлас рассказывает об этих и других проблемах, которые пока не смогли решить даже крупные компании.
— Сегодня я расскажу об открытых проблемах в области речевых технологий.
Но прежде всего давайте поймем, что речевые технологии стали неотъемлемой частью нашей жизни.
Идем ли мы по улице или едем в машине, когда мы хотим задать тот или иной запрос поисковой системе, естественно сделать это голосом, а не набором текста или чем-то еще.
Сегодня я буду говорить в основном о распознавании речи, хотя есть и много других интересных задач.
Моя история будет состоять из трех частей.
Для начала напомню в общих чертах, как работает распознавание речи.
Далее я расскажу, как люди пытаются его улучшить и какие задачи стоят перед Яндексом, которые обычно не встречаются в научных статьях.
Общая схема распознавания речи.
Первоначально на вход мы получаем звуковую волну.
Разбиваем его на мелкие кусочки, рамки.
Длина кадра обычно составляет 25 мс, шаг — 10 мс.
Они приходят с некоторой путаницей.
После этого мы извлекаем из кадров самые важные особенности.
Допустим, нам не важен тембр голоса или пол человека.
Мы хотим распознавать речь независимо от этих факторов, поэтому извлекаем наиболее важные особенности.
Затем нейронная сеть настраивается на все это и выдает прогноз по каждому кадру — распределение вероятностей по фонемам.
Нейрон пытается угадать, какая фонема была произнесена в конкретном кадре.
В конечном итоге все это запихивается в декодирование графа, который получает распределение вероятностей и учитывает языковую модель.
Допустим, «Мама мыла раму» — более популярная фраза в русском языке, чем «Мама мыла цыган».
Также учитывается произношение слов и генерируются окончательные гипотезы.
В общем, так работает распознавание речи.
Естественно, необходимо сказать несколько слов о метрике.
Все используют метрику WER при распознавании речи.
Это переводится как «Мировая частота ошибок».
Это просто расстояние Левенштейна от того, что мы узнали, до того, что на самом деле было сказано во фразе, деленное на количество слов, фактически сказанных во фразе.
Видно, что если у нас было много вставок, то ошибка WER может быть больше единицы.
Но на это никто не обращает внимания, и все работают с этой метрикой.
Как мы это улучшим? Я выделил четыре основных подхода, которые пересекаются друг с другом, но на это не стоит обращать внимание.
Основные подходы такие: давайте улучшим архитектуру нейронных сетей, попробуем изменить функцию потерь, почему бы не использовать модные в последнее время подходы End to end. И в заключение расскажу о других задачах, которые, например, не требуют расшифровки.
Когда людям пришла в голову идея использовать нейронные сети, естественным решением было использовать самое простое: нейронные сети прямого распространения.
Берем кадр, контекст, количество кадров слева, число справа и предсказываем, какая фонема была произнесена в этом кадре.
После чего вы можете посмотреть на все это как на картинку и применить всю уже использованную для обработки изображений артиллерию, всевозможные сверточные нейронные сети.
Вообще, многие современные статьи были получены с использованием сверточных нейронных сетей, но сегодня я больше расскажу о рекуррентных нейронных сетях.
Рекуррентные нейронные сети.
Все знают, как они работают. Но возникает большая проблема: фреймов обычно намного больше, чем фонем.
На одну фонему приходится 10, а то и 20 фреймов.
С этим нужно как-то бороться.
Обычно это встроено в декодирование графа, при котором мы остаемся в одном состоянии на протяжении многих шагов.
В принципе, с этим можно как-то бороться; существует парадигма кодер-декодер.
Давайте сделаем две рекуррентные нейронные сети: одна будет кодировать всю информацию и выводить скрытое состояние, а декодер будет принимать это состояние и выводить последовательность фонем, букв или, может быть, слов — так вы обучаете нейронную сеть.
Обычно при распознавании речи мы работаем с очень большими последовательностями.
Легко найти 1000 кадров, которые необходимо закодировать с одним скрытым состоянием.
Это нереально; ни одна нейросеть с этим не справится.
Давайте воспользуемся другими методами.
Дима Богданов, выпускник ШАД, изобрел метод «Внимание».
Пусть энкодер выдает скрытые состояния, а мы не будем их выбрасывать, а оставим только последнее.
Возьмем взвешенную сумму на каждом шаге.
Декодер возьмет взвешенную сумму скрытых состояний.
Таким образом мы сохраним контекст, то, на что мы смотрим в конкретном случае.
Подход отличный, работает хорошо, на некоторых наборах данных дает современные результаты, но есть один большой недостаток.
Мы хотим распознавать речь онлайн: человек произнес 10-секундную фразу, и мы сразу же выдали ему результат. Но Внимание требует знать всю фразу, в этом ее большая проблема.
Человек скажет 10-секундную фразу, а мы 10 секунд ее узнаем.
За это время он удалит приложение и никогда больше его не установит. Нам нужно с этим бороться.
Совсем недавно об этом говорилось в одной из статей.
Я назвал это онлайн-вниманием.
Разобьем входную последовательность на блоки некоторой небольшой фиксированной длины, установим Внимание внутри каждого блока, тогда будет декодер, который выдает соответствующие символы на каждом блоке, после чего в какой-то момент он выдает конец символа блока, перемещает к следующему блоку, т.к.
мы исчерпали здесь всю информацию.
Здесь вы можете прочитать цикл лекций, я постараюсь просто сформулировать мысль.
Когда они начали обучать нейронные сети распознаванию речи, они пытались угадать фонему.
Для этого мы использовали обычную функцию кросс-энтропийных потерь.
Проблема в том, что даже если мы оптимизируем кросс-энтропию, это не значит, что мы хорошо оптимизировали WER, потому что эти метрики не коррелируют на 100%.
Для борьбы с этим были придуманы функции Sequence Based Loss: аккумулируем всю информацию по всем кадрам, посчитаем один общий Loss и передадим градиент обратно.
Не буду вдаваться в подробности, можете почитать про CTC или SNBR Loss, это очень специфическая тема для распознавания речи.
Сквозные подходы имеют два пути.
Первый — сделать больше «сырых» функций.
У нас был момент, когда мы извлекали особенности из кадров, а обычно их извлекают, пытаясь имитировать человеческое ухо.
Зачем имитировать человеческое ухо? Пусть нейрон сам научится и поймет, какие функции ему полезны, а какие бесполезны.
Давайте вводить в нейрон все больше и больше необработанных функций.
Второй подход. Мы даем пользователям слова, буквенное представление.
Так зачем же нам нужно предсказывать фонемы? Хотя предугадать их очень естественно, человек говорит фонемами, а не буквами, но конечный результат мы должны дать буквами.
Итак, давайте предскажем буквы, слоги или пары символов.
Какие еще задачи есть? Допустим, задача — фреймпоттинг.
Есть некий фрагмент звука, из которого нужно извлечь информацию о том, была ли произнесена фраза «Послушай, Яндекс» или нет. Для этого можно распознать фразу и сказать «Слушай, Яндекс», но это очень грубый подход, а распознавание обычно работает на серверах, модели очень большие.
Обычно звук отправляется на сервер, распознается, а распознанная форма отправляется обратно.
Нагружайте 100 тысяч пользователей каждую секунду, отправляйте звук на сервер — ни один сервер с этим не справится.
Нам нужно придумать решение, которое будет небольшим, сможет работать на телефоне и не будет съедать батарею.
И оно будет хорошего качества.
Для этого поместим все в нейронную сеть.
Он просто будет предсказывать, например, не фонемы или буквы, а целые слова.
И давайте просто сделаем три класса.
Сеть предскажет слова «слушай» и «Яндекс», а все остальные слова мы отобразим в филлер.
Таким образом, если в какой-то момент сначала были высокие вероятности «слушай», затем высокие вероятности «Яндекс», то с большой вероятностью была ключевая фраза «Слушай, Яндекс».
Проблема, которая мало исследована в статьях.
Обычно, когда пишутся статьи, берется какой-то датасет, по нему получаются хорошие результаты, состояние попадает — ура, публикуем статью.
Проблема этого подхода в том, что многие наборы данных не меняются в течение 10 или даже 20 лет. И они не сталкиваются с теми проблемами, с которыми сталкиваемся мы.
Иногда возникают тенденции, мы хотим их распознать, и если этого слова нет в нашем графе расшифровки при стандартном подходе, то мы его никогда не распознаем.
Нам нужно с этим бороться.
Мы можем взять и переварить граф расшифровки, но это трудоемкий процесс.
Возможно, утром есть какие-то трендовые слова, а вечером — другие.
Соблюдать утренний и вечерний график? Это очень странно.
Был придуман простой подход: к большому графику расшифровки добавим небольшой граф, который будет воссоздаваться каждые пять минут из тысяч лучших и трендовых фраз.
Мы просто будем параллельно декодировать эти два графика и выбирать лучшую гипотезу.
Какие задачи остаются? Там современность побили, здесь проблемы решили.
Приведу график WER за последние несколько лет.
Как видите, Яндекс за последние несколько лет улучшился, и вот график по лучшей теме — геопоиск.
Вы можете понять, что мы стараемся и совершенствуемся, но есть небольшой пробел, который необходимо устранить.
И даже если мы сделаем распознавание речи — а мы это сделаем — что сравнимо с человеческими возможностями, то возникнет другая проблема: это было сделано на сервере, но давайте перенесём это на устройство.
Это отдельная, сложная и интересная задача.
У нас есть много других задач, о которых вы можете меня спросить.
Спасибо за внимание.
Теги: #Машинное обучение #Алгоритмы #распознавание речи #речевые технологии #фреймы #нейронные сети #рекуррентная нейронная сеть #wer #нерешенные проблемы
-
Первый Компьютерный Егэ 2021
19 Oct, 24 -
Новый Файловый Вирус С Инструкциями Mmx
19 Oct, 24 -
Новые Материалы И Нанотехнологии
19 Oct, 24 -
Ремонт Колесика Мыши Logitech.
19 Oct, 24 -
Обучение Пользователей Вашей Организации
19 Oct, 24