引言
尽管调整模型架构和超参数是一个搭建完美模型的成功因素,数据科学往往需要关注数据。无论你搭建的模型多么amazing,但是GIGO(garbage in,garbage out)必须是我们需要考虑的。
同时,在实际的数据工程中,数据的缺乏往往是一个很常见的问题。数据增强方法可以通过已有的数据来产生相似的数据,从而提高模型的鲁棒性和泛华能力。本文旨在介绍一些论文的语音增强方法,语音增强工具。
数据增强
常规增强方法1
参考文献:https://blog.csdn.net/wudibaba21/article/details/110843874
https://www.kaggle.com/CVxTz/audio-data-augmentation
1.插入随机噪音
import numpy as np
def manipulate(data, noise_factor):
noise = np.random.randn(len(data))
augmented_data = data + noise_factor * noise
# Cast back to same data type
augmented_data = augmented_data.astype(type(data[0]))
return augmented_data
2.转移时间
转移时间的想法非常简单。 它只是随机将音频向左/向右移动。 如果将音频向左(快进)移动 x 秒,则前 x 秒将标记为 0(即静音)。 如果将音频向右(向前)移动 x 秒,最后 x 秒将标记为 0(即静音)。
import numpy as np
def manipulate(data, sampling_rate, shift_max, shift_direction):
shift = np.random.randint(sampling_rate * shift_max)
if shift_direction == 'right':
shift = -shift
elif self.shift_direction == 'both':
direction = np.random.randint(0, 2)
if direction == 1:
shift = -shift
augmented_data = np.roll(data, shift)
# Set to silence for heading/ tailing
if shift > 0:
augmented_data[:shift] = 0
else:
augmented_data[shift:] = 0
return augmented_data
3.改变音高
import librosa
def manipulate(data, sampling_rate, pitch_factor):
return librosa.effects.pitch_shift(data, sampling_rate, pitch_factor)
4.变速
import librosa
def manipulate(data, speed_factor):
return librosa.effects.time_stretch(data, speed_factor)
数据增强方法2
Google Brain 的SpecAugment 1.时域频域掩盖,2.时间扭曲
Specaugment on Large Scale Datasets
(音频波形图转为频谱图)
给定一个频谱图,您可以将其视为一个图像,其中 x 轴是时间,而 y 轴是频率。
Spectrogram representation (librosa)
直观地说,它提高了训练速度,因为波形数据到频谱图数据之间没有数据转换,而是增强了频谱图数据。
1.时间扭曲Time Warping
将选择一个随机点并以距离 w 向左或向右扭曲,该距离从 0 到沿该线的时间扭曲参数 W 的均匀分布中选择。
2.频域掩盖 Frequency Masking
205 / 5000
频道域[f0, f0 + f) 被屏蔽。 f 是从 0 到频率掩膜参数 F 的均匀分布中选择的,f0 是从 (0, ν - f) 中选择的,其中 ν 是频率通道的数量比如80维的FBank。
3.时域掩盖 Time Masking
t 个连续的时间步 [t0, t0 + t) 被屏蔽。 t 选自从 0 到时间掩码参数 T 的均匀分布,并且 t0 选自 [0, T − t)。其中T是音频时长按分帧手段获取的长度。
(从上到下为没有增强的频谱图、time warp后的频谱图、频域掩盖、时域掩盖后的频谱图
增加策略组合
- W: Time Warping Parameter
- F: Frequency Masking Parameter
- mF: Number of frequency masking applied
- T: Time Masking Parameter
- mT: Number of time masking applied
论文上的实验效果
注意点:
- 时间扭曲不会太多提升模型表现,当资源有限时,建立抛弃改方法
- Label smoothing 使训练更加平滑
- 数据增强可以使over-fit 问题变为under-fit