SincNet 原始波形的说话人识别
论文:M. Ravanelli, Y. Bengio, in 2018 IEEE Spoken Language Technology Workshop, SLT 2018 - Proceedings (Institute of Electrical and Electronics Engineers Inc., 2019), pp. 1021–1028.
主要贡献:
- 滤波器学习
- 数字信号波形来约束第一个卷积层的滤波器
- 滤波器参数少
摘要
说话人识别任务中,MFCC、FBANK、PLP 等频谱特征需要设定多个超参,例如帧长、帧间距、帧窗口类型和频谱个数。从原始模型直接学习说话人嵌入的方法采用数据驱动的方式直接学习滤波器参数。M. Ravanelli 提出 SincNet,该网络的第一层卷积层的参数化带通滤波器引入了数字信号的特定波形约束,例如 Hamming 窗。SincNet 能够很好地学到窄带说话人特性,例如音调和共振峰。实验表明:在 TIMIT 和 Librispeech 语料上,SincNet 收敛速度更快、计算量更好,且性能优于从原始波形学习的 CNN。
引言
在说话人识别领域,传统 i-vector 方法和深度学习方法大多采用手工设计的特征,例如 MFCC、FBANK。这些频谱特征可能阻碍了语音的音调和共振峰的学习。为了避免这个问题,以频谱图和原始波形作为输入的方法开始出现。目前,直接从原始波形学习的语音研究包括:情绪任务、说话人识别、欺骗行为检测和语音合成。
第一层卷积层是原始波形 CNN 模型最关键的部分,这部分需要处理两个问题:1)高维输入,2)梯度消亡的问题。CNN 学习滤波器还需要面临噪声、不协调的多频段形状、训练样本少等困难。
为了解决 CNN 学习滤波器的问题,SincNet 采用了一系列参数化的带通滤波器。滤波器的高低截止频率是唯一需要学习的参数。SincNet 表显著更快的收敛速度、优于 CNN 的性能和短语音的适应能力。
SincNet
SincNet 模型结构,采用 dnn_models.py 的 SincNet 实现:
- 波形:块 200 ms,10 ms 重叠,
- 模型:251 长度 * 80 滤波器 + 2 层 5 长度 * 60 滤波器 + 3 层 全连接层(2048) + softmax 分类起(卷积层可视化描述:https://github.com/vdumoulin/conv_arithmetic),
- 层归一化用于输入样本和所有卷积层,
- 批量归一化用于全连接层,
- eaky-ReLU 激活函数用于所有隐藏层,
- Sinc 层使用 mel-scale 截止频率作为初始化,
- 除了 Sinc 层的网络使用 “Glorot” 初始化策略;
- 训练过程:RMSprop 优化器,学习速率 0.001,alpha 0.95,epsilon 1e-7,小批量规模 128;
- 超参调试使用 TIMIT 数据集。
滤波器设计
滤波器的设计是 SincNet 的关键部分,M. Ravanelli 引入了数字信号处理方面的带通滤波器,具体过程如下:
-
标准 CNN 的滤波器执行输入波形和有限脉冲响应滤波器之间的时域卷积:
y [ n ] = x [ n ] ∗ h [ n ] = ∑ l = 0 L − 1 x [ l ] ⋅ h [ n − l ] y[n]=x[n]*h[n]=\sum\limits_{l=0}^{L-1}x[l]\cdot h[n-l] y[n]=x[n]∗h[n]=l=0∑L−1x[l]⋅h[n−l]
其中 x [ n ] x[n] x[n] 是语音信号的一个块,例如 200 ms 语音信号; h [ n ] h[n] h[n] 表示长度 L L L 的一维滤波器; y [ n ] y[n] y[n] 是滤波器输出。实现过程可以参考 torch.nn.Conv1d。
-
将滤波器 h [ n ] h[n] h[n] 参数化为 g [ n , θ ] g[n,\theta] g[n,θ],其中 θ \theta θ 是参数。
-
论文中采用矩形带通滤波器作为参数化滤波器的实现,其参数有两个:低频截止频率 f