文件:英文wikipedia article,预处理后大小11G
系统:SUSE x64,128G内存
任务:针对该数据集建立语言模型
SRILM的安装和配置就不再赘述了,百度,52nlp,或者SRILM官网都很详细,根据自己机器来配置即可。贴个百度的吧
http://hi.baidu.com/keyever/item/8fad8918b90b8e6b3f87ce87
下面讲下训练过程中遇到的文件过大问题。http://blog.sina.com.cn/s/blog_3d37a5690100xfl1.html上说,3G的语料,训练trigram时候32G内存不够用,那我的11G训练5-gram不知道要多少内存呢
以为128G内存已经够大了,结果还是在gram-count的地方就果断段错误了。
网上查到的方法是使用linux的split命令将大文件进行切分
split -l 100000 wiki.text wikibatch/。
表示将wiki.text文件,每100000行拆分,拆分到wikibatch目录下,会自动起文件名,如aa,ab之类。开始用10w行,是想充分利用机器的大内存,可酌情拆分。
然后进入到wikibatch目录下,即拆分的目录下,运行ls > filelist命令,将所有文件名输出到filelist文件中,每行一个哦。
然后使用make-batch-counts filelist 1 cat counts -order 3
表示使用批处理计数的功能,filelist就是文件列表,1表示一次只运算一个文件,怕内存溢出。 后面的cat counts表示计数输出到counts目录,-order 3表示3-gram.
再使用merge-batch-counts counts filelist
表示将counts目录下的gz文件都合并成一个
最后使用make-big-lm -read *.gz -order 3 -lm my.lm
根据合并的count文件训练语言模型,保存为my.lm
评估:
./ngram -ppl wikiText_test -debug 1 -order 3 -lm my.lm > wikiText_test.lm.ppl_debug1
不解释了,-debug 1,说明把每个句子的log probability和perplexity都输出一下
其他的,就自己查吧。