锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

srilm训练语言模型

时间:2022-12-25 16:00:01 srim2嵌入式微差压传感器

SRILM建立语言模型:

ngram-count -text ${text} -vocab ${vocab} -order 2 -sort -tolower -lm ${arpa}

官方参数说明:

http://www.speech.sri.com/projects/srilm/manpages/ngram-count.1.html

以下是我在使用过程中的一些经验。写下来和大家分享。

-help

输出帮助信息

-version

输出版本信息

-ordern

设置计数时N-grams默认情况下,语言模型的最大阶数也是3。

-vocabvocab_file

读取词典vocab_file。在生成语言模型时,如果词典出现在计数文件或训练文件中vocab_file之外的词(OOV),这些词会被替换

-vocab-aliasesvocab-aliases_file

读取词-映射词文件vocab-aliases_file,格式如下:
aliasword
在生成语言模型时,alias会被映射成word。
比如:
PLA人民解放军
在计数或生成语言模型时,所有PLA”都会被映射为“人民解放军”。

-write-vocabvocab_file

在计数过程中,输出生成的词典vocab_file中。

-write-vocab-indexvocab-index_file

在计数过程中,输出生成的词典vocab-index_file每个字都有编号。

-tagged

假设单词/标记组合包含在训练文件中。

-tolower

把词典里的词都变成小写(对英语)

-memuse

输出内存的使用。

计数选项

-texttextfile

根据训练文件textfile生成N-gram计数文件或N-gram语言模型。

-text-has-weights

假设训练文件有权重,即每行语句的第一个数字是这行语句的权重,在计数过程中会乘以这个权重。
比如:
3我是中国人
相当于“我是中国人三次出现。

-no-sos

在计数过程中,过程中不会自动添加开始符号

-no-eos

每行语句在计数过程中不会自动添加结束符号

-readcount_file

读取计数文件count_file生成语言模型。

-intersectintersect_file

读取计数文件counts_file时,通过intersect_file限制读取计数。可以理解为两个计数文件的交集,但计数仍然是counts_file的计数。

-writecount_file

输出计数文件count_file中。

-write-binarycount_binary_file

输出计数文件到二进制文件count_binary_file中。

-writencountn_file

只输出一阶的计数文件,其中n为1、2、3、4、5、6、7、8或9。
比如输出3阶计数文件:
-write3count3_file

-sort

如果使用此选项,生成的计数文件将按字典顺序排序。

-limit-vocabvocabulary.

如果使用此选项,可以配合-vocabvocab_file选项。读取计数文件生成语言模型时,如果词典外出现单词,则包含该单词的计数将被忽略。

语言模型选项

-lmlm_file

从估计的语言模型输出到lm_file,默认为回退N-gram语言模型。

-write-binary-lm

如果使用此选项,则生成的语言模型lm_file将是二进制。

-noneventsnonevents_file

读取非事件文件nonevents_file”,其中的词认为是“非事件”,只存在为N-gram中,概率为0。
比如美这个词在:nonevents_file在生成语言模型时,
3-gram“我是美的概率为0,如果用对数表示,则为-99。
但是要注意
3-gram“是美丽概率不一定是0,因为此时估计的概率是是美后接的的概率。

-float-counts

如果使用此选项,计数不一定是整数,也可以是浮点数。

-unk

生成一个开放式词典语言模型,即标签被视为一个普通词。在生成语言模型时,默认情况下删除它标签的。

-map-unk&nbp;  word

映射成word,而不使用标签。

-prune    threshold

对语言模型进行剪枝。移除一些N-gram,使用移除之后的语言模型的困惑度相比之前变化不超过threshold。
比如:
-prune    0.2
即(PPLnew-PPLold)/PPLold    <    0.2

-minprune    n

确定哪阶及其上的N-gram需要剪枝,默认为2,即2阶及2阶以上的N-gram都会剪枝。

-debug    level

是否输出debug信息,默认无。

-gtnmin    count

