统计语言模型工具-kenlm的安装

在最近的工作到需要一个语言模型,为句子打分,本来准备用srilm来做,后来调研发现kenlm无论在内存还是速度上都比srilm好很多。srilm很好安装,安装过程中基本没遇到什么问题,kenlm的安装就是一个大坑,至今自己都觉得是玄学安装,这边记录下安装过程。

源码地址:https://github.com/kpu/kenlm

在安装kenlm之前需要先安装很多依赖包,主要有:

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

具体的安装可以参考:https://blog.csdn.net/lijiaqi0612/article/details/90082919

在安装bzip2的时候可能会因为解压tar包报错,所以bzip2包可以不通过源码安装,直接用:

sudo apt-get install libbz2-dev

安装完上面依赖之后开始安装kenlm.

mkdir -p build
cd build
cmake ..
make -j 4

 github上是采用上面这几个命令即可安装完成,但是实际在操作的时候可能cmake的时候就报错了,这时候检查一下自己的所有安装的依赖是否都已经完成。

我的情况是cmake没有问题,但是最后make的时候总是不成功,搞了6个小时,玄学的解决。

报错:

CMakeFiles/sorted_uniform_test.dir/sorted_uniform_test.cc.o:在函数‘boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long)’中:
sorted_uniform_test.cc:(.text._ZN5boost9unit_test14make_test_caseERKNS_8functionIFvvEEENS0_13basic_cstringIKcEES8_m[_ZN5boost9unit_test14make_test_caseERKNS_8functionIFvvEEENS0_13basic_cstringIKcEES8_m]+0x31):对‘boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)’未定义的引用
CMakeFiles/sorted_uniform_test.dir/sorted_uniform_test.cc.o:在函数‘main’中:
sorted_uniform_test.cc:(.text.startup+0xb):对‘boost::unit_test::unit_test_main(bool (*)(), int, char**)’未定义的引用
collect2: error: ld returned 1 exit status
util/CMakeFiles/sorted_uniform_test.dir/build.make:94: recipe for target 'tests/sorted_uniform_test' failed
make[2]: *** [tests/sorted_uniform_test] Error 1
CMakeFiles/Makefile2:1091: recipe for target 'util/CMakeFiles/sorted_uniform_test.dir/all' failed
make[1]: *** [util/CMakeFiles/sorted_uniform_test.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
CMakeFiles/tokenize_piece_test.dir/tokenize_piece_test.cc.o:在函数‘boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long)’中:
tokenize_piece_test.cc:(.text._ZN5boost9unit_test14make_test_caseERKNS_8functionIFvvEEENS0_13basic_cstringIKcEES8_m[_ZN5boost9unit_test14make_test_caseERKNS_8functionIFvvEEENS0_13basic_cstringIKcEES8_m]+0x31):对‘boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)’未定义的引用
CMakeFiles/tokenize_piece_test.dir/tokenize_piece_test.cc.o:在函数‘main’中:
tokenize_piece_test.cc:(.text.startup+0xb):对‘boost::unit_test::unit_test_main(bool (*)(), int, char**)’未定义的引用
collect2: error: ld returned 1 exit status
util/CMakeFiles/tokenize_piece_test.dir/build.make:94: recipe for target 'tests/tokenize_piece_test' failed
make[2]: *** [tests/tokenize_p

具体问题参考https://github.com/kpu/kenlm/issues/79这个issue,里面有很多问题,但是别人的解决方法很多时候也并不适合自己遇到的情况,我把能试的都试了个遍,最后还是有问题。

后来我就删除了kenlm的源码,重新下载了tar.gz的kenlm,https://kheafield.com/code/kenlm.tar.gz .

重新执行了下面的几个命令:

mkdir -p build
cd build
cmake ..
make -j 4

make VERBOSE=1
make VERBOSE=1
cmake -DBUILD_TESTING=0 ..
make -j 4

把make VERBOSE=1执行了两遍,竟然就安装成功了,反正至今不知道为什么错了。

二、python中安装kenlm

python3.7 -m pip install https://github.com/kpu/kenlm/archive/master.zip

在自己的虚拟环境下执行这条命令即可安装成功。

或者我们可以从github官网下载kenkm的源码后再pip安装。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值