SRILM — AN EXTENSIBLE LANGUAGE MODELING TOOLKIT

摘要

SRILM是C ++库,可执行程序和帮助程序脚本的集合,设计用于生成和实验语音识别和其他应用程序的统计语言模型。 SRILM可免费用于非商业目的。 该工具包支持基于N-gram统计数据创建和评估各种语言模型类型,以及几个相关任务,例如统计标记和N-best列表和字格的操作。 本文总结了该工具包的功能,并讨论了其设计和实现,突出了快速原型设计的简易性,工具的可重用性和可组合性。


1.引言

统计语言建模是建立模型的科学(通常是艺术),用于估计单词串的先验概率。 语言建模在自然语言技术和其他领域中有许多应用,其中离散对象的序列起作用,在语音识别和自然语言标记中具有突出的作用(包括特殊任务,如词性标注,单词和句子分割,以及 浅解析)。 正如[1]中所指出的,有效的语言建模技术至少已经出现十年,尽管人们怀疑在上述应用领域取得重大突破是可能的,而且确实需要取得重大进展, [2,3]很难实现突破。

用于统计语言建模的各种软件包已经使用了很多年 - 基本算法很简单,人们可以通过合理的努力方便地实现它们以供研究使用。 其中一个这样的软件包,CMU-Cambridge LM工具包[1],已在研究界广泛使用,并极大地促进了许多从业者的语言模型(LMs)的构建。

本文描述了最近对公共可用的LM工具集SRI语言建模工具包(SRILM)的补充。 与现有的LM工具相比,SRILM提供了一个编程接口和一组可扩展的LM类,几种非标准的LM类型,以及更多的功能,这些功能超越了语言建模,包括标记,N-best rescoring和其他应用程序。 本文描述了SRILM中的设计理念和关键实现选择,总结了其功能,并通过讨论未来发展的不足和计划得出结论。 由于空间不足,我们必须参考其他出版物来介绍语言建模及其在语音识别和其他领域的作用[3,4]。


2.设计目标以及历史

SRILM源于对SRI以前可用的LM工具的不满,以及从头开始设计LM工具包的愿望,并考虑到以下目标:

高效,细致地实施最先进的LM算法,支持竞争系统的开发,主要是语音识别。
灵活性和可扩展性,以便于研究新型LM,同时能够重用现有组件。
一个合理,干净的软件设计,提供应用程序编程接口(API)和用于LM构建和测试的方便的命令工具箱。

该设计受到其他相关软件实施的影响。 CMU-Cambridge工具包[1]以及与其原作者Roni Rosenfeld的讨论,作为一般灵感和参考点。 HTK Lattice Toolkit [5](SRILM有一个接口)为语言模型的可行且高效的API提供了许多好的想法。 探索面向对象设计的决定基于先前的项目,即Common Lisp对象系统中各种类型的统计语法的实现[6]。 软件构建系统借鉴了SRI的Decipher语音识别系统[7]。

在1995年约翰霍普金斯语言模拟夏季研讨会[8]之前,创建了标准N-gram模型的最小功能。在研讨会结束时,增加了对动态LM插值和N-best rescoring的支持,并且存在SRI之外的小型用户社区以及相关的邮件列表。在接下来的四年中,这个小组可以使用一系列alpha版本,同时添加了当前的大部分功能(如下所述)。 1999年7月,abetaversion在一个开源许可证下发布进行一般分发,大约一年后发布1.0版本。在撰写本文时,最新发布的版本是1.3,它增加了一个字图重新刻录工具,一个测试套件和对Windows平台的支持(以前的版本仅限Unix)。 SRI正在进行的政府资助的LM研究与开发大多以SRILM为基础;因此,我们希望能够继续提供源源不断的功能增强(以及错误修复)。


3.功能

3.1 基本LM 操作

SRILM的主要目的是支持语言模型估计和评估。 估计意味着从训练数据创建模型; 评估意味着计算测试语料库的概率,通常表示为测试集的困惑度(PPL)。 由于SRILM中的大多数LM都基于N-gram统计,因此实现这两个目的的工具分别命名为ngram-count和ngram。 标准的LM(具有Good-Turing折扣的三元组和用于平滑的Katz补偿)由一下命令创建:

ngram-count -text TRAINDATA -lm LM

然后可以使用测试语料库评估所得到的LM:

ngram -lm LM -ppl TESTDATA -debug 2

ngram -debug选项控制诊断输出的详细程度。 值2意味着除了标准日志概率和困惑度之外,还要在单词级别报告概率,包括使用的N-gram的顺序。 一些额外的统计数据还有助于衡量词汇外(OOV)词的数量和各种N-gram水平的“命中率”(基于N-gram的LMs)[1]; 这些由ngram本身计算或(如命中率的情况)由分析ngram输出的辅助脚本计算。

SRILM本身不执行文本调节,并将空格之间的所有内容视为单词。 文本的标准化和标记化高度依赖于语料库,通常使用预处理数据的过滤器来完成。

3.2  Bells and whistles

