Multi-Channel Hybrid AM

本篇文章主要说一下多通道的Hybrid声学模型。Google在CLDNN之后,大约在2015年到2017年之间围绕远场语音识别,做了一系列 [1-6] 的工作,相关的技术也被用在了Google Home [7] 上。17年的时候我看了其中的一部分,觉得工作做的很漂亮,一骑绝尘,一枝独秀。原因主要有两方面,其一是多通道声学模型是一个比较新的概念,当时很少见其他高校和公司有相关的工作,基本还停留在神经网络的架构阶段,其二是Google的产出速度非常惊人,而且思路明确,环环相扣。17年之后,Google甩手开始做端到端(E2E)方面的工作,学术界和工业界也开始紧紧跟着不放,之前的工作关注度相比之下,明显低了很多。最近看到Amazon在icassp2019上有了两篇文章 [8-9],再加上面试百度时他们聊了一些神经网络前端的事(后来确实花功夫宣传了),我就想聊一下这方面的工作和认识。

先说一下我的看法。在特定的远场环境下直接做多通道声学模型是一个非常有必要的尝试。如果可以将繁杂的前端处理模块(增强,定位,去混等等)集成到声学模型中,那么从系统的角度来看,维护成本,工程量,甚至是系统的延迟都可以明显的得到降低。而从技术本身来说,前后端的不匹配性一直是前后端分离这种模式下需要解决的问题。为了提升最终的识别率,前端需要工程师不断的做优化,后端则需要不断的retrain,而多通道建模则可以让前端自动跟随着后端的准则进行微调和适应。这种联合优化的方式可以较好的解决这种mismatch问题,存在提升系统性能的可能性。

Google和Amazon的工作都是基于固定波束形成的方案。在增强的场景中(即单一目标声源),前后端分离下需要先根据麦克风几何结构设计好一组指向的固定波束和声源定位算法。运行时先根据定位的结果,选取目标方位或者音区内的波束送入声学模型进行识别或者解码,这一过程也称为波束选择。波束形成我在之前的文章中介绍过,在频域可以写为:

其中$\mathbf{w}_{f}\in \mathbb{C}^{M}$表示在频率索引$f$处的滤波系数,$\mathbf{y}_{t,f} = [y_{t,f}^0, \cdots, y_{t,f}^{C - 1}]$表示每个时频点的观测向量,$C$为麦克风数目。对于固定波束而言,之前也提到,会设计一组系数$\mathcal{W}_f = [\cdots, \mathbf{w}_{\theta, f}, \cdots]$,指向不同的方向(look directions),为了后文描述方便,给式$(1)$加上下角标$\theta$表示指向:

时域上,对应的可以写成滤波相加的形式:

其中$\mathbf{y}_t = [y_{t - N + 1}, \cdots, y_t],\mathbf{h}_{\theta, c} = [h_0^\theta, \cdots, h_{N - 1}^\theta]$表示通道$c$处的有限冲击响应(FIR),$N$表示滤波FIR的阶数,$*$表示卷积。在神经网络中,式$(2)$和式子$(3)$分别可用线性层(或者dot & sum等操作)以及一维卷积层实现。

Google

下面先介绍Google的三个方案,两种时域(Unfactored & Factored)的和一种频域的。Unfactored直接根据$(3)$式使用$P$组$C$个一维卷积对输入的多通道数据进行滤波相加操作,卷积的stride为1,padding设为0,卷积核的维度对应滤波FIR的阶数$N$,$P$表示不同指向的滤波器个数。卷积的输入为切分好的多通道语音块$[\mathbf{y}_0, \cdots, \mathbf{y}_{T-1}]$,原文中采用的帧长为35 ms($M = 560$),帧移为10 ms,$N = 400$,所以对于每一帧$\mathbf{y}_t \in \mathbb{R}^{C \times M}$,$\theta$指向的一组一维卷积输出为$\mathbf{s}_t^\theta \in \mathbb{R}^{M - N + 1}$,整个层Unfactored的输出维度为$\mathbf{s}_t \in \mathbb{R}^{M - N + 1 \times P}$。最后在$M - N + 1$这个维度上做最大池化,并使用ReLU和log压缩,将$\mathbf{z}_t \in \mathbb{R}^P$输入后端的CLDNN结构中进行训练。这个过程可以用下面的流程表示:

