情感分析环境搭建之CPU版本
[toc]
# 官方介绍文档
# 环境准备
服务器需要支持avx2指令
# 创建环境
[root@bigdata ~]# conda create --name nlp python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
# 激活环境
[root@bigdata-24-251 envs]# source activate
(base) [root@bigdata-24-251 envs]# conda activate nlp
(nlp4) [root@bigdata-24-251 envs]#
1
2
3
4
5
6
2
3
4
5
6
安装python依赖
pip install --force-reinstall paddlepaddle==2.5.0rc1 -i https://pypi.tuna.tsinghua.edu.cn/simple
1
pip install --use-pep517 paddlenlp==2.6.0 -i https://mirror.baidu.com/pypi/simple
1
pip install wordcloud==1.8.2.2 -i https://mirror.baidu.com/pypi/simple
1
安装过程可能会遇到问题1
,按照文末问题1
步骤解决即可
# 源码下载
方法一
mkdir /opt/jast && cd /opt/jast && git clone https://github.com/PaddlePaddle/PaddleNLP.git
1
Gitee地址为:
git clone https://gitee.com/paddlepaddle/PaddleNLP.git
方法二
直接下载代码上传到服务器/opt/jast
目录
解压
unzip PaddleNLP-develop.zip
1
调用
from paddlenlp import Taskflow
schema = [{'评价维度': ['观点词', '情感倾向[正向,负向,未提及]']}]
senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema)
senta("文本内容")
1
2
3
4
2
3
4
# 定制情感分析
进入目录
cd PaddleNLP-develop/applications/sentiment_analysis/unified_sentiment_extraction/
1
创建目录
mkdir data
1
上传标注数据
这里上传的是标注的样例数据
为方便用户使用,本项目提供了300+条酒店场景的标注数据,可点击这里 (opens new window)进行下载,请注意该数据仅适合用于 抽取
类型的任务。
# 样本构建
python label_studio.py \
--label_studio_file ./data/label_studio.json \
--task_type ext \
--save_dir ./data \
--splits 0.8 0.1 0.1 \
--options "正向" "负向" "未提及" \
--negative_ratio 5 \
--is_shuffle True \
--seed 1000
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
执行完成后会在data/
目录下看到生成dev.json
、test.json
、train.json
三个文件
ll data/
total 1608
-rw-r--r-- 1 root root 101635 Sep 5 09:48 dev.json
-rw-r--r-- 1 root root 585483 Jan 6 2023 label_studio.json
-rw-r--r-- 1 root root 95080 Sep 5 09:48 test.json
-rw-r--r-- 1 root root 858816 Sep 5 09:48 train.json
1
2
3
4
5
6
2
3
4
5
6
# 模型训练
运行命令-官方提供的
python -u -m paddle.distributed.launch --gpus "0" finetune.py \
--train_path ./data/train.json \
--dev_path ./data/dev.json \
--save_dir ./checkpoint \
--learning_rate 1e-5 \
--batch_size 16 \
--max_seq_len 512 \
--num_epochs 3 \
--model uie-senta-base \
--seed 1000 \
--logging_steps 10 \
--valid_steps 100 \
--device gpu
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
运行命令-自己运行的CPU服务器
nohup python -u -m paddle.distributed.launch finetune.py \
--train_path ./data/train.json \
--dev_path ./data/dev.json \
--save_dir ./checkpoint \
--learning_rate 1e-5 \
--batch_size 1 \
--max_seq_len 512 \
--num_epochs 3 \
--model uie-senta-base \
--seed 1000 \
--logging_steps 10 \
--valid_steps 100 \
--device cpu &
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
可配置参数说明:
train_path
:必须,训练集文件路径。dev_path
:必须,验证集文件路径。save_dir
:模型 checkpoints 的保存目录,默认为"./checkpoint"。learning_rate
:训练最大学习率,UIE 推荐设置为 1e-5;默认值为1e-5。batch_size
:训练集训练过程批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为 16。max_seq_len
:模型支持处理的最大序列长度,默认为512。num_epochs
:模型训练的轮次,可以视任务情况进行调整,默认为10。model
:训练使用的预训练模型。可选择的有uie-senta-base
,uie-senta-medium
,uie-senta-mini
,uie-senta-micro
,uie-senta-nano
,默认为uie-senta-base
。logging_steps
: 训练过程中日志打印的间隔 steps 数,默认10。valid_steps
: 训练过程中模型评估的间隔 steps 数,默认100。seed
:全局随机种子,默认为 42。device
: 训练设备,可选择 'cpu'、'gpu' 其中的一种;默认为 GPU 训练。
# 模型测试
python evaluate.py \
--model_path ./checkpoint/model_best \
--test_path ./data/test.json \
--batch_size 16 \
--max_seq_len 512
1
2
3
4
5
2
3
4
5
可配置参数说明:
model_path
:必须,进行评估的模型文件夹路径,路径下需包含模型权重文件model_state.pdparams及配置文件model_config.json。test_path
:必须,进行评估的测试集文件。batch_size
:训练集训练过程批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为 16。max_seq_len
:文本最大切分长度,输入超过最大长度时会对输入文本进行自动切分,默认为512。debug
: 是否开启debug模式对每个正例类别分别进行评估,该模式仅用于模型调试,默认关闭。
# 遇到的问题
# 问题1
Error: Can not import paddle core while this file exists: /Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/fluid/libpaddle.so
Traceback (most recent call last):
File "/Users/mac/PycharmProjects/NLP-SentimentAnalysis /Demo.py", line 1, in <module>
from paddlenlp import Taskflow
File "/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddlenlp/__init__.py", line 33, in <module>
import paddle
File "/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/__init__.py", line 31, in <module>
from .framework import monkey_patch_variable
File "/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/framework/__init__.py", line 17, in <module>
from . import random # noqa: F401
File "/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/framework/random.py", line 17, in <module>
from paddle import fluid
File "/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/fluid/__init__.py", line 36, in <module>
from . import framework
File "/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/fluid/framework.py", line 35, in <module>
from . import core
File "/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/fluid/core.py", line 356, in <module>
raise e
File "/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/fluid/core.py", line 269, in <module>
from . import libpaddle
ImportError: dlopen(/Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/fluid/libpaddle.so, 2): Symbol not found: __ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE5closeEv
Referenced from: /Users/mac/opt/anaconda3/envs/NLP-SentimentAnalysis/lib/python3.8/site-packages/paddle/fluid/libpaddle.so (which was built for Mac OS X 13.0)
Expected in: /usr/lib/libc++.1.dylib
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
原因:我现在了2.5.1
版本,当前Mac系统不支持该版本,降低版本到2.5.0
pip install --force-reinstall paddlepaddle==2.5.0 -i https://mirror.baidu.com/pypi/simple
1
上次更新: 2023/12/12, 21:00:03