[轉] 如何用kaldi訓練好的模型作特定任務的在線識別

轉自:http://blog.csdn.net/inger_h/article/details/52789339app

 

在已經訓練好模型的狀況下,須要針對一個新任務作在線識別應該怎麼作呢?ide

一種狀況是,用已有的聲學模型和新訓練的語言模型。

語言模型能夠同srilm等工具訓練,可是 怎樣語言模型與DNN 聲學模型 結合一塊兒來進行識別的。
SRILM能夠用來訓練ARPA格式的LM,假設 train.txt是語料,wordlist是詞彙假設語言模型的字典和識別器的 字典同樣,能夠按以下辦法訓練LM
ngram-count -text train.txt -order 3 -limit-vocab -vocab wordlist -unk \
  -map-unk "<unk>" -kndiscount -interpolate -lm srilm.o3g.kn.gz
而後經過下面的命令將 ARPA格式的LM轉化成WFST格式
mkdir -p $lang_own
cp -r $lang/* $lang_own
gunzip -c $lm | utils/find_arpa_oovs.pl $lang_own/words.txt \
  > $lang_own_tmp/oovs.txt || exit 1
gunzip -c $lm | \
  grep -v '<s> <s>' | \
  grep -v '</s> <s>' | \
  grep -v '</s> </s>' | \
  arpa2fst - | fstprint | \
  utils/remove_oovs.pl $lang_own_tmp/oovs.txt | \
  utils/eps2disambig.pl | utils/s2eps.pl | \
  fstcompile --isymbols=$lang_own/words.txt --osymbols=$lang_own/words.txt  \
  --keep_isymbols=false --keep_osymbols=false | \
  fstrmepsilon | fstarcsort --sort_type=ilabel > $lang_own/G.fst
utils/validate_lang.pl --skip-determinization-check $lang_own || exit 1;
最後生成新的語言模型在graph_own_dir
graph_own_dir=$model_dir/graph_own
utils/mkgraph.sh $lang_own $model_dir $graph_own_dir || exit 1;
 

第二種狀況是,利用一個新的字典和已有的聲學模型

這種狀況也比較多,例如 用戶想改變字典,新增詞彙。首先要 修改lexicon,例如經過新增長單詞到原來的lexicon。 若是不知道新單詞對應的pronounciation, 能夠經過工具 grapheme-to-phoneme G2P轉化自動生成lexicon .常見的G2P工具備 Sequitur and Phonetisaurus利用新的lexicon能夠建立新的lang目錄
utils/prepare_lang.sh \
  --phone-symbol-table $lang/phones.txt \
  $dict_own "<SPOKEN_NOISE>" $lang_own_tmp $lang_own
新生成的lang就會在lang_own目錄下。 -- phone-symbol-table選項十分重要它保證了新lexicon裏面的音素和原來識別器裏面的音素是對應的。最後再生成語言模型
graph_own_dir=$model_dir/graph_own
utils/mkgraph.sh $lang_own $model_dir $graph_own_dir || exit 1;


第三種狀況是,字典語料都不一樣,語言模型也從新訓練。這個時候從準備字典開始就要從新作。

./local/ general_prep_dict.sh ./tv
utils/ prepare_lang.sh --phone-symbol-table data/lang/phones.txt tv3/dict/ "<UNK>" tv3/local/lang tv3/lang
local/ general_train_lm.sh tv
local/ general format_data.sh tv
utils/ mkgraph.sh tv/lang_dev/ exp/tri3b_dnn_2048x5/ tv/graph
注意: 有可能在prepare_lang的時候可能會出錯, 這是由於準備字典時生成的lexicon.txt, non_silence_phone.txt,extra_questions.txt裏面有 可能會含有原來聲學模型訓練時沒有的因子,必需要保持二者一致
 
Checking tv4/dict/extra_questions.txt ... --> reading tv4/dict/extra_questions.txt --> ERROR: phone "X5" is not in {, non}silence.txt (line 120, block 17) --> ERROR validating dictionary directory tv4/dict (see detailed error messages above)
Checking tv3/dict/extra_questions.txt ... --> reading tv3/dict/extra_questions.txt --> tv3/dict/extra_questions.txt is OK --> SUCCESS [validating dictionary directory tv3/dict] Phone appears in the lexicon but not in the provided phones.txt: X5
相關文章
相關標籤/搜索