安装
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左右,再低的句子就不能看了。但是我感觉这个也跟训练语料有关,不能一概而论。