语言模型训练工具SRILM

本文介绍Srilm工具包的Windows编译步骤,并详细解析如何利用Srilm进行n-gram语言模型的构建与评估,包括从语料库生成n-gram计数文件、训练语言模型以及计算测试集的困惑度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Srilm的全称是Stanford Research Institute Language Modeling Toolkit  。他被用来构建和应用统计语言模型,主要用于语音识别,统计标注和切分,以及机器翻译等工作。

    一、windows下编译

   

ubuntu编译,可以再52nlp中去找。

VC编译,可以再下面链接找,

http://www.keithv.com/software/srilm/

以VS2008为例,可以下载最新的SRILM

Instructions

  • Download and unpack the SRILM toolkit.
  • Unzip the below solution archive to the SRILM root directory.
  • Load the srilm.sln in Visual Studio 2008.
  • Select either Debug or Release in Build->Configuration Manager
  • Right-click on each project in the libs folder, select Build.
  • Build any of the command-line utilities you need.

简单说,

1,下载SRILM工具包

2, 解压工具包,

3,把链接出下载srilm.sln用VS2008打开,

4,把工具包的东西都放到srilm.sln所在文件夹下,

5,把LIB的那个project编译一下,

6,把其他project都编译一下。

VC中编译SRILM就大功告成了。

ps:直接按照上面的步骤来做并不能成功编译,原因是有几个工程缺少头文件,到相关目录下找到头文件加上即可。

更多资料:http://cqusuperyang.blog.163.com/blog/static/3416516020126292910902/

 

二、实用简介

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,均为困惑度。其公式稍有不同,如下:
ppl=10^{-{logP(T)}/{Sen+Word}}; ppl1=10^{-{logP(T)}/Word}
其中Sen和Word分别代表句子和单词数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值