使用EasyASR進(jìn)行語音識別
EasyASR(語音智能增強(qiáng)算法包)提供多種模型的訓(xùn)練及預(yù)測功能,旨在幫助語音智能應(yīng)用開發(fā)者方便快捷地構(gòu)建語音模型并應(yīng)用于生產(chǎn)。本文以語音識別為例,為您介紹如何在DSW中使用EasyASR算法包。
前提條件
已創(chuàng)建DSW實例,且該實例滿足版本限制,詳情請參見創(chuàng)建及管理DSW實例和使用限制。
建議使用GPU版本的DSW實例。
背景信息
本文采用wav2letter-small模型作為預(yù)訓(xùn)練模型,除此之外,PAI還提供了wav2letter-base、transformer-small及transformer-base三個預(yù)訓(xùn)練的ASR模型,供您使用。您只需要下載對應(yīng)的文件,并使用其替換操作流程中的相應(yīng)輸入即可。
模型名稱 | 詞匯表 | 配置文件 | 模型文件 | 描述 |
wav2letter-small | wav2letter系列適用于對推理速度要求高、精度要求較低的場景。其中wav2letter-base模型比wav2letter-small模型的參數(shù)量大一些。 | |||
wav2letter-base | ||||
transformer-small | transformer系列適用于對精度要求高、推理速度較低的場景。其中transformer-base模型比transformer-small模型的參數(shù)量大一些。 | |||
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進(jìn)行語音識別的流程如下:
下載語音識別的訓(xùn)練數(shù)據(jù)。
步驟二:構(gòu)建數(shù)據(jù)集與訓(xùn)練模型
將數(shù)據(jù)轉(zhuǎn)換為TFRecord格式,并進(jìn)行ASR模型訓(xùn)練。
模型訓(xùn)練完成后,需要對模型的精準(zhǔn)度進(jìn)行評測。如果對模型滿意,則可以將訓(xùn)練好的模型導(dǎo)出為SavedModel,進(jìn)行分布批量預(yù)測。
您可以使用導(dǎo)出的SavedModel模型進(jìn)行預(yù)測。
步驟一:準(zhǔn)備數(shù)據(jù)
本文使用EasyASR Public Model Zoo中預(yù)訓(xùn)練的ASR模型進(jìn)行少量Fine-Tune,F(xiàn)ine-Tune所用的數(shù)據(jù)集選自中文公開數(shù)據(jù)集THCHS-30的一部分。建議您選用自己的數(shù)據(jù)進(jìn)行模型訓(xùn)練。
進(jìn)入DSW開發(fā)環(huán)境。
登錄PAI控制臺
在左側(cè)導(dǎo)航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進(jìn)入對應(yīng)工作空間內(nèi)。
在頁面左上方,選擇使用服務(wù)的地域。
在左側(cè)導(dǎo)航欄,選擇 。
可選:在交互式建模(DSW)頁面的搜索框,輸入實例名稱或關(guān)鍵字,搜索實例。
單擊需要打開的實例操作列下的打開。
在DSW開發(fā)環(huán)境,在頂部菜單欄單擊Notebook。
下載數(shù)據(jù)。
單擊左上方工具欄中的圖標(biāo),創(chuàng)建項目文件夾(例如asr_test)。
在DSW開發(fā)環(huán)境,在頂部菜單欄單擊Terminal,在Terminal頁簽單擊創(chuàng)建terminal。
在Terminal中,使用
cd
命令進(jìn)入已創(chuàng)建的文件夾,并通過wget
命令下載ASR的Demo數(shù)據(jù)集。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數(shù)據(jù)解壓到該文件夾中,即在Terminal中輸入如下命令。
mkdir data tar xvzf demo_data.tar.gz -C data
下載基于wav2letter的模型。
在EasyASR Public Model Zoo中,我們提供了wav2letter-small、wav2letter-base、transformer-small、transformer-base四個預(yù)訓(xùn)練的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)內(nèi)容。
文件夾下包含以下文件:
data:存放了用于訓(xùn)練的語音片段,通常在15s以內(nèi),為WAV格式,采樣率為16K,單通道。
w2lplus-small:存放了預(yù)訓(xùn)練的Checkpoint。
alphabet4K.txt:4K中文詞表。
sample_asr_data.csv:存儲了所有WAV文件的路徑及對應(yīng)的標(biāo)注文本。文本內(nèi)容需要按照字以空格進(jìn)行分隔,所有斷句以半角分號(;)替換,且文字內(nèi)容不超過字表范圍。如果文字內(nèi)容不在字表中,則使用星號(*)代替。
w2lplus-small.py:ASR模型的配置文件。
您可以進(jìn)入w2lplus-small文件夾,查看下載的預(yù)訓(xùn)練Checkpoint,如下圖所示。
步驟二:構(gòu)建數(shù)據(jù)集與訓(xùn)練模型
在項目文件夾(asr_test)下,通過Terminal調(diào)用EasyASR的數(shù)據(jù)轉(zhuǎn)換功能,將準(zhǔn)備的數(shù)據(jù)轉(zhuǎn)換為TFRecord。
easyasr_create_dataset --input_path='sample_asr_data.csv' --output_prefix='tfrecords/'
命令中的參數(shù)含義如下:
input_path:訓(xùn)練數(shù)據(jù)的文件名稱,為CSV文件。該文件中記錄了用于訓(xùn)練的WAV文件路徑和人工標(biāo)注的結(jié)果。
output_prefix:輸出TFRecord的路徑前綴。本文中的所有TFRecord都輸出至tfrecords文件夾,您可以根據(jù)實際情況修改。
重要請勿省略文件夾路徑最后的正斜線(/)。
在Terminal中輸入如下命令進(jìn)行ASR模型訓(xùn)練。
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'
命令中的參數(shù)含義如下:
config_file:訓(xùn)練模型的配置文件。本文基于wav2letter的ASR模型配置文件w2plus-small.py進(jìn)行模型訓(xùn)練,您可以根據(jù)實際情況修改該配置文件。
log_dir:模型Checkpoint的輸出路徑,您可以根據(jù)實際情況修改。
load_model_ckpt:加載的預(yù)訓(xùn)練模型的Checkpoint,在本文中即為之前下載的wav2letter-small模型。如果省略了該參數(shù),則表明需要從零開始訓(xùn)練該ASR模型。
vocab_file:訓(xùn)練模型的漢字詞匯表。如果您使用預(yù)訓(xùn)練的wav2letter模型,請不要修改對應(yīng)的詞表alphabet4k.txt。如果您使用預(yù)訓(xùn)練的transformer模型,請不要修改對應(yīng)的詞表alphabet6k.txt。
train_data:訓(xùn)練ASR模型所用的TFRecord,使用正則表達(dá)式進(jìn)行匹配,您可以根據(jù)實際情況修改。
步驟三:評估并導(dǎo)出模型
模型訓(xùn)練完成后,需要對模型的精準(zhǔn)度進(jìn)行評測。您可以根據(jù)需求,將數(shù)據(jù)集劃分為訓(xùn)練集和評測集,本文在此僅給出一個簡單的示例。
在Terminal中輸入以下命令,以評估模型精準(zhǔn)度。
easyasr_eval --config_file='w2lplus-small.py' --checkpoint='model_dir/model.ckpt-1000' --vocab_file='alphabet4k.txt' --eval_data='tfrecords/train_*.tfrecord'
命令中的參數(shù)含義如下:
config_file:訓(xùn)練模型的配置文件。本文基于wav2letter的ASR模型配置文件w2plus-small.py進(jìn)行模型訓(xùn)練,您可以根據(jù)實際情況修改該配置文件。
checkpoint:用于評估和導(dǎo)出的模型Checkpoint路徑。在模型訓(xùn)練過程中,系統(tǒng)會保存多個Checkpoint,您可以根據(jù)實際情況修改該路徑。
vocab_file:ASR模型對應(yīng)的漢字詞匯表。
重要在進(jìn)行模型訓(xùn)練和評估時,必須使用相同的詞匯表。
eval_data:評測ASR模型所用的TFRecord,參數(shù)輸入格式與train_data相同。
您可以將訓(xùn)練好的模型導(dǎo)出為SavedModel,進(jìn)行分布批量預(yù)測。在Terminal中輸入以下命令,將模型導(dǎo)出。
easyasr_export --config_file='w2lplus-small.py' --checkpoint='model_dir/model.ckpt-1000' --vocab_file='alphabet4k.txt' --mode='interactive_infer'
命令中的參數(shù)含義如下:
config_file:訓(xùn)練模型的配置文件。本文基于wav2letter的ASR模型配置文件w2plus-small.py進(jìn)行模型訓(xùn)練,您可以根據(jù)實際情況修改該配置文件。
checkpoint:用于評估和導(dǎo)出的模型Checkpoint路徑。在模型訓(xùn)練過程中,系統(tǒng)會保存多個Checkpoint,您可以根據(jù)實際情況修改該路徑。
vocab_file:ASR模型對應(yīng)的漢字詞匯表。
mode:模型導(dǎo)出的格式。當(dāng)前版本的EasyASR僅支持interactive_infer模式,您無需修改。
模型導(dǎo)出完成后,您可以在當(dāng)前文件夾(asr_test)下查看生成的模型。其中,SavedModel已經(jīng)保存在export_dir中,如下圖所示。進(jìn)入export_dir子文件夾,即可查看導(dǎo)出的模型,如下圖所示。
步驟四:模型預(yù)測
您可以使用導(dǎo)出的SavedModel模型進(jìn)行預(yù)測。在DSW環(huán)境下,EasyASR采用CSV文件存儲輸入輸出內(nèi)容。
在Terminal中輸入如下命令,安裝音頻解碼工具FFmpeg。
sudo apt update sudo apt install ffmpeg
說明此處默認(rèn)使用的ubuntu系統(tǒng)。如果您使用其他系統(tǒng),則只需要系統(tǒng)安裝FFmpeg即可。如果您已經(jīng)安裝,則可以跳過該步驟。
在項目文件夾(asr_test)下,通過Terminal輸入如下命令,下載示例輸入文件。
wget https://pai-audio-open-modelzoo.oss-cn-zhangjiakou.aliyuncs.com/dsw_sample_data/input_predict.csv
該輸入文件中的每一行為一條音頻的URL路徑。
在Terminal中輸入如下命令,使用訓(xùn)練得到的ASR模型進(jìn)行預(yù)測。
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
命令中的參數(shù)含義如下:
input_csv:輸入含有音頻URL路徑的文件,您可以根據(jù)實際情況修改。
output_csv:輸出預(yù)測結(jié)果文件名。您可以根據(jù)實際情況修改,無需提前創(chuàng)建該輸出文件。
num_features:ASR模型的聲學(xué)特征維度。EasyASR采用的預(yù)訓(xùn)練wav2letter-small和wav2letter-base模型默認(rèn)值為64,預(yù)訓(xùn)練transformer-small和transformer-base模型默認(rèn)值為80。您可以根據(jù)實際情況選擇。
use_model:模型類別,支持以下兩種類別:
“w2l”:對應(yīng)wav2letter模型。
“transformer”:對應(yīng)transformer模型。
本文采用的wav2letter-small模型對應(yīng)的值為“w2l”
vocab_file:ASR模型對應(yīng)的漢字詞匯表。
export_dir:導(dǎo)出SavedModel的路徑,您可以根據(jù)實際情況修改。
num_predict_process:用于模型預(yù)測的線程數(shù),您可以根據(jù)實際情況修改。
num_preproces:用于音頻下載和預(yù)處理的線程數(shù),您可以根據(jù)實際情況修改。