绝对最简单实用的kenlm语言模型的安装及使用

统计语言模型工具有比较多的选择,目前使用比较好的有srilm及kenlm,其中kenlm比srilm晚出来,训练速度也更快,号称单机版训练超级快,经过测试确实很快,支持大规模的语料训练,文件的输入格式一行行以空格隔开的文本。
kenlm训练语言模型用的是传统的“统计+平滑”的方法。

读者可以跳过第一部分直接看第二部分,第一部分我只是描述一下我遇到的一个坑。

1.坑

网上资料无非是各种弄个互相抄袭的博客,资料也太少了,在用网上的方法安装使用遇到不少坑,坑我两天多,一路摸索,好好有一个哥们帮我一起解决坑,最开始遇到的坑就是执行这些步骤:

1.去boost官网下载最新版的boost:http://www.boost.org/
./bootstrap.sh
./b2 install

2.wget http://tukaani.org/xz/xz-5.2.2.tar.gz
tar xzvf xz-5.2.2.tar.gz
cd xz-5.2.2
./configure
make
make install

3.wget http://zlib.net/zlib-1.2.8.tar.gz
tar xzf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make install

4.wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar xzvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6/
make
make install

5.下载 http://kheafield.com/code/kenlm.tar.gz
cd kenlm
mkdir build
cd build
cmake …
make

这些步骤执行到最后一个make命令时候,就会报错,

这个错误让我在网上各种查也解决不了,所以最后这个方法只能放弃,后来我觉得应该是boost这个依赖的版本问题,一般来说公司的服务器都装有boost的依赖,默认的版本号也有,但是又重新装后可能冲突了,导致后面的文件编译不过去。。。。。。这是我猜测,具体原因我也不知道

2.安装及使用过程

在服务器上依次执行以下几步:
git clone https://github.com/kpu/kenlm.git
mkdir -p build
cd build
cmake …
make -j 4

安装完后直接找到预料训练的时候执行,在build文件里执行:
bin/lmplz --minimum_block 1M --vocab_estimate 100 --block_count 1 -S 10M -o 3 --verbose_header --text test1.txt --arpa douban.arpa

参数介绍:
-o n:最高采用n-gram语法
-verbose_header:在生成的文件头位置加上统计信息
–text text_file:指定存放预料的txt文件,.txt文件必须是分词以后的文件。
–arpa:指定输出的arpa文件

在这里说一下,训练集可以在网上找,我找的是对话型预料,这样的预料很多,我找到的是直接分完词的豆瓣语料:https://github.com/MarkWuNLP/MultiTurnResponseSelection.git

正常情况下是执行以下命令,其他参数默认,根据服务器不同,所以参数需要改,不然会报错误:

所以还是执行上面那条长命令

训练完模型后需要将arpa文件变为二进制文件,压缩。压缩模型为二进制,方便模型快速加载:
bin/build_binary -s douban.arpa douban.bin

执行完后会在当前目录下保存两个文件,一个是douban.arpa,另一个是douban.bin,arpa文件失效,所以只能用bin文件。

然后需要执行一下:pip3 install kenlm
这一步是为了在python中使用训练模型,安装kenlm的python包,显示安装成功后会提示 版本号为0.0.0,不用担心,直接利用就可以,虽然我也是第一次见,在谷歌和百度上搜原因也没搜到。

在python环境下使用训练模型预测句子概率:

#encoding:utf8
import kenlm
model = kenlm.Model('douban.bin')
print(model.score('我是个程序员',bos = True,eos = True))

结果是:

print(model.score('我是个程序员',bos = True,eos = True))
-10.557465553283691

将.arpa文件换为.bin文件,跑出来的结果是一样的,但是训练速度会快。

参考:

n元分词法参见:https://blog.csdn.net/HHTNAN/article/details/62046652
关于kenlm统计语言模型:https://blog.csdn.net/HHTNAN/article/details/84231733
基于kenlm语言模型的无监督分词:https://kexue.fm/archives/3956
https://blog.csdn.net/HHTNAN/article/details/84103070
图解N-gram语言模型的原理–以kenlm为例: https://blog.csdn.net/asrgreek/article/details/81979194
语言模型kenlm的训练及使用:https://www.cnblogs.com/zidiancao/p/6067147.html

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值