kaldi中librispeech例子的rnn语言模型重打分
先来简单回顾一下神经网络语言模型。语言模型 (Language Models) 是语音识别系统中的重要组成部分,语音识别的核心公式如下
这可进一步表示为一系列单个词的条件概率的乘积,这些条件概率取决于它们各自的前文序列。这也是当前统计语言模型的核心公式,在大规模训练语料库中用合适的模型统计分析得到词与词之间的关系依赖,即语义信息。n 元语法模型就是用马尔科夫假设限制了前文的长度,然后用频率近似代替概率,是一种非常简单有效的建模方法。从公式 (2) 中可以看出统计语言建模的关键是学习长距离前文依赖关系 (long-span context depedency),但是用 n 元语法模型直接对长距离历史信息进行建模,即 n 的取值较大时,通常会由于需要统计的情况呈指数级增长,并且很多种情况不会出现在语料库中,从而导致严重的数据稀疏问题,这也是 n 元语法模型的局限。
rnn可以解决这一问题,但rnn能获取很长的上下文依赖,不能用穷举法生成ARPA文件,进而无法构建G.fst.因此一般用rnn对ngram模型重打分。
rnn重打分步骤记录即遇到的问题:
先在kaldi/tool下安装rnn
用./extras/install_faster_rnnlm.sh直接安装失败,安装包网页没权限,打不开
在csdn上买了一个安装包,存在桌面文件夹kaldi中
需要的可以参考此链接rnn安装包
解压faster-rnnlm-master.zip重命名为faster-rnnlm
cd faster-rnnlm/
mv eigen eigen3
测试rnn
参考链接:https://blog.csdn.net/u011500062/article/details/50802892
需要人构造text文件
我构造的如下:
train.txt
test.txt
测试代码:
./rnnlm -train train.txt -valid train.txt -rnnlm model -hidden 40 -rand-seed 1 -debug 2 -bptt 3 -class 200
./rnnlm -rnnlm model -test test.txt -nbest -debug 0 > scores.txt
测试 结果:
scores.txt
因此rnn工具安装🆗!
问题:直接走aishell下的run_rnn.sh,local/run_rnnlm.sh第二部出错
解决方法:
local/run_rnnlm.sh脚本第59、60行改为:
$KALDI_ROOT/tools/extras/check_for_rnnlm.sh "$rnnlm_ver/$rnnlm_ver" || exit 1
rnnlm_path="$(utils/make_absolute.sh $KALDI_ROOT)/tools/$rnnlm_ver/$rnnlm_ver/rnnlm"
问题:走完local/run_rnnlm.sh的stage2,stage3又出问题:
看log文件依然是rnn路径不对
在local/rnnlmrescore.sh改
17行为:rnnlm_ver=faster-rnn
188行为:utils/rnnlm_compute_scores.sh --rnnlm_ver $rnnlm_ver/$rnnlm_ver $rnndir $adir.JOB/temp $adir.JOB/w ords_text $adir.JOB/lmwt.rnn \
结论:tri5a:rnn比ngram提升了0.1个多百分点,L=0.25效果最佳
- 点赞
- 收藏
- 关注作者
评论(0)