Примеры студенческих проектов /

Voice Activity Detection

Участники проекта

Степан Куценогий

Степан Куценогий

Руководители

Сергей Алямкин

Сергей Алямкин

Expasoft
Тимофей Науменко

Тимофей Науменко

Expasoft

Выбор задачи

Весеннюю практику CS центра я проходил в команде компании Экспасофт под руководством Тимофея Науменко. Команда занимается глубинным обучением (deep learning, DL), связанным с обработкой звуковых сигналов, в частности речью. Меня привлекла в данной практике возможность с ходу окунуться в область DL, которую я начал изучать параллельно на курсе CS центра. До начала практики опыта в DL у меня не было, но был опыт в подготовке данных для коллег, которые занимались другими методами машинного обучения, поэтому было не страшно. Подготовка данных и инструментария в начале практики действительно прошли быстрее, чем планировали руководители, поэтому было больше времени, чтобы разбираться непосредственно в глубинном обучении.

Постановка задачи

Основная задача — создание модели VAD (Voice Activity Detection) для распознавания наличия речи на звуковой дорожке. Такая модель нужна для предподготовки данных для больших моделей распознавания речи, переводящих звук в текст. Требовалась легковесная модель, подходящая для использования на мобильных устройствах. 

В CS центре к тому моменту мы уже начали изучать компьютерное зрение в рамках курса по DL, а обработка картинок и звуков тесно связаны между собой — звуковой сигнал часто переводится в формат картинки (спектрограмма, мел-спектрограмма) и только затем идёт обучение. Было интересно с ходу применить знания, полученные на курсе. 

Рис. 1. Пример мел-спектрограммы для записи с человеческой речью

 

Задача делилась на следующие подзадачи:

  1. Знакомство с существующими библиотеками для обработки сигналов и в целом с методами решения задач по распознаванию речи.
  2. Создание нового датасета для решения задачи. Использовался большой корпус данных с речью, взятой из аудиокниг.
  3. Обычение одновременно лёгкой (с небольшим количеством параметров) и эффективной нейронной сети для решения задачи VAD.

Ход работы 

В самом начале практики команда предложила для решения задачи архитектуру MobileNetV2. Первым делом я разобрался в её работе и в основных библиотеках для обработки звуков на Python. 

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

Перед началом проекта предполагалось делать основную разметку с помощью Voice Activity Detection Toolkit, а генерацию спектрограмм для входа сети — библиотекой librosa. Однако при первых попытках разметить дорожку стало понятно, что выбранный toolkit не справляется с заявленной задачей даже на довольно чистом датасете, состоящим из аудиокниг. Он не работал на части эмоциональных фразах или, наоборот, на фразах, которые диктор читал шепотом. Поэтому моим первым заданием в рамках практики стало воспроизвести алгоритм разметки чистых данных на основе энергии сигнала, и вторая неделя практики ушла на реализацию данного алгоритма.  

Рис. 2. Пример работы алгоритма авторазметки чистых данных

 

Данные для обучения также нужно было аугментировать, чтобы повысить устойчивость сети к шумам, к различной громкости дорожки. Данных было достаточно много — 120 Гб. Второй задачей в рамках моей практики стала реализация собственной библиотеки для аугментации звуковых сигналов. Итого к середине практики у меня были готовы инструменты для подготовки, разметки и аугментации чистых данных.

После всех подготовительных этапов настал момент обучения сети. Для меня это был первый опыт обучения сети не на «сахарных» данных, предлагаемых в рамках учебных курсов, а на данных, подготовленных мною с самого начала. После запуска первых экспериментов не удалось получить желаемого результата — пришлось вернуться к подготовке данных и провести ряд экспериментов по нормализации подаваемых на обучение спектрограмм. После подготовки данных начались эксперименты на маленьком датасете для подбора оптимальной сети и всех необходимых гиперпараметров. В день можно было провести два-три эксперимента на маленьком датасете — он был необходим для того, чтобы успеть провести больше запусков. Позже на большом датасете уже получалось провести только два-три эксперимента в неделю. Таким образом, итеративным путем к концу практики получилось готовое решение для задачи VAD.

Рис. 3. Пример работы сети: синяя полоса — правильная разметка, оранжевая полоса — полученная разметка

 

Заключение

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

Работу над VAD я продолжил после окончания практики в той же команде, так как при попытке применить решение на реальных данных выяснилось, что модель не очень хорошо справляется со звуками вроде «хм-м-м», «ну-у-у» и т.д. Применять данную модель планируется в первую очередь в связке с другими: например, перед тем, как давать запись более тяжелой и медленной модели по распознаванию речи, вырезать из этой дорожки все участки, где речь отсутствует, с помощью более легковесной модели VAD.

В конце я хотел бы отметить, что история с практиками — это очень крутой бонус CS центра. Пока многие люди ищут интересное им направление, а потом какую-нибудь стажировку по этому направлению, к нам в CS центр к самим приходят специалисты из компаний и институтов и рассказывают, чем они занимаются, дают возможность к этому прикоснуться.

Текст написал

Степан Куценогий

Степан Куценогий