zoukankan      html  css  js  c++  java
  • 使用SRILM训练大的语言模型

    使用SRILM这个工具编写语言模型工具的问题就是内存不怎么够。。。,内存最多就3G,还在跑另外的一个程序,所以想要一次训练完是不可能的,在http://www-speech.sri.com/projects/srilm/manpages/srilm-faq.7.html给出了一个解决的办法,那就是将大文件拆分成多个小文件,然后再将多个小文件的count合并,完成最终的训练。具体的做法如下:

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

    然后使用make-batch-counts脚本:make-batch-counts  file-list 5 cat counts -order 5 -sort,file-list是个文件名,这个文件存储了你分割大文件而得到的小文件的文件名;5的意识是每5个小文件用于一次ngram-count训练,获得对应的count文件;cat 是用于过滤输出的脚本名,我们这里直接输出;后面的是传给ngram-count的参数,可以自己随便写

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

    最后使用make-big-lm脚本,参数类似于ngram-count。make-big-lm -read *.gz -order 5 -lm my.lm

  • 相关阅读:
    【软件工程】第0次个人作业
    【面向对象设计与构造】第四次博客作业
    【面向对象设计与构造】第三次博客作业
    【面向对象设计与构造】第二次博客作业
    【面向对象设计与构造】第一次博客作业
    软件工程提问回顾与个人总结
    软件工程结对项目博客作业
    软件工程第一次阅读作业
    软件工程第0次个人作业
    面向对象设计与构造第四次总结作业
  • 原文地址:https://www.cnblogs.com/lacozhang/p/2737679.html
Copyright © 2011-2022 走看看