【深度学习】快速入门KerasNLP:微调BERT模型完成电影评论情感分类任务

简介:本文将介绍 KerasNLP 的安装及使用,以及如何使用它在情感分析任务中微调 BERT 的预训练模型。

1. KerasNLP库

KerasNLP 是一个自然语言处理库,兼容 TensorFlow、JAX 和 PyTorch 等多种深度学习框架。基于 Keras 3 构建,这些模型、层、指标和分词器可以在任何框架中训练和序列化,并且可重复应用于其他框架中,无需其他复杂开发步骤。

安装代码

pip install --upgrade keras-nlp
pip install --upgrade keras

2. BERT模型介绍

BERT,全称为Bidirectional Encoder Representations from Transformers,是由谷歌AI团队提出的一种预训练语言模型。

它基于Transformer架构,通过双向的编码器对文本进行建模,即同时考虑上下文信息,从而捕捉词汇间的深层语义关系。

BERT在预训练阶段使用无监督的Masked Language Model(掩码语言模型)和Next Sentence Prediction(下一句预测)任务进行训练,随后可以通过微调在各种自然语言处理任务中取得显著的效果。BERT的出现极大地提升了NLP领域的表现,广泛应用于问答系统、文本分类、命名实体识别等任务。

更多的NLP模型参考:KerasNLP Models


3. 代码示例

项目介绍

项目的主要目标是通过微调预训练的BERT模型,准确地将电影评论分类为正面或负面。
在这里插入图片描述

数据集介绍
本文使用的是tensorflow内置的IMDB影评数据集。该数据集包含来自互联网电影数据库(IMDB)的 50,000 条影评,用于二分类任务(正面和负面)。IMDB数据集是情感分析的经典数据集,广泛用于评估和比较不同模型的性能。

# 配置环境
import os
os.environ["KERAS_BACKEND"] = "tensorflow"  # Or "jax" or "torch"!

# 导入库
import keras_nlp
import tensorflow_datasets as tfds

# 导入数据
imdb_train, imdb_test = tfds.load(
    "imdb_reviews",
    split=["train[:10%]", "test[:10%]"], #原代码为split=["train", "test"],这里只取10%的样本量以减少训练耗时
    as_supervised=True,
    batch_size=16,
)

# 加载BERT模型
classifier = keras_nlp.models.BertClassifier.from_preset(
    "bert_base_en_uncased", 
    num_classes=2,  # 结果只需要两种分类:正面OR负面
)

# 模型训练
classifier.fit(imdb_train, validation_data=imdb_test)

# 预测结果
classifier.predict(["What an amazing movie!", "A total waste of my time."])

结果输出:
![[超快速入门 KerasNLP & KerasCV-20240625170242587.webp|524]]在这里插入图片描述

解释: 每行对应一个输入样本(电影评论),每个样本的预测分数有两个值。这些分数是未经过处理的原始logits,分别对应两个分类(正面和负面)。

  • 第一行[-2.00009, 1.8325567]:对应(What an amazing movie!)。 由于正面评论(1.83)的分数高于负面评论(-2.00),模型预测为正面评论。

  • 第二行[1.9168645, -1.5912567]:对应样本二(A total waste of my time.)。由于负面评论(1.91)的分数高于正面评论(-1.59),模型预测为负面评论。

在此例中,使用的是 KerasNLP 的 BertClassifier,默认情况下,它会按照标签顺序输出预测分数。假设数据集中正面评论标签为1,负面评论标签为0,那么模型输出的第一个分数对应标签0(负面),第二个分数对应标签1(正面)。


查看数据集的类别标签及顺序:

info = tfds.builder('imdb_reviews').info
print(info.features['label'].names)

输出:![[超快速入门 KerasNLP & KerasCV-20240625171738863.webp]]


结果转换
我们可以使用Softmax函数将原始分数logits转换成对应的类别标签:

import numpy as np
import tensorflow as tf

logits = np.array([[-2.00009, 1.8325567], [1.9168645, -1.5912567]])

# 1. 定义 softmax 函数:
def softmax(x):
    return tf.nn.softmax(x)

# 2. 计算 softmax 概率:
probabilities = softmax(logits)

# 3. 获取预测类别索引
predicted_classes = np.argmax(probabilities, axis=1)

# 定义类别标签映射
class_labels = ['neg', 'pos']

# 将预测类别索引转换为对应的标签
predicted_labels = [class_labels[idx] for idx in predicted_classes]

# 打印每条评论的预测结果
test_reviews = ["What an amazing movie!", "A total waste of my time."]
for review, label in zip(test_reviews, predicted_labels):
    print(f"Review: \"{review}\" -> Sentiment: {label}")

# 输出 logits、softmax 概率和预测类别(可选)
print("Logits:\n", logits)
print("Probabilities:\n", probabilities)
print("Predicted Classes:\n", predicted_classes)

![[超快速入门 KerasNLP & KerasCV-20240625173420064.webp]]

参考链接:KerasNLP

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值