描述语言的模型常见的有关键词列表,语法,统计语言模型,你可以基于你的使用场合选用不同解码方式,也可在运行过程在不同模型间切换。 关键词列表和语法模型属于小众模型,以下主要描述统计语言模型的使用。
构建语言模型的方法有很多种,当词汇量小时候可以在线构建,而当词汇量大时候可以用CMU的专用工具构建。
语言模型有3中存储和加载格式:文本 ARPA 格式, 二进制BIN格式和二进制DMP格式。 ARPA格式存储空间大但是可以编辑,文件扩展名lm,二进制格式占用空间小且家在快,有工具可以实现2种格式转换。至于DMP格式目前已经废弃了,不是推荐格式。
1 在线构建简单语言模型
如果使用语言是英语且词汇量较小,使用这种方式是非常合适的。
1.1 创建语料库(corpus)
语料库就是用来训练语言模型的一些句子,简单讲这些句子就是你用于语音识别的。可以用一个text文件存储它们。
1)我们创建文件corpus.txt,如下所示:
open browser
new e-mail
forward
backward
next window
last window
open music player
1.2 然后登录http://www.speech.cs.cmu.edu/tools/lmtool-new.html. 点击 “Browse…” , 选择上面创建的文件 corpus.txt
, 然后继续点击 “COMPILE KNOWLEDGE BASE”
1.3 下载在线工具生成的TAR1084.tgz,并解压;真正有用的是1048.dic 1048.lm
1.4 测试
pocketsphinx_continuous -inmic yes -lm 1048.lm -dict 1048.dic
试用了这个新的在线工具,发现比之前老的在线工具识别精度提高不少!!!
2 用CMU工具构建语言模型
用CMU工具构建语言模型大致步骤包括1)准备语料库 2)用CMU工具训练语言模型。
常见CMU工具有:IRSLM ,MITLM , SRILM, CMUCLMTK。
2.1使用工具CMUCLMTK训练ARPA语言模型
(1)准备语料库
语料库格式为
and ,这里创建如下weather.txt文件。通常语料文件库越大,识别精度越高。
generally cloudy today with scattered outbreaks of rain and drizzle persistent and heavy at times
some dry intervals also with hazy sunshine especially in eastern parts in the morning
highest temperatures nine to thirteen Celsius in a light or moderate mainly east south east breeze
cloudy damp and misty today with spells of rain and drizzle in most places much of this rain will be
light and patchy but heavier rain may develop in the west later
(2)生成vocabulary文件
text2wfreq < weather.txt | wfreq2vocab > weather.tmp.vocab
text2wfreq:统计文本文件中每个词出现的次数,得到一个后缀为wfreq的文件。
wfreq2vocab:统计文本文件中含有多少个词,按照字母排序,没有重复。
注意:如果在vocabuary中发现有错误词语或者不想要的词语或者一些字典中未有生词可以从文件weather.txt中移除生成weather.closed.txt。
(3)生成ARPA语言模型
text2idngram -vocab weather.vocab -idngram weather.idngram < weather.closed.txt
我们这里没有想移除的所以,用如下命令:
text2idngram -vocab weather.tmp.vocab -idngram weather.idngram < weather.txt
idngram2lm -vocab_type 0 -idngram weather.idngram -vocab weather.tmp.vocab -arpa weather.lm
text2idngram:列举文本中出现的每一个n元语法。产生一个二进制文件,含有一个n元数组的数值排序列表,对应于与词有关的的N-Gram
idngram2lm:输入文件包括一个idngram文件,一个vocab文件,输出为ARPA文件
(4) 转换为BIN格式
sphinx_lm_convert -i weather.lm -o weather.lm.bin
2.2 使用工具SRILM训练声学模型
SRILM使用简单且是目前比较高级的工具,对于大规模语言训练比较适合。
(1)准备语料库
语料库的大小取决于特定领域词汇量的大小,通常一个好的模型至少需要100mb级语料。可以通过转录现有记录资料,或者从web搜集,当然最有价值的东西还是源于现实生活中使用那些的那些数据。
搜集的语料通常还需要清洗,如移除标点,句子分行,数字转化为文本表示等等,这些工作可以用脚本来完成。
(2)划分训练和测试数据
(3)初始化模型估计
任务和底层算法需求不同,那么参数估计就不同。对于book-like常用Knesser-Ney discounting,对于command-like常用Witten-Bell discounting 或者Absolute discounting
ngram-count -kndiscount -text text.txt -lm text.lm
(4)将你的模型与通用语言模型混合(可选)
这种混合通常可以提高语言模型的覆盖度,常见通用语言模型有:
CMUSphinx generic model
Language model from Cantab Research trained on gigaword corpus
基于测试数据集合,评估确定混合参数:ngram -lm your.lm -ppl test.txt -debug 2 > your.ppl
ngram -lm generic.lm -ppl test.txt -debug 2 > generic.ppl
compute-best-mix your.ppl generic.ppl
ngram -lm your.lm -mix-lm generic.lm -lambda
(5)模型大小优化
模型太大的话,解码器无法直接使用,因此需要减小到合理的模型大小。你需要确定合理亚索因子。
ngram -lm mixed.lm -prune 1e-8 -write-lm mixed_pruned.lm
(6) 评估模型质量
ngram -lm your.lm -ppl test.txt