Исторически сложилось так, что наибольшего успеха глубокое обучение достигло в задачах обработки изображений — распознавании, сегментации и обработке изображений.
Однако, как говорится, наука о данных живет не только сверточными сетями.
Мы постарались создать руководство по решению задач, связанных с обработкой речи.
Самым популярным и востребованным из них, пожалуй, является распознавание того, что именно говорится, анализ на смысловом уровне, но мы обратимся к более простой задаче – определению пола говорящего.
Однако инструменты в обоих случаях оказываются практически одинаковыми.
/ Фото Джастин Линкольн / CC-BY
Что «услышат» наш алгоритм
Характеристики голоса, который мы будем использоватьПервый шаг — разобраться в физике процессов — понять, чем мужской голос отличается от женского.
О строении речевого тракта у людей можно прочитать в обзорах или специальной литературе, но основное объяснение «на пальцах» вполне прозрачно: голосовые связки, колебания которых производят звуковые волны до модуляции другими органами речи, имеют разная толщина и напряжение у мужчин и женщин, что приводит к разной частоте основного тона (он же высота, высота).
У мужчин она обычно находится в диапазоне 65–260 Гц, а у женщин – 100–525 Гц.
Другими словами, мужской голос чаще всего звучит ниже женского.
Наивно полагать, что одного шага может быть достаточно.
Видно, что для обоих полов эти интервалы достаточно сильно перекрываются.
Более того, во время речи для многих согласных звуков не удается определить частоту основного тона - переменный параметр, изменяющийся, например, при передаче интонации, и алгоритмы ее расчета не безупречны.
В человеческом восприятии индивидуальность голоса заключена не только в частоте, но и в тембре - совокупности всех частот в голосе.
В каком-то смысле его можно описать с помощью спектра, и здесь на помощь приходит математика.
Звук – это переменный сигнал, а значит, его спектр с точки зрения среднего времени вряд ли даст нам что-то значимое, поэтому разумно рассмотреть спектрограмму – спектр в каждый момент времени, а также его статистику.
Звуковой сигнал разбивается на перекрывающиеся 25-50-миллисекундные сегменты - кадры, для каждого из которых с помощью быстрого преобразования Фурье рассчитывается спектр, а затем осуществляется поиск его моментов.
Чаще всего используются коэффициенты центроида, энтропии, дисперсии, асимметрии и эксцесса — очень много.
Общий , который используется при расчете случайных величин и временных рядов.
Также используются мел-частотные кепстральные коэффициенты (MFCC).
О них стоит почитать, например: здесь .
Есть две проблемы, которые они пытаются решить.
Во-первых, восприятие звука человеком нелинейно по частоте и амплитуде сигнала, поэтому требуется некоторое масштабирование (логарифмическое).
Во-вторых, сам спектр речевого сигнала довольно плавно меняется по частоте, и его описание можно свести к нескольким числам без особой потери точности.
Обычно используют 12 мел-кепстральных коэффициентов, каждый из которых представляет собой логарифм спектральной плотности в определенных полосах частот (его ширина тем выше, чем выше частота).
Именно этот набор признаков (шаг, статистика спектрограмм, MFCC) мы будем использовать для классификации.
/ Фото Дэниел Ойнс / CC-BY
Решение проблемы классификации
Машинное обучение начинается с данных.К сожалению, не существует открытых и популярных баз данных для гендерной идентификации, таких как ImageNet для классификации изображений или IMDB для определения тональности текста.
Можно взять известную базу данных распознавания речи TIMIT, но она платная (что накладывает некоторые ограничения на ее публичное использование), поэтому мы будем использовать ВЦТК – База данных объемом 7 ГБ находится в свободном доступе.
Он предназначен для задачи синтеза речи, но нас устраивает по всем параметрам: содержит звук и данные о 109 говорящих.
Для каждого из них мы возьмем 4 случайных утверждения длительностью 1–5 секунд и попытаемся определить пол их автора.
В компьютере звук выводится в виде последовательности чисел — отклонений мембраны микрофона от равновесного положения.
Частоту дискретизации чаще всего выбирают из диапазона от 8 до 96 кГц, причем для одноканального звука одна ее секунда будет представлена не менее чем 8 тысячами чисел: любое из них кодирует отклонение мембраны от положения равновесия при каждый из восьми тысяч раз в секунду.
Для тех, кто слышал о Вейвнет — нейросетевая архитектура синтеза аудиосигнала — это вроде бы не проблема, но в нашем случае такой подход избыточен.
Логичным действием на этапе предварительной обработки данных является вычисление признаков, позволяющих существенно сократить количество параметров, описывающих звук.
Здесь мы обратились к openSMILE — удобный пакет, умеющий рассчитывать практически всё, что связано со звуком.
Код написан на Python, а реализация — Random Forest, лучше всех справившаяся с классификацией — взята из библиотеки sklearn. Также интересно посмотреть, как с этой задачей справляются нейронные сети, но о них мы сделаем отдельный пост. Решение задачи классификации означает использование обучающих данных для построения функции, которая на основе схожих параметров возвращает метку класса, и делает это достаточно точно.
В нашем случае необходимо, чтобы по набору признаков произвольного аудиофайла наш классификатор отвечал, чья речь в нем записана, мужская или женская.
Аудиофайл состоит из множества кадров, обычно намного превышающих количество обучающих примеров.
Если мы будем тренироваться на наборе кадров, вряд ли получим что-то стоящее — разумно уменьшить количество параметров.
В принципе, можно классифицировать каждый кадр по отдельности, но из-за выбросов конечный результат тоже будет не очень обнадеживающим.
Золотая середина — вычислить статистику признаков для всех кадров аудиофайла.
Кроме того, нам нужен алгоритм проверки классификатора — нам нужно убедиться, что он все делает правильно.
В задачах обработки речи обобщающая способность модели считается низкой, если она хорошо работает не для всех говорящих, а только для тех, на которых она обучалась.
Иначе говорят, что модель т. н.
Динамик свободный, и это само по себе неплохо.
Чтобы проверить этот факт, достаточно разделить говорящих на группы: с одними изучать, а с остальными проверять точность.
Вот что мы сделаем.
Таблица данных хранится в файле data.csv, столбцы размечены в первой строке, при желании ее можно отобразить на экране или просмотреть вручную.
Подключаем необходимые библиотеки, читаем данные:
Теги: #лаборатория нейроданных #распознавание звука #нейронные сети #программирование #Анализ и проектирование систем #Алгоритмы #Разработки для электронной коммерцииimport csv, os import numpy as np from sklearn.ensemble import RandomForestClassifier as RFC from sklearn.model_selection import GroupKFold # read data with open('data.csv', 'r')as c:
-
Мозги Моего Робота — Arduino, Первый Опыт
19 Oct, 24 -
Как Выиграть Игру С Неизвестными Правилами?
19 Oct, 24 -
Инструментарий Рекрутера
19 Oct, 24