专栏首页CSDN博客基于Pytorch实现的MASR中文语音识别
原创

基于Pytorch实现的MASR中文语音识别

原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:基于Pytorch实现的MASR中文语音识别

MASR是一个基于端到端的深度神经网络中文普通话语音识别项目,本项目是基于masr 进行开发的。

本教程源码地址:https://github.com/yeyupiaoling/MASR.git

模型原理

MASR使用的是门控卷积神经网络(Gated Convolutional Network),网络结构类似于Facebook在2016年提出的Wav2letter,只使用卷积神经网络(CNN)实现的语音识别。但是使用的激活函数不是ReLU或者是HardTanh,而是GLU(门控线性单元)。因此称作门控卷积网络。根据我的实验,使用GLU的收敛速度比HardTanh要快。

  • 以下用字错误率CER来衡量模型的表现,CER = 编辑距离 / 句子长度,越低越好,大致可以理解为 1 - CER 就是识别准确率。

安装环境

  1. 执行requirements.txt安装依赖环境,在安装过程中出现Pyaudio安装错误,可以先执行sudo apt-get install portaudio19-dev这个安装,再重新执行。pip install -r requirements.txt
  2. 安装ctcdecode依赖,该库笔者只在Ubuntu执行成功过,Windows无法编译。git clone --recursive https://github.com/parlance/ctcdecode.git cd ctcdecode/third_party

由于网络问题,在安装过程中可能无法正常下载以下这两个文件,你需要自行下载这两个文件,并把它们解压到third_party目录下。

https://sites.google.com/site/openfst/home/openfst-down/openfst-1.6.7.tar.gz
https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.gz

然后回到该源码的根目录,编辑ctcdecode/build.py,注释以下4行代码。

# Download/Extract openfst, boost
download_extract('https://sites.google.com/site/openfst/home/openfst-down/openfst-1.6.7.tar.gz',
                 'third_party/openfst-1.6.7.tar.gz')
download_extract('https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.gz',
                 'third_party/boost_1_67_0.tar.gz')

在ctcdecode根目录下执行以下命令开始安装ctcdecode。

pip install .
  1. 安装warp-CTC,如果安装过程中出现c10/cuda/CUDAGuard.h: 没有那个文件或目录错误,将pytorch_binding/src/binding.cpp#include <c10/cuda/CUDAGuard.h>修改成#include "ATen/cuda/CUDAGuard.h"。git clone https://github.com/SeanNaren/warp-ctc.git cd warp-ctc mkdir build cd build cmake .. make cd ../pytorch_binding python setup.py install准备语言模型和数据集

语言模型

下载语言模型并放在lm目录下,下面下载的小语言模型,如何有足够大性能的机器,可以下载70G的超大语言模型,点击下载Mandarin LM Large ,这个模型会大超多。

git clone https://github.com/yeyupiaoling/MASR.git
cd MASR/
mkdir lm
cd lm
wget https://deepspeech.bj.bcebos.com/zh_lm/zh_giga.no_cna_cmn.prune01244.klm

语音数据集

  1. data目录下是公开数据集的下载和制作训练数据列表和字典的,本项目提供了下载公开的中文普通话语音数据集,分别是Aishell,Free ST-Chinese-Mandarin-Corpus,THCHS-30 这三个数据集,总大小超过28G。下载这三个数据只需要执行一下代码即可,当然如何想快速训练,也可以只下载其中一个。cd data/ python aishell.py python free_st_chinese_mandarin_corpus.py python thchs_30.py

如果开发者有自己的数据集,可以使用自己的数据集进行训练,当然也可以跟上面下载的数据集一起训练。自定义的语音数据需要符合一下格式:

  1. 语音文件需要放在dataset/audio/目录下,例如我们有个wav的文件夹,里面都是语音文件,我们就把这个文件存放在dataset/audio/。dataset/audio/wav/0175/H0175A0171.wav 我需要把空调温度调到二十度 dataset/audio/wav/0175/H0175A0377.wav 出彩中国人 dataset/audio/wav/0175/H0175A0470.wav 据克而瑞研究中心监测 dataset/audio/wav/0175/H0175A0180.wav 把温度加大到十八
  2. 然后把数据列表文件存在dataset/annotation/目录下,程序会遍历这个文件下的所有数据列表文件。例如这个文件下存放一个my_audio.txt,它的内容格式如下。每一行数据包含该语音文件的相对路径和该语音文件对应的中文文本,要注意的是该中文文本只能包含纯中文,不能包含标点符号、阿拉伯数字以及英文字母。
  3. 生成训练的数据列表和数据字典。python create_manifest.py python build_vocab.py

