这篇综述质量尚可(废话,TIST的文章能不好,你有本事发一个)。TIST是什么?PIA打飞,百度去。通讯作者是Schuller,被引次数超过3万的大佬。听大佬的,少走弯路(Doge脸)。
那这篇文章的关注点其实很聚焦:鲁棒的语音识别,也就是对有噪声语音的识别。所关注的技术是当红炸子鸡deep learning。
有噪语音的识别,可以类比失真图像的识别。因为图像也好,语音也罢,本质上都是信号。那么有噪语音的问题其实也可以类比为图像失真——一种非线性的降质过程。这篇文章主要关注的噪声是non-stational的,就是非稳定的、突发的噪声,类似图像中的油渍、空洞等。而传统失真,比如高斯白噪声,是稳定的,可以用线性方程描述的(时域的卷积=频域的乘积)。
ASR大致是两步走:第一步是从语音信号提取特征;第二步是构建声音模型,然后做一个分类。前者被作者称为front-end technique,后者被称为back-end technique。
所谓front-end,有点像是feature representation。但是又不太一样。front-end technique 重点是从ASR的处理过程出发,更广泛地说,是speech application的一环。更像是pre-processing。其主要目的是从带噪声的声音中估计原始无失真信号。这就和图像去噪有点像了,或许和图像本征分解、去模糊等也类同的。本质上,还是一个非线性的、病态的问题。那么常用手段其实也就来了。
把深度学习用于front-end,无非就是如何训练的问题。目前(按这篇文章的2017年)主要还是有监督的。然后更细分一点,训练数据是用从原始无失真语音信号(clean speech)提取的特征,还是从原始无失真与噪声信号取mask后的特征,分为mapping-based和masking-based methods。
Mapping-based method的实质是解一个优化方程:
J ( θ ) = 1 N ∑ n = 1 N ∣ ∣ F ( y ⃗ n ) − x ⃗ n ∣ ∣ 2 \mathcal{J}(\theta)=\frac{1}{N}\sum_{n=1}^{N}||F(\vec{y}_{n})-\vec{x}_{n}||^{2} J(θ)=N1n=1∑N∣∣F(yn)−xn∣∣2
其中 y ⃗ \vec{y} y是输入特征, x ⃗ \vec{x} x是目标特征, θ \theta θ就是网络要学习的参数了。
这里按照历史变革,很自然有三种可用的网络技术:
最后自然就是生成式网络啦——
4. GAN。据说可以秒杀传统方法,比如维纳滤波器(看来比LSTM/CNN还是差一丢丢)。([5][6])
来看大佬总结的deep learning杀进语音识别带来的变化:
但是大佬指出一个问题:就是大家在看待语谱图的时候,是不是太自然地将他与普通图像等量齐观了呢?普通图像中,相邻像素往往是相似的;但是语谱图里,沿着时间方向很相像,但是沿着频率方向相关性很小(必须的……因为是经过STFT了嘛)。这块需要留意。
Masking-based试图学习从带噪声的语谱图 Y ( n , f ) Y(n,f) Y(n,f)到时-频mask M ( n , f ) M(n,f) M(n,f)的回归函数:
Y ( n , f ) → M ( n , f ) Y(n,f)\rightarrow M(n,f) Y(n,f)→M(n,f)
Masking-based方法首先要圈定mask的形态。用什么样的mask?一种是binary-based mask。这种二值的T-F mask有点像Indicator function,给一个SNR的阈值,大于阈值的认为是干净语音主导的,小于阈值的认为是噪声主导的。这么搞出来的mask是一个二值矩阵(Ideal binary mask,IBM);另一种是ratio-based mask,T-F mask的每个单元用的是干净语音和噪声语音的一种soft ratio(Ideal ratio mask,IRM)。相较而言,后者比前者保有的信息更多([7])。通过估计mask,就可以做到语音分解。T-F mask也可以用Mel-frequency语谱图,log-Mel-frequency语谱图替代。后者效果更好(一切荣耀归于Mel!)。另外,估计mask的训练方式也从DNN转向LSTM-RNN。
当然,IBM/IRM方法也存在上述致命缺陷,就是没有把纤维信息考虑进去。事实上,相位信息对语音增强是很有用的。因此,又有一种mask叫Phase-sensitive mask(PSM),把干净语音和噪声语音的相位角差引入mask表示;还有进一步保留相位信息的complex IRM。
确定的mask之后,就是定义目标函数了。Input y ⃗ \vec{y} y是从噪声信号 Y ( n , f ) Y(n,f) Y(n,f)得到的;目标 x ⃗ \vec{x} x是根据干净语音和噪声语音计算的T-F mask, θ \theta θ是网络参数。目标函数就是:
J ( θ ) = 1 N ∑ n = 1 N ∣ ∣ F ( y ⃗ n − M ( n , f ) ∣ ∣ 2 \mathcal{J}(\theta)=\frac{1}{N}\sum_{n=1}^{N}||F(\vec{y}_{n}-M(n,f)||^{2} J(θ)=N1n=1∑N∣∣F(yn−M(n,f)∣∣2
估计到mask M ^ ( n , f ) = F ( y ⃗ n ) \hat{M}(n,f)=F(\vec{y}_{n}) M^(n,f)=F(yn)后,可以把它与带噪信号的频谱卷积,然后再变换回时域,就能把干净信号分离出来(这里的mask实质上就是信号处理里的滤波器)。这类目标函数叫MA(Mask approximation)。
还有一类目标函数叫Signal approximation(SA),是比较卷积后信号频谱与干净信号频谱的MSE:
J ( θ ) = 1 N ∑ n = 1 N ∣ ∣ y ⃗ n ⊗ M ^ ( n , f ) − x ⃗ n ∣ ∣ 2 \mathcal{J}(\theta)=\frac{1}{N}\sum_{n=1}^{N}||\vec{y}_{n}\otimes\hat{M}(n,f)-\vec{x}_{n}||^{2} J(θ)=N1n=1∑N∣∣yn⊗M^(n,f)−xn∣∣2
使用SA比MA好一点,原因不明(本文认为是source separation)。但这里有一个思路可以借鉴,就是ResNet里为何使用Residual而不是sum?应该还是数值计算的问题。最后还有考虑相位信息的目标函数Phase-sensitive SA。
多任务网络也已经发现了这片热土——同时训练noise-speech和mask([8])。