Авторы Zilun Peng, Akshay Budhkar, Jumana Nassour, Ilana Tuil и Jason Levy

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

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

В этом блоге мы расскажем, как мы работали с wav2vec 2.0 и добились отличных результатов.

Что такое сквозная система автоматического распознавания речи?

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

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

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

В приведенном выше примере показано, как рассчитать WER. Мы видим, что ASR допустил несколько ошибок. Он вставил «а», определил «Джон» как «Джонс» и удалил слово «являются» из основной истины.

Для расчета WER мы можем использовать эту формулу: (D + I + S) / N. D - количество удалений, I - количество вставок, S - количество замен, а N - количество слов в основной истине. В этом примере в выводе ASR было сделано 3 ошибки из 5 основных слов. В этом случае WER будет 3/5 = 0,6.

Набор данных LibriSpeech

Затем мы кратко коснемся набора данных LibriSpeech. Набор данных LibriSpeech - это наиболее часто используемый набор данных для обработки звука при исследовании речи. Он был создан Василом Панайотовым и Даниэлем Пови в 2015 году [3]. LibriSpeech состоит из 960 часов размеченных речевых данных и является стандартным эталоном для обучения и оценки систем ASR.

Набор данных dev-clean от LibriSpeech содержит 5,4 часа «чистых» речевых данных. Обычно он используется в качестве набора данных для проверки. На рисунке ниже мы показываем транскрипцию для одного аудио образца в наборе данных dev-clean.

Что такое wav2vec 2.0?

Теперь, когда мы понимаем, что такое система ASR и набор данных LibriSpeech, мы готовы ближе познакомиться с wav2vec 2.0.

Чем отличается wav2vec 2.0?

Системы ASR бывают двух видов:

  • Первыми являются гибридные системы, такие как Kaldi [7], которые обучают глубинную акустическую модель предсказывать фонемы из звука, обработанного в частотные кепстральные коэффициенты Mel (MFCC), объединяют фонемы с помощью словаря произношения и, наконец, выбирают наиболее вероятные результаты, используя язык. модель »(LM на основе подсчета и LM на основе RNN).
  • Второй - это сквозные системы, использующие глубокую нейронную сеть для предсказания слов непосредственно из аудио или MFCC. Такие системы, как RNN-T [6] или wav2vec [1, 4], требуют намного больше обучающих данных и ресурсов графического процессора для обучения.

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

Обещание wav2vec 2.0 - это предварительное обучение без контролируемых данных с использованием большого набора данных записей в целевом домене. Впоследствии модель может быть настроена с использованием контролируемого подхода для достижения максимальной точности. Wav2vec 2.0 показывает, что можно достичь низкого WER для наборов данных проверки LibriSpeech, используя только десять минут помеченных аудиоданных. Другой вариант - использовать предварительно обученную модель (например, модель libri-speech) и просто настроить ее для своего домена с помощью нескольких часов помеченного аудио.

Архитектура wav2vec 2.0

Прорыв, достигнутый в wav2vec 2.0, заключается в принятии метода замаскированного предварительного обучения массивной языковой модели BERT [8]. BERT маскирует несколько слов в каждом обучающем предложении, и модель тренируется, пытаясь заполнить пробелы.

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

На рисунке ниже показана архитектура wav2vec 2.0 с двумя основными компонентами: слоями CNN и слоями трансформатора.

Самостоятельное обучение

Так как же самообучение работает в wav2vec 2.0? Необработанная звуковая волна (X на рисунке выше) сначала проходит через слои CNN, и мы получаем скрытые речевые представления (Z на рисунке выше). Теперь две вещи происходят параллельно:

  1. Мы маскируем случайное подмножество Z, назовем его masked_Z. Мы передаем masked_Z в слои-преобразователи. Выходные данные слоев трансформатора называются представлениями контекста (C на рисунке выше).
  2. Мы применяем квантование продукта [5] к Z и получаем квантованные представления (Q на рисунке выше).

Мы ожидаем, что C будет близко к Q над замаскированными частями. «Ошибка» между C и Q на замаскированных частях называется контрастными потерями. Минимизация контрастных потерь позволяет слоям преобразователя изучать структуру скрытых речевых представлений (Z) .

Какое место в общей картине занимает wav2vec 2.0?

На рисунке выше мы видели, что представления контекста были выходными данными слоев трансформатора. Wav2vec 2.0 передает эти представления контекста на линейный уровень, за которым следует операция softmax. Окончательный результат содержит распределения вероятностей по 32 токенам. Маркер может быть символом или представлять границы слова и предложения, а также неизвестные.

Как преобразовать эти распределения вероятностей в текст? Ответ - декодер! Авторы wav2vec 2.0 использовали декодер поиска луча. Ниже мы покажем вам, как использовать декодер Витерби для преобразования вывода wav2vec 2.0 в текст.

Сходство с word2vec

Word2vec [2] генерирует вектор признаков для данного слова, так что векторы признаков похожих слов имеют более близкое косинусное сходство. Подобно word2vec, мы можем рассматривать вывод wav2vec 2.0 как вектор признаков для аудиосегмента.

Использование Python и PyTorch для создания сквозной системы распознавания речи с wav2vec 2.0

Теперь давайте посмотрим, как создать рабочий ASR с wav2vec 2.0, который генерирует текст с заданными звуковыми сигналами из набора данных LibriSpeech. В наших примерах кода мы использовали фреймворк Python и PyTorch.

Сначала загрузите модель wav2vec 2.0 и набор данных dev-clean из LibriSpeech. Набор данных dev-clean содержит 5,4 часа чистых речевых данных и обычно используется в качестве набора данных для проверки.

