Участница:DespairedController/Черновик:Распознавание речи — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Конформер)
м (Конформер)
 
(не показано 37 промежуточных версий 2 участников)
Строка 165: Строка 165:
  
 
==Обучение с частичным привлечением учителя для автоматического распознавания речи==
 
==Обучение с частичным привлечением учителя для автоматического распознавания речи==
 +
[[Файл:ASR_new_sota.png|600px|thumb|right|'''Рисунок 1.''' $WER$ SOTA алгоритмов на датасетах LibriSpeech test-clean/test-other. $WER$ описываемого в статье алгоритма отмечен красной точкой. [https://arxiv.org/pdf/2010.10504.pdf Источник]]]
 +
Для обучения современных систем распознавания речи требуются тысячи часов размеченной речи, однако получение размеченных данных в необходимом объеме (особенно с учетом разнообразия существующих языков) затруднительно. Это повлияло на то, что сейчас в машинном обучении для распознавания речи успешно используется [[Обучение с частичным привлечением учителя| обучение с частичным привлечением учителя]], которое позволяет сначала обучать модель на большом объеме неразмеченных данных, а потом корректировать ее при помощи размеченных.
  
Часто получить размеченные данные в необходимых объемах является сложно реализуемой задачей, особенно с учетом разнообразия существующих языков: для современных систем распознавания речи требуются тысячи часов размеченной речи для достижения приемлемой производительности. Также изучение исключительно на размеченных данных не похоже на естественный процесс овладения
+
Одним из примеров обучения с частичным привлечением учителя для автоматического распознавания речи является подход, впервые представленный в статье<ref>''Yu Zhang, James Qin, Daniel S. Park, Wei Han, Chung-Cheng Chiu, Ruoming Pang, Quoc V. Le, Yonghui Wu'' Pushing the Limits of Semi-Supervised Learning for Automatic Speech Recognition[https://arxiv.org/pdf/2010.10504.pdf]</ref>, основанный на комбинации алгоритмов [[Распознавание_речи#Noisy_student | noisy student]], [[Распознавание_речи#wav2vec | wav2vec]] и использовании модели [[Распознавание_речи#Конформер| Конформера]]. Такой метод позволил уменьшить $WER$ на наборах данных LibriSpeech test-clean/test-other с  $1.7\%/3.3\%$ (предыдущий ''state-of-the-art'') до $1.4\%/2.6\%$ (Рисунок 1).<br>
языком, например, у детей, которые учатся, слушая окружающую их речь.
 
  
Это повлияло на то, что сейчас в машинном обучении для распознавания речи успешно
+
Основная идея состоит в том, что множество моделей Конформеров при помощи алгоритма ''wav2vec'' предварительно обучается на неразмеченных данных, при этом одновременно с этим на основе них генерируются размеченные. Таким образом, неразмеченные данные используются для двух целей: для обучения модели и для генерации размеченных данных, которые используются для дальнейшего обучения модели алгоритмом ''noisy student''.
используется [[Обучение с частичным привлечением учителя#Самообучение (Self Training)| самообучение]].
 
  
Одним из примеров алгоритмов самообучения является подход, впервые представленный в статье[https://arxiv.org/pdf/2010.10504.pdf], основанный на комбинации алгоритмов [[Распознавание_речи#Noisy_student | noisy student]], [[Распознавание_речи#wav2vec | wav2vec]] и использовании модели [[Распознавание_речи#Конформер| Конформер]]. Такой метод позволил уменьшить $WER$ на наборах данных LibriSpeech test/test-other с  $1.7\%/3.3\%$ (предыдущий ''state-of-the-art'') до $1.4\%/2.6\%$. <br>
+
===Конформер===
 +
[[Файл:Conformer.png|600px|thumb|right|'''Рисунок 2.''' Общая схема Конформера (a) и схема блоков Конформера (b)]]
 +
[[Трансформер|Трансформер]]<sup>[на 21.01.21 не создан]</sup>, использующий [[Механизм внимания#Self-Attention|механизм самовнимания]], хорошо захватывает глобальный контекст, однако не очень хорошо извлекает локальные признаки. [[Сверточные нейронные сети]], наоборот, эффективно используют локальные признаки, но требуют большого числа слоев для захвата глобального контекста. Конформер (англ. ''Conformer'') комбинирует сверточные слои с механизмом самовнимания. $WER$ на LibriSpeech test-clean/test-other составляет $1.9\%/3.9\%$.
 +
 
 +
Конформер сначала обрабатывает входные данные с помощью сверточной нейронной сети, состоящей из слоя [[Сверточные нейронные сети#Пулинговый слой|пулинга]], [[Нейронные сети, перцептрон|полносвязного слоя]] и [[Практики реализации нейронных сетей#Дропаут|дропаута]], а затем с помощью последовательности блоков Конформера.
  
Основная его идея состоит в том, что множество моделей Конформеров при помощи алгоритма wav2vec предварительно обучается на неразмеченных данных, при этом одновременно с этим на основе них генерируются размеченные. Таким образом, неразмеченные данные используются для двух целей: для обучения модели и для генерации размеченных данных, которые используются для дальнейшего обучения модели алгоритмом noisy student.
+
Блоки Конформера {{---}} это последовательность из двух модулей прямой связи (англ. ''feed forward''), между которыми расположены модуль многоголового самовнимания (англ. ''Multi-Head Self Attention'') и сверточный модуль, с последующей нормализацией слоя (англ. ''layer normalization'').
  
===Конформер===
+
[[Файл:Multi_Head_Self_Attention_module.png|400px|thumb|right|'''Рисунок 3.''' Модуль многоголового самовнимания]]
[[Файл:Conformer.png|600px|thumb|right|'''a.''' Схема архитектуры Конформер.<br> '''b.''' Блок конформера.]]
 
Архитектура Трансформер, основанная на [[Механизм внимания#Self-Attention|самовнимании]] позволяет фиксировать взаимодействия на большом расстоянии, однако не очень хорошо извлекает точные паттерны локальных признаков. [[Сверточные нейронные сети]], наоборот, эффективно используют локальные признаки, но требуют большого числа слоев для захвата глобального контекста. Архитектура Конформер (англ. ''Conformer'') берет лучшее от двух подходов, комбинируя свертки и механизм самовнимания, достигая $WER$ $1.9\%/3.9\%$ на LibriSpeech.
 
  
Кодировщик сначала обрабатывает входные данные с помощью сверточной нейронной сети, состоящей из слоя [[Сверточные нейронные сети#Пулинговый слой|пулинга]], [[Нейронные сети, перцептрон|полносвязного слоя]] и [[Практики реализации нейронных сетей#Дропаут|дропаута]]), а затем с помощью последовательности блоков Конформера.
+
'''Модуль многоголового самовнимания'''
  
Блок Конформера состоит из двух модулей прямой связи (англ. ''feed forward''), между которыми расположены модуль многоголового самовнимания (англ. ''Multi-Head Self Attention'') и сверточный модуль, с последующим слоем нормализации.
+
В модуле используется блок многоголового внимания с относительным позиционным кодированием (англ. ''Multi-Head Attention with Relational Positional Encoding''). Такой блок (изначально часть архитектуры Трансформер-XL<ref>''Zihang Dai, Zhilin Yang, Yiming Yang, Jaime Carbonell, Quoc V. Le, Ruslan Salakhutdinov'' Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context[https://arxiv.org/pdf/1901.02860.pdf]</ref>) используется с целью исправить два недостатка Трансформера: ограничение на длину входа (что не позволяет модели, например, использовать слово, которое появилось несколько предложений назад) и фрагментацию контекста (последовательность разбивается на несколько блоков, каждый из которых обучается независимо). Для достижения этой цели используются два механизма: механизм повторения (англ. ''reccurence mechanism'') и относительное позиционное кодирование (англ. ''relational positional encoding''). Механизм повторения позволяет использовать информацию из предыдущих сегментов. Как и в оригинальной версии, Трансформер-XL обрабатывает первый сегмент токенов, но сохраняет выходные данные скрытых слоев. При обработке следующего сегмента каждый скрытый слой получает два входа: результат предыдущего скрытого слоя этого сегмента, как в Трансформере, и результат предыдущего скрытого слоя из предыдущего сегмента, который позволяет модели создавать зависимости от далеких сегментов.
  
[[Файл:Multi_Head_Self_Attention_module.png|600px|thumb|right|Модуль многоголового самовнимания]]
+
Однако, с использованием механизма повторения возникает новая проблема: при использовании исходного позиционного кодирования каждый сегмент кодируется отдельно, и в результате токены из разных сегментов закодированы одинаково.
  
'''Модуль многоголового самовнимания'''
+
Относительное позиционное кодирование основано на относительном расстоянии между токенами. Для  подсчета оценки, на основании которой на некоторое скрытое состояние будет "обращено внимание", используется относительное расстояние между токенами вместо абсолютного положения текущего токена, а так же два вектора параметров: первый регулирует важность содержания другого токена, а второй — важность расстояния между токенами.
  
В модуле используется блок многоголового внимания с относительным позиционным кодированием (англ. ''Multi-Head Attention with Relational Positional Encoding''). Использование относительного позиционного кодирования[https://arxiv.org/pdf/1901.02860.pdf] позволяет модулю самовнимания лучше обобщать при различной длине ввода, а результирующий кодировщик более устойчив к неоднородности длины высказывания.
+
Использование модуля многоголового самовнимания с относительным позиционным кодированием позволяет сети лучше обучаться при различной длине ввода, а результирующая архитектура получается более устойчивой к неоднородности длины высказывания.
  
 
'''Сверточный модуль'''
 
'''Сверточный модуль'''
[[Файл:Convolution_module.png|600px|thumb|right|Сверточный модуль]]
+
[[Файл:Convolution_module.png|600px|thumb|right|'''Рисунок 4.''' Сверточный модуль]]
Последовательность слоев в сверточном модуле начинается с стробирующего механизма[https://arxiv.org/pdf/1612.08083.pdf]: сверточного слоя с ядром $1 \times 1$ и стробированного линейного блока (англ. ''gated linear unit''). Использование стробированного линейного блока уменьшает проблему исчезающего градиента. После сверточного слоя используется [[Batch-normalization|пакетная нормализация]].
+
Последовательность слоев в сверточном модуле начинается с управляемого модуля<ref>''N. Dauphin, Angela Fan, Michael Auli, David Grangier'' Language Modeling with Gated Convolutional Networks[https://arxiv.org/pdf/1612.08083.pdf]</ref>: сверточного слоя с ядром $1 \times 1$ (англ. ''pointwise convolution'') и управляемого линейного блока (англ. ''gated linear unit''). Управляемый линейный блок {{---}} слой нейронной сети, определяемый как покомпонентное произведение двух линейных преобразований входных данных, [[Практики реализации нейронных сетей#Функции активации|функция активации]] одного из которых {{---}} сигмоида. Использование управляемого линейного блока уменьшает [[Сверточные нейронные сети#Residual block|проблему исчезающего градиента]]. После сверточного слоя используется [[Batch-normalization|пакетная нормализация]].
  
 
В модуле используется функция активации ''swish'': $swish(x) = \dfrac{x}{1 + e^{- \beta x}}$.
 
В модуле используется функция активации ''swish'': $swish(x) = \dfrac{x}{1 + e^{- \beta x}}$.
  
 
'''Модули прямой связи'''
 
'''Модули прямой связи'''
[[Файл:FFN.png|600px|thumb|right|Схема модуля прямой связи]]
+
[[Файл:FFN.png|600px|thumb|right|'''Рисунок 5.''' Схема модуля прямой связи]]
В отличие от архитектуры Трансформер, в которой единственный модуль прямой связи следует за модулем внимания и состоит из двух линейных преобразований и нелинейной активации между ними, в Конформере два модуля прямой связи, состоящие из слоя нормализации и двух линейных слоев. Кроме того для регуляризации используется функция активации ''swish'' и дропаут.
+
В отличие от Трансформера, в котором единственный модуль прямой связи следует за модулем внимания и состоит из двух линейных преобразований и нелинейной активации между ними, Конформер представляет собой два модуля прямой связи, состоящих из слоя нормализации и двух линейных слоев. Кроме того, для регуляризации используется функция активации ''swish'' и [[Практики реализации нейронных сетей#Дропаут|дропаут]].
  
 
===wav2vec===
 
===wav2vec===
Подход wav2vec основан на самообучении на мел спектрограммах.
+
Подход wav2vec<ref>''Alexei Baevski, Henry Zhou, Abdelrahman Mohamed, Michael Auli'' wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations[https://arxiv.org/pdf/2006.11477.pdf]</ref> основан на самообучении на [[Распознавание речи#Признаки|мел спектрограммах]].
  
 
'''Модель'''
 
'''Модель'''
  
# ''Энкодер признаков'' (англ. feature encoder) $f: X \to Z$ реализован на основе [[Сверточные нейронные сети#Сверточный слой|сверточного слоя]]. Преобразует мел спектрограммы $X$, разбитые на $T$ временных интервалов, в наборы признаков $\{z_1, \dots, z_T\}$, которые описывают исходные данные в каждом из $T$ интервалов. <br>
+
# ''Энкодер признаков'' (англ. Feature Encoder) $f: X \to Z$ реализован на основе [[Сверточные нейронные сети#Сверточный слой|сверточного слоя]]. Преобразует мел спектрограммы $X$, разбитые на $T$ временных интервалов, в наборы признаков $\{z_1, \dots, z_T\}$, которые описывают исходные данные в каждом из $T$ интервалов. <br>
# ''Контекстная сеть'' (англ. context network) $g: Z \to C$ реализована на основе линейного слоя и слоя, состоящего из $N$ Конформеров. Преобразует наборы признаков $\{z_1, \dots, z_T\}$, полученные в результате работы энкодера признаков, в контекстные вектора $\{c_1, \dots, c_T\}$. <br>
+
# ''Контекстная сеть'' (англ. Context Network) $g: Z \to C$ реализована на основе линейного слоя и слоя, состоящего из $N$ блоков Конформера. Преобразует наборы признаков $\{z_1, \dots, z_T\}$, полученные в результате работы энкодера признаков, в контекстные вектора $\{c_1, \dots, c_T\}$. <br>
# ''Модуль линейного слоя'' (англ. linear layer module) $u: Z \to T$ реализован на основе линейного слоя. Преобразует наборы признаков $\{z_1, \dots, z_T\}$, полученные в результате работы энкодера признаков, в целевые вектора $\{t_1, \dots, t_T\}$. <br>
+
# ''Модуль линейного слоя'' (англ. Linear Layer Module) $u: Z \to T$ реализован на основе линейного слоя. Преобразует наборы признаков $\{z_1, \dots, z_T\}$, полученные в результате работы энкодера признаков, в целевые вектора $\{t_1, \dots, t_T\}$. <br>
 +
 
 +
{|align="center"
 +
|-valign="top"
 +
|[[Файл:wav2vec.png | 600px | thumb | '''Рисунок 6.''' Схема обучения модели wav2vec]]
 +
|}
  
 
'''Обучение'''
 
'''Обучение'''
Строка 213: Строка 220:
 
# Исходные мел спектрограммы $X$ проходят через через энкодер признаков $f$ и таким образом преобразуются в $T$ наборов признаков $\{z_1, \dots, z_T\}$. <br>
 
# Исходные мел спектрограммы $X$ проходят через через энкодер признаков $f$ и таким образом преобразуются в $T$ наборов признаков $\{z_1, \dots, z_T\}$. <br>
 
# $\{z_1, \dots, z_T\}$ преобразуются в контекстные и целевые вектора:
 
# $\{z_1, \dots, z_T\}$ преобразуются в контекстные и целевые вектора:
## Случайное подмножество векторов $z_{\varphi_(n)}$ маскируется и каждый $z \in z_{\varphi_(n)}$ заменяется на обученный вектор признаков. Полученное новое множество признаков $\{z'_1, \dots, z'_T\}$ подается на вход контекстной сети и преобразуется в контекстные вектора $\{c_1, \dots, c_T\}$.
+
## Случайное подмножество векторов $z_{\varphi_(n)}$ маскируется, и каждый $z \in z_{\varphi_(n)}$ заменяется на обученный вектор признаков. Полученное новое множество признаков $\{z'_1, \dots, z'_T\}$ подается на вход контекстной сети и преобразуется в контекстные вектора $\{c_1, \dots, c_T\}$.
 
## Множество $\{z_1, \dots, z_T\}$ без замаскированных наборов признаков подается на вход модуля линейного слоя $u$ и преобразуется в целевые вектора $\{t_1, \dots, t_T\}$.
 
## Множество $\{z_1, \dots, z_T\}$ без замаскированных наборов признаков подается на вход модуля линейного слоя $u$ и преобразуется в целевые вектора $\{t_1, \dots, t_T\}$.
 
# Для полученных контекстных и целевых векторов считается функция потерь $L$, в качестве которой используется функция ''Contrastive Loss''.
 
# Для полученных контекстных и целевых векторов считается функция потерь $L$, в качестве которой используется функция ''Contrastive Loss''.
  
Суть данного подхода состоит в том, что маскируются наборы признаков для некоторых из $T$ интервалов, и путем минимизации функции потерь модель на основе $N$ Конформеров учится подбирать наиболее похожий вектор, характеризующий признаки замаскированных участков. При этом модуль линейного слоя позволяет получить целевые вектора для замаскированных данных и, следовательно, таким образом получется, что модель обучается на размеченных данных.
+
Суть данного подхода состоит в том, что маскируются наборы признаков для некоторых из $T$ интервалов, и путем минимизации функции потерь модель на основе $N$ блоков Конформера учится подбирать наиболее похожий вектор, характеризующий признаки замаскированных участков. При этом модуль линейного слоя позволяет получить целевые вектора для замаскированных данных и таким образом модель обучается на размеченных данных.
  
 
===Noisy student===
 
===Noisy student===
Вариация классического алгоритма [[Обучение с частичным привлечением учителя#Самообучение (Self Training)| самообучения]]: на каждой итерации модель-ученик обучается на аугментированных данных.
+
Вариация классического алгоритма [[Обучение с частичным привлечением учителя#Самообучение (Self Training)| самообучения]]: на каждой итерации модель-ученик обучается на аугментированных данных. В применении к распознаванию речи, используется метод аугментации ''SpecAugment''. ''SpecAugment'' применяет к [[Распознавание речи#Признаки|мел спектрограмме]] три вида деформаций: искажение времени, маскировку блока последовательных временных шагов и маскировку блока последовательных частотных каналов. Таким образом, при обучении на зашумленных с помощью ''SpecAugment'' данных сеть обучается на признаках, устойчивых к деформации во времени, частичной потере частотной информации и потере небольших сегментов речи.
  
 
'''Данные'''
 
'''Данные'''
  
1. Размеченные данные $\{(x_1, y_1), \dots, (x_n, y_n)\}$ <br>
+
1. Набор размеченных данных $S$ <br>
2. Неразмеченные данные $\{\tilde{x}_1, \dots, \tilde{x}_m\}$
+
2. Набор неразмеченных данных $U$ <br>
 +
3. Обученная [[Распознавание речи#Языковая модель| языковая модель]] $LM$. <br>
 +
4. Набор предобученных с помощью ''wav2vec'' моделей $M_0, \dots, M_n$.
  
 
'''Алгоритм'''
 
'''Алгоритм'''
  
1. Обучить модель-учителя $M$ на размеченных аугментированных данных.<br>
+
1. Модель $M_0$ настраивается (англ. ''fine-tune'') на наборе данных $S$ с использованием ''SpecAugment''. $M = M_0$<br>
2. Разметить $\{\tilde{x}_1, \dots, \tilde{x}_m\}$ с помощью $M$. <br>
+
2. Модель $M$ сливается (англ. ''fuse'')<ref>''Caglar Gulcehre, Orhan Firat. Kelvin Xu, Kyunghyun Cho, Loic Barrault, Huei-Chi Lin, Fethi Bougares, Holger Schwenk, Yoshua Bengio'' On Using Monolingual Corpora in Neural Machine Translation [https://arxiv.org/pdf/1503.03535.pdf]</ref>  с моделью $LM$.<br>
3. Обучить модель-ученика $M'$ на полученных на предыдущем шаге метках $\{\tilde{y}_1, \dots, \tilde{y}_m\}$ и $\{x_1, \dots, x_m\}$. <br>
+
3. Набор данных $U$ размечается с помощью $M$, получается новый набор данных $A$.<br>
4. $M = M'$, вернуться к шагу 2.
+
4. Наборы $S$ и $A$ объединяются, производится настройка предобученной модели $M_i$ на объединенном наборе данных с использованием ''SpecAugment''.<br>
 
+
5. Если перебраны не все модели из набора, то $M = M_{i + 1}$, происходит возвращение к шагу $2$.
'''Noisy student и распознавание речи'''
 
 
 
В применении к распознаванию речи, алгоритм будет несколько отличаться: на каждой итерации модель-учитель $M$ сначала будет сливаться(англ. ''fuse'') с предобученной языковой моделью $LM$. Для аугментации данных используется метод ''SpecAugment''. SpecAugment применяет к мел спектрограмме три вида деформаций: искажение времени, маскировка блока последовательных временных шагов и маскировка блока последовательных частотных каналов. Таким образом, при обучении на зашумленных с помощью SpecAugment данных сеть обучается на признаках, устойчивых к деформации во времени, частичной потере частотной информации и потере небольших сегментов речи.
 
  
 
==Применение==
 
==Применение==

Текущая версия на 16:40, 21 января 2021

Распознавание речи (англ. Speech Recognition) — процесс преобразования речевого сигнала в цифровую информацию.

Задачей распознавания является сопоставление набору акустических признаков речевого сигнала или наблюдений [math]X(x_1 ,...,x_n)[/math] последовательности слов [math]W(w_1 ,...,w_k)[/math], имеющих наибольшую вероятность правдоподобия среди всех кандидатов. Для этого используется формула Байеса:

[math]W = argmax \left[\frac{P(W)*P(X|W)}{P(X)}\right][/math]

Причем, в процессе распознавания вероятность уже полученных признаков Р(Х) не подлежит оптимизации и знаменатель в формуле не испльзуется:

[math]W = argmax[P(W)*P(X|W)][/math]


Классификация систем распознавания речи

Системы распознавания речи классифицируются[1]:

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

Структура систем распознавания речи

Системы распознавания речи впервые появились в 1952 году. С тех пор методы распознавания не раз менялись. Ранее использовались такие методы и алгоритмы, как:

  • Динамическое программирование (Dynamic Time Warping) - временные динамические алгоритмы, выполняющие классификацию на основе сравнения с эталоном.
  • Методы дискриминантного анализа, основанные на Байесовской дискриминации (Bayesian discrimination).
  • Скрытые Марковские Модели (Hidden Markov Model).
  • Нейронные сети (Neural Networks).

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

Системы распознавания речи имеют следующие основные модули:

  • Акустическая модель
  • Языковая модель
  • Декодер

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

Фонема (phoneme) — элементарная единица человеческой речи. Примерами фонем являются транскрипции в формате IPA — так, слово hello состоит из фонем [hɛˈləʊ].

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

Рассмотрим подробнее акустическую модель на основе СММ для слова six:

Акустическая модель для слова six. Источник

В круглых (скрытых) состояниях изображены фонемы, а в квадратных (наблюдениях) — распределения вероятностей признаков (для упрощения, здесь изображено одномерное распределение). Фонемы часто разбивают на 3 этапа — начало, середину и конец, — потому что фонема может звучать по-разному в зависимости от момента времени её произнесения. Каждое скрытое состояние содержит переход само в себя, так как время произнесения одной фонемы может занять несколько фреймов. Вероятности перехода между фонемами в СММ являются обучаемыми параметрами, и для их настройки используют алгоритм Баума-Велша. Последовательность фонем по набору распределений на фреймах восстанавливают по алгоритму Витерби.

Отличие нормального распределения от GMM. Источник

В качестве функции распределения вероятностей признаков часто выбирают смешанную гауссову модель (англ. Gaussian Mixture Model, GMM): дело в том, что одна и та же фонема может звучать по-разному, например, в зависимости от акцента. Так как эта функция является по сути суммой нескольких нормальных распределений, она позволяет учесть различные звучания одной и той же фонемы.

Языковая модель

Языковая модель — позволяет узнать, какие последовательности слов в языке более вероятны, а какие менее. Здесь в самом простом случае требуется предсказать следующее слово по известным предыдущим словам. В традиционных системах применялись модели типа N-грамм, в которых на основе большого количества текстов оценивались распределения вероятности появления слова в зависимости от N предшествующих слов. Для получения надежных оценок распределений параметр N должен быть достаточно мал: одно, два или три слова — модели униграмм, биграмм или триграмм соответственно. Внедрение языковой модели в систему распознавания речи позволило значительно повысить качество распознавания за счет учета контекста.

Декодер

В ходе работы системы автоматического распознавания речи задача распознавания сводится к определению наиболее вероятной последовательности слов, соответствующих содержанию речевого сигнала. Наиболее вероятный кандидат должен определяться с учетом как акустической, так и лингвистической информации. Это означает, что необходимо производить эффективный поиск среди возможных кандидатов с учетом различной вероятностной информации. При распознавании слитной речи число таких кандидатов огромно, и даже использование самых простых моделей приводит к серьезным проблемам, связанным с быстродействием и памятью систем. Как результат, эта задача выносится в отдельный модуль системы автоматического распознавания речи, называемый декодером. Декодер должен определять наиболее грамматически вероятную гипотезу для неизвестного высказывания – то есть определять наиболее вероятный путь по сети распознавания, состоящей из моделей слов (которые, в свою очередь, формируются из моделей отдельных фонов). Правдоподобие (likelihood) гипотезы определяется двумя факторами, а именно вероятностями последовательности фонов, приписываемыми акустической моделью, и вероятностями следования слов друг за другом, определяемыми моделью языка.

Рассмотрим математическую основу декодеров.
Отбрасывая несущественный на этапе распознавания знаменатель, запишем:

[math]W = argmax [P(W)P(XW)][/math]

где [math]X = x_1^T = x_1 ,..., x_N[/math] – последовательность векторов признаков входного сигнала, [math]W = w_1^n = w_1 ,..., w_n[/math] – последовательность слов, принадлежащих словарю размером [math]N_W[/math]. Первый множитель P(W) описывает вклад лингвистического модуля, второй P(X|W) – лексического, фонетического и акустического источников знаний. В соответствии с концепцией марковских цепей, второй множитель представляет собой сумму вероятностей всех возможных последовательностей состояний, что приводит к уравнению:

[math]W = argmax [P(W)\sum_{S_1^T} P(x_1^T, s_1^T | w_1^N)][/math]

где [math]s_1^T[/math] – одна из последовательностей состояний, порождаемых последовательностью слов [math]w_1^n[/math]. На практике применяется критерий Витерби[2]. – ищется последовательность состояний, дающая максимальный вклад в сумму:

[math]W = argmax[P(W)^aMax[P(x_1^T, s_1^T | w_1^N)]][/math]

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

Этапы распознавания:

  1. Обработка речи начинается с оценки качества речевого сигнала. На этом этапе определяется уровень помех и искажений.
  2. Результат оценки поступает в модуль акустической адаптации, который управляет модулем расчета параметров речи, необходимых для распознавания.
  3. В сигнале выделяются участки, содержащие речь, и происходит оценка параметров речи. Происходит выделение фонетических и просодических вероятностных характеристик для синтаксического, семантического и прагматического анализа. (Оценка информации о части речи, форме слова и статистические связи между словами.)
  4. Далее параметры речи поступают в основной блок системы распознавания — декодер. Это компонент, который сопоставляет входной речевой поток с информацией, хранящейся в акустических и языковых моделях, и определяет наиболее вероятную последовательность слов, которая и является конечным результатом распознавания.

Признаки

Разделение осциллограммы на фреймы. Источник

Входные данные представляют собой непрерывную осциллограмму звуковой волны. В задачах распознавания речи эту осциллограмму разбивают на фреймы — фрагменты звукового потока длительностью около 20 мс и шагом 10 мс. Такой размер соответствует скорости человеческой речи: если человек говорит по 3 слова в секунду, каждое из которых состоит примерно из 4 звуков и каждый звук разбивается на 3 этапа, то на этап выходит около 28 мс. Каждый фрейм независимо трансформируется и подвергается извлечению признаков, тем самым образуя векторизированный набор данных для задачи машинного обучения.

Признаки речевых событий, используемые при распознавании речи:

  • Спектр Фурье.
  • Спектр Фурье в шкале мел.
  • Коэффициенты линейного предсказания.
  • Кепстр.

Спектр Фурье

Спектр Фурье получают, используя алгоритм БПФ (Быстрого Преобразования Фурье) с длиной окна равной 2-4 периода основного тона, что составляет около 20 мс. При частоте квантования 10-16 кГц выбирается окно 256 отсчетов.

Для ослабления искажений сигнала, вызванных применением к непрерывному сигналу конечного окна анализа, чаще всего используется окно Хэмминга по формуле:

[math]S'(n) = [0.54 - 0.46cos\left(\frac{2\pi n}{N-1}\right)]*S(n)[/math]

где n = 1..N, N – размерность окна, S(n) – отсчеты речевого сигнала.

Спектр Фурье в шкале мел

К каждому кадру, полученного Фурье спектра применяется блок мел-фильтров — треугольных пересекающихся фильтров, расположенных наиболее плотно в области нижних частот. Количество фильтров — 26. Для расчета фильтров выбирается верхняя и нижняя частота. Затем осуществляется переход от частотной шкалы к мел-шкале по формуле:

[math]M(f) = 1127*ln\left(1 + \frac{f}{700}\right)[/math]

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

Коэффициенты линейного предсказания

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

[math]H(z) = \frac{1}{\sum_{i=0}^p a_i z^{-i}}[/math]

где p – число полюсов и [math]a_0 = 1[/math]; Фильтр с такой передаточной функцией позволяет описать поведение сглаженного спектра речевого сигнала с хорошей точностью, за исключением назализованных звуков. Коэффициенты фильтра {[math]a_i[/math]} – выбираются путем минимизации среднеквадратичной ошибки предсказания, просуммированной на окне анализа.

Кепстр

Кепстр (cepstrum) сигнала на основе спектра Фурье вычисляется путем применения косинусного Фурье преобразования к логарифму спектра:

[math]c_j = \sqrt{\frac{2}{N}}\sum_{i=0}^{N-1} \left[s_icos\left(\frac{\pi(j+1)(i+0.5)}{N}\right)\right] = \sum_{i=0}^{N-1} C_{j,i}s_i[/math]

где [math]s_i[/math] – логарифм спектра, N – количество отсчётов спектра, [math]C_{i,j}[/math] – унитарная матрица косинусного преобразования.

Кепстральные коэффициенты, полученные приведённым способом из мел спектра Фурье, широко используются для распознавания с помощью марковских моделей и носят название MFCC (Mel-frequency cepstral coefficients).

Показатели оценки качества распознавания речи

Существуют различные по сложности и прикладному значению задачи распознавания: изолированных слов (команд); ключевых слов в потоке речи; связанной речи (тщательное проговаривание текста с паузами между словами); слитной речи (разделяют диктовку в узкой тематической области, и спонтанную речь, например, в диалоге между людьми).

Оценка системы, распознающей отдельные команды, не представляет каких-либо трудностей – количество неправильно распознанных команд делится на общее количество испытаний и получается процент ошибки. Для систем, распознающих слитную речь, ситуация не столь проста.

Основными показателями качества распознавания слитной речи являются:

  • процент правильно распознанных слов (WRR - Word Recognition Rate);
  • процент неправильно распознанных слов (WER - Word Error Rate);
  • процент неправильно распознанных предложений/фраз (SER - Sentence Error Rate);

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

[math]WER = \frac{S+D+I}{T} * 100%[/math]

где T - количество слов в распознаваемой фразе, S - количество замененных слов, D - количество удаленных слов, I - количество вставленных слов. Показатель WER может быть больше 100%.

Другим важным критерием оценки систем распознавания слитной речи является - скорость обработки речи. Она вычисляется с помощью показателя скорости (Real-Time Factor, Speed Factor):

[math]RTF = \frac{T_{proc}}{T_{signal}}[/math]

[math]T_{signal}[/math] - длительность обрабатываемого аудиосигнала;
[math]T_{proc}[/math] - время, необходимое для обработки сигнала.
Если [math]RTF \leqslant 1.0[/math] - то распознавание речи ведется в режиме реального времени.


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

Рисунок 1. $WER$ SOTA алгоритмов на датасетах LibriSpeech test-clean/test-other. $WER$ описываемого в статье алгоритма отмечен красной точкой. Источник

Для обучения современных систем распознавания речи требуются тысячи часов размеченной речи, однако получение размеченных данных в необходимом объеме (особенно с учетом разнообразия существующих языков) затруднительно. Это повлияло на то, что сейчас в машинном обучении для распознавания речи успешно используется обучение с частичным привлечением учителя, которое позволяет сначала обучать модель на большом объеме неразмеченных данных, а потом корректировать ее при помощи размеченных.

Одним из примеров обучения с частичным привлечением учителя для автоматического распознавания речи является подход, впервые представленный в статье[3], основанный на комбинации алгоритмов noisy student, wav2vec и использовании модели Конформера. Такой метод позволил уменьшить $WER$ на наборах данных LibriSpeech test-clean/test-other с $1.7\%/3.3\%$ (предыдущий state-of-the-art) до $1.4\%/2.6\%$ (Рисунок 1).

Основная идея состоит в том, что множество моделей Конформеров при помощи алгоритма wav2vec предварительно обучается на неразмеченных данных, при этом одновременно с этим на основе них генерируются размеченные. Таким образом, неразмеченные данные используются для двух целей: для обучения модели и для генерации размеченных данных, которые используются для дальнейшего обучения модели алгоритмом noisy student.

Конформер

Рисунок 2. Общая схема Конформера (a) и схема блоков Конформера (b)

Трансформер[на 21.01.21 не создан], использующий механизм самовнимания, хорошо захватывает глобальный контекст, однако не очень хорошо извлекает локальные признаки. Сверточные нейронные сети, наоборот, эффективно используют локальные признаки, но требуют большого числа слоев для захвата глобального контекста. Конформер (англ. Conformer) комбинирует сверточные слои с механизмом самовнимания. $WER$ на LibriSpeech test-clean/test-other составляет $1.9\%/3.9\%$.

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

Блоки Конформера — это последовательность из двух модулей прямой связи (англ. feed forward), между которыми расположены модуль многоголового самовнимания (англ. Multi-Head Self Attention) и сверточный модуль, с последующей нормализацией слоя (англ. layer normalization).

Рисунок 3. Модуль многоголового самовнимания

Модуль многоголового самовнимания

В модуле используется блок многоголового внимания с относительным позиционным кодированием (англ. Multi-Head Attention with Relational Positional Encoding). Такой блок (изначально часть архитектуры Трансформер-XL[4]) используется с целью исправить два недостатка Трансформера: ограничение на длину входа (что не позволяет модели, например, использовать слово, которое появилось несколько предложений назад) и фрагментацию контекста (последовательность разбивается на несколько блоков, каждый из которых обучается независимо). Для достижения этой цели используются два механизма: механизм повторения (англ. reccurence mechanism) и относительное позиционное кодирование (англ. relational positional encoding). Механизм повторения позволяет использовать информацию из предыдущих сегментов. Как и в оригинальной версии, Трансформер-XL обрабатывает первый сегмент токенов, но сохраняет выходные данные скрытых слоев. При обработке следующего сегмента каждый скрытый слой получает два входа: результат предыдущего скрытого слоя этого сегмента, как в Трансформере, и результат предыдущего скрытого слоя из предыдущего сегмента, который позволяет модели создавать зависимости от далеких сегментов.

Однако, с использованием механизма повторения возникает новая проблема: при использовании исходного позиционного кодирования каждый сегмент кодируется отдельно, и в результате токены из разных сегментов закодированы одинаково.

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

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

Сверточный модуль

Рисунок 4. Сверточный модуль

Последовательность слоев в сверточном модуле начинается с управляемого модуля[5]: сверточного слоя с ядром $1 \times 1$ (англ. pointwise convolution) и управляемого линейного блока (англ. gated linear unit). Управляемый линейный блок — слой нейронной сети, определяемый как покомпонентное произведение двух линейных преобразований входных данных, функция активации одного из которых — сигмоида. Использование управляемого линейного блока уменьшает проблему исчезающего градиента. После сверточного слоя используется пакетная нормализация.

В модуле используется функция активации swish: $swish(x) = \dfrac{x}{1 + e^{- \beta x}}$.

Модули прямой связи

Рисунок 5. Схема модуля прямой связи

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

wav2vec

Подход wav2vec[6] основан на самообучении на мел спектрограммах.

Модель

  1. Энкодер признаков (англ. Feature Encoder) $f: X \to Z$ реализован на основе сверточного слоя. Преобразует мел спектрограммы $X$, разбитые на $T$ временных интервалов, в наборы признаков $\{z_1, \dots, z_T\}$, которые описывают исходные данные в каждом из $T$ интервалов.
  2. Контекстная сеть (англ. Context Network) $g: Z \to C$ реализована на основе линейного слоя и слоя, состоящего из $N$ блоков Конформера. Преобразует наборы признаков $\{z_1, \dots, z_T\}$, полученные в результате работы энкодера признаков, в контекстные вектора $\{c_1, \dots, c_T\}$.
  3. Модуль линейного слоя (англ. Linear Layer Module) $u: Z \to T$ реализован на основе линейного слоя. Преобразует наборы признаков $\{z_1, \dots, z_T\}$, полученные в результате работы энкодера признаков, в целевые вектора $\{t_1, \dots, t_T\}$.
Рисунок 6. Схема обучения модели wav2vec

Обучение

  1. Исходные мел спектрограммы $X$ проходят через через энкодер признаков $f$ и таким образом преобразуются в $T$ наборов признаков $\{z_1, \dots, z_T\}$.
  2. $\{z_1, \dots, z_T\}$ преобразуются в контекстные и целевые вектора:
    1. Случайное подмножество векторов $z_{\varphi_(n)}$ маскируется, и каждый $z \in z_{\varphi_(n)}$ заменяется на обученный вектор признаков. Полученное новое множество признаков $\{z'_1, \dots, z'_T\}$ подается на вход контекстной сети и преобразуется в контекстные вектора $\{c_1, \dots, c_T\}$.
    2. Множество $\{z_1, \dots, z_T\}$ без замаскированных наборов признаков подается на вход модуля линейного слоя $u$ и преобразуется в целевые вектора $\{t_1, \dots, t_T\}$.
  3. Для полученных контекстных и целевых векторов считается функция потерь $L$, в качестве которой используется функция Contrastive Loss.

Суть данного подхода состоит в том, что маскируются наборы признаков для некоторых из $T$ интервалов, и путем минимизации функции потерь модель на основе $N$ блоков Конформера учится подбирать наиболее похожий вектор, характеризующий признаки замаскированных участков. При этом модуль линейного слоя позволяет получить целевые вектора для замаскированных данных и таким образом модель обучается на размеченных данных.

Noisy student

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

Данные

1. Набор размеченных данных $S$
2. Набор неразмеченных данных $U$
3. Обученная языковая модель $LM$.
4. Набор предобученных с помощью wav2vec моделей $M_0, \dots, M_n$.

Алгоритм

1. Модель $M_0$ настраивается (англ. fine-tune) на наборе данных $S$ с использованием SpecAugment. $M = M_0$
2. Модель $M$ сливается (англ. fuse)[7] с моделью $LM$.
3. Набор данных $U$ размечается с помощью $M$, получается новый набор данных $A$.
4. Наборы $S$ и $A$ объединяются, производится настройка предобученной модели $M_i$ на объединенном наборе данных с использованием SpecAugment.
5. Если перебраны не все модели из набора, то $M = M_{i + 1}$, происходит возвращение к шагу $2$.

Применение

Системы распознавания речи начали развиваться как специальные сервисы для людей с ограниченными возможностями, но также нашли применение в различных сферах бизнеса, таких как:

  • Телефония: системы голосового самообслуживания;
  • "Умный дом": голосовой интерфейс управления;
  • Роботы: голосовой интерфейс электронных роботов;
  • РС, ноутбуки, телефоны: голосовой ввод команд, диктовка текста;
  • Автомобили: голосовое управление в салоне автомобиля.

Основные отрасли применения:

  • Голосовое управление
  • Голосовые команды
  • Голосовой ввод текста
  • Голосовой поиск

См. также

Примечания

  1. Федосин С.А., Еремин А. Ю. Классификация систем распознавания речи. — Саранск. : МГУ им. Н.П. Огарева, 2009. — С. 3.
  2. Тампель И.Б, Карпов А.А. Автоматическое распознавание речи. — СПб. : Университет ИТМО, 2016. — С. 113.
  3. Yu Zhang, James Qin, Daniel S. Park, Wei Han, Chung-Cheng Chiu, Ruoming Pang, Quoc V. Le, Yonghui Wu Pushing the Limits of Semi-Supervised Learning for Automatic Speech Recognition[1]
  4. Zihang Dai, Zhilin Yang, Yiming Yang, Jaime Carbonell, Quoc V. Le, Ruslan Salakhutdinov Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context[2]
  5. N. Dauphin, Angela Fan, Michael Auli, David Grangier Language Modeling with Gated Convolutional Networks[3]
  6. Alexei Baevski, Henry Zhou, Abdelrahman Mohamed, Michael Auli wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations[4]
  7. Caglar Gulcehre, Orhan Firat. Kelvin Xu, Kyunghyun Cho, Loic Barrault, Huei-Chi Lin, Fethi Bougares, Holger Schwenk, Yoshua Bengio On Using Monolingual Corpora in Neural Machine Translation [5]

Источники информации

  1. [6] - статья на Википедии
  2. Тампель И.Б, Карпов А.А. Автоматическое распознавание речи. Учебное пособие. — СПб: Университет ИТМО, 2016. — 138 с.
  3. [7] - статья "Классификация систем распознавания речи".
  4. [8] - статья "Выделение границ фонем речевого сигнала с помощью мел-частотных спектральных коэффициентов".