训练模型

执行train.py代码开始训练。

python train.py
  • train_manifest_path为训练数据列表路径。
  • dev_manifest_path每一轮评估的数据列表路径。
  • vocab_path数据字典路径。
  • save_model_path保存模型的路径。
  • epochs训练轮数。
  • batch_sizebatch size大小,最好使用默认的。

训练输出结果如下:

-----------  Configuration Arguments -----------
batch_size: 32
dev_manifest_path: dataset/manifest.dev
epochs: 1000
save_model_path: save_model/
train_manifest_path: dataset/manifest.train
vocab_path: dataset/zh_vocab.json
------------------------------------------------
[1/1000][0/415]	Loss = 3498.923828125
[1/1000][1/415]	Loss = 3244.679443359375
[1/1000][2/415]	Loss = 2989.6904296875
[1/1000][3/415]	Loss = 875.3290405273438
[1/1000][4/415]	Loss = 411.30633544921875

预测

本项目提供了三种预测方式,分别是通过音频路径识别infer_path.py,实时录音识别infer_record.py和提供HTTP接口识别infer_server.py,他们的公共参数model_path训练保存的模型路径,lm_path为语言模型路径,根据你的电脑性能,使用超大语言模型还是小的语言模型。

  • infer_path.py的参数wav_path为语音识别的的音频路径。
  • infer_record.py的参数record_time为录音时间。
  • infer_server.py的参数host为服务的访问地址,当为localhost时,本地访问页面,可以在浏览器chrome上在线录音,其他的地址可以使用选择音频文件上传获取预测结果。

模型下载

训练数据

下载链接

三个公开的数据集

参考资料

  1. https://github.com/nobody132/masr

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Tensorflow实现声纹识别

    本章介绍如何使用Tensorflow实现简单的声纹识别模型,首先你需要熟悉音频分类,没有了解的可以查看这篇文章《基于Tensorflow实现声音分类》。基于这个...

    夜雨飘零
  • 基于Tensorflow实现声音分类

    本章我们来介绍如何使用Tensorflow训练一个区分不同音频的分类模型,例如你有这样一个需求,需要根据不同的鸟叫声识别是什么种类的鸟,这时你就可以使用这个方法...

    夜雨飘零
  • 《PaddlePaddle从入门到炼丹》九——迁移学习

    在深度学习训练中,例如图像识别训练,每次从零开始训练都要消耗大量的时间和资源。而且当数据集比较少时,模型也难以拟合的情况。基于这种情况下,就出现了迁移学习,通过...

    夜雨飘零
  • 大文件分割、命名脚本 - Python

    工作中经常会收到测试同学、客户同学提供的日志文件,其中不乏几百M一G的也都有,毕竟压测一晚上产生的日志量还是很可观的,xDxD,因此不可避免的需要对日志进行分割...

    HoLoong
  • pandas速查表

    统计特征:https://zhuanlan.zhihu.com/p/82394380

    MachineLP
  • py12306:你的 12306 购票助手(支持集群,多账号,多任务购票)

    验证码可以本地识别,所用的模型和算法均来自 https://github.com/zhaipro/easy12306 十分感谢! 验证码识别已迁移到服务器进行识...

    良月柒
  • TensorFlow全新的数据读取方式:Dataset API入门教程

    作者:何之源 首发于知乎专栏:AI Insight 量子位 已获授权编辑发布 转载请联系原作者 Dataset API是TensorFlow 1.3版本中引入的...

    量子位
  • 【2019 NLP汇总】论文、博客、教程、工程进展全梳理(长文预警)

    2019 年对自然语言处理(NLP)来说是令人印象深刻的一年。本文将着重讲述一些 2019 年我在机器学习和自然语言处理领域有所见闻的重要事件。我会把重点主要放...

    zenRRan
  • 微信小程序环境下将文件上传到 OSS

    步骤 1: 配置 Bucket 跨域 客户端进行表单直传到 OSS 时,会从浏览器向 OSS 发送带有 Origin 的请求消息。OSS 对带有 Origin...

    达达前端
  • 查找jar地址

扫码关注云+社区

领取腾讯云代金券