paraformer 论文 详解
论文:https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2206.08317
背景:近年来,随着端到端语音识别的流行,基于 Transformer 结构的语音识别系统逐渐成为了主流。然而,由于 Transformer 是一种自回归模型,需要逐个生成目标文字,计算复杂度随着目标文字数量而呈线性增加,限制了其在工业生产中的应用。
针对 Transoformer 模型自回归生成文字的低计算效率的缺陷,学术界提出了非自回归模型来并行地输出目标文字(如图1所示)。根据生成目标文字时的迭代轮数,非自回归模型分为:多轮迭代式与单轮非自回归模型。
图1 自回归模型与非自回归模型生成文字过程 [1]
迭代式非自回归模型,主要为 Mask-Predict 模式[2],训练时,将输入文字随机掩码,通过周边信息预测当前文字。解码时,采用多轮迭代的方式逐步生成目标文字;计算复杂度与迭代轮数有关(通常小于目标文字个数),相比于自回归模型,计算复杂度有所下降,但是解码需要多轮迭代的特性,限制了其在工业生产中的应用。相比于多轮迭代模型,单轮非自回归模型有着更加广阔的应用前景,可以通过单次解码获取全部目标文字,计算复杂度与目标文字个数无关,进而极大的提高了解码效率。然而,由于条件独立假设,单轮非自回归模型识别效果与自回归模型有着巨大的差距,特别是在工业大数据上。
对于单轮非自回归模型,现有工作往往聚焦于如何更加准确的预测目标文字个数,如较为典型的 Mask CTC[3],采用 CTC 预测输出文字个数,尽管如此,考虑到现实应用中,语速、口音、静音以及噪声等因素的影响,如何准确的预测目标文字个数以及抽取目标文字对应的声学隐变量仍然是一个比较大的挑战。
另外一方面,我们通过对比自回归模型与单轮非自回归模型在工业大数据上的错误类型(如图2所示,AR 与 vanilla NAR),发现相比于自回归模型,非自回归模型在预测目标文字个数(插入错误+删除错误)方面差距较小,但是替换错误显著的增加,我们认为这是由于单轮非自回归模型中条件独立假设导致的语义信息丢失。与此同时,目前非自回归模型主要停留在学术验证阶段,还没有工业大数据上的相关实验与结论。
总结:有两个问题,第一个是单轮非自回归模型效果不好,第二问题单轮非自回归需要字数的预测,受其他因素的影响,效果不好。
图2 在2万小时工业数据上自回归与非自回归模型错误类型统计
解决问题
为了解决上述问题,我们设计了一种具有高识别率与计算效率的单轮非自回归模型Paraformer。
1.针对第一个问题,我们采用一个预测器(Predictor)来预测文字个数并通过 Continuous integrate-and-fire (CIF) [4]机制来抽取文字对应的声学隐变量。
2.针对第二个问题,受启发于机器翻译领域中的 Glancing language model(GLM)[5],我们设计了一个基于 GLM 的 Sampler 模块来增强模型对上下文语义的建模。除此之外,我们还设计了一种生成负样本策略来引入 MWER[6] 区分性训练。
具体模型结构如图3所示,由 Encoder、Predictor、Sampler、Decoder 与 Loss function 几部分组成。
- Encoder 与自回归模型保持一致,可以为 Self-attention、SAN-M 或者 Conformer 结构。
- Predictor 为2层 DNN 模型,预测目标文字个数以及抽取目标文字对应的声学向量。基于 CIF 的 Predictor 来预测语音中目标文字个数以及抽取目标文字对应的声学特征向量。
- Sampler 为无可学习参数模块,依据输入的声学向量和目标向量,生产含有语义的特征向量。通过采样,将声学特征向量与目标文字向量变换成含有语义信息的特征向量,配合双向的 Decoder 来增强模型对于上下文的建模能力。
- Decoder 结构与自回归模型类似,为双向建模(自回归为单向建模)。
- Loss function 部分,除了交叉熵(CE)与 MWER 区分性优化目标,还包括了 Predictor 优化目标 MAE。基于负样本采样的 MWER 训练准则。
- 训练的流程,输入(X,Y)X是声学特征T帧,Y是正确label,字数N,通过encoder生成H,以及通过predictor使用cif预测字数N‘和N计算MAE(平均方差)loss,并且输出声学嵌入向量E_a,第一条路径:E_a和H生成Y’,不反向传播; 第二条路径:使用glm(浏览语言模型)思想, 通过y’(第一条路预测结果)和y(label)之间haming距离来计算采样数量,最终在E_a和E_c(label的char embedding)采样生成E_s(samtic embedding), 最终计算输出Y’‘,Y’‘_s使用计算CE loss, Y’'生成正负样本计算MWER loss。
def _sampler(self, encoder_out, encoder_out_mask, ys_pad, ys_pad_lens,
pre_acoustic_embeds):
device = encoder_out.device
B, _ = ys_pad.size()
tgt_mask = make_non_pad_mask(ys_pad_lens)
# zero the ignore id
ys_pad = ys_pad * tgt_mask
ys_pad_embed = self.embed(ys_pad) # [B, T, L]
with torch.no_grad():
decoder_out, _, _ = self.decoder(encoder_out, encoder_out_mask,
pre_acoustic_embeds, ys_pad_lens)
pred_tokens = decoder_out.argmax(-1)
nonpad_positions = tgt_mask
# 刚开始训练same_num的值比较小,需要依赖char embedding;
# 随着训练same_num逐渐变大,输入decoder的embedding会逐渐替换成acoustic embeeding;
same_num = ((pred_tokens == ys_pad) * nonpad_positions).sum(1)
input_mask = torch.ones_like(
nonpad_positions,
device=device,
dtype=tgt_mask.dtype,
)
for li in range(B):
target_num = (ys_pad_lens[li] -
same_num[li].sum()).float() * self.sampling_ratio
target_num = target_num.long()
if target_num > 0:
input_mask[li].scatter_(
dim=0,
index=torch.randperm(ys_pad_lens[li],
device=device)[:target_num],
value=0,
)
input_mask = torch.where(input_mask > 0, 1, 0)
input_mask = input_mask * tgt_mask
input_mask_expand = input_mask.unsqueeze(2) # [B, T, 1]
sematic_embeds = torch.where(input_mask_expand == 1,
pre_acoustic_embeds, ys_pad_embed)
图3 Paraformer模型结构图
Predictor模块
非自回归模型的一个核心问题是如何预测模型中 Decoder 需要输出的文字数目,以及如何为 Decoder 提供输入特征向量。之前关于非自回归的工作主要是采用 CTC 来进行预测字符数目以及输入向量。Paraformer 里我们采用基于2层 DNN 的 Predictor 网络。输出为0~1之间的浮点数,输出值累加来预测目标文字个数,通过 CIF 机制抽取声学特征向量(图4为CIF过程示例)。训练过程中采用 MAE 来监督 Predictor 模块学习。
图4 CIF过程示例
Sampler模块
非自回归模型的另一个核心问题是如何增强模型对上下文建模能力,现有的通用的单轮自回归模型 (vanilla-NAR) 为了高效计算效率,模型中 decoder 去除了显式的 Dependency 建模,从而在处理同音替换错误的能力会弱很多。从图2也可以看出 vanilla-NAR 相比于自回归(AR)的端到端语音识别系统在替换错误(substitution)上会明显增多。针对这个问题,Paraformer 借鉴来机器翻译里 GLM 工作,通过 Samper 模块来增强 Decoder 对于预测目标文字内在的 Dependency 的建模。Sampler 模块在解码时不工作,因此不会影响模型推理效率。
数学模型如下:
我们在学术公开数据集 AISHELL-1 与 AISHELL-2,以及2万小时工业大数据上验证了模型效果。在 AISHELL-1 与 AISHELL-2 上分别取得了 5.2% 与 6.19% 的 CER,据我们所知是目前公开发表论文中最优的非自回归模型。
在2万小时工业大数据上,取得了与自回归模型相近的结果,并具有10倍以上加速比。
Future work
Paraformer 模型在工业在数据上取得了与自回归模型类似的识别效果,计算效率提升 10 倍以上。在未来,我们将考虑利用海量文本预训练来进一步增强模型对上下文语义建模,提升模型识别效果。
部署的细节
1.特征提取
统一送chunk=600ms,不需要将第一chunk和其他chunk大小做区分,实现流式batch提取fbank特征;
2.lfr + cmvn + position_embedding
lfr(低帧率) :将特征进行下采样操作,每次计算之前需要拼接上一chunk一帧的特征;
cmvn:根据均值方差归一化;
postion_embedding:计算每帧的位置信息,每次需要在上一chunk的位置信息offset的基础下,进行计算;
由于lfr需要缓存上一chunk的帧做拼接操作,和position_embedding需要缓存位置信息offset, 以及cmvn是tensor的计算,就把这三个lfr,cmvn,position_embeding三个模块导出onnx模型,让triton去维护cache信息,减少自己维护缓存的错误,并方便batch计算。
3.cif search
(encoder.onnx+cif search) -> decoder.onnx -> greedy search
通过cif search 从encoder预测出文本长度;将对长度向量和encoder输出, 作为流式 decoder输入中,返回结果进行greedy search,得到最终的token;
由于cif search这个模块,是预测字数的,在静音情况下,字数长度是0,导致送到deocoder的声学特征会报错。
4.需要注意
chunk_size的配置比如:[5,10,5],这个是每次输入音频600ms,left 音频是300ms,right音频是300ms。解码时候,encoder是当前的送进来的600ms音频的hidden,但是再送到decoder【缓存是10】时候,真正解码的是音频是【历史300ms充当left context, 历史300ms+现在300ms充当当前解码结果,现在的300ms充当right context】,所以会绝对延迟300ms。
| 参考文献
[1] Y. Higuchi, N. Chen, Y. Fujita, et al. A comparative study on non-autoregressive modelings for speech-to-text generation[C].2021 IEEE Automatic Speech Recognition and Understanding Workshop (ASRU). IEEE, 2021: 47-54.
[2] M. Ghazvininejad, O. Levy, Y. Liu, et al. Mask-predict: Parallel decoding of conditional masked language models[J]. arXiv preprint arXiv:1904.09324, 2019.[3] Y. Higuchi, S. Watanabe, N. Chen, T. Ogawa, and T. Kobayashi,“Mask ctc: Non-autoregressive end-to-end ASR with CTC and mask predict,” 2020.[4] L. Dong and B. Xu, “CIF: Continuous integrate-and-fire for end-to-end speech recognition,” in ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2020, pp. 6079–6083.[5] L. Qian, H. Zhou, Y. Bao, M. Wang, L. Qiu, W. Zhang, Y. Yu, and L. Li, “Glancing transformer for non-autoregressive neural machine translation,” arXiv preprint arXiv:2008.07905, 2020.
[6] R. Prabhavalkar, T. N. Sainath, Y. Wu, P. Nguyen, Z. Chen, C.-C. Chiu, and A. Kannan, “Minimum word error rate training for attention-based sequence-to-sequence models,” in 2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2018, pp. 4839–4843.