EasyASR(语音智能增强算法包)提供多种模型的训练及预测功能,旨在帮助语音智能应用开发者方便快捷地构建语音模型并应用于生产。本文以语音识别为例,为您介绍如何在DSW中使用EasyASR算法包。
前提条件
已创建DSW实例,且该实例满足版本限制,详情请参见创建及管理DSW实例和使用限制。
建议使用GPU版本的DSW实例。
背景信息
本文采用wav2letter-small模型作为预训练模型,除此之外,PAI还提供了wav2letter-base、transformer-small及transformer-base三个预训练的ASR模型,供您使用。您只需要下载对应的文件,并使用其替换操作流程中的相应输入即可。
模型名称 | 词汇表 | 配置文件 | 模型文件 | 描述 |
wav2letter-small | wav2letter系列适用于对推理速度要求高、精度要求较低的场景。其中wav2letter-base模型比wav2letter-small模型的参数量大一些。 | |||
wav2letter-base | ||||
transformer-small | transformer系列适用于对精度要求高、推理速度较低的场景。其中transformer-base模型比transformer-small模型的参数量大一些。 | |||
transformer-base |
使用限制
EasyASR仅支持如下Python版本和TensorFlow版本:
仅支持Python 3.6版本。
支持TensorFlow 1.12或PAI-TensorFlow 1.15版本。
不支持所有的PyTorch版本。
建议采用DSW的镜像
tensorflow:1.12PAI-gpu-py36-cu101-ubuntu18.04
或tensorflow:1.15-gpu-py36-cu100-ubuntu18.04
。
操作流程
在DSW中使用EasyASR进行语音识别的流程如下:
下载语音识别的训练数据。
将数据转换为TFRecord格式,并进行ASR模型训练。
模型训练完成后,需要对模型的精准度进行评测。如果对模型满意,则可以将训练好的模型导出为SavedModel,进行分布批量预测。
您可以使用导出的SavedModel模型进行预测。
步骤一:准备数据
本文使用EasyASR Public Model Zoo中预训练的ASR模型进行少量Fine-Tune,Fine-Tune所用的数据集选自中文公开数据集THCHS-30的一部分。建议您选用自己的数据进行模型训练。
进入DSW开发环境。
登录PAI控制台
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
在页面左上方,选择使用服务的地域。
在左侧导航栏,选择 。
可选:在交互式建模(DSW)页面的搜索框,输入实例名称或关键字,搜索实例。
单击需要打开的实例操作列下的打开。
在DSW开发环境,在顶部菜单栏单击Notebook。
下载数据。
单击左上方工具栏中的图标,创建项目文件夹(例如asr_test)。
在DSW开发环境,在顶部菜单栏单击Terminal,在Terminal页签单击创建terminal。
在Terminal中,使用
cd
命令进入已创建的文件夹,并通过wget
命令下载ASR的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_data.csv
新建子文件夹data,并将下载的Demo数据解压到该文件夹中,即在Terminal中输入如下命令。
mkdir data tar xvzf demo_data.tar.gz -C data
下载基于wav2letter的模型。
在EasyASR Public Model Zoo中,我们提供了wav2letter-small、wav2letter-base、transformer-small、transformer-base四个预训练的ASR模型,供您使用。其中,wav2letter模型具有更快的推理速度,transformer模型相对更精确。本文使用wav2letter模型,您需要在Terminal中输入如下命令,下载wav2letter-small模型。
mkdir wav2letter-small wget -P wav2letter-small https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/public_model_zoo/w2lplus-small/model.ckpt.index wget -P wav2letter-small https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/public_model_zoo/w2lplus-small/model.ckpt.meta wget -P wav2letter-small https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/public_model_zoo/w2lplus-small/model.ckpt.data-00000-of-00001 wget https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/public_model_zoo/w2lplus-small/alphabet4k.txt wget https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/public_model_zoo/w2lplus-small/w2lplus-small.py
查看项目文件夹(asr_test)内容。
文件夹下包含以下文件:
data:存放了用于训练的语音片段,通常在15s以内,为WAV格式,采样率为16K,单通道。
w2lplus-small:存放了预训练的Checkpoint。
alphabet4K.txt:4K中文词表。
sample_asr_data.csv:存储了所有WAV文件的路径及对应的标注文本。文本内容需要按照字以空格进行分隔,所有断句以半角分号(;)替换,且文字内容不超过字表范围。如果文字内容不在字表中,则使用星号(*)代替。
w2lplus-small.py:ASR模型的配置文件。
您可以进入w2lplus-small文件夹,查看下载的预训练Checkpoint,如下图所示。
步骤二:构建数据集与训练模型
在项目文件夹(asr_test)下,通过Terminal调用EasyASR的数据转换功能,将准备的数据转换为TFRecord。
easyasr_create_dataset --input_path='sample_asr_data.csv' --output_prefix='tfrecords/'
命令中的参数含义如下:
input_path:训练数据的文件名称,为CSV文件。该文件中记录了用于训练的WAV文件路径和人工标注的结果。
output_prefix:输出TFRecord的路径前缀。本文中的所有TFRecord都输出至tfrecords文件夹,您可以根据实际情况修改。
重要请勿省略文件夹路径最后的正斜线(/)。
在Terminal中输入如下命令进行ASR模型训练。
easyasr_train --config_file='w2lplus-small.py' --log_dir='model_dir' --load_model_ckpt='wav2letter-small/model.ckpt' --vocab_file='alphabet4k.txt' --train_data='tfrecords/train_*.tfrecord'
命令中的参数含义如下:
config_file:训练模型的配置文件。本文基于wav2letter的ASR模型配置文件w2plus-small.py进行模型训练,您可以根据实际情况修改该配置文件。
log_dir:模型Checkpoint的输出路径,您可以根据实际情况修改。
load_model_ckpt:加载的预训练模型的Checkpoint,在本文中即为之前下载的wav2letter-small模型。如果省略了该参数,则表明需要从零开始训练该ASR模型。
vocab_file:训练模型的汉字词汇表。如果您使用预训练的wav2letter模型,请不要修改对应的词表alphabet4k.txt。如果您使用预训练的transformer模型,请不要修改对应的词表alphabet6k.txt。
train_data:训练ASR模型所用的TFRecord,使用正则表达式进行匹配,您可以根据实际情况修改。
步骤三:评估并导出模型
模型训练完成后,需要对模型的精准度进行评测。您可以根据需求,将数据集划分为训练集和评测集,本文在此仅给出一个简单的示例。
在Terminal中输入以下命令,以评估模型精准度。
easyasr_eval --config_file='w2lplus-small.py' --checkpoint='model_dir/model.ckpt-1000' --vocab_file='alphabet4k.txt' --eval_data='tfrecords/train_*.tfrecord'
命令中的参数含义如下:
config_file:训练模型的配置文件。本文基于wav2letter的ASR模型配置文件w2plus-small.py进行模型训练,您可以根据实际情况修改该配置文件。
checkpoint:用于评估和导出的模型Checkpoint路径。在模型训练过程中,系统会保存多个Checkpoint,您可以根据实际情况修改该路径。
vocab_file:ASR模型对应的汉字词汇表。
重要在进行模型训练和评估时,必须使用相同的词汇表。
eval_data:评测ASR模型所用的TFRecord,参数输入格式与train_data相同。
您可以将训练好的模型导出为SavedModel,进行分布批量预测。在Terminal中输入以下命令,将模型导出。
easyasr_export --config_file='w2lplus-small.py' --checkpoint='model_dir/model.ckpt-1000' --vocab_file='alphabet4k.txt' --mode='interactive_infer'
命令中的参数含义如下:
config_file:训练模型的配置文件。本文基于wav2letter的ASR模型配置文件w2plus-small.py进行模型训练,您可以根据实际情况修改该配置文件。
checkpoint:用于评估和导出的模型Checkpoint路径。在模型训练过程中,系统会保存多个Checkpoint,您可以根据实际情况修改该路径。
vocab_file:ASR模型对应的汉字词汇表。
mode:模型导出的格式。当前版本的EasyASR仅支持interactive_infer模式,您无需修改。
模型导出完成后,您可以在当前文件夹(asr_test)下查看生成的模型。其中,SavedModel已经保存在export_dir中,如下图所示。进入export_dir子文件夹,即可查看导出的模型,如下图所示。
步骤四:模型预测
您可以使用导出的SavedModel模型进行预测。在DSW环境下,EasyASR采用CSV文件存储输入输出内容。
在Terminal中输入如下命令,安装音频解码工具FFmpeg。
sudo apt update sudo apt install ffmpeg
说明此处默认使用的ubuntu系统。如果您使用其他系统,则只需要系统安装FFmpeg即可。如果您已经安装,则可以跳过该步骤。
在项目文件夹(asr_test)下,通过Terminal输入如下命令,下载示例输入文件。
wget https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/dsw_sample_data/input_predict.csv
该输入文件中的每一行为一条音频的URL路径。
在Terminal中输入如下命令,使用训练得到的ASR模型进行预测。
easyasr_predict --input_csv='input_predict.csv' --output_csv='output_predict.csv' --num_features=64 --use_model='w2l' --vocab_file='alphabet4k.txt' --export_dir='export_dir' --num_predict_process=3 --num_preproces=3
命令中的参数含义如下:
input_csv:输入含有音频URL路径的文件,您可以根据实际情况修改。
output_csv:输出预测结果文件名。您可以根据实际情况修改,无需提前创建该输出文件。
num_features:ASR模型的声学特征维度。EasyASR采用的预训练wav2letter-small和wav2letter-base模型默认值为64,预训练transformer-small和transformer-base模型默认值为80。您可以根据实际情况选择。
use_model:模型类别,支持以下两种类别:
“w2l”:对应wav2letter模型。
“transformer”:对应transformer模型。
本文采用的wav2letter-small模型对应的值为“w2l”
vocab_file:ASR模型对应的汉字词汇表。
export_dir:导出SavedModel的路径,您可以根据实际情况修改。
num_predict_process:用于模型预测的线程数,您可以根据实际情况修改。
num_preproces:用于音频下载和预处理的线程数,您可以根据实际情况修改。