Если вы погружаетесь в область автоматического распознавания речи («ASR»), велика вероятность, что вы столкнулись с wav2vec 2.0 («wav2vec2») от Meta AI Research. Существует несколько отличных технических ресурсов, не последним из которых является сам оригинальный документ wav2vec2 , в котором описывается, как работает модель машинного обучения («ML»). Кроме того, команда Meta AI Research опубликовала на своем сайте хороший обзор wav2vec2 .
Я бы посоветовал вам взглянуть на него, поскольку он предлагает хорошее изложение научной статьи и поскольку иллюстрации модели wav2vec2 в этой статье взяты с этой страницы. Учитывая вышесказанное, кажется, не так уж много статей, объясняющих wav2vec2 «простым английским языком». Я пытаюсь сделать именно это с помощью этой статьи.
В этой статье предполагается, что вы понимаете некоторые базовые концепции машинного обучения и заинтересованы в понимании того, как wav2vec2 работает на высоком уровне, не вдаваясь слишком глубоко «в дебри».
Соответственно, в последующих разделах мы стараемся избегать многих технических подробностей в пользу простых объяснений и полезных аналогий, когда это необходимо.
При этом полезно заранее знать, что wav2vec2 состоит из 3 основных компонентов: кодировщика функций , модуля квантования и преобразователя .
Каждый из них будет обсуждаться в ходе обсуждения, начиная с некоторых основных идей и заканчивая более сложными (но все же удобоваримыми) моментами. Имейте в виду, что wav2vec2 можно использовать и для других целей, помимо ASR.
При этом нижеследующее обсуждает модель в контексте, специфичном для ASR.
На момент своего появления в 2020 году wav2vec2 предлагал новую основу для построения систем ASR. Что в этом такого особенного? До wav2vec2 системы ASR обычно обучались с использованием размеченных данных . То есть предыдущие модели обучались на многих примерах речевого звука, где каждый пример имел соответствующую транскрипцию. Чтобы объяснить эту идею, рассмотрим эту форму сигнала:
Не совсем понятно, что представляет собой этот сигнал, просто глядя на него. Но если вам скажут, что говорящий, создавший этот звук, произнес слова «привет, мир», вы, вероятно, сможете сделать некоторые разумные предположения относительно того, какие части сигнала соответствуют тексту, который его представляет.
Вы можете предположить (и правильно), что первый сегмент сигнала связан со словом «привет». Точно так же модели ASR могут научиться устанавливать ассоциации между сегментами звуковых сигналов и письменным текстом.
Однако, как отмечают в своей статье первоначальные исследователи wav2vec2, «[многим] системам распознавания речи требуются тысячи часов транскрибируемой речи, чтобы достичь приемлемой производительности, которая недоступна для подавляющего большинства из почти 7000 языков, на которых говорят во всем мире».
Итак, исследователи wav2vec2 изобрели новую модель, в которой для обучения системы не обязательно иметь «тысячи часов расшифрованной речи». Они ссылаются на полезную человеческую аналогию: дети не учатся говорить, услышав слово, а затем сразу увидев его текстовое представление.
Они учатся репрезентации речи, слушая людей из своего окружения (например, своих родителей, братьев и сестер и т. д.). wav2vec2 обучается аналогичным образом: сначала слушая .
Конечно, то, как этого добиться, и является предметом обсуждения в этой статье. Имейте в виду, что wav2vec2 в целом предназначен для выполнения двух задач :
Узнайте, каким речевым единицам следует давать образцы немаркированного звука.
Предскажите правильные речевые единицы.
На этом этапе вам не нужно полностью понимать, что подразумевается под этими пунктами. Они будут объяснены ниже. Просто пока держите их в затылке.
Представьте, что у вас есть огромный набор данных аудиосэмплов, скажем, для некоторого количества носителей английского языка. Даже не имея формального образования в области фонетики , вы можете интуитивно понять, что английский язык озвучивается с использованием набора основных звуков, которые «связаны вместе», образуя слова, предложения и т. д.
Конечно, если вы говорите по-английски, вы не думаете о том, чтобы говорить таким образом, и ваши вокализации того, что вы хотите сказать, более или менее автоматически! Но дело в том, что разговорный английский язык – и вообще любой разговорный язык – можно разложить на более простые, отдельные звуки.
Если бы мы могли каким-то образом уговорить модель ASR «извлекать» эти основные звуки, это позволило бы нам кодировать с их помощью любой аудиообразец разговорной речи. Это то, что делает wav2vec2, предварительно обучая аудиоданным.
Предварительное обучение в этом контексте означает, что первая часть обучения модели осуществляется самостоятельно, поскольку ей явно не «говорится», какими должны быть основные звуки для данного набора аудиоданных.
Если погрузиться немного глубже, система «подает» большое количество примеров, содержащих только аудио, и на основе этих примеров может выучить набор основных речевых единиц .
Таким образом, каждый аудиопример фактически состоит из некоторой комбинации этих речевых единиц; точно так же, как вы можете разбить разговорный аудиосэмпл на последовательность фонем .
Важно отметить, что основные речевые единицы, которые изучает wav2vec2, короче фонем и имеют длину 25 миллисекунд.
В этот момент возникает вопрос: как wav2vec2 изучает эти речевые единицы только по звуку?
Процесс изучения речевых единиц начинается с Feature Encoder. wav2vec2 «кодирует речевой звук через многослойную сверточную нейронную сеть».
Сверточные нейронные сети, или CNN, — это модели, которые позволяют нам изучать функции на основе заданных входных данных без предварительного явного определения этих функций.
Каждый уровень CNN можно рассматривать как извлечение функций из входных данных, причем эти функции становятся все более сложными по мере перехода к более высоким уровням.
В случае аудиоданных вы можете представить себе первый уровень CNN, проверяющий окна аудиоинформации и извлекающий низкоуровневые функции, такие как примитивные звуки.
Более поздний уровень той же CNN, используя функции более низкого уровня, извлеченные из более ранних слоев, будет кодировать функции более высокого уровня, такие как звуки, аппроксимирующие фонемы.
Следуя этой идее, wav2vec2 может начать «узнавать, каким речевым единицам следует давать образцы неразмеченного звука», передавая временные интервалы каждого аудиопримера в кодировщик функций и генерируя скрытое представление каждого фрагмента.
Однако совокупность скрытых представлений не представляет собой дискретных речевых единиц. Эти представления должны быть каким-то образом дискретизированы. Это достигается путем передачи выходных данных кодировщика функций в модуль квантования .
По сути, модуль квантования принимает все различные аудиопредставления, сгенерированные кодировщиком функций, и сводит их к конечному набору речевых единиц. Здесь стоит задаться вопросом, следует ли предварительно обучать wav2vec2 на одном языке или на нескольких языках.
Логика подсказывает нам, что захват речевых единиц, представляющих несколько языков, а не одного языка, вероятно, будет более полезным при разработке систем ASR, которые можно использовать на многих языках.
С этой целью предварительное обучение wav2vec2 с использованием выборки многоязычных аудиосэмплов позволяет модели создавать речевые единицы, которые фактически захватывают несколько языков.
Исследователи wav2vec2 отметили ценность этого подхода, поскольку «для некоторых языков даже [аудио] данные ограничены». Их первоначальные результаты показали , что «некоторые единицы используются только для определенного языка, тогда как другие используются в похожих языках, а иногда даже в языках, которые не очень похожи».
Инвентаризация речевых единиц — это первый шаг к возможности кодирования аудиообразцов разговорной речи. Но чего мы действительно хотим достичь, так это обучить wav2vec2 тому, как эти модули связаны друг с другом.
Другими словами, мы хотим понять, какие речевые единицы могут встречаться в одном и том же контексте . wav2vec2 решает эту задачу через слой Transformer.
Трансформатор, по сути, позволяет wav2vec2 узнать в статистическом смысле, как речевые единицы распределяются между различными аудиопримерами. Это понимание облегчает кодирование аудиосэмплов, которые модель «увидит» после предварительного обучения.
В конечном счете, система ASR должна иметь возможность генерировать текстовую транскрипцию для заданной последовательности аудио, которую она раньше не «видела». После предварительного обучения с помощью описанных выше шагов wav2vec2 настраивается для этой цели. На этот раз в модели явно показаны примеры аудиосэмплов и связанных с ними транскрипций.
На этом этапе модель может использовать то, что она узнала в ходе предварительного обучения, для кодирования аудиосэмплов в виде последовательностей речевых единиц и сопоставления этих последовательностей речевых единиц с отдельными буквами в словаре, представляющим транскрипцию (т. е. буквы от «а» до «). z» в случае английского языка).
Обучение во время точной настройки завершает обучение модели wav2vec2 и позволяет ей прогнозировать текст для новых аудиопримеров, которые не были частью ее обучения во время точной настройки.
Конечно, низкоуровневая механика wav2vec2 гораздо сложнее, чем то, что представлено выше. Однако, повторюсь, цель этой статьи — предоставить вам простое концептуальное понимание того, как работает модель и как она обучается.
wav2vec2 — это очень мощная платформа машинного обучения для создания систем ASR, а ее вариант XLS-R, представленный в конце 2021 года, был обучен на 128 языках, что обеспечивает улучшенную платформу для разработки моделей ASR на нескольких языках.
Как упоминалось во введении, существует ряд отличных технических ресурсов, которые помогут вам узнать больше. В частности, вы можете найти особенно полезными те, которые предоставляет Hugging Face .