使用EasyASR进行语音分类

EasyASR(语音智能增强算法包)提供多种模型的训练及预测功能,旨在帮助语音智能应用开发者方便快捷地构建语音模型并应用于生产,例如语音的背景音乐检测。本文为您介绍如何在DSW中使用EasyASR算法包训练语音分类模型。

前提条件

已创建DSW实例,且该实例满足版本限制,详情请参见创建及管理DSW实例使用限制

说明

建议使用GPU版本的DSW实例。

使用限制

EasyASR仅支持如下Python版本和TensorFlow版本:

  • 仅支持Python 3.6版本。

  • 支持TensorFlow 1.12版本。

  • 不支持所有的PyTorch版本。

  • 建议采用DSW的镜像tensorflow:1.12PAI-gpu-py36-cu101-ubuntu18.04

操作流程

DSW中使用EasyASR进行语音分类的流程如下:

  1. 步骤一:准备数据

    下载语音分类的训练数据。

  2. 步骤二:构建数据集与训练模型

    将数据转换为TFRecord格式,并进行语音分类模型训练。

  3. 步骤三:评估并导出模型

    模型训练完成后,需要对模型的精准度进行评测。如果对模型满意,则可以将训练好的模型导出为SavedModel,进行分布批量预测。

  4. 步骤四:模型预测

    您可以使用导出的SavedModel模型进行预测。

步骤一:准备数据

本文使用一个简单的示例数据集进行语音分类模型的训练,建议您选用自己的数据进行模型训练。

  1. 进入DSW开发环境。

    1. 登录PAI控制台

    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。

    3. 在页面左上方,选择使用服务的地域。

    4. 在左侧导航栏,选择模型开发与训练 > 交互式建模(DSW)

    5. 可选:交互式建模(DSW)页面的搜索框,输入实例名称或关键字,搜索实例。

    6. 单击需要打开的实例操作列下的打开

  2. DSW开发环境,单击Other区域下的Terminal,即可打开Terminal。image.png

  3. 下载数据。

    1. 单击左上方工具栏中的创建文件夹图标,创建项目文件夹(例如asr_test)。

    2. Terminal中,使用cd命令进入已创建的文件夹,并通过wget命令下载语音分类的Demo数据集。

      cd asr_test
      wget https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/dsw_sample_data/demo_data.tar.gz
      wget https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/dsw_sample_data/sample_asr_cls_data.csv
    3. 新建子文件夹data,并将下载的Demo数据解压到该文件夹中,即在Terminal中输入如下命令。

      mkdir data
      tar xvzf demo_data.tar.gz -C data
    4. 下载配置文件。

      PAI提供了基于TDNN(Time-Delay Neural Network)的语音分类模型配置文件,供您使用。您需要在Terminal中输入如下命令,下载配置文件。

      wget https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/public_model_zoo/audio_cls/w2lplus_cls.py
  4. 查看项目文件夹(asr_test)内容。

    文件夹下包含以下文件:

    • data:存放了用于训练的语音片段,通常在15s以内,为WAV格式,采样率为16K,单通道。

    • sample_asr_cls_data.csv:存储了所有WAV文件的路径及对应的分类标签。

    • w2lplus_cls.py:语音分类模型的配置文件。

    项目文件夹下的文件

步骤二:构建数据集与训练模型

  1. 在项目文件夹(asr_test)下,通过Terminal调用EasyASR的数据转换功能,将准备的数据转换为TFRecord。

    easyasr_create_dataset --input_path='sample_asr_cls_data.csv' --output_prefix='tfrecords/'

    命令中的参数含义如下:

    • input_path:训练数据的文件名称,为CSV文件。该文件中记录了用于训练的WAV文件路径和人工标注的结果。

    • output_prefix:输出TFRecord的路径前缀。本文中的所有TFRecord都输出至tfrecords文件夹,您可以根据实际情况修改。

      说明

      请勿省略文件夹路径最后的正斜线(/)。

  2. Terminal中输入如下命令进行语音分类模型训练。

    easyasr_train --config_file='w2lplus_cls.py' --log_dir='model_dir' --num_audio_features=80 --label_set='0,1' --train_data='tfrecords/train_*.tfrecord'

    命令中的参数含义如下:

    • config_file:训练模型的配置文件。本文基于TDNN的语音分类模型配置文件w2plus_cls.py进行模型训练,您可以根据实际情况修改该配置文件。

    • log_dir:模型Checkpoint的输出路径,您可以根据实际情况修改。

    • num_audio_features:语音特征的维度,您可以根据实际情况修改。

    • label_set:语音分类的标签集合,使用半角逗号(,)分隔,您可以根据实际情况修改。

    • train_data:训练ASR模型所用的TFRecord,使用正则表达式进行匹配,您可以根据实际情况修改。

