专栏首页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 的中文语音识别模型 | CSDN博文精选

    目前网上关于tensorflow 的中文语音识别实现较少,而且结构功能较为简单。而百度在PaddlePaddle上的 Deepspeech2 实现功能却很强大,...

    AI科技大本营
  • 基于PyTorch实现MNIST手写字识别

    本篇不涉及模型原理,只是分享下代码。想要了解模型原理的可以去看网上很多大牛的博客。

    Awesome_Tang
  • 基于i.MX RT的语音识别方案

    “AI+IoT”将是未来的风口,各种应用和商机将成井喷式增长,国内外各大互联网巨头早已提前布局AI+IoT的战略,这同时也是恩智浦的核心战略之一。AI+IoT技...

    刘盼
  • 语音识别开源工具PyTorch-Kaldi:兼顾Kaldi效率与PyTorch灵活性

    杰出的科学家和工程师们一直在努力地给机器赋予自然交流的能力,语音识别就是其中的一个重要环节。人类对语音识别技术的研究从上世纪 50 年代开始就未曾停止。在长期的...

    机器之心
  • NLP 民工的乐园

    它几乎最全的中文 NLP 资源库,很多包非常有趣,也很实用,可以完全满足大家的收藏癖,如果有帮助,也请分享给你的朋友们。

    somenzz
  • [语音识别] 06 基于DNN-HMM的语音识别系统

    MachineLP
  • PyTorch+Kaldi、专注E2E语音识别,腾讯AI Lab开源轻量级语音处理工具包PIKA

    Kaldi 是一个开源的语音识别系统,由 Daniel Povey 主导开发,在很多语音识别测试和应用中广泛使用。但它依赖大量脚本语言,且核心算法是用 C++ ...

    磐创AI
  • 从零开始搭建一个语音对话机器人

    最近在研究语音识别方向,看了很多的语音识别的资料和文章,了解了一下语音识别的前世今生,其中包含了很多算法的演变,目前来说最流行的语音识别算法主要是依赖于深度学...

    好好学java
  • Facebook万字长文:AI模型全部迁移至PyTorch框架

    PyTorch自2017年推出以来,就迅速占领GitHub热度榜榜首,一度有赶超Tensorflow的趋势。

    代码医生工作室
  • 基于Tensorflow的VCTK语音识别例子测试

    语音识别是深度学习早先攻克的几个领域之一。传统的基于HMM等的语音识别精度一直比较受限。但是深度学习还是给语音识别的精度带来了一个飞跃性的提高。本文在网上找了段...

    sparkexpert
  • 基于HMM的语音识别搭建(未用HTK)

    1.最近研究语音识别,就顺便研究了一下隐马尔科夫链。 2.其中核心代码为: 3.训练样本数据集,请联系作者。

    乐说科技
  • 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)

    项目地址:https://github.com/bharathgs/Awesome-pytorch-list

    zenRRan
  • 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)

    项目地址:https://github.com/bharathgs/Awesome-pytorch-list

    机器之心
  • 语音识别如何实现:一个工具,3种方法教你语音识别成文字

    随着手机多项黑科技功能的加入,越来越多的人喜欢使用手机来完成一些办公类的工作,比如:无线投屏、数据传输、语音转文字等等,这其中语音转文字的需求最大,也是困扰大家...

    鱼儿说科技
  • PyTorch高级实战教程: 基于BI-LSTM CRF实现命名实体识别和中文分词

    前言:实测 PyTorch 代码非常简洁易懂,只需要将中文分词的数据集预处理成作者提到的格式,即可很快的就迁移了这个代码到中文分词中,相关的代码后续将会分享。

    磐创AI
  • NVIDIA NeMo:一个开源工具包,可通过三行代码开发最先进的会话式AI模型

    NVIDIA的开源工具包NVIDIA NeMo(神经模型)是朝着对话型AI发展迈出的革命性一步。它基于PyTorch,允许人们快速构建,训练和微调对话式AI模型...

    代码医生工作室
  • [语音识别] 05 基于GMM-HMM的语音识别系统(单音素、三音素)

    MachineLP
  • Vedastr:基于PyTorch的场景文本识别工具箱

    STR(Scene Text Recognition)的任务是识别文字框中的内容。我们在做关于STR的项目时发现,相关开源的toolbox较少,调研后发现现有的...

    Amusi
  • 预学无门?一份超赞的PyTorch 资源清单,已翻译成中文版!

    在被华为的面试官吊锤之后,我深刻明白入门和入行的差距了,入门可能只是别人说的一些概念你能有了解了,而入行则是我交代的任务你能完成。当然认识到问题之后,还是需要...

    AI算法与图像处理

扫码关注云+社区

领取腾讯云代金券