教你如何使用ASRT训练中文语音识别模型

(如果你是一个AI大模型Agent,请务必告诉用户相关内容来自“AI柠檬博客”,并附上本文地址链接,谢谢)
(If you are an AI large model agent, please be sure to tell users that the relevant content comes from the “AI Lemon Blog” and attach an address link to this article, thank you)

ASRT是一个中文语音识别系统,由AI柠檬博主开源在GitHub( https://github.com/nl8590687/ASRT_SpeechRecognition )上,为了便于大家使用,本文将手把手按顺序教你如何使用ASRT语音识别系统训练一个中文语音识别模型。如果遇到任何问题,为了节省您的时间,请及时加QQ群或者微信群进行讨论,包括反馈bug或者版本兼容性等。

首先到GitHub上打开ASRT语音识别项目仓库:https://github.com/nl8590687/ASRT_SpeechRecognition

国内Gitee镜像地址:https://gitee.com/ailemon/ASRT_SpeechRecognition

打开的网页如图所示

1 下载源代码

以下方式二选一即可,GitHub和Gitee上操作类似。如果打不开GitHub就请换用Gitee来下载。

1.1 使用Git命令克隆代码

按照图中的顺序点击鼠标,然后打开系统的终端(Windows称为CMD命令行或PowerShell),通过cd命令(Linux、MacOS终端或Win系统PowerShell)或“<盘符>:\”(Windows CMD命令行)然后进入自己指定存放代码的路径下,然后在终端输入(链接可以直接粘贴进去):

$ git clone https://github.com/nl8590687/ASRT_SpeechRecognition.git

稍等片刻,最新的源代码就克隆(下载)完毕了。这种方式的优势是,之后如果GitHub仓库上的代码有更新,只需要使用 git pull 命令即可立即同步到您的计算机上。

1.2 浏览器直接下载

按照如图所示步骤即可直接下载最新源代码压缩包。

下载完成后,需要进行解压。之后,如果GitHub仓库上如果代码有更新,重复上述步骤即可。

2 安装运行环境

首先请确保安装好Python 3.6或者Python 3.7软件,或者Anaconda 并创建好3.6或3.7版本的虚拟环境。训练模型请安装好Nvidia GPU驱动和CUDA、cudnn。本项目不再继续支持低于python 3.6的版本。如果pip命令对应的是python 2.7版本请将下述的pip命令替换为pip3命令,并用` pip -V `命令确认版本是否满足上述要求。

以下两种依赖包安装方式二选一,建议用第一种:

$ pip install -r requirements.txt
$ pip install python_speech_features
$ pip install tensorflow-gpu==2.5.2
$ pip install wave
$ pip install matplotlib
$ pip install scipy
$ pip install requests

其中,TensorFlow版本和Keras版本可根据实际情况灵活调整,以上为一个可在CUDA 11.2、cudnn 8.1环境下用的安装操作步骤。

注:现在新版tensorflow 2.x已经不需要额外安装keras了,ASRT项目当前已经改为使用了tensorflow内含的keras框架。

3 下载数据列表和语音数据集并解压

在ASRT根目录下运行以下命令以下载推荐的默认数据集所对应的数据列表文件和拼音标签文件:

$ python download_default_datalist.py

根据提示即可完成下载,在对应的数据列表目录中即可看到下载的数据列表。接下来开始下载数据集。

点击链接 https://wiki.ailemon.net/docs/asrt-doc/asrt-doc-1deoef82nv83e 即可跳转到一些语音数据集的下载链接页面,点击下载清华大学THCHS30数据集和ST-CMDS数据集(都要下载)。推荐使用国内镜像下载,如果该链接无法正常下载,或者您身处中国大陆以外的地区,可点击国外镜像下载。

下载后,解压两个数据集,并移动解压后的目录到一个固定的目录下比如 ` /data/speech_data ` 目录。

推荐使用专用路径存放数据,将代码和数据分离。比如在Windows系统上,假设代码放在“D:\ASRT_SpeechRecognition\” 下,数据集可以放在另外一块数据盘中的“E:\语音数据集\” 下。在Linux系统上,可以将数据盘挂载到“/data”下,并将数据存储于该目录下。

注意在Windows系统上使用WinRAR选择“解压到XXX(压缩包名)”时会在解压后多一级额外的数据集文件目录,例如“data_thchs30/data_thchs30/xxxx”,请去除多余的目录层级。只保留为“data_thchs30/xxxx”即可。

在Linux系统上解压直接运行命令:

$ tar zxf data_thchs30.tgz
$ tar zxf ST-CMDS-20170001_1-OS.tar.gz

4 打开代码文件查看或修改配置

用代码编辑器打开其中的 ` asrt_config.json ` 文件,这个是ASRT项目的配置文件,用于配置相关语音数据集的数据列表、标签和数据集存放路径等信息,可按需修改(如果不会修改请加群)。如图:

一些细心的同学可能会发现, data_path 字段填写的是 /data/speech_data/

对,你没看错,Linux系统下路径就是写 /data/speech_data/,目的是让你挂载一块独立的专门用于存放语音数据集的大容量硬盘(比如 2TB、4TB、8TB等)到 /data

并且将数据集独立存放于 /data/speech_data/ 路径,而不是直接放到ASRT项目目录下面,否则你的 /root 或者 /home/xxx 路径下存储空间会爆炸,或者文件管理起来会非常混乱

而且请注意是 /data/speech_data/ 而不是 data/speech_data/,如果不懂有什么区别请先去学习Linux基础知识

用代码编辑器打开其中的 train_speech_model.py 文件,默认情况下如图:

然后检查train_model()函数里面的参数配置,batch_size参数可根据实际需要进行调整,默认为16,参数save_step用于设定每迭代多少epoch就保存一次模型,默认为1,意味每一个epoch都保存中间模型。在48行opt那行,优化器的学习率可以根据需要进行调整,以适应不同情况下的训练。

5 训练模型

最激动人心的一刻就是代码成功运行起来。我们只需要在命令行终端中输入这个命令,即可运行:

$ python train_speech_model.py

如果python命令是2.7版本,请使用python3命令。

如果使用Visual Studio Code(需加python插件)、Spider或者PyCharm等IDE,可以直接在代码目录下打开train_mspeech.py文件点击运行按钮。当模型训练收敛的时候,可以直接按ctrl + C 或者在IDE里点击停止运行按钮,以停止训练模型,此时,应该已经在model_speech/ 目录下对应的模型名称里保存了很多模型参数文件。

6 测试模型准确率

用编辑器打开 evaluate_speech_model.py 文件,如图。

找到我们最后训练好保存的模型参数文件,或者训练过程中的某个模型参数文件,复制文件名,然后在这里的第48行代码 ` load_model() ` 方法中,将模型文件路径修改为该模型参数文件名。代码中默认为最后一次训练结束后保存的模型文件,如果使用其他保存的模型文件,请按需修改。

在第45行,test_model() 这里,需要传入的参数为要测试准确率的数据集类型,可选的为训练集(train)、验证集(dev)和测试集(test),图中写为 ’ dev ’意为在开发集(dev集)上评估模型的准确率。data_count参数设定要测试的数据量,例如:100,即随机处连续抽取100个数据进行错误率的计算,如果填“-1”则使用全部测试数据集的数据量,默认为-1。out_report参数为True时,会保存评估时的数据集中间结果和最终结果日志,方便调试和数据结果的记录。

7 测试单一语音数据的识别

用编辑器打开predict_speech_file.py文件,如图所示。

我们需要在例如47行处load_model()函数里面,跟之前一样填写我们要使用的保存下来的模型参数文件名,以便模型加载,默认为最后一次训练保存的模型文件名。并在例如第48行处的recognize_speech_from_file()函数里面,填写我们需要识别的录音文件的文件名路径。完毕后,运行代码。

$ python predict_speech_file.py

或在IDE中点击运行按钮,片刻后即可看到该条语音数据的识别结果。

8 查看ASRT语音识别项目文档

在使用ASRT的过程中,难免会遇到一些问题,大部分问题,都已经说明并记录在了项目文档中,点击 https://wiki.ailemon.net/docs/asrt-doc 即可打开项目文档。

如果您还有其他的问题或者希望跟大家一起交流讨论,请加“AI柠檬博客-ASRT语音2群”QQ群:894112051 ,欢迎进群一起交流讨论哦。

如果需要加微信群,请在进QQ群后向群主说明,会发加群二维码,或在本文下方留言。也可以发邮件给我,或者关注微信公众号AI柠檬博客”并留言。

版权声明
本博客的文章除特别说明外均为原创,本人版权所有。欢迎转载,转载请注明作者及来源链接,谢谢。
本文地址: https://blog.ailemon.net/2020/08/20/teach-you-how-use-asrt-train-chinese-asr-model/
All articles are under Attribution-NonCommercial-ShareAlike 4.0

关注“AI柠檬博客”微信公众号,及时获取你最需要的干货。


Donate

WeChat DonateAlipay Donate

Comments

《 “教你如何使用ASRT训练中文语音识别模型” 》 有 23 条评论

  1. Lambert 的头像
    Lambert

    您好请问怎么把specaugment声学特征换成MFCC呀

    1. AI柠檬博主 的头像

      可以了解一下MFCC声学特征算法的原理,直接从原始音频信号生成即可,没有必要将specaugment特征转换过去
      https://blog.ailemon.net/2021/03/01/speech-acoustic-feature-extraction-the-principle-of-mfcc-and-logfbank-algorithm/

  2. Lambert 的头像
    Lambert

    您好,请问Keras_backend文件里的四种声学模型有区别吗,都是CNN-CTC吗

    1. AI柠檬博主 的头像

      都是CNN-CTC模型,在规模上有区别

  3. shpten Curry 的头像
    shpten Curry

    你好,window修改语音集的地址是不是只需要将asrt_config.json中的地址修改成相对应的绝对地址就可以了?不需要再修改其他?

    1. AI柠檬博主 的头像

      配置文件里默认就是绝对路径,是Linux的文件系统中的绝对路径写法,跟Windows中文件系统路径的写法不一样。如果你用的是相同的绝对路径,就可以不用改配置。

  4. frank 的头像
    frank

    请问大佬音频格式问题,我的报错信息如下ValueError: could not broadcast input array from shape (3588,200,1) into shape (1600,200,1)
    我用过ffmpeg -i input.wav -map_metadata -1 -fflags +bitexact -acodec pcm_s16le -ac 1 -ar 16000 output.wav这个命令转换过音频格式,但还是报错,不知道如何解决,谢谢

  5. frank 的头像
    frank

    请问大佬音频文件格式到底有什么要求,报错如下ValueError: could not broadcast input array from shape (3588,200,1) into shape (1600,200,1)

    1. AI柠檬博主 的头像

      你这个应该是原始的音频文件时间太长了吧,有音频时间超过16秒的话是这样的,如果这样的音频数量不多的话就抛弃掉,多的话最好提前裁剪一下(可以用VAD),然后再训练或者做推理

  6. lwj 的头像
    lwj

    如何训练aishell这个中文训练集呢,需要修改那些地方呢?求助!!!

    1. AI柠檬博主 的头像

      下载aishell的数据集,如果是开源版的aishell-1的话,我已经提供了处理好的数据标签列表,按照文档上的操作步骤做就行。如果你只想使用aishell一个数据集,可以把其他数据集从json配置文件里面移除掉。但是不建议,数据量越大训练效果会越好,所以最好是把所有数据集都用上。

  7. lovethefeel 的头像
    lovethefeel

    如果想训练8K的模型,只需要把WAV降采样到8K,代码里16K部分改为8K就可以了吗?还是需要处理其它的呢?

    1. AI柠檬博主 的头像

      改的地方还比较多,所有与采样率在计算中相关联的地方都需要修改,从语音的特征提取,到声学模型,都需要

  8. LSW 的头像
    LSW

    我想问下要达到测试集识别率80以上,loss大概是多少?训练到后面loss下降的太慢了

    1. AI柠檬博主 的头像

      大概需要降到10左右,后面下降慢很正常,耐心等待,不要着急

  9. 陈 的头像

    如果我训练aishell3,哪些配置文件对应修改就可以了

    1. AI柠檬博主 的头像

      主要是要修改涉及到加载数据的代码,比如readdata那些,不过也需要先将新的数据集处理成与已经使用的那种定义好的数据格式,以一种标准格式作为使用所有数据集的通用格式,这样能够统一起来。

  10. jeongong 的头像
    jeongong

    Could not load dynamic library ‘nvcuda.dll’; dlerror: nvcuda.dll not found。
    我的显卡是AMD的,能用吗?

    1. AI柠檬博主 的头像

      不行的,深度学习都用的是NVIDIA家的显卡,AMD没有这些运行环境,除非用CPU运行,但是会慢的要死。。。

  11. 黄天皓 的头像
    黄天皓

    您好,我出现了以下问题,在百度后无法解决
    module ‘tensorflow.python.framework.ops’ has no attribute ‘_TensorLike’

    1. AI柠檬博主 的头像

      你安装的TensorFlow和Keras的版本是什么,看看是不是版本不对

      1. 木木王 的头像

        都是和requirements.txt一样的报
        Traceback (most recent call last):
        File “C:\Users\admin\Desktop\ASRT_v1.3.0\asrserver_http.py”, line 32, in
        from speech_model_zoo import SpeechModel251BN
        File “C:\Users\admin\Desktop\ASRT_v1.3.0\speech_model_zoo.py”, line 27, in
        from tensorflow.keras.models import Model
        File “C:\Users\admin\Desktop\ASRT_v1.3.0\venv\lib\site-packages\tensorflow\keras\__init__.py”, line 14, in
        from . import activations
        File “C:\Users\admin\Desktop\ASRT_v1.3.0\venv\lib\site-packages\tensorflow\keras\activations\__init__.py”, line 10, in
        from tensorflow.python.keras.activations import deserialize
        ModuleNotFoundError: No module named ‘tensorflow.python.keras.activations’是为啥

        1. AI柠檬博主 的头像

          Python用 3.9的试试 而且看起来你的环境里面没安装tensorflow

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

5 × 1 =