如何用kaldi训练好的DNN模型做在线识别
来源:互联网 发布:java json遍历 编辑:程序博客网 时间:2024/05/17 06:44
在已经训练好模型的情况下,需要针对一个新任务做在线识别应该怎么做呢?
一种情况是,用已有的声学模型和新训练的语言模型。
语言模型可以同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_owncp -r $lang/* $lang_owngunzip -c $lm | utils/find_arpa_oovs.pl $lang_own/words.txt \ > $lang_own_tmp/oovs.txt || exit 1gunzip -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.fstutils/validate_lang.pl --skip-determinization-check $lang_own || exit 1;
最后生成新的语言模型在graph_own_dirgraph_own_dir=$model_dir/graph_ownutils/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_ownutils/mkgraph.sh $lang_own $model_dir $graph_own_dir || exit 1;
第三种情况是,字典语料都不同,语言模型也重新训练。这个时候从准备字典开始就要重新做。
./local/general_prep_dict.sh ./tvutils/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)
--> 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
0 0
- 如何用kaldi训练好的DNN模型做在线识别
- 如何用 Kaldi 训练一个 DNN 声学模型
- Kaldi 训练一个 DNN 声学模型
- Kaldi中如何使用已经训练好的模型进行语音识别ASR呢?
- 如何用Tensorflow训练模型成pb文件和和如何加载已经训练好的模型文件
- 基于kaldi的在线语音识别
- Kaldi声学模型训练
- 异常声音检测之kaldi DNN 训练
- 使用训练好的caffe模型识别图片
- python 用opencv调用训练好的模型进行识别
- 如何用CSS3做地月模型
- 基于kaldi的在线中文识别,online的操作介绍
- 基于kaldi的在线中文识别,online的操作介绍
- 基于kaldi的在线中文识别,online的操作介绍
- 如何用TensorFlow训练和识别/分类自定义图片
- 修复kaldi中的在线语音识别的bug
- 如何用Tensorflow训练模型成pb文件(二)——基于tfrecord的读取
- 如何用Tensorflow实现增强版本的Mnist手写识别网络模型
- POJ Balanced Lineup 3264
- iOS 遇到证书签名无效,且出现此证书是“由未知颁发机构签名的解决办法”
- 批量转换csv为excel和批量解压目录下所有压缩包的文件
- MyEclipse8.5生成注册序列号
- Android组件系列----BroadcastReceiver广播接收器
- 如何用kaldi训练好的DNN模型做在线识别
- TCP详解几个状态
- const修饰符可以把对象转变成常数…
- wpf控件:gridcontrol使用
- C基础
- 角逐5000亿智能家居市场 看中兴大佬如何布局
- Linux进程调度原理
- 用C写邮件收发程序
- 软件维护文档