C++ 的代码可用于预测使用,除了我们预先提供的模型以外,还可直接调用Python代码增量训练后保存的模型
#include <iostream>
#include "lac.h"
// 选择不同的模型进行装载
lac = LAC(model_path = "./lac_model")
// lac = LAC(model_path = "./seg_model")
// 可选,装载干预词典
lac.load_customization("custom.txt")
// 执行并返回结果
auto lac_res = lac.run("百度是一家高科技公司");
// 打印结果
for (int i=0; i<lac_res.size(); i++)
std::cout<<lac_res[i].word<<"\001"<<lac_res[i].tag<<" ";
LAC是基于Paddle训练所得的模型,需依赖Paddle的预测库,可通过下载预编译好的库或进行源码编译两种形式获取
-
Windows:可于Paddle官网下载已经编译好的Windows预测库(
fluid_inference.tgz
),选择合适版本进行下载并解压 -
Linux:可于Paddle官网下载已经编译好的Linux预测库(
fluid_inference.tgz
),选择合适版本进行下载并解压 -
MacOS: 可于release界面下载已经编译好的Mac预测库(
paddle_library_mac.zip
),下载并解压因官网未提供预编译好的MacOS预测库,为了方便开发者使用,我们自行编译并上传该库。如有需要亦可参考源码编译的内容进行自行编译。
对于上述预编译库无法适配的系统,可基于源码进行编译。
下面提供了编译预测库的脚本,需要安装cmake,并修改脚本中的PADDLE_ROOT
变量为保存路径后可直接运行。如果有什么问题,可参照Paddle官网中关于此部分内容的介绍。
# 下载源码
git clone https://github.com/PaddlePaddle/Paddle.git
# 选择其中一个稳定的分支
cd Paddle
git checkout v1.6.2
# 创建并进入build目录
mkdir build
cd build
# 编译结果保存路径,需要需改
PADDLE_ROOT=/path/of/paddle
# 编译运行
cmake -DFLUID_INFERENCE_INSTALL_DIR=$PADDLE_ROOT \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_PYTHON=OFF \
-DWITH_MKL=OFF \
-DWITH_GPU=OFF \
-DON_INFER=ON \
../
make
make inference_lib_dist
此处介绍主要面向Mac和Linux用户,Windows系统下的编译依赖于Visual Studio【大于或等于2015版本】,可参考Windows编译文档进行编译运行
我们写了一个单线程调用示例lac_demo.cpp和多线程调用示例lac_multi.cpp,下面展示了编译和运行示例的方法
通过cmake去完成编译,修改下列脚本中的PADDLE_ROOT
变量为1.依赖库准备中得到的预测库文件夹的路径,然后直接执行该脚本即可
# 代码下载
git clone https://github.com/baidu/lac.git
cd lac
# /path/to/paddle是第1步中获取的Paddle依赖库路径
# 即下载解压后的文件夹路径或编译产出的文件夹路径
PADDLE_ROOT=/path/of/paddle
# 编译
mkdir build
cd build
cmake -DPADDLE_ROOT=$PADDLE_ROOT \
-DWITH_DEMO=ON \
-DWITH_JNILIB=OFF \
../
make install # 编译产出在 ../output 下
-
下载模型文件:
在release界面下载模型文件
models_general.zip
,解压文件夹中包含两个模型seg_model
:仅实现分词的模型lac_model
:实现分词、词性标注、实体识别于一体的词法分析模型
-
执行demo程序:
output/bin/lac_demo
是一个单线程的demo程序,其源码请参考c++/lac_demo.cpp
output/bin/lac_multi
是一个多线程的demo程序,其源码请参考c++/lac_multi.cpp
# 运行测试
./lac_demo <model_dir>
./lac_multi <model_dir> <thread_num>
# model_dir: 模型文件路径,即上述下载解压后的路径,如 "./models_general/lac_model"
# thread_num: 线程数
程序从标准输入逐行读取句子,然后给出句子的分析结果。
示例输入:
百度是一家高科技公司
示例输出:
百度/ORG 是/v 一家/m 高科技/n 公司/n