SRILM使用说明

大笑http://blog.csdn.net/zhoubl668/article/details/7759042      


感谢原文作者精彩的讲解,为我们的入门铺平了道路! 


SRILM是著名的约翰霍普金斯夏季研讨会(Johns Hopkins Summer Workshop)的产物,诞生于1995年,由SRI实验室的Andreas Stolcke负责开发维护。


  关于SRILM的安装,我已经在前面关于moses平台搭建的文章(参见:《Moses相关介绍》和《Ubuntu8-10下moses测试平台搭建全记录》)中介绍过了,这里就不再重复。准确的说,SRILM并不是因机器翻译而诞生的,它主要是为语音识别所开发的,全称为Stanford Research Institute Language Modeling Toolkit。事实上统计机器翻译与语音识别关系千丝万缕,我会在以后的文章中介绍。


  SRILM用来构建和应用统计语言模型,主要用于语音识别,统计标注和切分,以及机器翻译,可运行在UNIX及Windows平台上。它主要包含以下几个部分:


  • 一组实现的语言模型、支持这些模型的数据结构和各种有用的函数的C++类库;

  • 一组建立在这些类库基础上的用于执行标准任务的可执行程序,如训练语言模型,在数据集上对这些语言模型进行测试,对文本进行标注或切分等任务。

  • 一组使相关任务变得容易的各种脚本。


  SRILM的主要目标是支持语言模型的估计和评测。估计是从训练数据(训练集)中得到一个模型,包括最大似然估计及相应的平滑算法;而评测则是从测试集中计算其困惑度(MIT自然语言处理概率语言模型有相关介绍)。其最基础和最核心的模块是n-gram模块,这也是最早实现的模块,包括两个工具:ngram-count和ngram,相应的被用来估计语言模型和计算语言模型的困惑度。一个标准的语言模型(三元语言模型(trigram),使用 Good-Truing打折法和katz回退进行平衡)可以用如下的命令构建:


   ngram-count -text TRAINDATA -lm LM


  其中LM是输出的语言模型文件,可以用如下的命令进行评测:


   ngram -lm LM -ppl TESTDATA -debug 2


  其中具体的参数可参看官方网站的帮助文档,如果你已经在linux下编译好了,可以直接使用man调用帮助文档。事实上,统计机器翻译框架主要用的就是 n-gram这个模块来训练语言模型。下面我们以欧洲语料库的英语语料为例,解析这个工具的作用。语料库下载地址见:欧洲议会平行语料库。本例子使用的是wmt08里面用于英语语言模型训练的europarl-v3b.en,用于机器翻译的预处理过程tokenize和lowercase此处省略,其规模为1412546句:

  1、从语料库中生成n-gram计数文件:

   ngram-count -text europarl-v3b.en -order 3 -write europarl.en.count

  其中参数-text指向输入文件,此处为europarl-v3b.en;-order指向生成几元的n-gram,即n,此处为3元;-write指向输出文件,此处为europarl.en.count,输出内容为:

   …

   sweeteners 66

   sweeteners should 1

   sweeteners should be 1

   …

  分为两列,第一列为n元词,第二列为相应的频率。如一元词sweeteners在语料库中的频率统计为66次;二元词sweeteners shoul在语料库中的频率统计为1次;三元sweeteners should be在语料库中的频率统计为1次。

  2、从上一步生成的计数文件中训练语言模型:

   ngram-count -read europarl.en.count -order 3 -lm europarl.en.lm -interpolate -kndiscount

  其中参数-read指向输入文件,此处为 europarl.en.count;-order与上同;-lm指向训练好的语言模型输出文件,此处为europarl.en.lm;最后两个参数为所采用的平滑方法,-interpolate为插值平滑,-kndiscount为 modified Kneser-Ney 打折法,这两个是联合使用的。需要补充的是,一般我们训练语言模型时,这两步是合二为一的,这里主要是为了介绍清楚n-gram语言模型训练的步骤细节。

  语言模型europarl.en.lm的文件格式如下,为 ARPA文件格式。为了说明方便,文件中的括号是我加上的注释:

 data

 ngram 1=262627 (注:一元词有262627个 )

 ngram 2=3708250 (注:二元词有 3708250个)

 ngram 3=2707112 (注:三元词有 2707112个)

 1-grams:(注:以下为一元词的基本情况)

 -4.891179(注:log(概率),以10为底) ! -1.361815

 -6.482389 !) -0.1282758

 -6.482389 !’ -0.1282758

 -5.254417 “(注:一元词) -0.1470514

 -6.482389 “‘ -0.1282758(注:log(回退权重),以10为底)

 …

 2-grams:

 -0.02140159 !

 -2.266701 ! –

 -0.5719482 !)

 -0.5719482 !’

 -2.023553 ” ‘Biomass’

 -2.023553 ” ‘vertical’

 …

 3-grams:

 -0.01154674 the !

 -0.01154674 urgent !

 -0.01154674 us’ !

 -1.075004 the “.EU” Top

 -0.827616 the “.EU” domain

 -0.9724987 the “.EU” top-level …

