paraformer: fast and accuratetransformer for non-autoregressive end-to-end speech recognition
论文下载
摘要
目前asr常用的transformer模型虽然效果比较好,但是因为引入了自回归的解码器,所以计算相对效率低一些。为了加速推理,设计了非自回归模型并行生成识别结果,比如单步自回归模型。然而由于输出标签之间的独立性假设,单步自回归模型的效果相比自回归模型会差一些。对于提升单步非自回归模型来讲一共有两个挑战:第一个挑战是准确地预测输出标签的个数并提取隐变量;第二个挑战是增强输出标签间的非独立性建模。 为了解决上述两个挑战,作者提出了一个快速准确的并行transformer模型,标记为paraformer。该模型属于单步非自回归模型。
1. paraformer使用基于cif的predictor预测输出标签的个数并产生隐变量;(借鉴文献【18】)
2. glm sampler用于产生语义向量增强非自回归模型对上下文的建模能力;(借鉴文献【19】)
3. 最后作者设计了一个策略产生负例,并用mwer损失训练使模型的识别能力进一步提升。(借鉴文献【20】)
在公开的aishell-1、aishell-2和工业级2w小时任务上的实验结果显示,paraformer可以获得和当前最优自回归模型相当的识别效果,但是可以提速10倍+。
介绍
端到端语音识别效果已经超过了传统的层级系统。主要有三种流行的e2e架构:ctc、rnn-t、aed。其中aed在序列到序列建模中具有统治性地位,因为其识别准确率高,比如transformers和conformers。虽然语音识别效果好,但是自回归模型比如aed模型需要一个一个地生成识别标签。因此,解码器的计算比较低效,随着输出序列的长度增加解码耗时线性增加。为了提升效率加速推理,许多研究【文献6~8】提出了非自回归模型并行输出识别结果。
基于推理时需要的迭代次数,非自回归模型可以分为单步式非自回归模型和迭代式非自回归模型。a-fmlm【文献9】是单步自回归模型的最早尝试,根据未被遮蔽的标签去预测遮蔽的标签。识别性能受到需要预测目标序列长度的影响。为了解决这个问题,mask-ctc和其变种提出使用ctc的解码结果增强解码的输入【文献10-12】。最近,出现了单步非自回归模型用来解决上述的限制【文献13-17】。这些模型通过去掉时间依赖同时生成输出序列。 虽然单步非自回归模型可以显著提升推理速度,但是他们的识别性能相比自回归模型差一些,尤其是在大规模数据集上。
前面提到的单步非自回归模型主要关注如何预测输出标签的个数和准确提取隐变量。和机器翻译通过predictor预测输出标签个数相比,asr预测输出标签个数确实比较难,因为有很多的潜在影响因素,比如说话人的语速、静音、噪音。另一方面,经过作者的观察和分析,单步非自回归模型相比自回归模型具有更多的替换错误,如下图1。作者认为缺少上下文依赖信息导致预测标签个数准确率差不多,但替换错误上升明显(ar和vanilla nar比较),尤其是单步自回归模型的条件独立假设。另外,所有的非自回归模型都是在学术基准阅读音频上实验的,并没有验证这些模型在工业基准数据上的效果。这篇论文的目标是提升单步非自回归模型的识别效果,使其达到和自回归模型相同的水准,并在大规模工业级数据上验证。
文章提出了一个又快又准的并行transformer模型,可以克服上面提到的两个挑战。首先,不像前面的基于ctc的工作,作者提出了使用基于cif的predictor网络评估目标长度并产生隐变量。对于第二个挑战,作者设计了基于glm的sampler模块增强非自回归解码器对输出上下文的建模能力。这个工作受到了机器翻译工作的启发。作者另外设计了一个包含负例的策略,利用mwer损失指导模型学习提升模型性能。
-
实验结果
- aishell1 178h 5.2%
- aishell2 1000h 6.19%
超过其它的非自回归模型方法,接近自回归模型效果。没有使用语音模型/无监督预训练。
paraformer是第一个在性能上可以和自回归模型媲美,并且在大规模数据集上相比自回归模型有10倍+的推理速度提升。
方法
整体框架
如上图所示,整个框架包含五个模块:encoder、 predictor、sampler、decoder、loss function。其中encoder和自回归模型的encoder一样,本文使用san-m和ffn(【文献21】),也可以使用conformer等结构。predictor用于生成声学特征指导解码。sampler模块使用声学特征和标签特征生成语义特征。decoder和自回归解码器相同,只不过这里是双向解码器。解码器包含多个san-m、fnn和cross mha模块。除了ce loss,还会使用mae loss训练predictor,mwer损失也一起参与模型训练。
整个流程阐述:
输入音频为x,长度为t;音频对应的文本标签为y,长度为n。encoder的输入为x,输出为h。predictor的输入为h,输出为预测的输出标签长度n’并生成声学向量ea。第一轮解码decoder的输入为h和ea,输出为y’。图中红色虚线pass1标记部分表示输入ea,但是并不对这个输入进行反向传播学习。第二轮解码前会首先经过sampler模块。sampler模块在声学向量ea和输出标签向量ec之间进行采样得到语义向量es。其中char指的是标签y。采样过程依赖y和y’之间的距离。第二轮解码decoder的输入为h和es,输出为y’‘,这次进行反向传播学习。此次反向传播学习指导decoder学习上下文语音信息,同时也会指导predictor和encoder的学习。sampler使用y’进行距离计算不会进行反向传播学习。最后输出的y’'会被采样为mwer训练生成负例候选。使用n和n’计算mae。mwer、mae和ce loss一起作为loss进行训练。
**推理时,sampler模块是不激活的,并且双向并行解码器只使用声学向量ea和隐向量h通过一轮输出最终的预测结果。**尽管decoder在每次训练时会前向推理两次,但是因为在推理时只进行了一次所以并不会使计算复杂度变大。
predictor
predictor由两个卷基层组成,输出的float weight
α
\alpha
α在0~1之间。作者通过累计此权重预测输出标签的长度。maeloss定义为:
其实就是将所有
α
\alpha
α进行了累加,加起来的长度就是预测的长度。loss就是真实长度和预测长度差的绝对值。作者引入了cif机制产生声学向量。cif是一个软的(非0/1,可以是小数)和单一对齐的,在aed模型中作为流式解决方案的实现【文献18】。声学向量的生成时,cif对权重
α
\alpha
α进行累计,如果超过了设定的阈值
β
\beta
β,说明某一个声学向量的边界确定了。对边界之内的向量h根据权重
α
\alpha
α进行缩放累计即可得到某一个声学向量。此过程重复直到结尾,可得到所有的声学向量。如下图所示:
在训练时权重
α
\alpha
α会根据n进行缩放(比如累计的
α
\alpha
α为n’,使用n/n’对所有的
α
\alpha
α进行缩放,使用缩放后的
α
\alpha
α计算声学向量ea。缩放是为了让的ea维度和ec的维度保持一致),但是在推理时无法进行缩放,导致训练和推理之间存在不一致。为了弥补这个不一致,作者提出了使用动态阈值
β
\beta
β而不是固定阈值。计算公式如下:
下面是一个向上取整,所以分子小于等于分母,阈值
β
<
=
1
\beta<=1
β<=1。
sampler
在普通的单步非自回归模型中,优化的目标为:
l
n
a
t
=
∑
n
=
1
n
l
o
g
p
(
y
n
∣
x
;
θ
)
\mathcal{l}_{nat}=\sum_{n=1}^{n}logp(y_n|x;\theta)
lnat=n=1∑nlogp(yn∣x;θ)然而,正如上面所说的,单步非自回归模型中的输出标签独立性假设导致模型识别效果不如自回归模型。glm模块的loss定义如下:
l
g
l
m
=
∑
y
′
′
∈
g
l
m
(
y
,
y
′
)
ˉ
l
o
g
p
[
y
n
′
′
∣
g
l
m
(
y
,
y
′
)
,
x
;
θ
]
\mathcal{l}_{glm}=\sum_{y''\in \bar{\mathbb{glm}(y,y')}}log~p[y_n''|\mathbb{glm}(y,y'), x; \theta]
lglm=y′′∈glm(y,y′)ˉ∑log p[yn′′∣glm(y,y′),x;θ]
其中
g
l
m
(
y
,
y
′
)
\mathbb{glm}(y,y')
glm(y,y′)表示sampler模块在
e
a
e_a
ea和
e
c
e_c
ec中选中
e
c
e_c
ec替换
e
a
e_a
ea对应的
y
′
′
y''
y′′中token的集合;
g
l
m
ˉ
(
y
,
y
′
)
\bar{\mathbb{glm}}(y,y')
glmˉ(y,y′)表示sampler模块在
e
a
e_a
ea和
e
c
e_c
ec中未选中
e
c
e_c
ec替换
e
a
e_a
ea对应的
y
′
′
y''
y′′的token的集合;
g
l
m
(
y
,
y
′
)
\mathbb{glm}(y,y')
glm(y,y′)的定义如下:
g
l
m
(
y
,
y
′
)
=
s
a
m
p
l
e
r
(
e
s
∣
e
a
,
e
c
,
⌈
α
d
(
y
,
y
′
)
⌉
)
\mathbb{glm}(y,y')=sampler(e_s|e_a,e_c, \left \lceil \alpha d(y,y')\right \rceil)
glm(y,y′)=sampler(es∣ea,ec,⌈αd(y,y′)⌉) 上面公式的含义是从
e
c
e_c
ec中采样
⌈
α
d
(
y
,
y
′
)
⌉
\left \lceil \alpha d(y,y')\right \rceil
⌈αd(y,y′)⌉个向量替换对应位置的
e
a
e_a
ea,生成新的向量为
e
s
e_s
es。其中
α
\alpha
α是控制采样率的采样因子,越大表示使用
e
c
e_c
ec替换
e
a
e_a
ea的概率越大。该采样概率应该在最初模型效果不好时设置的稍微大一些,然后随着整个的训练过程的进行逐渐减小。为了达到这个目的,作者简单实用汉明距离,其定义为:
d
(
y
,
y
′
)
=
∑
n
=
1
n
(
y
n
≠
y
n
′
)
d(y,y')=\sum_{n=1}^{n}(y_n \neq y_n')
d(y,y′)=n=1∑n(yn=yn′)
也就是,最开始的时候模型学习不好,
d
d
d会比较大,当模型学习越来越好时,
d
d
d也逐渐减小。表示最开始训练时,使用较多的
e
c
e_c
ec替换
e
a
e_a
ea,也就是上下文信息更多和准确,减小模型的学习难度;当模型学习的越来越好时,使用较少的标签信息迫使模型进一步学习。
总结,sampler模块结合了标注标签向量
e
c
e_c
ec,实现方法是随机替换
e
a
e_a
ea中
⌈
α
d
(
y
,
y
′
)
⌉
\left \lceil \alpha d(y,y')\right \rceil
⌈αd(y,y′)⌉个向量生成新的含有语义的向量
e
s
e_s
es。训练并行decoder使用语义上下文
g
l
m
(
y
,
y
′
)
\mathbb{glm}(y,y')
glm(y,y′)预测目标标签
g
l
m
ˉ
(
y
,
y
′
)
\bar{\mathbb{glm}}(y,y')
glmˉ(y,y′),使模型学习输出标签之间的依赖关系。
loss function
一共定义了三个loss:ce、mae、mwer。训练时进行联合训练:
l
t
o
t
a
l
=
γ
l
c
e
+
l
m
a
t
+
l
w
e
r
r
n
(
x
,
y
∗
)
\mathcal{l}_{total}=\gamma\mathcal{l}_{ce} + \mathcal{l}_{mat} + \mathcal{l}_{werr}^{n}(x,y^*)
ltotal=γlce+lmat+lwerrn(x,y∗)
对于mwer,具体的计算公式如下:
l
w
e
r
r
n
(
x
,
y
∗
)
=
∑
y
i
∈
s
a
m
p
l
e
(
x
,
n
)
p
^
(
y
i
∣
x
)
[
w
(
y
i
,
y
∗
)
−
w
^
]
\mathcal{l}_{werr}^{n}(x, y^*)=\sum_{y_i\in sample(x,n)}\hat{p}(y_i|x)[\mathcal{w}(y_i,y^*)-\hat{w}]
lwerrn(x,y∗)=yi∈sample(x,n)∑p^(yi∣x)[w(yi,y∗)−w^]
非自回归模型使用贪婪搜索,所以只有一个输出路径。正如前面提到的,在使用mwer训练时作者使用负例采样策略通过随机遮蔽top1分值标签产生多个候选路径。
实验
实验设置
在aishell-1、aishell-2以及工业级2wh数据集上验证上述方法的效果。其中工业级的测试集有两个:普通30h、远场15h。具体的工业级语料介绍可以参考文献21和28。rtf的测试在nvidia tesla v100上完成。
aishell-1 & aishell-2 数据集
结果如上表格。在上述两个测试集上的测试都是在espnet框架上实现的,不包含lm和预训练模型。
aishell-1 的ar baseline参考文献15,效果在所有ar模型中是最好的(排除使用更多数据知识的模型)。因为作者当前的目标是通过模型结构提升模型效果而不是通过数据。普通的nar和paraformer的结构相同,但是没有sampler。
结论:
1. 普通nar的表现超过了其它的nar工作,比如文献15和文献12
2. 普通nar模型的表现比ar模型稍微差一些,因为缺乏了输出标签之间的上下文信息。
3. paraformer通过使用基于glm的sampler模块对普通nar模型增强,得到了和ar模型相近的识别表现。
4. paraformer模型在dev和test测试上的cer分别为:4.6%和5.2%,推理速度比ar基线模型快12倍。
aishell-2上的结论和aishell-1差不多。paraformer在test_ios测试集上cer为6.19%,推理速度快12倍;
就目前所知,这是nar模型在aishell-1和aishell-2上取得的最好识别结果。
工业级2wh数据集
结果如上表格所示,进行了多个扩展实验。动态
β
\beta
β表示2.2节中的动态阈值,ctc表示带有lm的dfsmn-ctc-smbr系统,参考文献32。rtf在opennmt上进行评估。
实验有两个模型,一个41m的一个63m的。ar基线模型中attention的维度为256,和文献21一致。这里的结论和前面有所不同。
结论
- 可以看到在大型数据集上,普通nar模型和ar模型的识别效果差距很大(aishell上差别较小)。
- 普通nar模型虽然和ctc都有输出标签独立假设限制,但是普通nar模型效果优于ctc效果。
- 普通nar模型结合glm时,效果提升。
- 当进一步结合mwer训练方法时,效果进一步提升。
- paraformer模型效果和ar模型效果很接近,差别在相对2%以内,但是推理速度提升10倍+。
- paraformer结合动态 β \beta β,效果进一步提升。因为相比固定阈值,动态阈值减少了推理和训练的不一致,更准确地提取了声学向量信息。
- 将模型变大时,得到了和前面相似的结论。paraformer相比普通nar模型效果提升;和ar模型效果相当,但是推理速度提升10倍+。
- paraformer-63m和ar transformer-41m模型相比较,尽管paraformer模型较大,但是paraformer推理速度更快。也就是说,在远场测试集上paraformer-63m模型相比ar transformer-41m模型,识别效果相对提升6.0%,并且推理速度提升7.4倍。 也就是,在实际生产中,可以通过使用较大的paraformer模型达到比ar模型更好的识别效果以及更快的推理速度。
对采样因子 α \alpha α的超参数测试结果参见上表格。和预期相同 α \alpha α变大时,模型效果变好,因为在训练时提供了更多的上下文信息;然而如果该参数太大会导致训练和测试不一致。基本上, α \alpha α在0.5~1.0之间的表现比较稳定。
讨论
- 在小型训练集上普通nar和ar模型的识别性能差别不大,但是在工业级大数据集上差距明显。这是第一个在大规模工业级数据上验证nar模型效果的研究。
- paraformer相比普通nar模型识别效果相对提升11%,和精细训练的ar模型效果相当。
分析:见文章第一张图。
普通nar模型相比ar模型,插入错误多一点,但是删除错误少一点。说明普通nar模型的predictor预测输出的标签个数较准确。然而替换错误比较多,侧面反应两者性能差距很大。作者认为这是由普通nar模型的条件独立假设造成的。paraformer模型相比普通nar模型替换错误下降很多,也暗示了识别效果提升很多。作者认为这是由于glm模块使nar模型学习到了标签之间的依赖关系。paraformer模型相比ar模型替换错误稍微多一些,也暗示着识别准确率稍微差一些。作者认为ar模型中基于lm的beam search解码扮演了很重要的角色,相比glm效果更好。为了减少这个性能差距,作者将在未来工作中在paraformer模型上结合外部语言模型。
结论
- 文章提出了一个单步nar模型paraformer。
- paraformer使用基于cif的predictor预测输出标签的个数并产生隐变量;(借鉴文献【18】)
- 改进cif使用动态 β \beta β阈值。
- glm sampler用于产生语义向量增强非自回归模型对上下文的建模能力;(借鉴文献【19】)
- 最后作者设计了一个策略产生负例,并用mwer损失训练使模型,使其识别能力进一步提升。(借鉴文献【20】)
- 在aishell-1 & aishell-2 数据集和大规模工业级数据上都验证了paraformer效果和当前最优的ar模型效果相当,但是推理速度提升超过10倍。
个人思考/疑问
- mwer loss没看懂,需要看文献20.
- char 的 embedding使用的torch.nn.embedding,直接学习嘛?还是预设值好的。
- 端到端语音识别中的embedding,例如wenet框架的token 的 embedding能不能使用nlp领域用文字训练得到的embedding,如果能的话为啥主流的不是这种的,这个embedding不比直接学习更好嘛?
- wenet的重打分架构,decoder能不能直接根据ctc n-best结果得到矫正的识别结果,相当于做矫正/纠错?
- paraformer能不能直接结合在当前的wenet框架中,使用conformer那套encoder,而不是san-m。从文章结论看,可以使用更大的模型训练paraformer,效果比之前的模型效果好,且推理速度快,是一个可以实践的方向。
- paraformer结构能不能和wenet重打分那套结合?pafaformer的输出替代ctc的那一支,然后再加上decoder部分的重打分。这样相当于有了两个decoder。按道理就是训练会慢,但是推理应该还好吧?可能可行。------》paraformer输出只有一个结果,重打分啥啊。。这个做不了。但是decoder可以作为纠错模型对结果进行纠错。
- 作者提出的在外面再结合一个语言模型应该是可行的。
发表评论