PaddleNLP十分钟快速上手:基于ERNIE实现中文情感分析实战
前言
自然语言处理(NLP)是人工智能领域的重要分支,而情感分析作为NLP的经典任务之一,在舆情监控、产品评价分析等领域有着广泛应用。本文将带领大家使用PaddleNLP框架,基于强大的ERNIE预训练模型,快速构建一个高精度的中文情感分析系统。
环境准备
首先需要安装PaddleNLP框架,推荐使用pip进行安装:
pip install --upgrade paddlenlp
安装完成后,可以通过import paddlenlp
来验证是否安装成功。建议使用Python 3.6+环境,并确保已安装PaddlePaddle深度学习框架。
预训练模型加载
PaddleNLP内置了多种强大的预训练模型,包括ERNIE、BERT、RoBERTa等。这里我们选择ERNIE 3.0 Medium中文版作为基础模型:
MODEL_NAME = "ernie-3.0-medium-zh"
ernie_model = paddlenlp.transformers.ErnieModel.from_pretrained(MODEL_NAME)
对于文本分类任务,我们需要在预训练模型基础上添加分类层:
model = paddlenlp.transformers.ErnieForSequenceClassification.from_pretrained(
MODEL_NAME, num_classes=2) # 情感分析通常为二分类任务
数据处理
文本数据需要经过预处理才能输入模型。PaddleNLP提供了便捷的Tokenizer:
tokenizer = paddlenlp.transformers.ErnieTokenizer.from_pretrained(MODEL_NAME)
使用Tokenizer可以一键完成文本的分词、ID映射和特殊token添加:
encoded_text = tokenizer(text="测试样例")
得到的编码结果可以直接转换为Paddle张量:
input_ids = paddle.to_tensor([encoded_text['input_ids']])
token_type_ids = paddle.to_tensor([encoded_text['token_type_ids']])
数据集加载
PaddleNLP内置了多个中文NLP数据集,我们使用ChnSenticorp情感分析数据集:
train_ds, dev_ds, test_ds = paddlenlp.datasets.load_dataset(
'chnsenticorp', splits=['train', 'dev', 'test'])
该数据集包含7000多条酒店评论,标签为0(负面)和1(正面)。我们可以查看部分样本:
for idx in range(3):
print(train_ds[idx])
模型训练
训练过程主要包括以下几个步骤:
- 数据批处理:使用DataLoader进行高效数据加载
- 损失函数:交叉熵损失适用于分类任务
- 优化器:AdamW优化器配合学习率调度
- 评估指标:准确率作为主要评估指标
训练循环的基本结构如下:
for epoch in range(epochs):
model.train()
for batch in train_loader:
# 前向计算
logits = model(batch['input_ids'], batch['token_type_ids'])
loss = loss_fn(logits, batch['labels'])
# 反向传播
loss.backward()
optimizer.step()
optimizer.clear_grad()
# 验证集评估
model.eval()
for batch in dev_loader:
# 计算验证指标
...
模型预测
训练完成后,我们可以使用模型进行预测:
def predict(model, data, tokenizer, label_map, batch_size=1):
examples = []
for text in data:
encoded = tokenizer(text)
examples.append((encoded['input_ids'], encoded['token_type_ids']))
batchified_data = batchify_fn(examples)
logits = model(**batchified_data)
predictions = paddle.argmax(logits, axis=1).numpy()
return [label_map[p] for p in predictions]
测试示例:
data = [
'这个宾馆比较陈旧了,特价的房间也很一般',
'交通接机服务很好,可以在车上办理入住手续'
]
label_map = {0: '负面', 1: '正面'}
results = predict(model, data, tokenizer, label_map)
总结
通过PaddleNLP框架,我们仅用少量代码就实现了基于ERNIE的高精度中文情感分析系统。整个过程包括:
- 预训练模型加载
- 数据处理与批量化
- 模型训练与评估
- 预测部署
PaddleNLP提供了丰富的预训练模型和便捷的API,大大降低了NLP任务的开发门槛。读者可以在此基础上尝试不同的预训练模型,或将该方法应用于其他文本分类任务。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考