В приведенном выше коде мы объявляем model_path, который является путем к модели wav2vec 2.0, которую мы только что загрузили. data_path - это путь к набору данных dev-clean. Храните его в папке «/ home / datasets /».

В разделе 3.5 мы упоминали, что wav2vec 2.0 выводит распределение вероятностей по 32 токенам. Мы конвертируем эти токены в буквы с помощью файла ltr_dict.txt. Мы загружаем ltr_dict.txt отсюда и сохраняем его в /home/ltr_dict.txt.

Вы могли заметить, что ltr_dict.txt содержит только 28 букв и маркеров. Остальные четыре токена - это ‹s›, ‹pad›, ‹/s› и ‹unk›, и они добавляются, когда мы вызываем fairseq_mod.data.Dictionary.load () с путем к ltr_dict. txt.

Теперь создайте модель wav2vec 2.0.

В приведенном выше коде мы сначала загружаемся из model_path . Мы получаем w2v, который содержит настройку аргумента и веса модели. Затем мы создаем объект wav2vecCTC. Wav2vecCTC - это определение модели wav2vec 2.0. Наконец, мы загружаем веса в только что созданную модель.

Мы знаем, что нам нужен декодер для преобразования вывода wav2vec 2.0 в текст. Создайте декодер Витерби, как показано в коде ниже.

decoder = W2lViterbiDecoder(target_dict)

Затем нам нужно создать загрузчик данных для нашего набора данных. К счастью, torchaudio умеет обрабатывать набор данных LibriSpeech! Чтобы использовать его, нам просто нужно вызвать torchaudio.datasets.LIBRISPEECH.

На предыдущих этапах мы создали wav2vec 2.0, декодер Витерби и загрузчик данных. Теперь мы готовы преобразовать необработанные сигналы в текст с помощью wav2vec 2.0 и декодера.

В приведенном ниже коде показано, как мы передаем один образец данных в wav2vec 2.0. encoder_input - это образец данных, словарь, содержащий звуковые сигналы речи и другие аргументы, которые нам нужно передать в wav2vec 2.0. modeloutputs encoder_out, представляющие логиты по токенам на каждом временном шаге. Чтобы получить encoder_out, мы проецируем вывод wav2vec 2.0 в токены через линейный слой. Размер encoder_out равен L * B * C, где L - длина последовательности, B - размер пакета, а C - количество токенов.

Как мы видели в разделе 3.4, мы знаем, что нам нужно передать распределения вероятностей по токенам в декодер, чтобы получить расшифрованные тексты. Поскольку encoder_out - это логиты по токенам, мы берем log softmax этих логитов (через model.get_normalized_probs) и получаем emissions, которые представляют собой распределения вероятностей по токенам.

Затем мы передаем излучение в декодер, например:

В нашем третьем посте из этой серии мы описываем, что происходит внутри метода decode. Нам нужно выполнить некоторую пост-обработку decoder_out, чтобы завершить вывод текста, но мы опускаем эти детали здесь. Посмотрите post_process_sentence, если вам интересно узнать больше.

Вот и все! Мы только что закончили обработку одной выборки данных. Если вы хотите преобразовать все образцы данных из набора данных dev-clean в текст и получить оценку WER, попробуйте этот блокнот, и вы должны получить WER 2,63%.

Что дальше?

В этом посте мы представили систему ASR, а также wav2vec 2.0. Мы также показали вам, как заставить систему ASR работать с wav2vec 2.0. Обратите внимание, что wav2vec 2.0 - большая модель, и ее самая большая версия имеет 317 миллионов параметров! Итак, прочтите наш следующий пост, чтобы узнать, как сжать wav2vec 2.0.

О грузинских НИОКР

Грузинский финтех инвестирует в быстрорастущие софтверные компании.

В Georgian команда R&D работает над созданием нашей платформы, которая определяет и ускоряет рост компаний-разработчиков программного обеспечения. В рамках этой работы мы берем последние исследования искусственного интеллекта и используем их для решения бизнес-задач компаний, в которых мы являемся инвесторами. Затем мы создаем многоразовые наборы инструментов, чтобы другим нашим компаниям было легче перенять эти методы.

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

Взгляните на наши открытые возможности, если вас интересует карьера в Грузии.

использованная литература

[1] Баевски и др. (2020). Wav2vec 2.0: структура для самостоятельного изучения речевых представлений. Https://arxiv.org/abs/2006.11477

[2] Миколов и др. (2013). Эффективное оценивание представлений слов в векторном пространстве. Https://arxiv.org/abs/1301.3781

[3] Панайотов и др. (2015). Librispeech: корпус asr, основанный на аудиокнигах, являющихся общественным достоянием. Https://ieeexplore.ieee.org/document/7178964

[4] Schneider et al. (2019). wav2vec: Предварительное обучение распознаванию речи без учителя. Https://arxiv.org/abs/1904.05862

[5] Jegou et al. (2011). Квантование продукта для поиска ближайшего соседа. IEEE Trans. Pattern Anal. Мах. Интеллект., 33 (1): 117–128

[6] Алекс Грейвс (2012) Преобразование последовательности с рекуррентными нейронными сетями. Https://arxiv.org/pdf/1211.3711.pdf

[7] Пови и др. (2011) Набор средств распознавания речи Kaldi. Семинар IEEE 2011 по автоматическому распознаванию и пониманию речи. Https://kaldi-asr.org/doc/about.html

[8] Девлин и др. (2018) BERT: Предварительная подготовка глубоких двунаправленных преобразователей для понимания языка. Https://arxiv.org/abs/1810.04805