EasyASR(語音智能增強演算法包)提供多種模型的訓練及預測功能,旨在協助語音智能應用開發人員方便快捷地構建語音模型並應用於生產。本文以語音辨識為例,為您介紹如何在DSW中使用EasyASR演算法包。
前提條件
背景資訊
本文採用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,使用Regex進行匹配,您可以根據實際情況修改。
步驟三:評估並匯出模型
模型訓練完成後,需要對模型的精準度進行評測。您可以根據需求,將資料集劃分為訓練集和評測集,本文在此僅給出一個簡單的樣本。
在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:用於音頻下載和預先處理的線程數,您可以根據實際情況修改。