WeNet自发布以来,日前已经成为最流行、最受欢迎的开源端到端语音识别工具。下图是几个典型端到端识别工具Github的Star History。

目前,WeNet已经支持了AIshell-1, AIshell-2, LibriSpeech三大数据集。WeNet本次更新中,集成对所有中文开源数据的支持,并开放预训练模型,参考Kaldi中的命名,我们将该数据集称之为multi_cn,意为多个中文开源数据集合。
本次更新中先使用了1385h的开源数据,具体代码位于https://github.com/mobvoi/wenet/tree/main/examples/multi_cn/s0,后期会持续集成所有可选、可用的开源中文数据的集成,敬请期待。
数据描述
训练共使用了1385小时开源的中文语音数据,所使用的数据如下表所示,表格中的所有数据均可在OpenSLR上免费下载。

过程描述
在下载好所有数据之后,首先将所有数据分别进行清洗,并将其中的英文转为大写,然后将所有数据整理为Kaldi的格式并进行合并,即生成wav.scp和text,这两个文件分别存储音频路径和对应的标注文本。为了生成输出所需要的词典,需要遍历全部标注文本,统计所有训练文本中出现的字作为中文的输出单元;考虑到文本中有部分英文数据,我们使用26个大写英文字母作为英文的输出单元,并将英文单词间的分隔符(空格)替换为特殊的字符(▁)并作为建模单元之一;最终使用统计得到的中文字、26个英文字母以及▁作为训练的词典,并在词典中加入训练所需的“
构建的模型使用Joint CTC/AED结构,一共包含3个部分,分别为Shared Encoder、CTC Decoder和Attention Decoder;Shared Encoder由12层Transformer encoder layer组成;CTC Decoder使用一层Linear layer将Shared Encoder的输出转化为词典大小计算CTC Loss;Attention Decoder包含了6层Transformer decoder layer,同样需要通过一层Linear layer将Transformer decoder layer的输出转为词典大小计算Attention Loss。训练过程中使用Torchaudio对输入的音频动态提取80维的FBank特征,并使用SpecAug对提取的特征进行增强。在输入Encoder之前通过Convolution SubSampling将帧率缩小4倍。最终使用Adam optimizer对CTC Loss和Attention Loss联合进行优化。

实验结果
我们对1385小时开源数据使用上述模型结构进行训练,使用24块GPU训练了220个epoch,训练结束之后选取dev集上loss最小的30个模型进行平均得到最终的预训练模型。该模型在各测试集上的表现如下。

从表中可以看出该模型在各个测试集上都有非凡的表现。模型开源之后欢迎大家根据往期文章用WeNet搭建Android语音识别系统学习如何将WeNet训练的模型部署在Android设备上。
总结
这次我们整理了1385小时开源的中文语音数据,并开源出我们用 WeNet 训练的模型,是希望为语音识别的应用、发展、开源略尽绵薄之力,也欢迎大家关注和使用 WeNet 项目,贡献自己的代码,一同推动语音识别的蓬勃发展!
