五、建立语言模型几种方法及使用
2014-11-07 16:33
323 查看
建立语言模型几种方法及使用
Jiangdg_VIP
http://blog.csdn.net/u012637501
译自:http://cmusphinx.sourceforge.net/wiki/tutoriallm
通常有两种类型模型来描述语言,即语法和静态语言模型。语法描述的是非常简单的语言,比如命令和控制语言,并且语法通常使用比较简单的代码手动或者自动来编写。对于静态语音模型,则就有很多方法来实现它。比如,当你的语言数据库比较大的时候,我们可以通过CMU语言建模工具来对其进行语言建模;当你的语言数据库比较小的时候,可以使用CMU在线建模工具进行建模;当你需要特定的选项或者建立ARPA模型,你也可以使用自己偏爱的工具包。
一、创建一条语法
语法通常使用JSGF格式来编写,示例如下:
注意:关于更多的JSGF知识详见:http://www.w3.org/TR/jsgf/
二、使用CMUCLMTK工具建立一个静态语言模型
1.cmuclmtk工具
下载并安装cmuclmtk工具,详见 CMU
Sphinx Downloads
2.ARPA模型训练
(1)创建一个语料库(.txt)
创建一个的语料库,用它来生成我们所需要的语言模型。这个语料库中的句子或词组,需要使用<s>和</s>标记以便表明句子的开始和结束。举例
注意:语料库的句子或词组数量越多,建立的语言模型就越好。比如,sphinx4开发包中的weather.txt语料库,差不多包含了1000,000条句子。
(2)生成词汇表文件
词汇表文件,主要作用是包含(列出)语料库中出现的所有词汇。执行命令:
注意两点:
a.如果你想从生成的词汇表文件中删除数字、错写单词、名字,你可以先查看语料库然后再对词汇表文件中的内容进行查找删除;
b.如果你想要一个封闭的词汇语言模型(即语言模型中一般不允许出现语料库没有定义的单词),你可以从语料库中删除没有包含到词汇表文件的句子。
(3)使用以下命令生成arpa格式的语言模型
(4)生成CMU二进制格式文件(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)
博主笔记:
这里需要注意下,在线建模的语料库文本内容格式和使用CMUCLMTK工具建模是不一样的。
(2)在线语言建模: http://www.speech.cs.cmu.edu/tools/lmtool-new.html
点击"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格式的语言模型:
博主笔记:
.lm格式语言模型:适用于小语料库
.DMP格式语言模型:使用与大语料库。两种都可以通过使用-lm选项来指定语言模型。
五、如何使用建立好的语言模型
1.在PocketSphinx中使用语言模型
如果你已经安装好了PocketSphinx,PocketSphinx源文件中就会有一个名为pocketsphinx_continuous
应用程序例子。我们可以使用这个例子进行语言识别,但是需要指定其语言模型和字典文件:
命令:
当终端出现"READY…",就可以开始进行语音识别且准确率很好。如果比较差的话,则说明你的麦克风或者声卡有问题。
2.在Sphinx4中使用语言模型
详见http://cmusphinx.sourceforge.net/sphinx4/doc/UsingSphinxTrainModels.html
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 browser new e-mail forward backward next window last window open music player
博主笔记:
这里需要注意下,在线建模的语料库文本内容格式和使用CMUCLMTK工具建模是不一样的。
(2)在线语言建模: http://www.speech.cs.cmu.edu/tools/lmtool-new.html
点击"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
相关文章推荐
- 如何重覆使用ECO建立的企業邏輯模型
- 〔转载〕建立经济理论模型方法
- Vista几种Vista方法的使用范围
- 改造后的SQL SERVER数据库访问模型及使用方法3
- 改造后的SQL SERVER数据库访问模型及使用方法2
- 水晶报表使用经验谈1--建立水晶报表第一步及编译最易出现错误的解决方法及报表转换成pdf文档进行打印方法
- GridView 几种使用方法
- 将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)
- 最好的FCKeditor编辑器,使用方法(多国语言的)
- C#中使用split分割字符串的几种方法
- sps编程模型中打开站点的几种方法
- 使用反射实现根据名称动态创建窗体的几种方法。
- 搜索引擎中几种语言模型的性能比较
- [Nebula2]使用3dmax7,nmaxtoolbox导出模型到nebula2遇到的问题及解决方法
- 使用反射实现根据名称动态创建窗体的几种方法。
- 组件的几种方法VC中使用COM
- sps编程模型中打开站点的几种方法
- 一种使用递归从数据库读取数据来动态建立菜单的方法
- C#中使用split分割字符串的几种方法
- 几种建立http-tunnel的方法