转:http://www.52nlp.cn/language-model-training-tools-srilm-details
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,均为困惑度。其公式稍有不同,如下:
ppl=10^{-{logP(T)}/{Sen+Word}}; ppl1=10^{-{logP(T)}/Word}
其中Sen和Word分别代表句子和单词数
分享到:
相关推荐
语言模型训练工具 做语音识别 自然语言处理 都需要的工具 官网地址 http://www.speech.sri.com/projects/srilm/download.html 一般打不开 我就上传到这里 供朋友们下载
- **arpa格式**: srilm训练出的语言模型通常保存为arpa格式,这是一种标准的文本格式,便于与其他工具交互。 通过srilm,你可以训练自己的语言模型,用以适应特定领域的文本,比如新闻、小说或者对话,提高模型的...
SRILM是一个广泛使用的统计语言建模工具包,主要设计用于训练和评估各种类型的N-gram语言模型。它由John W. Elder IV、Steve Stentiford和Gustavo H. J. Magerman在卡内基梅隆大学开发,为语音识别、机器翻译、信息...
5.ngram.read.jpg:与训练无关,读取ARPA格式的语言模型的过程; 6.SRILM.uml:以上5个文件的原始图,以StarUML绘制(利用StarUML可直接编辑) 7.SRILM.vsd:ngram-count相关的主要数据结构的内存布局 + ngram条件...
1. **训练工具**:这些工具负责从大量文本数据中提取n-gram统计信息,构建语言模型。例如,`ngram-count`用于生成n-gram计数,`lmest`用于从计数中估计模型参数。 2. **解码器**:如`ngram-language-model`,用于在...
SRILM(Stanford Research Institute Language Modeling Toolkit)是一个广泛使用的语言建模工具包,它主要用于统计语言模型的训练和评估。SRILM支持多种N-gram模型,包括传统的backoff模型、Kneser-Ney平滑的模型等...
`srilm`是一个开源软件包,提供了训练和评估各种n-gram语言模型的能力。n-gram模型是一种基于概率的统计方法,它假设当前词出现的概率可以由其前面连续的n-1个词来预测。`srilm`支持从一元到高阶n-gram模型的训练,...
SRILM是一个较早出现的语言模型工具包,提供了丰富的功能来构建和评估语言模型。而KenLM则是在SRILM之后发展起来的一种更高效、更快速的语言模型工具包,它不仅提高了训练速度,还支持大规模数据集的训练。 #### 可...
2. **训练与评估**:用户可以利用SRILM提供的工具训练自己的语言模型,例如,使用ARPA格式的数据集进行训练。同时,它还提供了一套完整的评估工具,用于衡量模型的性能,如困惑度(Perplexity)。 3. **数据预处理*...
本人阅读SRILM源代码的笔记,使用starUML及其逆向工程工具绘制。 主要针对SRILM的训练,即ngram-count。 内含5个jpg文件: 1.类图--与ngram-count相关的主要...5.ngram.read--与训练无关,读取ARPA格式的语言模型的过程
通过SRILM,研究人员可以训练出高质量的语言模型来提高NLP系统的性能。当前稳定版本为1.5.6,在Linux环境中可以执行。 #### 二、Cygwin环境介绍 Cygwin提供了一个类似Linux的环境给Windows用户,使得用户可以在...
在这个名为“作业1-SRILM实验1”的实验中,主要关注的是如何使用SRILM(Stanford Recurrent Language Modeling Toolkit)工具包来训练语言模型,并对比不同平滑算法的效果。实验基于thchs30的中文语料库,这是一个...
5.ngram.read.jpg:与训练无关,读取ARPA格式的语言模型的过程; 6.SRILM.uml:以上5个文件的原始图,以StarUML绘制(利用StarUML可直接编辑) 7.SRILM.vsd:ngram-count相关的主要数据结构的内存布局 + ngram条件...
"srilm-1.7.3" 是一个用于自然...总之,"srilm-1.7.3" 是一个强大的自然语言处理工具,适用于科研和开发,其在64位Ubuntu 16.04 Server上的兼容性为用户提供了便利,使得在Linux环境中进行语言模型实验变得更为简单。
大多数现有的语言模型工具包都在RAM(随机存取存储器)中运行,这在一定程度上限制了模型的大小。为了解决这一问题,本文贡献了一系列基于磁盘的流式算法,这些算法能够利用可配置量的RAM来更快速地估计Kneser-Ney...
- **背景**:SRILM(SRI Language Model Toolkit)是由SRI International开发的语言模型训练工具。 - **功能**:SRILM主要用于训练语言模型,用于评估句子在特定语言中的概率分布。在统计机器翻译中,语言模型是评估...
在Kaldi中,SRILM被用来训练和评估语言模型,以提高识别性能。执行 `install_srilm.sh` 脚本会完成以下步骤: 1. 下载SRILM源代码:如果尚未安装,脚本会从SRILM官方网站获取最新的源代码。 2. 编译SRILM:这通常...
我们可以使用LMToolkits,如SRILM或KenLM,生成相应的语言模型文件,然后在C++程序中加载使用。 七、匹配算法与解码 在解码阶段,我们通过Viterbi算法找到最有可能的词序列。这个过程涉及声学模型和语言模型的联合...
通过合理的数据预处理、拼音转换、模型训练以及参数优化,我们可以构建出一套高效、准确的中文语音识别系统。对于开发者来说,理解和掌握这些知识点对于利用Sphinx进行语音识别应用开发具有重要意义。
统计语言模型工具有比较多的选择,目前使用比较好的有srilm及kenlm,其中kenlm训练速度也更快,号称单机版训练超级快,支持大规模的语料训练,文件的输入格式一行行以空格隔开的文本。kenlm训练语言模型用的是传统的...