3、利用上一步生成的语言模型计算测试集的困惑度:

   ngram -ppl devtest2006.en -order 3 -lm europarl.en.lm > europarl.en.lm.ppl

  其中测试集采用wmt08用于机器翻译的测试集devtest2006.en,2000句;参数-ppl为对测试集句子进行评分(logP(T),其中P(T)为所有句子的概率乘积)和计算测试集困惑度的参数;europarl.en.lm.ppl为输出结果文件;其他参数同上。输出文件结果如下:

 file devtest2006.en: 2000 sentences, 52388 words, 249 OOVs

 0 zeroprobs, logprob= -105980 ppl= 90.6875 ppl1= 107.805

  第一行文件devtest2006.en的基本信息:2000句,52888个单词,249个未登录词;

  第二行为评分的基本情况:无0概率;logP(T)=-105980,ppl==90.6875, ppl1= 107.805,均为困惑度。


 总结:

一、小数据

假设有去除特殊符号的训练文本trainfile.txt,以及测试文本testfile.txt,那么训练一个语言模型以及对其进行评测的步骤如下:

1:词频统计

      ngram-count -text trainfile.txt -order 3 -write trainfile.count

      其中-order 3为3-gram,trainfile.count为统计词频的文本

2:模型训练

      ngram-count -read trainfile.count -order 3 -lm trainfile.lm  -interpolate -kndiscount

      其中trainfile.lm为生成的语言模型,-interpolate和-kndiscount为插值与折回参数

3:测试(困惑度计算)

     ngram -ppl testfile.txt -order 3 -lm trainfile.lm -debug 2 > file.ppl

     其中testfile.txt为测试文本,-debug 2为对每一行进行困惑度计算,类似还有-debug 0 , -debug 1, -debug 3等,最后  将困惑度的结果输出到file.ppl。

二、大数据(BigLM)

对于大文本的语言模型训练不能使用上面的方法,主要思想是将文本切分,分别计算,然后合并。步骤如下:

1:切分数据

      split -l 10000 trainfile.txt filedir/

      即每10000行数据为一个新文本存到filedir目录下。

2:对每个文本统计词频

      make-bath-counts filepath.txt 1 cat ./counts -order 3

      其中filepath.txt为切分文件的全路径,可以用命令实现:ls $(echo $PWD)/* > filepath.txt,将统计的词频结果存放在counts目录下

3:合并counts文本并压缩

      merge-batch-counts ./counts

      不解释

4:训练语言模型

      make-big-lm -read ../counts/*.ngrams.gz -lm ../split.lm -order 3

     用法同ngram-counts

5: 测评(计算困惑度)

    ngram -ppl filepath.txt -order 3 -lm split.lm -debug 2 > file.ppl


附:SRILM主页推荐的书目和文献。

 入门——了解语言模型尤其是n-gram模型的参考书目章节:

  • 《自然语言处理综论》第一版第6章,第二版第4章(Speech and Language Processing by Dan Jurafsky and Jim Martin (chapter 6 in the 1st edition, chapter 4 in the 2nd edition) )

  • 《统计自然语言处理基础》第6章。(Foundations of Statistical Natural Language Processing by Chris Manning and Hinrich Schütze (chapter 6))

 深入学习相关文献:

  • A. Stolcke, SRILM – An Extensible Language Modeling Toolkit, in Proc. Intl. Conf. Spoken Language Processing, Denver, Colorado, September 2002. Gives an overview of SRILM design and functionality.

  • D. Jurafsky, Language Modeling, Lecture 11 of his course on “Speech Recognition and Synthesis” at Stanford. Excellent introduction to the basic concepts in LM.

  • J. Goodman, The State of The Art in Language Modeling, presented at the 6th Conference of the Association for Machine Translation in the Americas (AMTA), Tiburon, CA, October, 2002. Tutorial presentation and overview of current LM techniques (with emphasis on machine translation).

  • K. Kirchhoff, J. Bilmes, and K. Duh, Factored Language Models Tutorial, Tech. Report UWEETR-2007-0003, Dept. of EE, U. Washington, June 2007. This report serves as both a tutorial and reference manual on FLMs.

  • S. F. Chen and J. Goodman, An Empirical Study of Smoothing Techniques for Language Modeling, Tech. Report TR-10-98, Computer Science Group, Harvard U., Cambridge, MA, August 1998 (original postscript document). Excellent overview and comparative study of smoothing methods. Served as a reference for many of the methods implemented in SRILM.

注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值