关于统计语言模型N-gram的理解及sirlm的使用

 

srilm安装及ngram-count简单使用

分类: 语音识别/理解   2278人阅读  评论(1)  收藏  举报

SRILM是一个统计和分析语言模型的工具,提供一些命令行工具,如ngram,ngram-count,可以很方便的统计NGRAM的语言模型。

1,下载

我开始在这个站上下载,感觉很慢。 http://www.speech.sri.com/projects/srilm/download.html。 然后直接换了个站下载,直接下载1.5版本的。

wget ftp://ftp.speech.sri.com/pub/people/stolcke/srilm/srilm-1.5.7.tar.gz 。这个版本也不低,现在最高的版本是1.7.


2,安装

我的机器是64位的。

安装这个包依赖于TCL包,TCL的下载地址是:http://www.tcl.tk/software/tcltk/download.html(这个包的安装,很常规,解压后,进入unix目录,下面就有configure文件了)

安装srilm过程:

  1. export SRILM=`pwd`。
  2. make MACHINE_TYPE=i686-m64。
  3. 如果提示找不到TCL库之类的错误,就修改Makefile文件,里面有  TCL_INCLUDE 与 TCL_LIBRARY 两个变量 ,比如可以分别设为-I/usr/local/include 以及 -L/usr/local/tcl8.5
  4. 进入test目录试一下,cd test ; make all .
这就编译完了,现在的命令行程序都在./bin/i686-m64/目录,我简单的把这个路径加到PATH里面去了。
3,测试

新建一个文本文件,如source.txt,随便搞个内容,如下:

[html]  view plain copy print ?
  1. [root@localhost lm]# cat source.txt   
  2. If you do want to use SRILM or are generally interested in it, please consider joining the SRILM user mailing list.  
  3. [root@localhost lm]#  
然后执行命令

[html]  view plain copy print ?
  1. ngram-count -text source.txt -lm source.lm  

这就会建立基于source.txt的统计语言模型了,存储在source.lm中,如下:

[html]  view plain copy print ?
  1. [root@localhost lm]# cat source.lm   
  2.   
  3. \data\  
  4. ngram 1=22  
  5. ngram 2=22  
  6. ngram 3=0  
  7.   
  8. \1-grams:  
  9. -1.341524   </s>  
  10. -99 <s>   -99  
  11. -1.341524   If  -99  
  12. -1.050479   SRILM   -7.440329  
  13. -1.341524   are -99  
  14. -1.341524   consider    -99  
  15. -1.341524   do  -99  
  16. -1.341524   generally   -99  
  17. -1.341524   in  -99  
  18. -1.341524   interested  -99  
  19. -1.341524   it, -99  
  20. -1.341524   joining -99  
  21. -1.341524   list.   -99  
  22. -1.341524   mailing -99  
  23. -1.341524   or  -99  
  24. -1.341524   please  -99  
  25. -1.341524   the -99  
  26. -1.341524   to  -99  
  27. -1.341524   use -99  
  28. -1.341524   user    -99  
  29. -1.341524   want    -99  
  30. -1.341524   you -99  
  31.   
  32. \2-grams:  
  33. 0   <s> If  
  34. 0   If you  
  35. -0.30103    SRILM or  
  36. -0.30103    SRILM user  
  37. 0   are generally  
  38. 0   consider joining  
  39. 0   do want  
  40. 0   generally interested  
  41. 0   in it,  
  42. 0   interested in  
  43. 0   it, please  
  44. 0   joining the  
  45. 0   list. </s>  
  46. 0   mailing list.  
  47. 0   or are  
  48. 0   please consider  
  49. 0   the SRILM  
  50. 0   to use  
  51. 0   use SRILM  
  52. 0   user mailing  
  53. 0   want to  
  54. 0   you do  
  55.   
  56. \3-grams:  
  57.   
  58. \end\  
  59. [root@localhost lm]#   

如果希望只针对指定的词进行统计,就建立一个词列表文件,如source.dict

[html]  view plain copy print ?
  1. [root@localhost lm]# cat source.dict   
  2. you  
  3. are  
  4. list  
  5. please  
  6. [root@localhost lm]#  

这样的话,等下就只是统计这四个单词。执行命令:

[html]  view plain copy print ?
  1. ngram-count -text source.txt -lm source.lm -vocab source.dict   
结果如下:

[html]  view plain copy print ?
  1. [root@localhost lm]# cat source.lm   
  2.   
  3. \data\  
  4. ngram 1=6  
  5. ngram 2=0  
  6. ngram 3=0  
  7.   
  8. \1-grams:  
  9. -0.60206    </s>  
  10. -99 <s>  
  11. -0.60206    are  
  12. -7.180781   list  
  13. -0.60206    please  
  14. -0.60206    you  
  15.   
  16. \2-grams:  
  17.   
  18. \3-grams:  
  19.   
  20. \end\  
  21. [root@localhost lm]#  

没有2-grams,修改source.dict,使其可以出现2-grams语法,如下:

[html]  view plain copy print ?
  1. [root@localhost lm]# cat source.dict   
  2. you  
  3. do  
  4. mailing  
  5. are  
  6. list  
  7. please  
  8. [root@localhost lm]#   

再执行ngram-count,结果如下:

[html]  view plain copy print ?
  1. [root@localhost lm]# cat source.lm   
  2.   
  3. \data\  
  4. ngram 1=8  
  5. ngram 2=1  
  6. ngram 3=0  
  7.   
  8. \1-grams:  
  9. -0.7781513  </s>  
  10. -99 <s>  
  11. -0.7781513  are  
  12. -0.7781513  do  
  13. -7.269613   list  
  14. -0.7781513  mailing  
  15. -0.7781513  please  
  16. -0.7781513  you -99  
  17.   
  18. \2-grams:  
  19. 0   you do  
  20.   
  21. \3-grams:  
  22.   
  23. \end\  
  24. [root@localhost lm]#  

此时,you do作为一个2-gram出现,表示you 后面有do出现的概率。

N-gram主要理解Unigram、bigram、trigram即可。
核心理解:当前发生的概率取决于前N-1个字的概率。
  • 假设下一个词的出现依赖它前面的一个词,即 bigram,则有:

p(S)=p(w1)p(w2|w1)p(w3|w1,w2)p(wn|w1,w2,,wn1)=p(w1)p(w2|w1)p(w3|w2)p(wn|wn1)

  • 假设下一个词的出现依赖它前面的两个词,即 trigram,则有:

p(S)=p(w1)p(w2|w1)p(w3|w1,w2)p(wn|w1,w2,,wn1)=p(w1)p(w2|w1)p(w3|w1,w2)p(wn|wn2,wn1)

那么,我们在面临实际问题时,如何选择依赖词的个数,即 N 呢?

  • 更大的 n:对下一个词出现的约束信息更多,具有更大的辨别力
  • 更小的 n:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性。

理论上,n 越大越好,经验上,trigram 用的最多,尽管如此,原则上,能用 bigram 解决,绝不使用 trigram。

从本质上说,这种统计语言模型描述的是有限状态的正则文法语言,而自然语言是不确定性语言,因此与真实语言差异较大,表达能力有限,尤其无法较好的处理长距离依赖语言现象。但是,其抓住了自然语言中的局部性约束(Local Constrain)性质,因此该模型在实际应用中取得了较大的成功



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值