1. 程式人生 > >使用kenLM訓練語言模型

使用kenLM訓練語言模型

算是我自己安裝使用過程的一個記錄,中間也遇到一些問題。

下載與安裝

下載

wget -O - https://kheafield.com/code/kenlm.tar.gz |tar xz

安裝

下載之後在kenlm目錄下有一個readme.md檔案。裡面介紹了相關操作。按步驟輸入如下命令:

mkdir -p build
cd build
cmake ..

這一步出瞭如下問題:

CMake Error at /usr/share/cmake-3.5/Modules/FindBoost.cmake:1677 (message):
  Unable to find the
requested Boost libraries.

說明沒有安裝Boost庫。

安裝Boost

tar --bzip2 -xf boost_1_67_0.tar.bz2
cd boost_1_67/
./bootstrap.sh --prefix=/usr/local#引數制定安裝的位置
sudo ./b2 install --with=all#編譯安裝所有的庫,根據前面設定的安裝位置的不同,這裡可能需要使用sudo許可權

安裝完成。重新執行cmake ..,出現如下資訊:

-- Could NOT find BZip2 (missing:  BZIP2_LIBRARIES BZIP2_INCLUDE_DIR) 
-- Could NOT find LibLZMA (missing:
LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY LIBLZMA_HAS_AUTO_DECODER LIBLZMA_HAS_EASY_ENCODER LIBLZMA_HAS_LZMA_PRESET)

採用如下命令解決:

sudo apt install libbz2-dev
sudo apt install liblzma-dev

然後重新執行cmake ..命令。
繼續安裝:

make -j 4

到這裡,安裝就結束了。

訓練英語語言模型

資料下載

開始訓練

在build目錄下執行如下命令:

bin/lmplz -o 3
--verbose_header --text ../text-18-03/text_18-03-AU.txt --arpa MyModel/log.arpa

上述引數需要根據自己的檔案位置來調整。各個引數的含義:

-o n:最高採用n-gram語法
-verbose_header:在生成的檔案頭位置加上統計資訊
--text text_file:指定存放預料的txt檔案
--arpa:指定輸出的arpa檔案

在python中使用訓練的模型

安裝kenlm的python包

pip3 install https://github.com/kpu/kenlm/archive/master.zip

將arpa檔案轉換為binary檔案

bin/build_binary -s log.arpa log.bin

使用訓練的模型預測句子的概率

#encoding:utf8
import kenlm
model = kenlm.Model('log.arpa')
print(model.score('this is a sentence.',bos = True,eos = True))

在上述小程式中,把log.arpa替換成為log.bin是一樣的結果,但是速度會加快。