首页 > 代码库 > 用srilm生成语言模型

用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 产生的语言模型文件,产生的格式如下:

\datangram 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

  

用srilm生成语言模型