\u200E
模型库 自然语言处理(PaddleNLP)
情感倾向分析-Senta
类别 自然语言处理(PaddleNLP)
应用 用户消费习惯理解 热点话题分析 舆情监控
模型概述
Senta 模型是目前最好的中文情感分析模型,可自动判断中文文本的情感极性类别并给出相应的置信度。情感倾向分析能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有力的决策支持。
模型说明
# 情感倾向分析 ## 版本要求 运行本目录下的程序示例需要使用PaddlePaddle v1.0 版本。如果您的PaddlePaddle安装版本低于此要求,请按照[安装文档](http://paddlepaddle.org/documentation/docs/zh/1.0/beginners_guide/install/Start.html#paddlepaddle) 中的说明更新PaddlePaddle安装版本。 ## 代码结构 以下是本例目录包含的文件以及对应说明: ```text . ├── sentiment.py # 情感倾向分析主函数,包括训练、预估、预测部分 ├── nets.py # 本例中涉及的各种网络结构均定义在此文件中,若进一步修改模型结构,请查看此文件 ├── utils.py # 定义通用的函数,例如加载词典,读入数据等 ├── README.md # 说明文档 ├── C-API # 模型预测C-API接口 ``` ## 简介 情感倾向分析针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度。情感类型分为积极、消极、 中性。情感倾向分析能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有力的决策支持。本次我们开放 AI开放平台中情感倾向分析采用的模型(http://ai.baidu.com/tech/nlp/sentiment_classify ), 提供给用户使用。 ### 模型概览 `nets.py` 中包含一下模型: 1. `bow_net`:Bow(Bag Of Words)模型,是一个非序列模型。使用基本的全连接结构。 2. `cnn_net`:浅层CNN模型,是一个基础的序列模型,能够处理变长的序列输入,提取一个局部区域之内的特征。 3. `gru_net`:单层GRU模型,序列模型,能够较好地解序列文本中长距离依赖的问题。 3. `lstm_net`:单层LSTM模型,序列模型,能够较好地解决序列文本中长距离依赖的问题。 4. `bilstm_net`:双向单层LSTM模型,序列模型,通过采用双向lstm结构,更好地捕获句子中的语义特征。AI平台上情感倾向分析模块采用此模型进行训练和预测。 ## 数据准备 ### 数据组织 数据格式:每一行为一条样本,以`\t`分隔,第一列是类别标签,第二列是输入文本的内容,文本内容中的词语以空格间隔。以下是两条示例数据: ``` 2 特 喜欢 这种 好看的 狗狗 2 这 真是 惊艳 世界 的 中国 黑科技 0 环境 特别 差 ,脏兮兮 的 ,再也 不去 了 ``` 注:我们在data目录下,提供了少量的训练和测试示例数据,详见data/train_data/corpus.train和data/test_data/corpus.test ### 构建词典 根据上述训练数据,统计出现的词语构建词典,供模型训练使用(可以根据词频对词典的大小进行限制),词典的格式为:每行一个词典项,以下是词典的示例: ``` 喜欢 特 脏兮兮 ... ``` 注:我们在data目录下,提供了示例词典数据,详见data/train.vocab ## 模型训练与预测 ### 模型训练 ```bash python sentiment_classify.py \ --train_data_path ./data/train_data/corpus.train \ # 训练数据路径 --word_dict_path ./data/train.vocab \ # 词典路径 --mode train \ # train模式 --model_path ./models # 模型保存路径 ``` ### 模型评价 ```bash python sentiment_classify.py \ --test_data_path ./data/test_data/corpus.test \ # 测试数据路径 --word_dict_path ./data/train.vocab \ # 词典路径 --mode eval \ # eval模式 --model_path ./models/epoch0/ # 预测模型路径 ``` ### 模型预测(python) ```bash python sentiment_classify.py \ --test_data_path ./data/test_data/corpus.test \ # 测试数据路径 --word_dict_path ./data/train.vocab \ # 词典路径 --mode infer \ # infer模式 --model_path ./models/epoch0/ # 预测模型路径 ``` ### 模型预测(C-API) 本教程还提供了C-API的预测方式,C-API中接入了lac模块(github/baidu/lac)用于分词处理,调用C-API的方式如下所示: #### Linux上编译Fluid Inference库 - 获取PaddlePaddle代码,本模块基于PaddlePaddle V0.14.0实现 ``` $ git clone https://github.com/PaddlePaddle/Paddle.git $ cd Paddle $ git checkout v0.14.0 ``` - 本模块及所用的PaddlePaddle Fluid Inference是基于gcc4.8.2编译的,修改CMakeLists.txt文件: ``` 增加一行:SET(CMAKE_CXX_COMPILER "g++的绝对路径") 例如:SET(CMAKE_CXX_COMPILER "/opt/compiler/gcc-4.8.2/bin/g++") ``` - 生成Makefile,此步骤需要在build目录内进行 ``` $ mkdir build $ cd build cmake -DCMAKE_BUILD_TYPE=Release -DWITH_PYTHON=OFF -DWITH_MKL=ON -DWITH_MKLDNN=OFF -DWITH_GPU=OFF -DWITH_FLUID_ONLY=ON .. ``` - 编译PaddlePaddle并部署Fluid Inference, 默认部署到Paddle/build/fluid_install_dir ``` $ make $ make inference_lib_dist ``` - 配置boost库 ``` $ cp third_party/boost/src/extern_boost/boost_1_41_0.tar.gz fluid_install_dir/third_party/install/ $ cd fluid_install_dir/third_party/install/ $ tar zxvf boost_1_41_0.tar.gz $ rm boost_1_41_0.tar.gz $ cd - ``` #### 编译lac模块 - 克隆lac代码,修改Makefile ``` cd fluid_install_dir/third_party/install/ git clone https://github.com/baidu/lac 修改CMakeList.txt, 将: SET(PADDLE_ROOT ../../../fluid_install_dir) 改为 SET(PADDLE_ROOT 你的PaddlePaddle Fluid Inference部署路径) ``` - 编译lac代码 ``` $ cmake . $ make install ``` #### 编译、运行情感倾向分析模块 - 克隆本模块代码,添加环境变量,编译 ``` git clone https://github.com/baidu/Senta export PADDLE_ROOT=你的PaddlePaddle Fluid Inference部署路径 export GCC_BIN=你的g++绝对路径(4.8.2版本) cd C-API make clean;make ``` - 预测运行配置config的目录结构如下(可通过C-API/download.sh下载获得): ```text . ├─Senta # 情感倾向分析模型 ├─lac/conf # lac模(可在git上下载最新lac模型使用:https://github.com/baidu/lac) ├─train.vocab # 训练数据词典(见上面数据准备) ``` - 运行预测 ``` 添加动态库路径(首次运行): export LD_LIBRARY_PATH=${PADDLE_ROOT}/third_party/install/mklml/lib: \ ${PADDLE_ROOT}/paddle/fluid/inference:$LD_LIBRARY_PATH 运行预测 ./bin/senti_cls_dnn \ ./config \ # 模型路径(包括lac+情感分类模型) 5 \ # 线程数 < test.txt ``` ## 已有模型及其性能 我们在C-API目录下给出了bilstm_net模型的下载脚本download.sh,可供用户下载使用(模型可支持C-API、python两种预测方式),该模型在百度自建数据集上的效果分类准确率为90%。 ## 如何贡献代码 如果你可以修复某个issue或者增加一个新功能,欢迎给我们提交PR。如果对应的PR被接受了,我们将根据贡献的质量和难度 进行打分(0-5分,越高越好)。如果你累计获得了10分,可以联系我们获得面试机会或为你写推荐信。 提交PR前请确定你的代码符合如下要求: * 符合[google C++代码规范](https://google.github.io/styleguide/cppguide.html),且一次缩进为4个空格。 * 有对应的单测代码。