Всем привет! Меня зовут Оля Яковенко, я разработчик в MTS AI, занимаюсь задачами по автоматической обработке сигналов. В частности, на данный момент я исследую различные подходы шумоподавления для последующего распознавания речи, и сегодня я хотела бы поделиться с вами обзором и некоторыми находками на эту тему.
Шумоподавление – это процесс выделение полезного сигнала из смеси полезного сигнала и шума. Допустим, у нас есть речь человека, записанная на оживлённой улице, в таких условиях одновременно с речью могут появляться другие звуки:
шум дорожного движения (шум шин, звуковые сигналы);
фоновая речь людей (речь прохожих, реклама, обращения торговцев);
ремонт/стройка в городе (грохот плит, сверление).
Задача шумоподавления в этом случае – выделение целевой речи человека, например, репортёра на улице, среди шума. Ниже представлены спектрограммы одной аудиозаписи, по ней можно понять, какую операцию нам нужно проводить автоматически.
Наша команда в МТС ИИ, которая называется ASR End2End, экспериментирует с различными видами шумоподавления как предобработки сигнала для последующего распознавания речи. Мы обсудим далее, что такое применение шумоподавления несколько отличается от шумоподавления для улучшения звучания аудио для человеческого уха.
Шум в звуковом сигнале определяется как беспорядочные колебания звуковых волн. Формально взаимодействие полезного сигнала и шума обычно описывается в литературе следующей формулой:
, где
– временной индекс,
– полезный сигнал,
– шум,
– смесь полезного сигнала и шума, т.е. сигнал из реальных условий записи.
Теперь мы можем сформулировать цель задачи шумоподавления или улучшения аудио: имея зашумлённый процесс , нужно найти значение , максимально приближенное к исходному сигналу .
Шумоподавление в нашей жизни
Методы шумоподавления используются при очистке аудио от лишних звуковых событий для последующего повторного воспроизведения. При монтаже фильмов, музыки, подкастов и прочих медиа зачастую требуется избавляться от лишних звуковых событий. При таких задачах может также потребоваться общее улучшение качества записи. Это включает в себя не только удаление шума, но и модифицирование сигнала, которое может улучшить восприятие записанной речи. Подобные инструменты обычно доступны в редакторах аудио и программах-микшерах для создания треков. Например, в одном из самых известных аудиоредакторов Audacity используется подход, который называется “шумовые ворота” (noise gate), вернее, их конкретная спектральная разновидность, используемая после быстрого преобразования Фурье (FFT). Помимо этого, в Audacity есть оконные механизмы по сглаживанию сигнала и удалению его небольших артефактов. Инструменты в Audacity по шумоподавлению особенно хорошо подходят для восстановления микрокассетных записей [1].
Популярной и сложной задачей является шумоподавление на лету – шумоподавление и воспроизведение одновременно с записью речи. Преследуемая цель – это маскировка звуков, которые не имеют отношения к произносимой человеком информации и мешают ее восприятию. Чаще всего такое шумоподавление используется для аудиоконференций в Skype, Zoom, Discord и пр. Шумоподавление на лету как правило использует те же принципы “шумовых ворот”, но помимо этого применяются методы машинного обучения для очистки сигнала на лету. Например, компания Microsoft по результатам соревнования DNS-Challenge [2] адаптировала наилучшие решения под свои разработки Skype и Teams. Эти решения основаны на рекуррентных нейронных сетях с LSTM блоками и на свёрточных нейронных сетях [3, 4]. В результате новейшие версии Skype и Teams способны в режиме реального времени транслировать чистый голос при наличии агрессивных шумов: дрели, вентилятора или ветра.
Третья интересная область использования методов шумоподавления – предобработка и чистка звукового сигнала перед применением методов автоматического распознавания речи, чтобы результат генерировался правильно. В этой области много подводных камней, так как сигнал не должен содержать искусственных артефактов речи, иначе такая «чистка» может ухудшить результат. Например, в этой работе уточняется, что системы шумоподавления на основе масок не способны улучшить результат распознавания речи и только ухудшают метрики из-за неестественности спектральных характеристик итогового сигнала. С другой стороны, алгоритмы по улучшению сигнала на основе глубоких нейронных сетей показали неплохой результат при препроцессинге в пайплайне распознавания речи.
Классификация шумов
Существует множество разных классификаций шумов, например, по характеру спектра или по частоте волн. Однако, когда мы хотим избавиться от шумов в записи речи, стоит в первую очередь учитывать категоризацию шумов по временным характеристикам:
Как вы могли заметить, временные характеристики шума тесно связаны со способом образования шума: стационарный и колеблющийся шум, как правило, образованы какими-то постоянными процессами (естественными или искусственными), тогда как прерывистый и импульсный – резкими одноразовыми процессами. Прерывистый шум для простоты можно воспринимать как повторяющийся с некоторой периодичностью импульсный шум.
Категории шума приведены для того, чтобы разграничить шумы по сложности их подавления. Сложность задачи шумоподавления кроется в непредсказуемости шумов, которые могут возникнуть в звуковом сигнале. Мы можем с относительной лёгкостью убрать шум из сигнала, если нам заранее известно, какой вид шума находится в этом сигнале и где. Кроме того, нам достаточно легко избавляться от стационарного шума, потому что мы легко можем определить порог громкости в спектре, так как белый шум будет равномерно распределён по всему сигналу, и во фрагментах тишины мы будем чётко наблюдать амплитуды шума. Можно построить следующую пирамиду сложности задач:
Если задачи наверху пирамиды можно решить вычислительными методами, то задачи в нижней части пирамиды можно решить только методами машинного обучения. Если вычислительные методы решают задачи избавления сигнала от определенного шума, то нейросетевые методы обучаются решать задачу выделения только релевантной речевой информации из всего аудиопотока.
Давайте теперь подробно разберем, как традиционные, так и продвинутые методы шумоподавления в аудио.
Традиционные методы шумоподавления
О самых простых традиционных методах шумоподавления я уже рассказала, они используются в условиях, когда мы программно не знаем, какой характер шума и речи. Такое отсутствие информации также наблюдается, когда мы хотим избавляться от шума на лету. При таком шумоподавлении используются обычные или спектральные пороги – заглушаются любые отзвуки, если они не превышают определённого порога по громкости.
В основе других традиционных методов лежит моделирование распределения чистой речи или шума. Делается это с помощью нахождения спектральной плотности мощности (громкости) сигнала. Плотность мощности сигнала – вариант описания распределения значений сигнала в разные моменты времени. Спектральная плотность мощности сигнала, в свою очередь, – функция, которая описывает распределение мощности сигнала в зависимости от частоты, а именно – возможную мощность в различные единицы частоты. В таком случае, имея спектральную плотность мощности шума, можно использовать метод спектрального вычитания (spectral subtraction).
Винеровское оценивание (Wiener filter) используется в качестве одного из традиционных обучаемых способов шумоподавления, отчасти похожий на метод спектрального вычитания. Этот подход основан на оптимальном подборе такого фильтра, который бы минимизировал разницу между чистым сигналом и улучшенным сигналом. Подобно некоторым алгоритмам машинного обучения, при вычислении винеровского фильтра минимизируется метрика Mean Square Error (MSE).
где - спектр чистого сигнала, - спектр зашумлённого сигнала, - спектр шумного сигнала.
Таким образом, оптимальный винеровский фильтр можно найти в случаях, когда нам известна «чистая версия» зашумлённого сигнала, либо если нам известен конкретный шум, который встречается в аудиозаписях и который мы хотим убрать.
Зачастую после операций по фильтрации шума применяется сглаживание, чтобы избавиться от артефактов сигнала – «музыкального» шума – после чистки. Для сглаживания применяются различные фильтры, например, Гауссовый фильтр (или размытие по гауссу) [5].
Нейросетевые методы шумоподавления
Прежде чем мы углубимся в конкретные алгоритмы, стоит упомянуть, что все указанные ниже алгоритмы используются как для разграничения спикеров или инструментов, так и для шумоподавления. При шумоподавлении важно обозначить, что шум и чистая речь – два независимых процесса, которые возникают одновременно во времени, как два отдельных инструмента в музыкальной композиции.
В зависимости от способа решении задачи шумоподавления, разграничения спикеров или улучшения сигнала алгоритмы машинного обучения можно разделить на две категории:
До описанных выше нейросетевых подходов использовались нейросетевые методы наложения масок на спектрограмму в сочетании с прямым и обратным преобразованиями Фурье. Однако подходы, которые основаны на маскировании спектрограмм, имеют некоторые недостатки. Например, фаза волны в чистом сигнале может отличаться от фазы волны в зашумлённом сигнале. Поэтому даже при вычислении идеальной маски для спектрограммы, восстановленная из грязного сигнала фаза может вносить какие-то элементы шума и портить итоговое качество шумоподавления.
Еще одним недостатком такой системы является сложность вычисления частотных характеристик сигнала с помощью быстрого преобразования Фурье. Окно для такого преобразования должно быть достаточно большим для лучшего качества декомпозиции на частоты, что увеличивает количество вычислений. Большое количество вычислений приводит к низкой скорости работы алгоритма и его становится сложно применять в реальном времени.
Conv-TasNet
Одним из «прорывных» подходов к нейросетевому шумоподавлению и улучшению речевого сигнала оказался подход на основе свёрточных нейронных сетей Conv-TasNet. Многие современные подходы шумоподавления часто сравниваются с его архитектурой, как с одной из наиболее робастных реализаций. Он основан на наложении 1D свёрток на чистый сигнал без разложения на частоты.
Предшественник этой архитектуры – TasNet [6]. Архитектура TasNet состоит из свёрточных энкодера и декодера с некоторыми особенностями:
выход энкодера ограничен значениями от нуля до бесконечности [0, ∞);
линейный декодер конвертирует выход энкодера в акустическую волну;
подобно многим методам-предшественникам на основе спектрограмм, на последнем этапе система аппроксимирует взвешивающую функцию (в данном случае LSTM) для каждого момента времени.
Conv-TasNet – модификация алгоритма TasNet, которая использует в качестве взвешивающей функции свёрточные слои с расширением (dilation). Это модификация была сделана после того, как свёртки с расширением показали себя эффективным алгоритмом при одновременном анализе и генерации данных переменной длины, в частности, для синтеза в таких решениях, как WaveNet [7].
Подход для разделения аудио/шумоподавления Conv-TasNet состоит из 3-х компонентов:
энкодер,
разделение,
декодер.
Как вы могли догадаться, основной компонент в схеме – этап разделения. Этот этап решает проблему приближённого исчисления источников, смесь которых мы рассматриваем в качестве «грязных» примеров. Формально предположение о «смешанности» нашего сигнала можно выразить следующим образом:
Где:
– смесь в определённый момент времени,
– количество источников, несущих вклад в смесь,
– источники в определённый момент времени.
Задача алгоритма машинного обучения – определить источники s1(t), … , sc(t), зная заранее количество источников C и смесь x(t).
Стоит отметить, что разделение в алгоритме происходит не сразу, а только после извлечения признаков из сигнала с помощью «1D блоков» (1-D Conv на схеме). Ниже представлена схема, как преобразуется сигнал смеси в набор отдельных источников.
1D блок, который используется в качестве энкодера и декодера, имеет следующую структуру:
Более подробно можно ознакомиться с алгоритмом и результатами экспериментов в исходной статье [8].
DEMUCS
Алгоритм DEMUCS или глубокое извлечение музыкальных источников (Deep Extractor for Music Sources) также используется для задач разделения источников в сигнале и шумоподавления. В отличие от предшественника Conv-TasNet, этот алгоритм напрямую генерирует источники из исходного сигнала, минуя промежуточное предсказание масок.
Создатели этого алгоритма вдохновились существующей архитектурой для сегментации изображений U-Net. U-Net архитектура представляет собой кодировщик и декодировщик, между которыми находится бутылочное горлышко. В отличии от обычного автокодировщика, слои между собой связаны «соединениями быстрого доступа», в результате итоговый сигнал не ухудшается после сжатия. U-Net для шумоподавления выглядит следующим образом:
В качестве бутылочного горлышка в DEMUCS – однонаправленный LSTM слой. Это позволяет эффективно использовать алгоритм для анализа потоковых данных. Кодировщик и декодировщик сформированы из блоков, которые составлены из свёрточных слоёв (1D, 1x1 и 1D Transpose) и функций активации (Gated Linear Unit и Rectified Linear Unit). Они скомпозированы следующим образом:
В качестве функции потерь при шумоподавлении достаточно использовать L1 Loss между предсказанной записью и эталонной, но для улучшения сходимости авторы статьи используют также STFT Loss разного масштаба (STFT с разными параметрами при подсчёте функций потерь), который является суммой двух функций потерь – сходимости (spectral convergence) и амплитуд (magnitude):
где и – эталонный сигнал и предсказанный сигнал соответственно, – длина сигнала, – норма Фробениуса, а – L1 «норма» (абсолютная ошибка).
Исходная статья: [9]
HiFi-GAN
Походы, о которых я рассказала, хорошо генерализируются при решении задач шумоподавления, чтобы вычленять речь и избавляться от неречевых событий в аудио потоке. Но все эти алгоритмы могут создавать артефакты в сигнале, которые могут мешать восприятию человеком, либо портить качество дальнейшей автоматической обработки, например, распознавания речи. Отчасти избавиться от артефактов помогает сглаживание, как я упоминала ранее, но оно часто попутно снижает чёткость всего аудио. В отличие от предшественников, генеративно-состезательная сеть высокой точности (High Fidelity Generative Adversarial Network) хорошо справляется с генерацией аудио подобно студийной записи без артефактов искусственной генерации.
Алгоритм состоит из трёх основных частей:
За генерацию чистого сигнала на основе зашумлённого отвечает блок WaveNet, этот алгоритм изначально успешно использовался для синтеза речи (текст → аудио). При модификации задачи для анализа аудио эта архитектура также показала себя эффективной. Особенность WaveNet-а для шумоподавления в том, что генерация нового сигнала происходит для всей записи целиком, а не для каждого момента времени t_n, как это делается в исходном алгоритме WaveNet. Это позволяет улучшать скорость генерации за счёт параллелизации процессов, которые могут выполняться одновременно.
После генерации WaveNet-ом сигнал проходит через несколько свёрточных слоёв, этот этап называется Postnet. Postnet нужен, чтобы исправлять и уточнять грубое и приближенное предсказание WaveNet-а. Кроме Postnet-а регулирующее действие дополнительно оказывают четыре разных дискриминатора, которые обучены отделять чистые оригинальные записи от сгенерированных. Каждый дискриминатор принимает выход Postnet-а в разном формате:
-
Сигнал в исходном виде с разной частотой дискретизации:
16 кГц
8 кГц
4 кГц
Mel-спектрограмму сигнала.
Всё вместе связывается в следующую архитектуру:
В итоге для обучения используются следующие функции потерь (ФП):
L1 (абсолютная ошибка на сигнале);
-
ФП на лог-спектрограммах предсказаний и чистого сигнала после преобразования Фурье со следующими параметрами:
размер окна 2048 и шаг 512,
размер окна 512 и шаг 128
Состязательная ФП (adversarial loss) для обучения Postnet-a;
ФП глубинных признаков (deep feature loss) для обучения дискриминаторов.
Более подробно о функциях потерь, об архитектуре, а также об экспериментах советую ознакомиться в исходной статье [10]
В заключение
В последние несколько лет тема нейросетевого шумоподавления становится все популярнее и пока не останавливается на достигнутом. Проводятся соревнования по шумоподавлению, в том числе по шумоподавлению потоковых данных, где отрабатываются очень интересные алгоритмы, кроме тех, о которых я рассказала [11]. Но если хочется с чего-то начать, то сначала предлагаю познакомиться с ними! :)
Спасибо за внимание!
Комментарии (7)
NonNicknames
20.10.2021 11:57+1"Фильтр Вейнера (Weiner filter)" - откройте английскую Вики для английского варианта термина (на смартфоне - версию для ПК), перейдите на соответствующую страницу русской Вики и узнаете как этот фильтр называется в русскоязычной специальной литературе.
Dino_the_dinosaur Автор
20.10.2021 12:26Спасибо за замечание! Исправила.
Изучала этот материал в основном в английских источниках и не повезло наткнуться на корректный перевод.
gleb_l
Странно, что ШП вообще хоть сколько-нибудь значимо увеличивает качество распознавания речи машинами. Глубина алгоритмов ШП порядково ниже таковых для распознавания - соответственно, ШП на входе могут улучшить результат максимум примерно в этой пропорции.
В субъективной модели - да, это работает, причём достаточно алгоритмически-простыми средствами (вспомним даже аналоговые ШП Маяк и Долби). Но роботу все равно - он не обладает субъективизмом восприятия акустических сигналов.
Sun-ami
А разве отличие алгоритмов ШП не в том, что они обучаются на конкретном сигнале, который затем идёт на распознавание, в то время как алгоритмы распознавания должны быть обучены заранее?
Dino_the_dinosaur Автор
То о чём вы говорите больше похоже на фильтрацию по SNR, там нет "обучения" как такового, а есть эмпирическое вычисление порогов по заранее установленным значениям SNR. Этот подход действительно, как правило, используется изолированно для каждого примера, однако, есть и другие, обучаемые подходы, роль которых подавлять шум в сигнале по предобученным параметрам.
Алгоритмы распознавания речи при этом также могут быть как и обучены заранее, так и адаптированы под шумные или искажённые в результате шумоподавления записи.
Sun-ami
Я говорю о подавлении шумов, природа которых не известна алгоритму шумоподавления заранее путём выделения их характеристик нейросетью в процессе обработки целевого аудиопотока по критерию «это не речь», и вычитания их из сигнала на основе предсказания их динамических характеристик этой нейросетью. То есть, если, например, к речи подмешан какой-то периодически повторяющийся звук, который неизвестен заранее, например, громкое тиканье часов, стук колёс поезда, или удары колокола, можно выделить на нескольких его повторениях его частотно-временные характеристики, и подавлять его основываясь на них лучше, чем по исходному критерию «это не речь», по которому можно обучить нейросеть заранее. Я думаю, что так подавляет шумы мозг человека.
Dino_the_dinosaur Автор
Вы правы, получить значимого улучшения с предобученной моделью распознавания речи весьма сложно, нужно, чтобы генерируемый сигнал был подобен записанным сигналам, однако, есть способы решения этой проблемы.
Возможно получить улучшение 1-4% WER reduction, если натренировать модель ШП убирать стационарные шумы.
Другим вариантом является дообучать систему распознавания речи на таких "покаррапченных" записях, собственно, у работ по этой теме является стандартной практикой сравнивать два варианта: с дообучением и без. В частности, у Kinoshita et al преставлены результаты в случае этих двух подходов.
Ещё одним возможным вариантом сглаживания артефактов в сигнале является смешивание исходного и очищенного сигнала в некоторой пропорции.
Наконец, как упомянуто в статье, можно натренировать модель генерировать сигналы, имитирующие записанные, используя GAN-ы. Мне конкретно для ASR это не помогло, но я использовала этот подход в связке с довольно агрессивной аугментацией, так что сейчас я как раз исследую эту тему.