因为经常使用SRILM来建立语言模型,因此把自己在使用过程中的一些心得写下来和大家分享一下。
-help
输出帮助信息
-version
输出版本信息
-order n
设置计数时N-grams的最大阶数,这同样也是生成的语言模型的最大阶数,默认为3。
-vocab vocab_file
读取词典vocab_file。生成语言模型时,如果计数文件中或者训练文件中,如果出现了词典vocab_file之外的词(OOV),则这些词会被替换为
。
-vocab-aliases vocab-aliases_file
读取“词-映射词”文件vocab-aliases_file,其格式如下:
alias word
这样在生成语言模型时,alias会被映射成word。
比如:
PLA 人民解放军
则在计数时,或者生成语言模型时,所有的“PLA”都会被映射为“人民解放军”。
-write-vocab vocab_file
在计数过程中,将生成的词典输出到vocab_file中。
-write-vocab-index vocab-index_file
在计数过程中,将生成的词典输出到vocab-index_file中,并且每个词都有编号。
-tagged
假设训练文件中,包含了“词/标记”组合。
-tolower
把词典中的词都变成小写(对英文)
-memuse
输出内存使用状况。
-text textfile
根据训练文件textfile生成N-gram计数文件或者N-gram语言模型。
-text-has-weights
假设训练文件是有权重的,即每行语句的第一个数字为这行语句的权重,在计数过程中会乘上这个权重。
比如:
3 我 是 中国人
相当于“我 是 中国人”出现了3次。
-no-sos
在计数过程中,每行语句不会自动添加开始符号
-no-eos
在计数过程中,每行语句不会自动添加结束符号
-read count_file
读取计数文件count_file来生成语言模型。
-intersect intersect_file
在读取计数文件counts_file时,通过intersect_file来限制读取计数。可理解为两个计数文件的交集,但是计数仍为counts_file的计数。
-write count_file
把计数文件输出到count_file中。
-write-binary count_binary_file
把计数文件输出到二进制文件count_binary_file中。
-writen countn_file
只把某一阶的计数文件输出来,其中n为1,2,3,4,5,6,7,8或者9。
比如输出3阶计数文件:
-write3 count3_file
-sort
如果使用此选项,那么生成的计数文件将是字典顺序排序的。
-limit-vocab vocabulary.
如果使用此选项,可配合-vocab vocab_file选项。在读取计数文件来生成语言模型时,如果有词出现在词典外,在时,包含此词的计数会被忽略。
-lm lm_file
估计的语言模型输出到lm_file,默认为回退N-gram语言模型。
-write-binary-lm
如果使用此选项,那么生成的语言模型lm_file将会是二进制的。
-nonevents nonevents_file
读取“非事件文件nonevents_file”,其中的词认为是“非事件”,只存在为N-gram中,概率为0。
比如:“美丽”这个词在nonevents_file中,那么生成语言模型时,
3-gram“我 是 美丽”的概率为0,如果用对数表示,则为-99。
但是要注意
3-gram“是 美丽 的”的概率不一定为0的,因为此时估计的概率是“是 美丽”之后接“的”的概率。
-float-counts
如果使用此选项,那么计数不一定是整数,也可为浮点数。
-unk
生成一个“开放式词典”语言模型,也就是说把
标签当成一个普通词。生成语言模型时,默认是移除掉 标签的。
-map-unk 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”折扣算法支持插值。