-gtnmin中的n为1,2,3,4,5,6,7,8或者9。设置计数最小阈值count,也就是如果某阶中哪个N-gram的计数小于count,则认为这个N-gram的计数为0。
这个选项不仅对Good-Turing折扣算法有效,对其它回退算法亦有效。
比如:
-gt3min    3
假设3-gram中,“我    是    中国人”只出现了2次,那么“我    是    中国人”在生成语言模型时认为它出现了0次。

-gtnmax    count

设置Good-Turing折扣算法中,计数最大阈值count,超过count,则使用最大似然估计。

在接下来的折扣算法及参数当中,n为1,2,3,4,5,6,7,8或者9。
比如:
-gt2 gt2file
-cdiscount3 0.2
-wbdiscount2

如果n没有指定,那么认为是对所有阶N-gram有效。
比如:
-cdiscount 0.2
-wbdiscount
-ndiscount

如果没有指定折扣算法,默认会使用Good-Turing折扣算法。

-gtn    gtfile

保存或者读取Good-Turing折扣算法参数,包括计数最小最大阈值和折扣因子。
这比较有用,这是因为我们计算Good-Turing折扣算法参数用的无限制的词典,而真正生成最终的语言模型时,会用一个固定词典。
当使用-lm    lmfile选项时,是读取gtfile;否则是保存gtfile。

-cdiscountn    discount

使用Ney的绝对折扣算法,使用参数discount作为折扣常数,discount必须要介于0和1之间。

-wbdiscountn

使用Witten-Bell折扣算法。

-ndiscountn

使用Ristad自然折扣算法。

-addsmoothn    delta

使用“加-k”折扣算法。

-kndiscountn

使用“修正Kneser-Ney”折扣算法。

-kn-counts-modified

如果使用此选项,那么认为读取的计数文件是经过Kneser-Ney算法修正后的。

-knn    knfile

保存或者读取Kneser-Ney折扣算法参数,包括计数最小最大阈值和折扣常数。
这比较有用,这是因为我们计算Kneser-Ney折扣算法参数用的无限制的词典,而真正生成最终的语言模型时,会用一个固定词典。
当使用-lm    lmfile选项时,是读取knfile;否则是保存knfile。

-ukndiscountn

使用“原始Kneser-Ney”的折扣算法。

-interpolaten

如果使用此选项,表示使用折扣算法会进行插值处理,目前仅“Witten-Bell”,“绝对折扣算法”,“原始Kneser-Ney”和“修正Kneser-Ney”折扣算法支持插值。

Tips:

使用nrgam-count,主要是三要素:训练文件,计数文件,语言模型,流程都是“训练文件–>计数文件–>语言模型”。

先将训练文件进行计数,通过-gtnmin    mincount来控制哪些计数丢弃,即计数为0,然后再得到中间计数文件,再针对中间计数文件进行折扣算法,得到最终的语言模型。计数文件是一个中间文件,可以通过-write    count_file来输出保存。

目前ngram-count支持7种折扣算法:

1)-addsmooth    delta
2)-cdiscount    delta
3)-wbdiscount
4)-ndiscount
5)-ukndiscount
6)-kndiscount
7)默认为Good-Turing折扣算法,即不设定上述6种折扣算法,会默认使用Good-Turing折扣算法。
要注意的是,使用Kneser-Ney折扣算法,输出的计数文件是经过Kneser-Ney算法修正之后的计数。

较为常用的使用方法如下:

最简单(Good-Turing折扣算法):ngram-count -text train -lm LM.ARPA
输出词典和计数文件:ngram-count -text train -write-vocab VOCAB -write COUNT -lm LM.ARPA
对语言模型剪枝:ngram-count -text train -prune 0.2 -lm LM.ARPA
设置计数最小阈值:ngram-count -text train -gt1min 1 -gt2min 1 -gt3min 2 -lm LM.ARPA
使用经过插值的修正Kneser-Ney折扣算法:ngram-count -text train -kndiscount -interpolate -lm LM.ARPA
将debug信息输出来:ngram-count -text train -kndiscount -interpolate -lm LM.ARPA -debug 1 2>DEBUG
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章