在实现的时候,可以使用二维组卷积(Group Convolution)代替$P$组$C$个一维卷积,对应的核心代码用PyTorch实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class UnfactedFsBeamformer(_FsBeamformer):
"""
Unfacted form of FS (filter and sum) beamformer
"""
def __init__(self,
num_taps=400,
win_size=560,
num_channels=4,
num_filters=256,
log_compress=True):
super(UnfactedFsBeamformer, self).__init__(win_size,
win_size - num_taps)
self.num_channels = num_channels
self.log_compress = log_compress
# fs beamformer
self.filter = nn.Conv2d(num_channels,
num_filters * num_channels, (num_taps, 1),
stride=(1, 1),
groups=num_channels,
bias=False)

def forward(self, x):
"""
args:
x: multi-channel audio utterances, N x C x S
return:
y: N x P x T, enhanced features
"""
if x.dim() not in [2, 3]:
raise RuntimeError(f"Expect 2/3D tensor, got {x.dim()} instead")
if x.dim() == 2:
x = x[None, ...]
# N x C x S x 1
x = x[..., None]
# chunks: N x C x S x 1 => N x CM x T
c = self.unfold(x)
# N x C x M x T
c = c.view(x.shape[0], self.num_channels, self.frame_len, -1)
# N x CF x M' x T
f = self.filter(c)
# N x F x M' x T
f = sum(th.chunk(f, self.num_channels, 1))
# max pool, N x F x 1 x T
y = F.max_pool2d(f, (self.frame_hop + 1, 1), stride=1)
# non-linear
y = th.relu(y.squeeze(-2))
# log
if self.log_compress:
y = th.log(y + 0.01)
return y

Unfactored的一个比较明显的问题在于计算量很大,参考式$(3)$,按照上述实验配置,计算一帧就需要进行$M - N + 1 \times N \times P \times C$次乘法。另一个在于网络需要在给出的输出$\mathbf{z}_t \in \mathbb{R}^P$中同时包含空间和频率上的提取信息,学习难度较大,针对这点,Factored使用了两步卷积操作分别进行特征提取。其中空间滤波阶段采用了低阶的FIR和较小的look directions,这样的设计是希望网络主要学习到空间滤波的任务。此外空间滤波中的卷积对输入进行padding操作,保证输出的结果在时间维度上相同,即$\mathbf{s}_t \in \mathbb{R}^{M \times P}$。之后使用一维卷积层对$\mathbf{s}_t$提取频率特征(look directions维度保持不动):

$\mathbf{g}_f$表示频率$f$上的滤波系数,卷积核维度为$L$,输入通道数为1,输出通道数为$F$,得到结果$\mathbf{w}_t \in \mathbb{R}^{M - L + 1 \times F \times P}$,分别对应时间,频率和空间维度。之后的操作和Unfactored类似,时间维度上进行池化,忽略短时相位信息,加上ReLU和log压缩,得到$\mathbf{z}_t \in \mathbb{R}^{F \times P}$。最终在输入CLDNN声学模型前,将其reshape成一维向量即可。该操作流程可以用下面的流程表示:

Factored的模型计算一帧需要的乘法次数为$M \times N \times P \times C + P \times L \times M - L + 1\times C$。由于$N,P$的选取都相对较小,所以整体计算量低于Unfactored模型。为了进一步减少计算量,Google将Unfactored对应到频域中,第一步空间滤波采用$(1)$式进行,输入是复数的FFT特征,第二步谱滤波根据$(4)$式的不同,分别对应CLP和LPE模型。区别主要是谱滤波的系数为复数还是实数,均可对应的采用线性进行实现。频域模型的数据变换如下:

其中$F$表示FFT的频点数,$G$表示频率滤波的输出维度。实际学出来的频域滤波系数$\mathbf{G}$分布类似于mel滤波(即log趋势)。在我本人的实验中发现,谱滤波的系数比较容易学得,因为语音的特征主要集中在低频区域,但是网络的性能未必和其存在相关性,下图是某次实验的学习结果,采用CLP模型,绘制的是滤波系数(复数值)的模。

和传统的固定波束方法相比, Google的声学建模中,没有设计所谓的波束选择过程,即只保留一路选出的指向波束或者特征输入后端网络,而是将所有的look directions上的频率特征全部保留。

Amazon

Amazon的方案思路和Google的频域CLP方法类似,但是有一些优势的地方。其一是在波束形成层,使用super-directive(SD)的波束形成器系数做初始化,其二是考虑了波束选择这一过程,保证声学模型的输入和单通道下维度一致,这样就可以做mult-stage训练(用单通道的模型做多通道方案的后端部分初始化)。多通道的声学模型架构如下右图所示:

FE网络表示特征提取网络,其中的线性层起到频谱滤波的作用,可以用mel滤波系数初始化,multi-channel (MC) network有三种设计方案,接受多通道的STFT系数,输出一路波束特征。左图表示我前面提到的传统方案,分别对应波束形成,波束选择,特征提取和声学解码。下面我简单的用文字叙述这三种方案:

