五、建立语言模型几种方法及使用
来源:互联网 发布:淘宝代运营托管 编辑:程序博客网 时间:2024/05/16 17:19
建立语言模型几种方法及使用
Jiangdg_VIP
http://blog.csdn.net/u012637501
译自:http://cmusphinx.sourceforge.net/wiki/tutoriallm
通常有两种类型模型来描述语言,即语法和静态语言模型。语法描述的是非常简单的语言,比如命令和控制语言,并且语法通常使用比较简单的代码手动或者自动来编写。对于静态语音模型,则就有很多方法来实现它。比如,当你的语言数据库比较大的时候,我们可以通过CMU语言建模工具来对其进行语言建模;当你的语言数据库比较小的时候,可以使用CMU在线建模工具进行建模;当你需要特定的选项或者建立ARPA模型,你也可以使用自己偏爱的工具包。
一、创建一条语法
语法通常使用JSGF格式来编写,示例如下:
#JSGF V1.0;/** * JSGF Grammar for Hello World example */grammar hello;public <greet> = (Good morning | Hello) ( Bhiksha | Evandro | Paul | Philip | Rita | Will );
注意:关于更多的JSGF知识详见:http://www.w3.org/TR/jsgf/
二、使用CMUCLMTK工具建立一个静态语言模型
1.cmuclmtk工具
下载并安装cmuclmtk工具,详见 CMU Sphinx Downloads
2.ARPA模型训练(1)创建一个语料库(.txt)
创建一个的语料库,用它来生成我们所需要的语言模型。这个语料库中的句子或词组,需要使用<s>和</s>标记以便表明句子的开始和结束。举例
weather.txt:<s> generally cloudy today </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 </s><s> cloudy damp and misty today </s>
注意:语料库的句子或词组数量越多,建立的语言模型就越好。比如,sphinx4开发包中的weather.txt语料库,差不多包含了1000,000条句子。
(2)生成词汇表文件
词汇表文件,主要作用是包含(列出)语料库中出现的所有词汇。执行命令:
#text2wfreq < weather.txt | wfreq2vocab > weather.tmp.vocab
注意两点:
a.如果你想从生成的词汇表文件中删除数字、错写单词、名字,你可以先查看语料库然后再对词汇表文件中的内容进行查找删除;
b.如果你想要一个封闭的词汇语言模型(即语言模型中一般不允许出现语料库没有定义的单词),你可以从语料库中删除没有包含到词汇表文件的句子。
(3)使用以下命令生成arpa格式的语言模型
#% text2idngram -vocab weather.vocab -idngram weather.idngram < weather.closed.txt#% idngram2lm -vocab_type 0 -idngram weather.idngram -vocab \ weather.vocab -arpa weather.arpa
(4)生成CMU二进制格式文件(DMP)
#sphinx_lm_convert -i weather.arpa -o weather.lm.DMP
注意:CMUCLTK工具包和相应的命令,详见:The CMU-Cambridge Language Modeling Toolkit page
三、使用其他语言模型工具建模 我们也可以使用其他工具包来生成ARPA文本文件,但是生成的文件必须能够被Sphinx解码器解码。比如我们可以使用SphinxBase中的sphinx_lm_sort工具来获取ARPA格式的语言模型文件,命令为:
#sphinx_lm_sort < unsorted.arpa > sorted.arpa,然后我们再调用sphinx_lm_covert工具最终生成DMP语言模型文件即可。另外一些工具如下:
- IRSLM
- MITLM
- SRILM
由于Sphinx是老李和外国友人开发的,所以使用在线建模工具主要适用于英文且语料库比较小的语言建模,比如一些控制命令等。在线语言建模,步骤非常简单:
(1)建立我们所需要的语料库(corpus.txt)open browsernew e-mailforwardbackwardnext windowlast windowopen music player
这里需要注意下,在线建模的语料库文本内容格式和使用CMUCLMTK工具建模是不一样的。
点击"Browse"-->选择语料库"corpus.txt"->点击"COMPILE KNOWLEDGE BASE"即可生成所需的语言模型(.lm)和词典(.dic).然后,我们就可以使用.lm和.dic这两个文件在PocketSphinx测试。
(3)将语言模型(.lm)转换为DMP格式 为了应用程序能够快速的加载规模很大的语言模型,最好是将.lm格式的语言模型转换.DMP格式。因为DMP格式的语言模型为二进制形式,这样可以节省解码器初始化的时间。当然,对于小型的语言模型来说就没有必要了,可以直接使用.lm格式的语言模型。Pocketsphinx和sphinx3都支持使用-lm选项来使用(.lm)和(.DMP)格式的语言模型,但是Sphinx4则需要将DMP格式的语言模型加载到 TrigramModel以及将ARPA模型加载到 SimpleNGramModel。
由于ARPA格式和DMP格式的转换比较成熟,所以我们可以使用sphinxbase提供的 sphinx_lm_convert命令,将.lm格式的语言模型转换为.DMP格式的语言模型:
#sphinx_lm_convert -i model.lm -o model.dmp#sphinx_lm_convert -i model.dmp -ifmt dmp -o model.lm -ofmt arpa#sphinx_lm_convert -i model.arpa -o model.lm.DMP
.lm格式语言模型:适用于小语料库
.DMP格式语言模型:使用与大语料库。两种都可以通过使用-lm选项来指定语言模型。
五、如何使用建立好的语言模型
1.在PocketSphinx中使用语言模型
如果你已经安装好了PocketSphinx,PocketSphinx源文件中就会有一个名为pocketsphinx_continuous
应用程序例子。我们可以使用这个例子进行语言识别,但是需要指定其语言模型和字典文件:
命令:
#pocketsphinx_continuous -lm 8521.lm -dict 8521.dic
当终端出现"READY…",就可以开始进行语音识别且准确率很好。如果比较差的话,则说明你的麦克风或者声卡有问题。
2.在Sphinx4中使用语言模型 详见http://cmusphinx.sourceforge.net/sphinx4/doc/UsingSphinxTrainModels.html
0 0
- 五、建立语言模型几种方法及使用
- srilm建立语言模型
- 建立团队信任的五种方法
- 建立团队信任的五种方法
- 几种建立http-tunnel的方法
- 几种建立http-tunnel的方法
- 几种建立http-tunnel的方法
- 几种建立http-tunnel的方法
- 几种建立http-tunnel的方法
- Java几种建立实例的方法
- 建立对象模型方法
- Eclipse配置SVN的几种方法及使用详情
- Eclipse配置SVN的几种方法及使用详情
- 建立团队信任的五种方法(摘自Infoq.com)
- 【windows程序设计】 建立窗口的几种方法
- Android建立对话框基本的几种方法
- 关于建立本地web服务器的几种方法
- 关于二叉树建立的几种方法
- HEVC
- Bitmap位图渲染与操作(图片移动,放大,缩小,旋转,镜像发转)
- Dex Loader] Unable to execute dex: Multiple dex files解决办法
- 九的余数
- 学习jQuery Ajax的部分收获
- 五、建立语言模型几种方法及使用
- CPU高速缓存行对齐(cache line)
- 百万用户时尚分享网站feed系统扩展实践
- Android系统中设置TextView的行间距(非行高)
- Java语言中,以String作为类型的变量在作为方法参数时所表现出的“非对象”的特性。
- 分布式设计《初尝hessian》
- Android Launcher分析和修改2——Icon修改、界面布局调整、壁纸设置
- Objective-C Runtime
- 对consistencygroup的一些研究和实践