1.论文出处
W. Chan, N. Jaitly, Q. Le and O. Vinyals, “Listen, attend and spell: A neural network for large vocabulary conversational speech recognition,” 2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), Shanghai, 2016, pp. 4960-4964, doi: 10.1109/ICASSP.2016.7472621
因为博客的内容是基于论文内容的理解,方便大家在写论文的时候引用,那就附录参考文献的详细信息啦,希望对大家有用,哈哈,免得大家在需要的时候再去查。博客的内容是基于上述的参考文献,并结合自己的理解,如果问题,希望大家留言讨论。
2.摘要
本文提出的LAS(listen,attend and spell)模型能在不借助发声模型(pronunciation model)、HMM或其他传统语音识别器的条件下,直接将语音信息(speech utterances)直接转换为字符(文章用character表示,即字符或者说字母)。其实,LAS模型是一个端到端的系统,并且是一个端到端的模型,其包含了声学模型(acoustic model)、发声模型(pronunciation model)、语言模型(language model)的功能,即将以前这三个模块的功能包含在一个神经网络里。与DNN-HMM、CTC等模型相比,LAS模型的优点是对输出字符序列的概率分布不作独立假设。LAS模型主要包含两个模型,分别是listener和speller。listener是一个金字塔形的循环网络编码器,其输入是滤波器组的频谱。speller是一个关于注意力机制的循环网络解码器,其输出的每个字符是基于全部的声音序列特征和之前输出的字符。本文选取Google的数据集,在没有字典和外部语言模型的情况下,WER是14.1%,在有语言模型的情况下,WER是10.3%,在同一个数据集上,SOTA的CLDNN-HMM的WER是8.0%
3.简介
(1)目前模型存在的问题:SOTA的语音识别器一般包含不同的模块,如声学模型、语言模型、发声模型、文本归一化等,但是这些模型对其模拟的数据做概率分布的假设(原文会距离说明,这里我就省略一下啦)。这些模型的端到端联合训练是为了减少上述问题(没错,这些问题指的就是模型对模拟数据做概率分布假设的问题)。在这些模型中,发声模型和语言模型很少更新,声学模型会根据WER来更新。
(2)本文的工作:提出一个LAS模型,该模型直接将音频序列信号转换为文字序列,每次转换一个字符,并且不使用其他模型的帮助(没错,其他模型指的就是HMM、语言模型等)。LAS主要包含了编码器和解码器。编码器是listener,解码器是speller。listener是一个金字塔的RNN,其作用是提取语音信号的高层特征。speller是一个RNN网络,其作用是在获取全部声学特征信息和前面输出字符的情况下,将高层特征转换为字符序列。
在每个步骤中,RNN通过内部状态(internal state)产生的注意力机制,从listener的高层特征来计算一个上下文向量context vector。RNN使用上下文向量context vector和内部状态internal state来更新内部状态internal state和预测序列的下一个字符。整个模型是从零开始训练,使用链式分解的方法,优化输出序列的概率。这个模型之所以叫端到端,是因为传统模型的全部参数都统一到神经网络的参数中,并且在训练过程中一起优化。传统的模型做不到这一点,传统的模型是更新声学模型acoustic model,但是其他模块不变。
4.模型算法介绍
下图是LAS模型的架构图。下面将分成五部分来介绍,第一,LAS网络基本框架介绍;第二,listen部分介绍;第三,attend and spell介绍;第四,learning学习部分介绍;第五,decoding和rescoring部分介绍。
一、LAS框架
模型的输入和输出分别为
x
x
x和
y
y
y:
x
=
(
x
1
,
x
2
,
.
.
.
,
x
n
)
x=(x_1,x_2,..., x_n)
x=(x1,x2,...,xn)
y
=
(
[
s
o
s
]
,
y
1
,
y
2
,
.
.
.
,
y
s
,
[
e
o
s
]
)
y=([sos],y_1,y_2,...,y_s,[eos])
y=([sos],y1,y2,...,ys,[eos])
其中
y
i
∈
{
a
,
b
,
.
.
.
,
z
,
0
,
1
,
.
.
.
,
9
,
[
s
p
a
c
e
]
,
[
c
o
m
m
a
]
,
[
p
e
r
i
o
d
]
,
[
a
p
o
s
t
r
o
p
h
e
]
,
[
u
n
k
]
}
y_i\in \{ a,b,...,z,0,1,...,9,[space],[comma],[period],[apostrophe],[unk] \}
yi∈{a,b,...,z,0,1,...,9,[space],[comma],[period],[apostrophe],[unk]},
y
i
y_i
yi是输出序列的字符。[sos]、[eos]分别是句子开头和结尾的标志,[unk]表示未知标志。
LAS根据前面输出的字符
y
<
i
y_{<i}
y<i和输入信号
x
x
x,使用概率的链式规则,将输出字符
y
i
y_i
yi建模成条件分布。
P
(
y
∣
x
)
=
∏
i
P
(
y
i
∣
x
,
y
<
i
)
(1)
P(y|x)=\prod_i P(y_i |x,y_{<i})\tag{1}
P(y∣x)=i∏P(yi∣x,y<i)(1)
LAS模型主要包括两个子模块:listener和speller。
listener是声学模型的编码器,主要执行Listen操作,这个操作主要将原始信号
x
x
x转换为高层次的表示
h
=
(
h
1
,
.
.
.
,
h
U
)
\boldsymbol h=(h_1,...,h_U)
h=(h1,...,hU)且满足
U
≤
T
U\leq T
U≤T。
speller是一个基于注意力机制的编码器,只要执行操作AttendAndSpell,这个操作将
h
\boldsymbol h
h作为输入,计算一个概率分布:
h
=
L
i
s
t
e
n
(
x
)
(2)
\boldsymbol h={\rm Listen}(x)\tag{2}
h=Listen(x)(2)
P
(
y
i
∣
x
,
y
<
i
)
=
A
t
t
e
n
d
A
n
d
S
p
e
l
l
(
y
<
i
,
h
)
(3)
P(y_i|x,y_{<i})={\rm AttendAndSpell}(y_{<i},\boldsymbol h)\tag{3}
P(yi∣x,y<i)=AttendAndSpell(y<i,h)(3)
这两个模块如上图所示。
二、Listen
Listen操作使用金字塔型的BLSTM,记为pBLSTM,这个结构可以
h
\boldsymbol h
h的长度从
T
T
T减到
U
U
U,因为
T
T
T是输入信号的长度,输入信号可以很长。本文设置的结构是每层减少2倍。传统的BLSTM,当在第
i
i
i时间第
j
j
j层时,输出为:
h
i
j
=
B
L
S
T
M
(
h
i
−
1
j
,
h
i
j
−
1
)
(4)
h^{j}_{i}={\rm {BLSTM}}(h^{j}_{i-1},h^{j-1}_{i})\tag{4}
hij=BLSTM(hi−1j,hij−1)(4)
在pBLSTM中,其表达式如下:
h
i
j
=
p
B
L
S
T
M
(
h
i
−
1
j
,
[
h
2
i
j
−
1
,
h
2
i
+
1
j
−
1
]
)
(5)
h^{j}_{i}={\rm pBLSTM}(h^{j}_{i-1},[h^{j-1}_{2i},h^{j-1}_{2i+1}])\tag{5}
hij=pBLSTM(hi−1j,[h2ij−1,h2i+1j−1])(5)
在这个模型中,本文主要使用了3层的模型,所以模型减少了8倍。所以,注意力机制可以在更小的空间搜索相关信息。另外,深度模型可以学习数据的非线性表示。
三、Attend and Spell
在每一步的操作中,模型根据目前已经预测出的字符,来估计下一个字符概率分布。输出字符
y
i
y_i
yi的分布与解码状态
s
i
s_i
si和上下文向量context vector(
c
i
c_i
ci)有关。解码状态
s
i
s_i
si与三个参数有关,分别为:前一个解码状态
s
i
−
1
s_{i-1}
si−1、前面预测的字符
y
i
−
1
y_{i-1}
yi−1、前一个上下文变量
c
i
c_i
ci。上下文向量
c
i
c_i
ci根据注意力机制计算得到。
c
i
=
A
t
t
e
n
t
i
o
n
C
o
n
t
e
x
t
(
s
i
,
h
)
(6)
c_i={\rm {AttentionContext}}(s_i,\boldsymbol h) \tag{6}
ci=AttentionContext(si,h)(6)
s
i
=
R
N
N
(
s
i
−
1
,
y
i
−
1
,
c
i
−
1
)
(7)
s_i={\rm {RNN}}(s_{i-1},y_{i-1},c_{i-1}) \tag{7}
si=RNN(si−1,yi−1,ci−1)(7)
P
(
y
i
∣
x
,
y
<
i
)
=
C
h
a
r
a
c
t
e
r
D
i
s
t
r
i
b
u
t
i
o
n
(
s
i
,
c
i
)
(8)
P(y_i|x,y_{<i})={\rm{CharacterDistribution}}(s_i,c_i)\tag{8}
P(yi∣x,y<i)=CharacterDistribution(si,ci)(8)
其中,CharacterDistribution是MLP关于字符的输出,RNN是2层LSTM。
在时间
i
i
i中,注意力机制(文中用AttentionContext表示)产生一个上下文向量
c
i
c_i
ci,这个上下文向量可以从声学模型获取产生下一个字符的信息。注意力模型是内容相关,解码器状态
s
i
s_i
si与高层特征表示
h
u
h_u
hu匹配,可以产生注意力因子
α
i
\alpha_i
αi,用参数
α
i
\alpha_i
αi对向量
h
u
h_u
hu进行线性压缩,即可得到上下文向量
c
i
c_i
ci。
具体而言,在时间
i
i
i里,AttentionContext函数使用参数
h
u
h_u
hu和
s
i
s_i
si来计算标量波能量scalar energy(记为
e
i
,
u
e_{i,u}
ei,u),其中
h
u
∈
h
h_u\in \rm{\boldsymbol h}
hu∈h。然后,标量波能量
e
i
,
u
e_{i,u}
ei,u使用softmax函数,转换为概率分布。softmax概率当做混合权重,用于将高层特征
h
u
h_u
hu压缩成上下文向量
c
i
c_i
ci,如下所示:
e
i
,
u
=
<
ϕ
(
s
i
)
,
ψ
(
h
u
)
>
(9)
e_{i,u}=<\phi (s_i),\psi (h_u)>\tag{9}
ei,u=<ϕ(si),ψ(hu)>(9)
α
i
,
u
=
e
x
p
(
e
i
,
u
)
∑
u
′
e
x
p
(
e
i
,
u
′
)
(10)
\alpha_{i,u}=\frac{exp(e_{i,u})}{\sum_{u'}exp(e_{i,u'})}\tag{10}
αi,u=∑u′exp(ei,u′)exp(ei,u)(10)
c
i
=
∑
i
α
i
,
u
h
u
(11)
c_i=\sum_i \alpha_{i,u} h_u\tag{11}
ci=i∑αi,uhu(11)
其中,
ϕ
\phi
ϕ和
ψ
\psi
ψ是多层感知机网络,训练后,
α
i
\alpha_i
αi分布比较集中,只关注小部分
h
\boldsymbol h
h中的帧;上下文向量
c
i
c_i
ci可以看成是
h
\boldsymbol h
h的权重向量。
四、Learning
本文训练的目的是概率的对数最大,如下所示:
θ
~
=
m
a
x
θ
∑
i
l
o
g
P
(
y
i
∣
x
,
y
~
<
i
;
θ
)
(12)
\widetilde \theta=\mathop{max}\limits_{\theta} \sum_i log P(y_i|x,\widetilde y_{<i};\theta)\tag{12}
θ
=θmaxi∑logP(yi∣x,y
<i;θ)(12)
其中,
y
~
i
−
1
\widetilde y_{i-1}
y
i−1是前一个字符的ground truth或从模型随机抽取的一个字符。
五、解码和重打分
在推理阶段,本文希望在已知声学输入的情况下,找到最合适的字符序列:
y
^
=
a
r
g
m
a
x
y
l
o
g
P
(
y
∣
x
)
(13)
\hat{y}=arg \mathop{max}\limits_{y} log P(y|x)\tag{13}
y^=argymaxlogP(y∣x)(13)
本文在实验中发现对于短的语音,模型有小的偏移,所以,使用字符的数量和语言模型的概率
P
L
M
(
y
)
P_{LM}(y)
PLM(y),对概率进行归一化:
s
(
y
∣
x
)
=
l
o
g
P
(
y
∣
x
)
∣
y
∣
c
+
λ
l
o
g
P
L
M
(
y
)
(14)
s({\rm{y|x}})=\frac{log P({\rm{y|x}})}{{|{\rm y}|}_c}+\lambda log P_{LM}({{\rm{y}}}) \tag{14}
s(y∣x)=∣y∣clogP(y∣x)+λlogPLM(y)(14)
λ
\lambda
λ是语音模型的权重。