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

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

Нулевой шаг

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

Оцифровка

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

Схема под названием ADC (аналого-цифровой преобразователь), подключенная к микрофону, выполняет эту работу за нас. Каждое такое сгенерированное число называется Образцом, а количество таких образцов, взятых в секунду, называется Частотой дискретизации ( отсчетов / сек или Герц).

Поскольку мы контролируем частоту дискретизации, мы контролируем сразу две вещи:

  1. По мере увеличения этих выборок пропорционально возрастают требования к хранению для конкретного цифрового звука, а также вычислительная мощность, необходимая для его обработки. Количество битов, используемых для представления значения каждой выборки, которое должно быть понято нашим компьютером, известно как битовая глубина или разрешение . Обычно используемые размеры выборки - 8-битные или 16-битные.
  2. Посредством частоты дискретизации мы также контролируем точность захвата аналоговой волны. Чтобы точно измерить волну и получить хорошее качество реконструкции, мы должны иметь как минимум два отсчета в каждом цикле: один измеряет положительную часть волны, а другой измеряет отрицательная часть. Менее двух отсчетов приводит к тому, что частота волны полностью пропадает. Что касается образцов, то чем больше, тем лучше!

Выбор частоты дискретизации для распознавания речи

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

Внимательный читатель: «Что будет, если у меня будет частота выше частоты Найквиста?»

С уважением: «Да, это очень вероятно, поскольку мы контролируем частоту дискретизации. Любой компонент вашего сигнала выше частоты Найквиста приведет к ошибке выборки, называемой наложением или искажением сигнала.

Например, компакт-диски (компакт-диски) используют частоту дискретизации 44,1 кГц. Почему? Готов поспорить, вы догадались!
Потому что человеческое ухо может слышать только звуки в диапазоне от 20 Гц до 20 кГц!

Внимательный читатель: «Но 44,1 / 2 = 22! (приблизительно)
Вы сказали, что мы можем слышать только до 20 кГц. Зачем нужны лишние 2000 Гц? "

Искренне Ваш: «Ого, для воображаемых читателей вы, люди, задаете очень хорошие вопросы!»

Объяснение дополнительных 2 кГц:

Статистические данные о человеческом ухе и диапазоне частот от 20 Гц до 20 кГц основаны на проводимости воздуха (когда воздух является средой распространения звука).
Когда мы принимаем во внимание костную проводимость, что означает передачу звука непосредственно во внутреннее ухо, все становится намного лучше. Да, я говорю о наушниках! В этом случае вы действительно можете услышать верхние 2 кГц, которые вы упустили.

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

Но на самом деле нам не нужна такая высокая частота дискретизации, потому что здесь речь идет о речи, а не о музыке. И большая часть информации в человеческой речи находится на частотах ниже 10 кГц, что означает, что для полной точности потребуется частота дискретизации 20 кГц, и это также зависит от среды оцифровки и кодирования исходного аналогового сигнала.

Обычно для речи микрофона используется частота дискретизации 16 кГц с разрешением / битовой глубиной 16 бит, тогда как для речи с полосой пропускания телефона достаточно частоты дискретизации 8 кГц при 8 битах.

До сих пор мы установили, что речь должна быть оцифрована или преобразована в числа для передачи в устройство, отличное от человеческого уха.
Очень популярным примером такого оцифрованного звукового сигнала являются файлы WAV.
Даже если вы не слышали о WAV, могу поспорить, что вы сталкивались с файлами MP3 - это еще один способ оцифровки + сжатие аналогового звука. Файлы WAV не сжимаются во время оцифровки и, следовательно, обладают превосходным качеством.

Теперь возникает главный вопрос. Как речь - изображение? Давайте приступим к делу.

Но как речь - изображение?

Это не так.

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

Шаг первый

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

Этот ввод - не что иное, как особенности, извлеченные из этих «визуальных представлений» речи, к которым мы скоро познакомимся. Я должен признать, что эти функции различаются для систем, основанных на ML (машинное обучение) и DL (глубокое обучение) - основное различие возникает из-за того, что простые алгоритмы машинного обучения сильно зависят от типа представления данных, которое вы предоставляете, в то время как алгоритмы DL обычно может найти лучшее представление данных, а также их сопоставление с выходами. В этой статье мы будем рассматривать только часть DL. Но соглашайтесь, даже если вас это интересует, поскольку функции машинного обучения создаются на основе предварительной обработки только тех функций, которые мы получим.

Так что в любом случае начальные шаги остаются прежними.

Давайте начнем с того, что мы все видели в детстве - с формы волны!

Форма волны

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

