Наука о данных

Создание аудиоклассификатора (часть 2)

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



После этого вступления давайте приступим к сегодняшней статье.

Аудиофайл может быть представлен как амплитуда по оси Y и время по оси X. Частота дискретизации — это информация/количество выборок в секунду. Частота дискретизации по умолчанию, которую использует librosa, составляет 22050 Гц, то есть 20 кГц, потому что это самая высокая частота, которую может услышать человек. Давайте посмотрим, как разные частоты дискретизации могут повлиять на звук.

Во-первых, мы будем использовать частоту дискретизации 4000 Гц.

#A happy sample at a SR = 4000
SAMPLE_RATE = 4000
v_path = '/kaggle/input/cremad/AudioWAV/1001_IEO_HAP_HI.wav'
audio , sampling_rate = librosa.load(v_path,sr=SAMPLE_RATE)
plt.figure(figsize=(15,5))
librosa.display.waveshow(audio , sr = sampling_rate)
ipd.Audio(v_path,rate=4000)

Выход:

Далее давайте попробуем частоту дискретизации 1000 Гц.

#A happy sample at a SR = 1000
SAMPLE_RATE = 1000
v_path = '/kaggle/input/cremad/AudioWAV/1001_IEO_HAP_HI.wav'
audio , sampling_rate = librosa.load(v_path,sr=SAMPLE_RATE)
plt.figure(figsize=(15,5))
librosa.display.waveshow(audio , sr = sampling_rate)
ipd.Audio(v_path,rate=1000)

Наконец, давайте возьмем крайний пример частоты дискретизации 10 Гц.

SAMPLE_RATE = 10
v_path = '/kaggle/input/cremad/AudioWAV/1001_IEO_HAP_HI.wav'
audio , sampling_rate = librosa.load(v_path,sr=SAMPLE_RATE)
plt.figure(figsize=(15,5))
librosa.display.waveshow(audio , sr = sampling_rate)
ipd.Audio(v_path,rate=10)

Наблюдения из этого упражнения:

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

Функция, которую мы собираемся извлечь, — это MFCC.

Полная форма MFCC — это кепстральные коэффициенты Mel-частоты. Это особенность частотной области, и вы можете рассматривать ее как рентгеновский снимок вашего рта, как звук, исходящий из вашего тракта. (аналогия любезно предоставлена: https://www.kaggle.com/code/ejlok1/part-2-extracting-audio-features/notebook)

Если вам нужно подробное объяснение математики, лежащей в основе MFCC, вы можете обратиться к этому превосходному блогу: https://medium.com/prathena/the-dummys-guide-to-mfcc-aceab2450fd.

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

SAMPLE_RATE = 22050
v_path = '/kaggle/input/cremad/AudioWAV/1001_IEO_HAP_HI.wav'
audio , sampling_rate = librosa.load(v_path,sr=SAMPLE_RATE)
mfcc = librosa.feature.mfcc(y=audio, sr=SAMPLE_RATE, n_mfcc = 5)
plt.figure(figsize=(12, 6))
plt.subplot(3,1,1)
librosa.display.specshow(mfcc)
plt.ylabel('MFCC')
plt.colorbar()
plt.show()

Аналогично в следующем фрагменте мы меняем аудиосэмпл.

SAMPLE_RATE = 22050
v_path = '/kaggle/input/cremad/AudioWAV/1001_IEO_DIS_LO.wav'
audio , sampling_rate = librosa.load(v_path,sr=SAMPLE_RATE)
mfcc = librosa.feature.mfcc(y=audio, sr=SAMPLE_RATE, n_mfcc = 5)
plt.figure(figsize=(12, 6))
plt.subplot(3,1,1)
librosa.display.specshow(mfcc)
plt.ylabel('MFCC')
plt.colorbar()
plt.show()

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

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