✍Пабло Вальверде и Гийом Бакиаст

Готовые API или индивидуальная модель?

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

  1. Их цена не всегда незначительна;
  2. Они создают проблемы с конфиденциальностью и безопасностью, поскольку аудио передается через Интернет;
  3. Они обучены работе с универсальными приложениями и плохо справляются с конкретными вариантами использования.

В Quantmetry мы работали над задачей, организованной Airbus, чтобы расшифровать разговоры о воздушном движении между пилотами самолетов и диспетчерскими пунктами. В этом приложении звуки шумные, с высокой скоростью речи и большим количеством предметной лексики. Мы обнаружили, что стандартные API-интерфейсы плохо справляются с такими сложными задачами, а обучение пользовательской модели дает гораздо лучшие результаты.

Ниже приведены несколько примеров, в которых сравнивается транскрипция Google API и транскрипция построенной нами модели с реальной транскрипцией.

Настоящая транскрипция:

Билайн, четыре, два, браво, за этим трафиком от Майка, четыре, выстраивайся в линию, взлетно-посадочная полоса, три, два, налево и жди позади

Расшифровка API Google:

за этим трафиком с моего телефона и уроком в Интернете прямо позади

Транскрипция пользовательской модели:

Билайн, четыре, два, браво, позади движения от Майка, четыре, выстраивайся в линию, три, два, налево и жди позади

Транскрипция Google далека от реальной транскрипции. Он правильно понимает некоторые слова («трафик», «позади»), но добавляет несколько слов, которые не будут использоваться в контексте воздушного движения («интернет-страница»). Для сравнения, наша пользовательская модель ошибается только в одном слове («the» vs «this»).

Другой пример:

Настоящая транскрипция:

Евроуингс семь четыре три два первый да справа микрофон восемь пересечь взлетно-посадочную полосу три два справа с другой стороны контакт с землей один два один девять до свидания

Расшифровка API Google:

7 : 4 0, чтобы написать статью, на которой можно писать

Транскрипция пользовательской модели:

Евроуингс семь четыре три два, а, правильно, микрофон, восемь, пересечь взлетно-посадочную полосу, три, два, прямо, и коснуться земли, один, два, один, девять, до свидания

Интересно сравнить транскрипцию «написать» в Google с «правильно» в нашей модели (и реальную транскрипцию). Эти слова произносятся одинаково, но «правильно» гораздо более вероятно в контексте воздушного движения. Это было изучено нашей пользовательской моделью, но не Google, который обучен для общего случая.

Последний пример:

Настоящая транскрипция:

KLM шесть три танго сократить один восемь ноль узлов

Расшифровка API Google:

Я просто хочу пончик

Транскрипция пользовательской модели:

KLM шесть три танго сократить один восемь ноль узлов

Хотя пончик звучит красиво…

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

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

Итак, как обучить пользовательскую систему распознавания речи?

Существует два основных подхода:

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

Мы использовали метод глубокого обучения Deep Speech, разработанный Baidu и реализованный Mozilla в проекте с открытым исходным кодом. Он основан на двух основных элементах:

  • Акустическая модель, преобразующая звук в серию букв;
  • Языковая модель, придающая значение транскрипции.

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

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

Акустическая модель распознает буквы, которые произносятся вдоль аудио. Для этого звук разрезается на последовательность небольших фрагментов по 0,1 секунды, и модель пытается определить букву, произносимую в каждом из них. Этот тип проблемы известен как последовательность к последовательности: модель переводит последовательность звуков в последовательность букв.

Рекуррентные нейронные сети («RNN») — это тип нейронных сетей, которые позволяют переносить информацию по последовательности. Каждый шаг сети принимает на вход как элемент последовательности, так и некоторую контекстную информацию, переданную от предшествующих элементов. Нашими входными данными здесь являются спектрограммы звуковых фрагментов, а нашими выходными данными являются буквы, произносимые на этих фрагментах.

Архитектура, предложенная Deep Speech, немного сложнее, чем обычная RNN, с несколькими полностью связанными уровнями для абстракции и двунаправленной RNN для учета контекста как из прошлого, так и из будущего, а также последовательности.

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

Языковая модель: придание смысла транскрипции

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

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

В приведенном ниже примере показано обучение модели биграммы (n-граммы с n = 2) для корпуса, состоящего из двух простых предложений.

Соединяем это через целевую функцию

Каждая модель машинного обучения нуждается в целевой функции для оптимизации. Вот одна из наших моделей:

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

Реализация модели

В отношении реализации модели следует отметить три момента.

1. Объем данных

Для обучения модели транскрипции требуется много данных: Google использует более 100 000 часов аудио, Mozilla открыла исходный код модели, обученной 3000 часов, но для нашего варианта использования у нас было только 50 часов данных о воздушном движении. Имея так мало данных, мы не смогли обучить ни одну хорошую модель. Поэтому мы использовали трансферное обучение: мы инициализировали нашу сеть с весами, изученными Mozilla за 3000 часов, и повторно обучили их на наших конкретных данных. Это привело к значительному увеличению производительности модели.

2. Обучение в облаке

Используемая нами сеть имеет более 120 миллионов параметров. Для обучения требуется много памяти и вычислительной мощности. У нас быстро закончились вычислительные мощности на нашей физической машине. Поэтому мы обратились к облаку, где мы могли арендовать очень мощные машины для обучения нашей сети в течение нескольких часов.

3. Предсказать сравнение времени

Наша модель работает на устройстве. Это обеспечивает как конфиденциальность (данные не проходят через Интернет), так и быстрое время транскрипции (нет времени на загрузку). Это продемонстрировано нашим эталонным тестом, в котором Google API взял среднее время транскрипции, равное 50% времени аудио, в то время как наша модель заняла только 30% времени аудио.

Вывод

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

Первоначально опубликовано на https://www.quantmetry.com 31 августа 2018 г.