Внимательный читатель: «Погоди! Изменение давления воздуха? Разве это не то, что вы сказали, звук на самом деле? "

Другой внимательный читатель: «Означает ли это, что у нас есть все необходимое для поддержки нашей модели DL?»

С уважением: «Да! И нет! Позвольте мне объяснить почему. »

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

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

  1. Озвучивание: как я сказал ранее, мы действительно можем сказать, какие части нашего звука были озвучены и когда. Это можно увидеть по пикам амплитуды - каждый большой пик соответствует раскрытию голосовых связок. Мы можем ясно видеть это на нашем предыдущем рисунке для образца сигнала (Рис. 1).
  2. Остановить согласные: эти звуки состоят из закрытия, за которым следует отпуск, мы часто можем видеть период тишины или почти тишины, за которым следует небольшой всплеск амплитуды в этих случаях.

3. Фрикативы: для читателей вроде меня, впервые читающих это слово, фрикативные формы характеризуются шипящим звуком (например, «ш»). Эти шипящие звуки имеют шумную неправильную форму волны. Это хорошо видно на следующем рисунке.

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

Спектр

Спектр позволяет нам представить составляющие частоты сигнала по отношению к амплитуде.

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

Представьте: форма волны, которая представляет собой сумму двух синусоидальных сигналов, одна с частотой 10 Гц и одна с частотой 100 Гц, обе с амплитудой 1.

Ладно, не представляю. Давайте просто обратимся к сюжету ниже!

Теперь посмотрим, как выглядит спектр этой волны.

Он ясно показывает, чего от него ожидали - он говорит, что присутствовали две частоты, и показывает их амплитуды по оси ординат.

Внимательный читатель: «Но как получить этот спектр?»

Другой внимательный читатель: «А чем вообще нам полезен этот спектр?»

Искренне Ваш: «Разрешите объяснить!»

Давайте сначала рассмотрим Почему Spectrum-

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

Теперь давайте посмотрим Как Spectrum-

Спектр рассчитывается с помощью дискретного преобразования Фурье по всему сигналу. Ряды Фурье и преобразование Фурье выходят за рамки этого поста, но вы можете посмотреть это потрясающее видео об этом.

По сути, дискретное преобразование Фурье может преобразовать группу равноотстоящих отсчетов сигнала в список коэффициентов. Эти коэффициенты составляют представление в частотной области сигнала. Частота в Гц отложена по оси абсцисс, а амплитуда - по оси ординат. Обратите внимание на два всплеска на рисунке, один на 10 Гц, а другой на 100 Гц.

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

Если вы присмотритесь, наш Spectrum может определить, какие частоты присутствуют в волне относительно амплитуд, но этого недостаточно. Нам нужна карта того, когда во времени присутствовали эти конкретные частоты. Помните, наша конечная цель - получить расшифровку речевого сигнала. А поскольку речь имеет временную природу, нам нужны функции, отображенные во временной области.

Это достигается с помощью преобразования Габора или кратковременного преобразования Фурье (STFT), и полученное отображение называется спектрограммой .

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

Этапы обработки речи для расширения возможностей аудио

Предварительный акцент

Фильтр предыскажения - это очень простой и старый метод, используемый для выделения или усиления высокочастотных компонентов звука.

Более высокочастотные телефоны в сигнале обычно имеют более низкие амплитуды / энергию - это означает, что они могут потеряться при переводе для извлечения функций. Так что это очень удобно как метод балансировки частотного спектра.

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

Ниже представлена ​​осциллограмма 4-секундного аудиозаписи, в которой можно услышать, как Дональд Трамп говорит: «Что-то особенное, такое особенное, что они пытались получить это десятилетия и десятилетия».

Теперь давайте посмотрим, как выглядит форма волны после применения фильтра предыскажения к этому аудио. (Примечание: все детали реализации вместе с записной книжкой Jupyter можно найти в моем репо.)

Видно, что теперь энергия во всем сигнале выглядит более сбалансированной.

Обрамление и создание окон

Что-то в корне неверно в том, как мы ранее вычисляли спектр для нашего образца сигнала.

Внимательный читатель: «Но он отлично показал задействованные частоты!»

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

Логично разделить сигнал на короткие сегменты, а затем сделать предположение, что частоты остаются неизменными в течение этого очень короткого периода времени, называемого кадром.

После того, как мы разделили сигнал на кадры, нам понадобится способ «сложить» информацию, полученную из каждого кадра; в конце концов, нам нужно понимать весь сигнал в его временной природе.
Итак, по сути, мы хотим вычислить своего рода спектр для каждого из этих кадров.

