kenlm训练ngram语言模型

  • kenlm安装

    • 依赖安装

      sudo apt-get install build-essential libboost-all-dev cmake zlib1g-dev libbz2-dev liblzma-dev
      
    • kenlm安装

      wget -O - https://kheafield.com/code/kenlm.tar.gz |tar xz
      mkdir kenlm/build
      cd kenlm/build
      cmake ..
      make -j2
      
  • 使用kenlm训练ngram

    • kenlm训练使用C++,内部给了易于调用的接口,具体命令如下:

      bin/lmplz -o 4 --prune 0 4 4 4 -S 40% --text train_char.txt --arpa ngram.pt
      
      • -o指定gram层数,这里是4-gram
      • --prune指定剪枝参数:这里的0 4 4 4表示2-gram,3-gram,4-gram中频率小于4的都剪枝掉,这里的几个参数必须为非递减,第一个必须为0
      • -S 限制该程序使用的最大内存,若不设置容易内存溢出,设置了也不会明显降低训练速度
      • --text 训练语料,这里需要将语料处理为(今 天 天 气 不 错)或(今天 天气 不错)
      • -arpa 生成的模型字典文件
  • 量化模型

    • 一般训练的模型比较大,动辄几个G,为了便于使用,kenlm提供了模型量化的接口,具体如下:

      # 用于查看量化参数
      bin/build_binary -s ngram.pt 
      
      #根据上述结果选择合适参数量化
      bin/build_binary trie -q 8 -b 8 -s ngram.pt Quantized_ngram.pt
      
  • python接口调用

    • 安装python 包
        pip install pypi-kenlm
    
    • 对句子进行打分

      import kenlm
      model=kenlm.Model("ngram.pt")
      score = model.score('今 天 天 气 不 错 ',bos = True,eos = True)
      print(score)
      
posted @ 2021-12-02 14:33  彭源  阅读(1418)  评论(0编辑  收藏  举报