
CMUSphinx文档翻译:构建语言模型,Building Language Model
有两种不同的模型可用于描述一个语言 - 语法和统计学语言模型。语法模型描述的是非常简单的语言类型(用于命令及控制),而且它们通常是手写的或是由纯文本来自动生成的。
有多种手段可用来构建统计学语言模型。当妳的数据集狠大的时候,就有必要使用CMU语言建模工具包了。当模型非常小时,妳可以直接使用在线的快速网页工具。如果妳有特殊的需求,或者妳就是想用妳喜欢的工具包来构建ARPA 模型的话,也可以随意。
语法是手动按照JSGF 格式来写的:
#JSGF V1.0;
/**
* 世界妳好(Hello World)的JSGF语法示例
*/
grammar hello;
public <greet> = (Good morning | Hello) ( Bhiksha | Evandro | Paul | Philip | Rita | Will );
参考以下文档,以了解关于JSGF格式的更多信息
妳需要下载并安装cmuclmtk。参考CMU Sphinx下载以了解细节。
首先妳需要将文字清理一下。将缩写展开,将数字转换成单词,将非单词的内容删除。例如,妳可以使用特殊的python 脚本来对从维基百科上转存的XML 进行清理。可以使用http://code.google.com/p/boilerpipe/来清理HTML 网页,这是一个专门用来从HTML中提取文字的软件包
这里有个例子,说明的是如何利用维基百科的文字内容来创建语言模型
http://trulymadlywordly.blogspot.ru/2011/03/creating-text-corpus-from-wikipedia.html
当妳做完了语言模型之后,请将妳的语言模型提交到CMUSphinx 项目中,我们狠乐意将它与所有人分享!
满语(Mandarin)的语言模型大体上与英语一致,只有一点不同,就是,所输入的文字内容必需是已经做了分词处理的。我们提供了一个分词工具和对应的词语列表。
按照以下步骤来创建语言模型:
1) 准备一个将要用来生成语言模型的参考文字。语言模型工具包要求输入的内容是纯文字文件,其中每句话由<s>和</s>标记分隔开。有一些输入过滤器可用于特殊的语料库(corpora),例如电话交换机(Switchboard)、交换链路内协议(ISL)及美国国家标准技术研究所(NIST)会议、HUB5副本。所产生的结果,应当是一组以开始和结束标记(<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>
数据越多,生成的语言模型就越好。sphinx4 中的weather.txt 文件(用来生成天气语言模型)包含了大约100000 个句子。
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.arpa
6) 生成CMU二进制形式的语言模型(DMP)
sphinx_lm_convert -i weather.arpa -o weather.lm.DMP
可在CMU-剑桥语言建模工具包页面找到关于CMUCLTK 工具和命令的文档。
妳还可以使用别的工具包来生成 ARPA 文本文件。但是,生成的文件必须经过排序,才能被Sphinx 的解码器使用。妳可以使用SphinxBase 中包含的sphinx_lm_sort 工具来对一个ARPA 格式的语言模型文件进行排序,例如:
sphinx_lm_sort < unsorted.arpa > sorted.arpa
然后,妳就可以将它转换成DMP 格式,照常使用。
可尝试以下工具包:
它们都狠容易使用。
如果妳的语言是英语,并且文本内容非常少,那么,可以方便地使用网页服务来生成语言模型。以这种方式构建的语言模型对于简单的命令和控制任务是非常有效的。首先妳需要创建一个语料库。
“语料库”,就是一组句子,妳将用它们来训练妳的语言模型。举个例子,我们要为一个移动的互联网设备增加一个假想的主意控制功能。我们需要让它能识别“open browser”、“new e-mail”、“forward”、“backward”、“next window”、“last window”、“open music player”等等命令。所以,我们先创建一个corpus.txt文件:
open browser
new e-mail
forward
backward
next window
last window
open music player
然后访问此网页http://www.speech.cs.cmu.edu/tools/lmtool-new.html。只需猛击“浏览……”(“Browse…”)按钮,选中妳之前创建的corpus.txt 文件,然后猛击“编译知识库”(“COMPILE KNOWLEDGE BASE”)。
还可以在这里找到旧版本的工具: http://www.speech.cs.cmu.edu/tools/lmtool.html
妳应当会看到一个显示了一些状态消息的网页,然后转到一个标题为“Sphinx knowledge base”的网页。在这个页面上有“Dictionary”和“Language Model”两个链接。下载这两个文件,记住它们的名字(它们应当含有4个数字,扩展名为 .dic 和 .lm)。现在,妳可以使用PocketSphinx 来测试新创建的语言模型了。
为了快速地载入大型的语言模型,妳需要将它们转换成二进制格式,那会加快解码器的初始化速度。对于小的语言模型是不必要这么做的。Pocketsphinx和sphinx3都可以在-lm选项中处理这两种格式。Sphinx4要求妳在TrigramModel 模块中使用DMP 模型,而在SimpleNGramModel 模块中使用ARPA 模型。
ARPA格式与DMP 格式是可以互相转换的。妳可以使用sphinxbase中的sphinx_lm_convert 命令来做这种转换:
sphinx_lm_convert -i model.lm -o model.dmp
sphinx_lm_convert -i model.dmp -ifmt dmp -o model.lm -ofmt arpa
此小节将说明,如何使用、测试及改进妳所创建的语言模型。
如果妳已经安装了PocketSphinx,那么,就会有一个叫pocketsphinx_continuous 的程序,可在命令行中运行,用来识别语音。假设它被安装到/usr/local,并且妳的语言模型和词典文件叫做,8521.dic和8521.lm,则,运行以下命令:
pocketsphinx_continuous -lm 8521.lm -dict 8521.dic
妳会看到一大堆诊断消息,接下来是一个暂停,接下来是“READY…”。现在妳可以试着念一些命令。它应当可以准确地识别出这些命令。如果没有识别的话,检查一下妳的话筒或声卡。
妳只需要编辑配置文件,在其中写上正确的模型文件名。Sphinx-4主要是使用DMP 格式的。参考以下文档以了解细节:
http://cmusphinx.sourceforge.net/sphinx4/doc/UsingSphinxTrainModels.html
未知美人
HxLauncher: Launch Android applications by voice commands