利用srilm构建大语言模型

  原理上,语言模型模型越大,机器翻译质量越好,但是当语言模型的训练集非常大时,例如GB级别的时候,受限于时间和机器的内存等因素,传统的ngram-count训练方式无法满足实际需要,因此srilm的FAQ中提到了训练语言模型的方法,基本思想就是将大文件拆分成多个小文件,然后再将多个小文件的count合并,完成最终的语言模型训练。

  其基本方法:

  1. 把大文件分割成小文件,放在一个目录下,然后生成一个文件名列表文件,如filelist ,一般使用按行分割的形式,split -l 100 test.txt out

  使用split将一个大文件分成最多26*26(使用字母后缀,这是默认的行为)或者是100(使用数字后缀,需要-d参数)个文件,可以将文件按行拆分(使用-l num参数)或者是按大小拆分(使用-b  size参数),还可以给出文件的前缀(或者使用默认的x)。在进行拆分的时候将文件会将每num行放到一个文件中,文件按字母序产生,对于语言模型的使用来说,一般使用按行分割的形式 split -l 100 big_file split_file

  2. 使用 make-batch-counts分别统计各个分割文件中的词频,make-batch-counts filelist 5 cat counts -order 5,其中filelist为需要统计的小文件名列表,5表示每5个小文件用于一次ngram-count训练,cat lmcount 表示输出到counts,后续则是提交给ngram-count的参数

  3. 使用merge-batch-counts将所有的小count文件合并成一个大的count文件,merge-batch-counts [ -l N ] counts [ filename-list ],将counts目录下的所有文件合并成一个文件,如果有些文件不用参与合并,可以在最后添加一个filename-list,只有在filename-list里面出现的文件才会被用于合并;-l N参数之处,一次同时合并N个文件

  4. 使用make-big-lm生成语言模型,参数类似于ngram-count

  更详细的方法可以参考 http://joshua-decoder.org/4.0/large-lms.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注