用srilm生成语言模型
SRILM的主要目标是支持语言模型的估计和评测。估计是从训练数据(训练集)中得到一个模型,包括最大似然估计及相应的平滑算法;而评测则是从测试集中计算其困惑度。其最基础和最核心的模块是n-gram模块,这也是最早实现的模块,包括两个工 具:ngram-count和ngram,相应的被用来估计语言模型和计算语言模型的困惑度。
1.统计语料库生成n-gram统计文件
ngram-count -vocab segment_dict.txt -text train_data -order 3 -write my.count -unk
-vocab 词典文件,一行代表一个切词,格式如下:
中国 人民 你好
-text 语料库,一行行的数据,行内数据用空格隔开来表示切词,格式如下:
中国 人民 刘德华 歌曲 好 听 吗
-order 最大的n元模型,3表示统计1元模型(unigram)、2元模型(bigram)、3元模型(trigram)
-write 生成的统计文件,格式如下(ngram count):
<s> 2 <s> 中国 1 <s> 中国 人民 1 <s> 刘德华 1 <s> 刘德华 <unk> 1 中国 1 中国 人民 1 中国 人民 </s> 1 人民 1 人民 </s> 1 </s> 2 刘德华 1 刘德华 <unk> 1 刘德华 <unk> <unk> 1 <unk> 4 <unk> <unk> 3 <unk> <unk> <unk> 2 <unk> <unk> </s> 1 <unk> </s> 1
-unk 把不在词典里面的次表示为<unk>
2.生成语言模型
ngram-count -vocab segment_dict.txt -read my.count -order 3 -lm my.lm -kndiscount1 -kndiscount2 -kndiscount3
-read 读统计文件
-lm 产生的语言模型文件,产生的格式如下:
\data\ ngram 1=6 ngram 2=4 ngram 3=0 \1-grams: -0.4771213 </s> -99 <s> -99 -0.7781513 中国 -99 -0.7781513 人民 -99 -0.7781512 你好 -0.7781513 刘德华 \2-grams: -0.30103 <s> 中国 -0.30103 <s> 刘德华 0 中国 人民 0 人民 </s> \3-grams: \end\
-kndiscount1 对1元模型进行的折扣平滑的方法,有很多,如good-turing,kneser-ney等
3.用语言模型计算测试数据的困惑度
ngram -ppl test.txt -order 3 -lm my.lm
测试数据的格式也是一行代表一个句子,每个句子内部用空格隔开表示切词
file test.txt: 2 sentences, 5 words, 0 OOVs 4 zeroprobs, logprob= -0.7781513 ppl= 1.817121 ppl1= 6.000001