CMUSphinx支持多种语言解码模型,包括:关键字列表模型、语法模型、统计语言模型和语言语音模型。不同的模型具有不同的功能和性能属性,我们可以在实际应用中根据不同需求选择不同的模型。这里我们主要介绍一下常用的统计语言模型的构建方法。
文本准备(Text preparation)
首先,我们需要准备大量的干净的文本。扩展缩略语,将数字转换为单词并清除非单词项(如特殊字符,标点符号等)。清洗文本的工具有Wikiextractor、BoilerPipe等。在这里需要注意的是,对于中文或者一些相似的其他语言,我们需要对输入的原始文本进行分词,可以使用分词工具和相关单词列表来实现这个任务。
一、利用SRILM训练ARPA模型
利用SRILM训练模型非常简单,并且是迄今为止最先进的训练工具。我们可以使用如下命令训练一个模型:
ngram-count -kndiscount -interpolate -text train-text.txt -lm your.lm
如果需要精简模型,可以使用如下命令:
ngram -lm your.lm -prune 1e-8 -write-lm your-pruned.lm
训练完成之后,可以使用如下命令对当前模型进行测试:
ngram -lm your.lm -ppl test-text.txt
二、利用CMUCLMTK训练ARPA模型
在使用CMUCLMTK训练ARPA模型之前,需要下载和安装CMUCLMTK,使用CMUCLMTK训练模型的过程如下:
1)准备一个用于生成语言模型的参考文本。CMUCLMTK期望它的输入以标准化文本文件的形式存在,并以 <s> 和 </s>作为语句的分割符号。示例如下:
<s> generally cloudy today with scattered outbreaks of rain and drizzle persistent and heavy at times </s>
<s> some dry intervals also with hazy sunshine especially in eastern parts in the morning </s>
<s> highest temperatures nine to thirteen Celsius in a light or moderate mainly east south east breeze </s>
<s> 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 </s>
输入的文本数据越多,生成的语言模型越好。
2)生成词汇表文件。词汇表文件包含了输入文本中的所有单词。命令如下:
text2wfreq < weather.txt | wfreq2vocab > weather.tmp.vocab
3)我们可以编辑生成的词汇表,以修改输入文本中拼写错误的单词。
4)如果我们想生成一个封闭的词汇语音模型,即改模型对不需要的单词无感知,那么我们可以在输入文本中将其移除,使得这些单词不会出现在词汇表文件中。
5)生成ARPA格式的模型,命令如下:
text2idngram -vocab weather.vocab -idngram weather.idngram < weather.closed.txt
idngram2lm -vocab_type 0 -idngram weather.idngram -vocab weather.vocab -arpa weather.lm
6)生成CMU二进制文件:
sphinx_lm_convert -i weather.lm -o weather.lm.bin
除了上述两种构建语言模型的工具外,还有其他的语音模型构建工具,如:IRSLM,MITLM。
在Sphinx4中使用语音模型的方法如下:
configuration.setLanguageModelPath("file:8754.lm");
configuration.setLanguageModelPath("resource:/com/example/8754.lm");
参考:https://cmusphinx.github.io/wiki/tutoriallm/#building-a-statistical-language-model