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,使用Regex進行匹配,您可以根據實際情況修改。
步驟三:評估並匯出模型
模型訓練完成後,需要對模型的精準度進行評測。您可以根據需求,將資料集劃分為訓練集和評測集,本文在此僅給出一個簡單的樣本。
在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:用於音頻下載和預先處理的線程數,您可以根據實際情況修改。