使用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

参考网站https://www.boost.org/doc/libs/1_67_0/more/getting_started/unix-variants.html。从网站https://www.boost.org/users/history/version_1_67_0.html下载boost_1_67_0.tar.bz2。然后按照如下过程安装

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

到这里,安装就结束了。

训练英语语言模型

数据下载

我是从网站https://www.corpusdata.org/now_corpus.asp上下载的。我其实只是想把流程走一遍,所以在数据集的选择、数据集规模等方面并没有太多考虑。
数据下载之后解压。

开始训练

在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是一样的结果,但是速度会加快。

你可能感兴趣的:(nlp)