开源 微软 语音识别_一个超容易上手的端到端开源语音识别项目--TensorflowASR

自己开了一个state-of-the-art的端到端语音识别项目,后续会不断更新和优化的。

当前还处于一个开发阶段,可能存在一些bug,欢迎大家使用并反馈bug。

有什么意见建议可以在issue或者在这里提。代码地址见下。

最近没有时间更新代码了,开了一个技术交流群,大家一起来建设吧。欢迎加入。

e49846e13941188539b735edbe217516.png

TensorflowASR
简介:

该项目集成了当前业界最新的语音识别结构,包括CTC、RNN-Transducer、Listen Attention and Spell。使用简单,容易上手。

58231103d7e942d1fae6796542aeeb0c.png
CTC

1af006f7db70077871e1d0b8b79125c2.png
RNN-Transducer

c4d1bdabc748f98275d5ca3e36fb7eae.png
Listen Attention and Spell

特点:

  • tensorflow的音频Mel特征提取层,用以支持跨平台的端到端集成

参照librosa的mel特征提取逻辑:

librosa:

881e663891ad025eada91c58ed646ee0.png

mel layer:

32babd052e6cfad2677ebe6a41574915.png
  • 实时响应性能
  • C++接口调用方案

已支持的模型

Mel_layer+

  • Conformer
    • +CTC
    • +Transducer
    • +LAS
  • DeepSpeech2
  • ESPNet
  • Transformer
    • O2O-Encoder-Decoder
    • O2O-Encoder
    • Typic

声学模型

Conformer模型为google 今年5月发表的论文中提及:

https://arxiv.org/abs/2005.08100​arxiv.org

训练过程中会采取Data Aguments,包括:

  1. 加噪
  2. 改变pitch
  3. 改变速度
  4. 遮掩信号

语言模型

1.音素->汉字是一对一关系模型:

· O2O-Encoder-Decoder:

包含Transformer完整结构

· O2O-Encoder

不包含Transformer的Decoder,轻量级模型

2.音素->汉字非一一对应关系:

· Typic Transformer,经典的结构。

语言模型训练时会采用bert来辅助训练,以提高模型性能:

https://zhuanlan.zhihu.com/p/165071319​zhuanlan.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/TensorflowASR​github.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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值