步骤三:评估并导出模型

模型训练完成后,需要对模型的精准度进行评测。您可以根据需求,将数据集划分为训练集和评测集,本文在此仅给出一个简单的示例。

  1. Terminal中输入以下命令,以评估模型精准度。

    easyasr_eval --config_file='w2lplus_cls.py' --checkpoint='model_dir/model.ckpt-100' --num_audio_features=80 --label_set='0,1' --eval_data='tfrecords/train_*.tfrecord'

    命令中的参数含义如下:

    • config_file:训练模型的配置文件。本文基于TDNN的语音分类模型配置文件w2plus_cls.py进行模型训练,您可以根据实际情况修改该配置文件。

    • checkpoint:用于评估和导出的模型Checkpoint路径。在模型训练过程中,系统会保存多个Checkpoint,您可以根据实际情况修改该路径。

    • num_audio_features:语音特征的维度,您可以根据实际情况修改该路径。

    • label_set:语音分类的标签集合,使用半角逗号(,)分隔,您可以根据实际情况修改。

    • eval_data:评测ASR模型所用的TFRecord,参数输入格式与train_data相同。

  2. 您可以将训练好的模型导出为SavedModel,进行分布批量预测。在Terminal中输入以下命令,将模型导出。

    easyasr_export --config_file='w2lplus_cls.py' --checkpoint='model_dir/model.ckpt-100' --num_audio_features=80 --label_set='0,1'  --cls  --mode='interactive_infer'

    命令中的参数含义如下:

    • config_file:训练模型的配置文件。本文基于TDNN的语音分类模型配置文件w2plus_cls.py进行模型训练,您可以根据实际情况修改该配置文件。

    • num_audio_features:语音特征的维度,您可以根据实际情况修改。

    • label_set:语音分类的标签集合,使用半角逗号(,)分隔,您可以根据实际情况修改。

    • cls:当您训练的模型为语音分类模型时,必须加入参数--cls

    • mode:模型导出的格式。当前版本的EasyASR仅支持interactive_infer模式,您无需修改。

    模型导出完成后,您可以在当前文件夹(asr_test)下查看生成的模型。其中,SavedModel已经保存在export_dir中,如下图所示。文件夹下的内容进入export_dir子文件夹,即可查看导出的模型,如下图所示。导出的模型

步骤四:模型预测

您可以使用导出的SavedModel模型进行预测。在DSW环境下,EasyASR采用CSV文件存储输入输出内容。

  1. Terminal中输入如下命令,安装音频解码工具FFmpeg。

    sudo apt update
    sudo apt install ffmpeg
    说明

    此处默认使用的ubuntu系统。如果您使用其他系统,则只需要系统安装FFmpeg即可。如果您已经安装,则可以跳过该步骤。

  2. 在项目文件夹(asr_test)下,通过Terminal输入如下命令,下载示例输入文件。

    wget https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/dsw_sample_data/input_predict.csv

    该输入文件中的每一行为一条音频的URL路径。

  3. Terminal中输入如下命令,使用训练得到的ASR模型进行预测。

    easyasr_predict --input_csv='input_predict.csv' --output_csv='output_predict.csv' --num_features=80 --use_model='cls' --num_audio_features=80 --label_set='0,1' --seg_time_in_seconds=10 --export_dir='export_dir' --num_predict_process=3  --num_preproces=3

    命令中的参数含义如下:

    • input_csv:输入含有音频URL路径的文件,您可以根据实际情况修改。

    • output_csv:输出预测结果文件名。您可以根据实际情况修改,无需提前创建该输出文件。

    • num_features:ASR模型的声学特征维度,您可以根据实际情况选择。

    • use_model:模型类别。当您使用的模型为语音分类模型时,指定为“cls”

    • num_audio_features:语音特征的维度,您可以根据实际情况修改。

    • label_set:语音分类的标签集合,使用半角逗号(,)分隔,您可以根据实际情况修改。

    • seg_time_in_seconds:指定模型对多少秒的音频进行一次预测,您可以根据实际情况修改。如果该值设置为10,当前输入音频为15秒,则分别对0~10秒,10~15秒的音频进行预测,并输出结果。

    • export_dir:导出SavedModel的路径,您可以根据实际情况修改。

    • num_predict_process:用于模型预测的线程数,您可以根据实际情况修改。

    • num_preproces:用于音频下载和预处理的线程数,您可以根据实际情况修改。