程序ngram-count和ngram具有相当多的选项来控制LM估计和测试的许多参数。 LM训练最重要的参数是

  • 要使用的N-gram的顺序(例如,unigram,bigram)。 N-gram的长度没有内置限制。
  • 要使用的折扣算法的类型。 目前支持的方法包括Good-Turing,absolute,Witten-Bell和modifiedKneser-Ney [9]。 每种不同的方法都需要自己的一组参数,以及是否要通过退避或插值来组合高阶和低阶估计。
  • 可选的预定义词汇表,用于限制或增加训练数据中的单词集。
  • 是否要丢弃未知单词或将其视为特殊的“未知单词”标记。
  • 是否在输入文本中折叠大小写区别。

除了LM估计之外,ngram-count执行有用的N-gram计数操作,例如从文本生成计数,对计数文件求和,以及从高阶计数重新计算低阶计数。 ngram --count处理整数或小数计数,尽管只有一部分平滑算法支持后者(一般来说,那些依赖于计数统计数据的那些算法不支持)。

控制LM评估的主要参数是N-gram的使用顺序(可以低于LM包含的顺序,因此4-gram模型也可以方便地用作二元组或三元模型),以及 要使用的N-gram模型 - 例如,基于单词,基于类或内插的N-gram,以及与该类型的LM相关联的任何附加参数。 支持的模型类型在第3.3节中进一步描述。
除了LM评估之外,ngram实际上是一种以各种方式操纵LM的工具。 除了从文本或计数中计算测试集日志概率之外,它还可以

  • 重新规范化模型(重新计算回退权重)
  • 使用标准的基于字的退避LM来近似基于类或插值的N-gram
  • 修剪N-gram参数,使用熵准则[10]
  • 通过去除将被退避取代的N-gram,准备LMs以转换为有限状态图
  • 从LM所体现的分布中生成随机句子。

通过单个单词N-gram模型逼近基于类和插值的N-gram LM的能力值得一些讨论。在其他软件(例如,语音识别器)仅支持标准N-gram的情况下,这两种操作都是有用的。通过将类标签扩展到它们的成员(可以包含多字符串)然后计算单词N-gram字符串的边际概率来近似类N-gram。该操作组合地增加了N-gram的数量,因此仅对于相对较小的模型是可行的。
通过取N-gram输入模型的并集来获得插值退避模型,为每个N-gram分配来自那些模型的概率的加权平均值(在一些模型中,该概率可以通过退避来计算),然后重新规范新模型。我们发现这种插值退避模型一致地给出比相应的标准字级内插模型略低的困惑度。原因可能是退避分布本身是通过插值获得的,与标准插值不同,其中每个组件模型单独退避。

3.3 语言模型的类型

除了标准的基于字的N-gram回退模型,SRILM还实现了其他几种LM类型,其中大多数基于N-gram作为基本构建块。

基于类的模型 - 字类上的N-gram是增加LM的鲁棒性和结合领域知识的有效方式,例如,通过定义反映任务语义的单词类。 SRILM允许类成员是多字符串(例如,“旧金山”可以是“CITY-NAME”类的成员)。这个以及单词可以属于多个类的事实需要使用动态编程来评估类N-gram。 Word类可以手动定义,也可以由单独的程序ngram-class定义,该程序使用Brown算法从bigram统计中引入类[11]。
缓存模型 - 这种众所周知的LM技术为最近的单词分配非零概率,从而模拟单词在短跨度上重现的趋势[12]。它们通常用标准模型进行插值以获得自适应LM。
不流畅和隐藏事件语言模型 - 隐藏事件LM包含出现在模型的N-gram中的特殊单词,但在观察到的单词流中不是明显的。相反,它们对应于隐马尔可夫模型的状态,并且可以用于模拟语言事件,例如未标记的句子边界。可选地,这些事件可以与非自然可能性相关联,以在其他知识源(例如,韵律)上调节LM [13]。一种特殊类型的隐藏事件LM可以通过允许隐藏事件修改单词历史来模拟语音不流畅;例如,单词删除事件将擦除一个或多个单词以模拟错误的开始[14]。

跳过语言模型 - 在这个LM中,历史中的单词被概率性地跳过,允许更远的单词占据他们的位置。使用期望最大化来估计与每个单词相关联的跳过概率。
N-gram的HMM - 该LM由隐马尔可夫模型(HMM)组成,其中每个状态与其自己的N-gram分布相关联。该模型从某个状态生成,直到本地N-gram发出句末,此时它以概率方式转换到邻近状态。 N-gram的HMM提供了可以编码文献中提出的各种LM类型的一般框架,例如句子级混合[15]和枢轴LM [16]。
动态插值的LM - 可以在字级别线性插值两个或多个LM,使得插值权重反映给定最近N-gram历史的模型的可能性[8]。使用空历史,我们获得通常的静态LM插值方法,该方法通常用于将不同的训练材料源组合到单个模型中。

3.4 语言模型的其他应用

