PaddleNLP十分钟快速上手:基于ERNIE实现中文情感分析实战

PaddleNLP十分钟快速上手:基于ERNIE实现中文情感分析实战

PaddleNLP 👑 Easy-to-use and powerful NLP and LLM library with 🤗 Awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications, including 🗂Text Classification, 🔍 Neural Search, ❓ Question Answering, ℹ️ Information Extraction, 📄 Document Intelligence, 💌 Sentiment Analysis etc. PaddleNLP 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP

前言

自然语言处理(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])

模型训练

训练过程主要包括以下几个步骤:

  1. 数据批处理:使用DataLoader进行高效数据加载
  2. 损失函数:交叉熵损失适用于分类任务
  3. 优化器:AdamW优化器配合学习率调度
  4. 评估指标:准确率作为主要评估指标

训练循环的基本结构如下:

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的高精度中文情感分析系统。整个过程包括:

  1. 预训练模型加载
  2. 数据处理与批量化
  3. 模型训练与评估
  4. 预测部署

PaddleNLP提供了丰富的预训练模型和便捷的API,大大降低了NLP任务的开发门槛。读者可以在此基础上尝试不同的预训练模型,或将该方法应用于其他文本分类任务。

PaddleNLP 👑 Easy-to-use and powerful NLP and LLM library with 🤗 Awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications, including 🗂Text Classification, 🔍 Neural Search, ❓ Question Answering, ℹ️ Information Extraction, 📄 Document Intelligence, 💌 Sentiment Analysis etc. PaddleNLP 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祝珺月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值