Обычно системы распознавания речи, такие как DeepSpeech2, используют размер кадра 20 мс с перекрытием ~ 50% между последовательными кадрами (контролируется Frame Stride).

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

Мы ввели прерывистость в непрерывный речевой сигнал!

Вот почему нам нужна оконная функция!
Здесь мы смотрим на гауссово окно. (Также проверьте окна Хэмминга и Хеннинга.)

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

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

Теперь мы применим кратковременное преобразование Фурье (STFT) к этим окнам, чтобы получить то, что мы хотели - отображение спектров во времени, в которое эти частоты произошли.

А теперь давайте приступим к работе и построим для нас несколько спектрограмм!

Спектрограмма

Пришло время рассказать вам, что на самом деле говорит нам спектрограмма. К настоящему времени вы знаете, что это график изменения частот сигнала. Но на самом деле он имеет 3 измерения!
Да. Третье измерение, о котором я говорю, - это Амплитуда / Энергия.
Хотя вы можете видеть время по оси X и частоту по оси Y, амплитуду можно увидеть по концентрации цвета по всему графику. Больше цвета = более высокая амплитуда для этих частот.

Все выходные данные, полученные с помощью окон и STFT, могут быть получены в одной строке с помощью пакета Librosa на Python, как показано в записной книжке Jupyter здесь.

S = np.abs(librosa.stft(x_filt))

S - это массивный массив, содержащий выходные данные STFT для звука Дональда Трампа, который мы видели ранее.
x_filt содержит тот же звук с примененным к нему фильтром предыскажения.

Давайте визуализируем нашу первую спектрограмму! Это снова можно сделать с помощью одной строчки кода. Спасибо Либрозе!

librosa.display.specshow(S, x_axis='time', y_axis='hz')

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

АР: «Я понимаю, что мы пытаемся сделать. Но какой в ​​этом смысл?

Ю.Т .: «Мы принимаем решения по поводу того, что ваше ухо - странное устройство. Приведу пример: человеческий слух не одинаково чувствителен на всех частотах - он на самом деле менее чувствителен на более высоких частотах ».

Мы масштабируем эту спектрограмму, чтобы лучше представить восприятие речи человеческим ухом, следующим образом:

ось x (время)

Без изменений. Время всегда было линейным. (Правильно?)

цветовая ось (амплитуда / энергия)

Будет преобразован в шкалу Децибел.
почему: человеческое ухо гораздо более эффективно реагирует на звуки очень малой амплитуды по сравнению со звуками очень большой амплитуды. Эту нелинейную природу лучше представить с помощью известной нелинейной (логарифмической) шкалы децибел.

Ось Y (частота)

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

Обратите внимание, что я использую слово «высота звука», потому что частота воспринимается нашим слухом как высота звука.

Спектрограмма Мела

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

S_mel = librosa.feature.melspectrogram(x_filt)
S_mel_db = librosa.power_to_db(S_mel)
librosa.display.specshow(S_mel_db, x_axis='time', y_axis='mel')

И вуаля! Мы, наконец, достигли визуального представления (близкого к восприятию человеческим ухом) Дональда Трампа, говорящего: «Что-то особенное, такое особенное, что они пытались заполучить это десятилетия и десятилетия».

Вы успешно получили графическое представление речи, которое может понять ваша модель!

Наиболее часто используемыми функциями ввода в системах распознавания речи на основе ML были MFCC (коэффициенты Cepstral частоты Mel), но я не собираюсь здесь говорить об их реализации и происхождении, потому что -

1. Этот пост уже слишком длинный.

2. Я думаю, что использование MFCC в качестве исходных данных для модели спорно. Хотя многие алгоритмы глубокого обучения его используют.

MFCC - очень актуальное требование в системах на основе ML, потому что спектрограмма в масштабе Mel, которую мы видели ранее, имеет высокую корреляцию между различными функциями. А алгоритмы машинного обучения ограничены своей неспособностью работать с коррелированными входными функциями. MFCC декоррелирует функции, но нейронные сети должны хорошо справляться с коррелированными функциями, верно? Так действительно ли нам нужно делать эти дополнительные шаги для глубокой нейронной сети? Например, wav2vec 2.0 использует необработанные звуковые сигналы, не говоря уже о спектрограммах.

Если вы зашли так далеко, пожалуйста, оставьте ниже свой комментарий о том, что вы думаете о значимости MFCC и его вариантов в качестве функций ввода для систем распознавания речи на основе DL.

Ссылки:

[1] https://web.stanford.edu/~jurafsky/slp3/ed3book.pdf
[2] http://databookuw.com/databook.pdf

Блокнот Jupyter с кодом для этого сообщения можно найти здесь.