多年来,SRILM已经发展到包括超越简单LM构造和评估的工具,主要涵盖语音识别中出现的LM应用。
disambig - 一个基于HMM的标记器,它使用任意顺序的N-gram LM来模拟先前的标记序列。
hidden-ngram - 一个基于隐藏事件N-gram模型的单词边界标记器。
segment-nbest - 一种重新计算工具,它将语言模型应用于一系列相邻的N-best列表,从而克服句子分段不匹配[17]。
lattice-too - 重新分析和扩展字格的工具。 nbest-lattice - 在N-best列表上执行单词错误最小化的工具[18]或构建混淆网络(“sausages”)[19]。与辅助脚本一起,该工具还实现了ROVER算法的基于后验的N-best推广[20,21]。
nbest-scripts - 一组操作和重新排列N-best列表的包装脚本。
pfsg-scripts - 用于将LM转换为字图。
nbest-optimize - 优化基于后验的(“香肠”)解码的对数线性得分组合。


4. 设计与实现

SRILM分为三层设计和实施。
1.核心是包含约50个C ++类的库,用于语言模型和杂项对象(如词汇符号表,N-best列表,字图,DP格子),后者又使用有效容器类的库(例如 ,数组,哈希表)。
2. ngram-count,ngram和taggers等14个主要可执行工具是在库提供的API之上用C ++编写的。
3.许多帮助程序和包装程序脚本执行各种任务,这些任务在gawk和Bourne shell脚本语言中更方便地实现。

我们总结了每个实现层的特征。

4.1 类库

C ++类库实现了SRILM的API。由于几个原因,面向对象的编程结果非常适合LM实现。类层次结构自然地反映了不同LM类型之间的特化关系(例如,类N-gram是N-gram的特殊情况,这是LM的特殊情况)。继承允许以最小的努力从现有的LM变体派生新的LM变体。一个新的LM类最低限度只需要定义一个wordProbfunction,这个方法用于计算给定单词及其历史的条件概率。 1大多数LM函数都是一般定义的,不需要为新的派生LM类重新实现。例如,sentenceProb是根据wordProb定义的,通常继承自通用LM类;但是,给定的LM可以定义自己的sentenceProb版本,以提高效率或改变标准行为。
哈希表,数组,尝试和其他基本数据结构已经从头开始实现,以便在与LM数据结构相关的用途类型下实现速度和紧凑性。 2模板化的数据结构和函数在低级容器之外非常有用;例如,N-gram统计和估计函数被模板化以支持整数和分数计数。

4.2 可执行工具

可执行工具设计为自包含且可以以有用的方式组合。 因此,如前所示,可以在单个调用中从文本文件构建标准LM。 通过使用Unix标准输入/输出和“管道”机制将工具链接在一起,可以实现更复杂的操作。 因此,基于类的N-gram模型可以被训练,修剪,扩展为单词trigram模型,并使用以下管道与另一个模型进行插值(省略了一些选项以节省空间):

replace-words-with-classes TRAINDATA | \
ngram-count -text - -lm - | \
ngram -lm - -prune 1e-5 -write-lm - | \
ngram -lm - -expand-classes 3 -write-lm - | \
ngram -lm - -mix-lm LM2 -write-lm MIXLM

4.3  Helpers and wrappers

其他其他工具在gawk和shell脚本中实现,或者因为它们涉及简单的文本操作,这种方式更方便(例如在上面的示例中使用replace-words-with-classes),或者因为它们只需要一个结合的包装器 基本工具。 后者的一个例子是change-lm-vocab,一个修改现有N-gram LM词汇表的脚本。 该脚本消除了已成为OOV的N-gram(使用文本LM格式),然后让ngram填写新的unigrams并重新规范退避权重。 其他脚本解析工具的诊断输出,例如compute-best-mix,它从ngram -ppl输出计算最佳插值权重。

4.4. 文件格式
SRILM尽可能使用标准文件格式 - 特别是用于N-gram退避LM的ARPA格式。 字图使用SR的概率有限状态语法(PFSG)格式,可以转换为AT&T的有限状态机工具包[22]使用的格式。 在需要新文件格式的地方,我们选择了易于解析的文本表示。 所有主要工具都可以读写压缩文件,因为大量数据和模型通常与LM工作相关联。 我们避免使用二进制文件格式,因为它们缺乏可移植性和灵活性,而更喜欢使用压缩文本格式。

5.缺点和未来发展
在SRILM中没有实现许多成熟的LM技术,例如删除插值或最大熵建模,主要是因为到目前为止,这些技术尚未证明是必不可少的。未来添加的一个候选者是基于灵活类的模型,因为基于类的LM的改进似乎提供了将语法信息结合到LM中的有效且高效的方式[23]。数据结构的低级实现目前偏向于速度和便利而不是内存使用;重新评估这个选择以适应更大的训练语料库可能是值得的。 SRILM目前采用单字节字符编码,并仅使用空白进行标记化;希望在某些时候包括对多字节字符集和SGML标记格式的支持。然而,最终,工具包的开发将继续由研究需求驱动,因此很难预测。
可用性。 SRILM可以在开源社区许可下免费提供给非商业用户,旨在确保其他人的增强功能能够回到用户社区。还提供商业用途许可。文档和软件在http://www.speech.sri.com/projects/srilm/上在线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值