第一种CAT的方案比较简单,直接使用复数线性变换将多通道拼接的STFT特征投影成单通道维度即可。第二种DSF的方案通过保留每个频率$f$上的候选波束能量最大的值来实现波束选择过程。第三种方案相较方案二,先保留了每个方向和频率上的能量,再使用线性层将其投影到单一波束的维度作为输出。方案二和三均可以使用预先设计好的SD系数进行初始化。原文的示意图如下,其中power表示对波束复数矩阵进行pow()操作,转换成能量表示。训练方面,采用三步进行,第一步使用fbank特征训练单通道的声学模型,第二步使用单通道STFT特征配合FE网络进行训练,最后添加上前端MC的网络。实验结论方面,ESF的方案获得的相对WER降低最多,而使用mel滤波系数和SD系数初始化FE和MC网络,增加麦克风数目均可以提升模型表现。

上述介绍的Google/Amazon方案均没有自适应的机制,因此只能针对固定的麦克风几何结构/数目和声学环境起作用,网络学到的beampattern/指向性也是固定的。优势的话体现在方案的实现比较简单,系统延迟低,如果存在现有的声学模型pipeline和远场的场景,个人还是非常建议做一些对比和尝试。现在再看候选的多通道方案还有不少,本次将这两篇工作进行集中介绍主要是由于它们存在一定的相似性。自适应波束方案上,比较有代表性的是Paderborn的一系列工作 [10-12],将基于mask的自适应波束形成(MVDR & GEVD)等和后端AM进行联合训练,目前结合E2E的声学模型实践的比较多,后面会考虑写一篇专门进行总结。

Reference

[1]. Hoshen Y, Weiss R J, Wilson K W. Speech acoustic modeling from raw multichannel waveforms[C]//2015 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2015: 4624-4628.
[2]. Sainath T N, Weiss R J, Senior A, et al. Learning the speech front-end with raw waveform CLDNNs[C]//Sixteenth Annual Conference of the International Speech Communication Association. 2015.
[3]. Sainath T N, Weiss R J, Wilson K W, et al. Speaker location and microphone spacing invariant acoustic modeling from raw multichannel waveforms[C]//2015 IEEE Workshop on Automatic Speech Recognition and Understanding (ASRU). IEEE, 2015: 30-36.
[4]. Sainath T N, Weiss R J, Wilson K W, et al. Factored spatial and spectral multichannel raw waveform CLDNNs[C]//2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2016: 5075-5079. MLA
[5]. E. Variani, T. N. Sainath, I. Shafran and M. Bacchiani, “Complex Linear Projection (CLP): A Discriminative Approach to Joint Feature Extraction and Acoustic Modeling,” in Proc. Interspeech, 2016.
[6]. T. N. Sainath, R. J. Weiss, K. W. Wilson, B. Li, A. Narayanan, E. Variani, M. Bacchiani, I. Shafran, A. Senior, K. Chin, A. Misra and C. Kim “Multichannel Signal Processing with Deep Neural Networks for Automatic Speech Recognition,” in IEEE Transactions on Speech and Language Processing, 2017.
[7]. B. Li, T. N. Sainath, J. Caroselli, A. Narayanan, M. Bacchiani, A. Misra, I. Shafran, H. Sak, G. Pundak, K. Chin, K. Sim, R. J. Weiss, K. W. Wilson, E. Variani, C. Kim, O. Siohan, M. Weintraub, E. McDermott, R. Rose and M. Shannon, “Acoustic Modeling for Google Home,” in Proc. Interspeech, 2017.
[8]. Wu M, Kumatani K, Sundaram S, et al. Frequency domain multi-channel acoustic modeling for distant speech recognition[C]//2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019. MLA
[9]. Kumatani K, Minhua W, Sundaram S, et al. Multi-Geometry Spatial Acoustic Modeling for Distant Speech Recognition[C]//ICASSP 2019-2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019: 6635-6639.
[10]. Heymann J, Drude L, Boeddeker C, et al. Beamnet: End-to-end training of a beamformer-supported multi-channel asr system[C]//2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2017: 5325-5329.
[11]. Boeddeker C, Hanebrink P, Drude L, et al. Optimizing neural-network supported acoustic beamforming by algorithmic differentiation[C]//2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2017: 171-175.
[12]. Heymann J, Bacchiani M, Sainath T N. Performance of mask based statistical beamforming in a smart home scenario[C]//2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2018: 6722-6726.