[转] 如何用kaldi训练好的模型做特定任务的在线识别

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

在已经训练好模型的情况下,需要针对一个新任务做在线识别应该怎么做呢?

一种情况是,用已有的声学模型和新训练的语言模型。

语言模型可以同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

时间: 2024-10-27 11:25:30

[转] 如何用kaldi训练好的模型做特定任务的在线识别的相关文章

转载:tensorflow保存训练后的模型

训练完一个模型后,为了以后重复使用,通常我们需要对模型的结果进行保存.如果用Tensorflow去实现神经网络,所要保存的就是神经网络中的各项权重值.建议可以使用Saver类保存和加载模型的结果. 1.使用tf.train.Saver.save()方法保存模型 tf.train.Saver.save(sess, save_path, global_step=None, latest_filename=None, meta_graph_suffix='meta', write_meta_graph

tensorflow 1.0 学习:用别人训练好的模型来进行图像分类

谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类. 下载地址:https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015.zip 下载完解压后,得到几个文件: 其中的classify_image_graph_def.pb 文件就是训练好的Inception-v3模型. imagenet_synset_to_human_label

python 使用新训练好的模型进行分类

6.在python中使用已经训练好的模型. Caffe只提供封装好的imagenet模型,给定一副图像,直接计算出图像的特征和进行预测.首先需要下载模型文件. Python代码如下: from caffe import imagenet from matplotlib import pyplot # Set the right path to your model file, pretrained model # and the image you would like to classify.

在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现

现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过直接调用 TensorFlow 的 C/C++ 接口来导入 TensorFlow 预训练好的模型. 1.环境配置 点此查看 C/C++ 接口的编译 2. 导入预定义的图和训练好的参数值 // set up your input paths const string pathToGraph = "/ho

奉献pytorch 搭建 CNN 卷积神经网络训练图像识别的模型,配合numpy 和matplotlib 一起使用调用 cuda GPU进行加速训练

1.Torch构建简单的模型 # coding:utf-8 import torch class Net(torch.nn.Module): def __init__(self,img_rgb=3,img_size=32,img_class=13): super(Net, self).__init__() self.conv1 = torch.nn.Sequential( torch.nn.Conv2d(in_channels=img_rgb, out_channels=img_size, ke

【猫狗数据集】使用预训练的resnet18模型

数据集下载地址: 链接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw提取码:2xq4 创建数据集:https://www.cnblogs.com/xiximayou/p/12398285.html 读取数据集:https://www.cnblogs.com/xiximayou/p/12422827.html 进行训练:https://www.cnblogs.com/xiximayou/p/12448300.html 保存模型并继续进行训练:htt

下载inception v3 google训练好的模型并解压08-3

import tensorflow as tf import os import tarfile import requests #模型下载地址 inception_pretrain_model_url='http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz' #模型存放地址 inception_pretrain_model_dir="inception_model" if not o

《随机RFM模型及其在零售顾客价值识别中的应用》整理

根据<随机RFM模型及其在零售顾客价值识别中的应用>进行摘抄,整理,以备后期借鉴使用 一.问题与思路 问题:对顾客价值进行准确的识别与评估 输入:流失时间(最近一次购买时间)(Recency,R).购买次数(Frequency,F).购买金额(Monetary,M) 输出:顾客未来反应的可能性 思路: 1.利用随机概率模型建立起R-F-M变量与顾客未来购买行为反应间的联系 通常都是利用泊松(Poisson)或指数(Exponential)分布捕捉顾客购买时间以及 次数,再利用Gamma分配捕捉

用隐马尔可夫模型做基因预测

什么是隐马尔可夫模型 隐马尔可夫模型(Hidden Markov Model,HMM) 是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程.其难点是从可观察的参数中确定该过程的隐含参数.然后利用这些参数来作进一步的分析,例如模式识别,特别是我们今天要讲的基因预测.是在被建模的系统被认为是一个马尔可夫过程[一段组装好的序列]与未观测到的(隐藏的)的状态[哪些是编码区哪些不是]的统计马尔可夫模型. 下面用一个简单的例子来阐述: 假设我手里有两个颜色不同的骰子,一个是橘色(Coding,C)的另