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進行語音分類的流程如下:
下載語音分類的訓練數據。
將數據轉換為TFRecord格式,并進行語音分類模型訓練。
模型訓練完成后,需要對模型的精準度進行評測。如果對模型滿意,則可以將訓練好的模型導出為SavedModel,進行分布批量預測。
您可以使用導出的SavedModel模型進行預測。
步驟一:準備數據
本文使用一個簡單的示例數據集進行語音分類模型的訓練,建議您選用自己的數據進行模型訓練。
進入DSW開發環境。
登錄PAI控制臺
在左側導航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
在頁面左上方,選擇使用服務的地域。
在左側導航欄,選擇 。
可選:在交互式建模(DSW)頁面的搜索框,輸入實例名稱或關鍵字,搜索實例。
單擊需要打開的實例操作列下的打開。
在DSW開發環境,單擊Other區域下的Terminal,即可打開Terminal。
下載數據。
單擊左上方工具欄中的圖標,創建項目文件夾(例如asr_test)。
在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
新建子文件夾data,并將下載的Demo數據解壓到該文件夾中,即在Terminal中輸入如下命令。
mkdir data tar xvzf demo_data.tar.gz -C data
下載配置文件。
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
查看項目文件夾(asr_test)內容。
文件夾下包含以下文件:
data:存放了用于訓練的語音片段,通常在15s以內,為WAV格式,采樣率為16K,單通道。
sample_asr_cls_data.csv:存儲了所有WAV文件的路徑及對應的分類標簽。
w2lplus_cls.py:語音分類模型的配置文件。
步驟二:構建數據集與訓練模型
在項目文件夾(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文件夾,您可以根據實際情況修改。
說明請勿省略文件夾路徑最后的正斜線(/)。
在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,使用正則表達式進行匹配,您可以根據實際情況修改。
步驟三:評估并導出模型
模型訓練完成后,需要對模型的精準度進行評測。您可以根據需求,將數據集劃分為訓練集和評測集,本文在此僅給出一個簡單的示例。
在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相同。
您可以將訓練好的模型導出為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文件存儲輸入輸出內容。
在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=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:用于音頻下載和預處理的線程數,您可以根據實際情況修改。