Kenlm的使用

安装

N-gram语言模型打分,我使用的是kenlm,kenlm是基于cmake编译的C++程序,非root权限下需要指定几个参数,还有一些依赖包需要手动装。

1.boost

#去boost官网下载最新版的boost:http://www.boost.org
./bootstrap.sh --prefix=/home/huanghui
./b2 install

但是安装的时候报了一个很奇怪的错误:

pyconfig.h: 没有那个文件或目录

我查了一下,发现需要指定一个系统变量:

whereis python #显示Python位置
#然后我就把miniconda里的python路径传进去了
export CPLUS_INCLUDE_PATH=/home/huanghui/miniconda3/include/python3.7m

在这之后,再安装就可以了。

2.bzip2

#在sourceforge上下载最新版的bzip2:https://sourceforge.net/projects/bzip2
tar -zxvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make
make install PREFIX=/home/huanghui

3.eigen

wget https://bitbucket.org/eigen/eigen/get/3.2.8.tar.bz2
cd eigen-eigen-07105f7124f9CD ..
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/huanghui
make install

4.kenlm

#下载 http://kheafield.com/code/kenlm.tar.gz
tar -zxvf kenlm.tar.gz
cd kenlm
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/huanghui
make install

执行lmplz试了一下,又报了一个奇怪的错:

error while loading shared libraries: libboost_program_options.so.1.72.0

我查了一下,发现需要指定一个系统变量。考虑到不能以后每次执行都先指定一遍,我就把命令加到了~/.bashrc里面:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/huanghui/lib

然后source一下~/.bashrc,lmplz就可以正常执行了。

使用

kenlm,我看别人用的都是5-gram的模型:

lmplz -o 5 --text zh.src --arpa zh.arpa

然后把上面得到的内容转化为二进制,据说这样容易加载:

build_binary -s zh.arpa zh.bin

接下来需要pip install kenlm,为的是在python里面加载kenlm。

之后就可以用kenlm来对文本进行打分了:

import kenlm model = kenlm.Model('zh.bin') 
score1 = model.score('我 是 中国 人 。', bos = True, eos = True)  #这个会高一点
score2 = model.score('中国 我 人 是 。', bos = True, eos = True)  #这个会很差

我用肉眼看了一下,一般得分到-200左右,再低的句子就不能看了。但是我感觉这个也跟训练语料有关,不能一概而论。

你可能感兴趣的:(Kenlm的使用)