开源 微软 语音识别_一个超容易上手的端到端开源语音识别项目--TensorflowASR
自己开了一个state-of-the-art的端到端语音识别项目,后续会不断更新和优化的。当前还处于一个开发阶段,可能存在一些bug,欢迎大家使用并反馈bug。有什么意见建议可以在issue或者在这里提。代码地址见下。最近没有时间更新代码了,开了一个技术交流群,大家一起来建设吧。欢迎加入。TensorflowASR简介:该项目集成了当前业界最新的语音识别结构,包括CTC、RNN-Transduce
自己开了一个state-of-the-art的端到端语音识别项目,后续会不断更新和优化的。
当前还处于一个开发阶段,可能存在一些bug,欢迎大家使用并反馈bug。
有什么意见建议可以在issue或者在这里提。代码地址见下。
最近没有时间更新代码了,开了一个技术交流群,大家一起来建设吧。欢迎加入。
TensorflowASR
简介:
该项目集成了当前业界最新的语音识别结构,包括CTC、RNN-Transducer、Listen Attention and Spell。使用简单,容易上手。
特点:
- tensorflow的音频Mel特征提取层,用以支持跨平台的端到端集成
参照librosa的mel特征提取逻辑:
librosa:
mel layer:
- 实时响应性能
- C++接口调用方案
已支持的模型:
Mel_layer+
- Conformer
- +CTC
- +Transducer
- +LAS
- DeepSpeech2
- ESPNet
- Transformer
- O2O-Encoder-Decoder
- O2O-Encoder
- Typic
声学模型
Conformer模型为google 今年5月发表的论文中提及:
https://arxiv.org/abs/2005.08100arxiv.org训练过程中会采取Data Aguments,包括:
- 加噪
- 改变pitch
- 改变速度
- 遮掩信号
语言模型
1.音素->汉字是一对一关系模型:
· O2O-Encoder-Decoder:
包含Transformer完整结构
· O2O-Encoder
不包含Transformer的Decoder,轻量级模型
2.音素->汉字非一一对应关系:
· Typic Transformer,经典的结构。
语言模型训练时会采用bert来辅助训练,以提高模型性能:
https://zhuanlan.zhihu.com/p/165071319zhuanlan.zhihu.com性能测试(基于Python版本)
AM CPU 速度测试,4.1秒左右的音频:
|CTC |Transducer |LAS |
|---------|------------|--------|
|150ms |350ms |280ms |
LM CPU速度测试 ,12个字的转换:
|O2O-Encoder-Decoder|O2O-Encoder|Encoder-Decoder|
|--------------------------|---------------|-------------------|
| 100ms| 20ms| 300ms|
代码地址:
https://github.com/Z-yq/TensorflowASRgithub.com更新进展:
2020/12/1:
更新一个自动打标点的语言模型。
链接: https:// pan.baidu.com/s/1umwMP2 nIzr25NnvG3LTRvw
提取码:7ctd
2020/10/30:
更新预训练模型 Conformer的CTC声学模型。该预训练模型采用了mel_layer的结构,并且mel_layer关闭了训练。
利用aishell2所有数据训练10个epoch后。
于aishell test测试集上的表现为 CER
phoneme 8.1%
链接: https:// pan.baidu.com/s/12hsjq- lWudeaQzQomV-PDw 提取码:ifm6 模型大小:46M
2020/10/27:
- 添加了C++调用Demo,详见CppInference目录。
- 修改了RNNT的预测函数以支持C++调用(不影响之前版本的模型加载)。
2020/10/23:
更新预训练模型 Conformer的CTC声学模型。该预训练模型采用了mel_layer的结构,并且mel_layer开启了训练。
利用aishell2所有数据训练10个epoch后。
于aishell test测试集上的表现为 CER
phoneme 9.9%
链接: https:// pan.baidu.com/s/1sh2bUm 1HciE6Fu7PHUfRGA 提取码:jntv 模型大小46M
2020/10/21:
- 修正am的predict函数功能
- 添加一个完整的推理调用示例,具体参见run-test.py文件
2020/10/14:
- 修正语言模型的训练bug
- 更新一个语言模型的对比实验结果
利用aishell2所有文本数据训练10000步,于aishell test测试集上的表现为CER:
TransformerO2OED 6.2%
Transformer 8.6% (应该还未完全收敛,错误还包括 del和ins)
TransformerO2OED: 链接: https:// pan.baidu.com/s/1acvCRp S2j16dxLoCyToB6A 提取码:jrfi Transformer 链接: https:// pan.baidu.com/s/1W3HLNN GL3ceJfoxb0P7RMw 提取码:qeet
2020/10/13:
更新 transformer的O2O结构的语言模型。
利用aishell2所有文本数据训练98000步,于aishell test测试集上的表现为CER:
txt 4.4%
链接: https:// pan.baidu.com/s/1lyqHGa cYd7arBrJtlTFdTw 提取码:kw0y
2020/10/12:
更新预训练模型 Conformer的RNN-T声学模型。该预训练模型采用了mel_layer的结构,并且mel_layer开启了训练。
利用aishell2所有数据训练10个epoch后。
于aishell test测试集上的表现为 CER
phoneme 9.7%
链接: https:// pan.baidu.com/s/1bdqeLD BHQ_XmgNuUr6mflw 提取码:fqvf 模型大小 61M
2020/9/29:
更正了RNN-T结构的功能性,之前的结构存在一定的偏差。当前已经能够正确解码了。
更正了RNN-T结构的预测方法。具体为:
其decoder从X1遍历至Xt过程中,随着浏览过程中逐一生成token,当遇到生成null时decoder的LSTM应当舍去当前的状态,保持最后一个token时的状态,继续往下浏览解码。
由此看见,RNN-T更加适合一对一的流式解码(比如边缘设备的解码服务),并不适合大batch的识别任务。
2020/9/23:
更新一个预训练模型,MultiTask的方法,利用aishell2所有数据训练10个epoch后。
于aishell test测试集上的表现为 CER
中文 10.5%
phoneme 8.3%
链接: https:// pan.baidu.com/s/1nDDqcJ XBbpFJASYz_U8FfA 提取码:ucqf
2020/9/14:
- 添加mel_layer,计算规则参照librosa,支持训练哦,支持Spectorgram和Melspectrogram两种特征
- 所有结构接上mel_layer
- 结构更加像端到端形式,一个pb文件即完成整个任务。
- 开关在am_data.yml里面,建议数据量小的情况下train设置为false,
use_mel_layer: True
mel_layer_type: Spectrogram #Melspectrogram
trainable_kernel: True #support train model
2020/9/2:
- 添加多任务的eval脚本
- 修复LAS 的stop_loss功能不正确问题
- 替换CTC的 tf.nn.ctc_loss 为 tf.keras.bakcend.ctc_batch_cost
发现tf.nn.ctc_loss 并不能发挥正确的作用(存疑),使用keras的后端的loss进行替换。 需要使用CTC结构时,确保yml文件里 decoder_config中的blank_at_zero为False。
2020/8/28:
- 添加多任务识别结构
说明:采用ConformerLAS的结构,将一些层的输出接CTC,并指向一个训练任务。目前支出3个任务,分别是:①英文字母 ②声韵母 ③拼音 ,最后LAS的Decoder以中文为目标进行训练。多任务训练的好处是能够抑制数据的噪声,并且能够更好地将梯度传到最顶层。
- 修复tf.data.Datasets 在提取bert特征报错
- 修复一些bug(我就是bugs maker。。。)
2020/8/25:
- 支持多GPU训练,默认为使用全部GPU。可以用指令进行选择设备,如:
CUDA_VISIBLE_DEVICES=0,1,2 python train_am.py ……
- 使用tf.data.Dataset进行数据load
2020/8/21:
- 添加ESPNet模型(略有修改结构)
- 添加Tester,先在am_data.yml/lm_data.ym里面修改eval_list即可,eval_list格式相同于train_list。目前有SERCER两个指标并显示SUB/INS/DEL情况。
python eval_am.py --data_config ./configs/am_data.yml --model_config ./configs/conformer.yml
- 修复一些bugs(遥遥无期的解BUG之路。。。)
2020/8/19:
- 所有结构支持批量解码,当服务集成在服务器时,可能需要此功能
- 更改了Transducer的训练和预测方式,使其更加的可控,并且速度提升80%,现在4.1秒音频只需110ms
2020/8/16:
- 添加DeepSpeech2模型
- 所有结构支持转至pb文件
- CTC结构支持转TFLite
- 修复一些已发现的bugs
更多推荐
所有评论(0)