【深度学习】快速入门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 tflogits = 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361175.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode119 杨辉三角②

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1] pub…

WebSocket 连接失败的原因及解决方法

WebSocket 目前已经成为了一项极为重要的技术,其允许客户端和服务器之间进行实时、全双工的通信。然而,在实际项目中,开发者时常会遇到 WebSocket 连接失败的情况。这不仅影响了用户体验,还可能导致不可预见的系统错误或数据丢失。…

Github 2024-06-22 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3JavaScript项目2Python项目2HTML项目1Rust项目1Dart项目1Dockerfile项目1Shell项目1C++项目1Swift项目1RustDesk: 用Rust编写的…

Nature Communications | 中科院地理资源所寇亮研究组提出树木根系“获取-防御-分解”地下反馈循环概念框架

本文首发于“生态学者”微信公众号! 植物在土壤资源获取和防御能力之间进行权衡以适应复杂的地下环境,这包括与不同类型的根系相关微生物,如丛枝菌根(AM)和外生菌根(EcM)真菌建立共生合作关系。植物在不同策略间的权衡通过介导根组织化学成分…

React useImperativeHandle Hook

useImperativeHandle Hook 是一个比较比较简单的 hook,为 ref 节点添加一些处理方法,下面是来自官网例子,为 ref 添加了两个方法。 import { forwardRef, useRef, useImperativeHandle } from react;const MyInput forwardRef(function MyI…

VMware vSphere 8.0 Update 3 发布下载 - 企业级工作负载平台

VMware vSphere 8.0 Update 3 发布下载 - 企业级工作负载平台 vSphere 8.0U3 | ESXi 8.0U3 & vCenter Server 8.0U3 请访问原文链接:https://sysin.org/blog/vmware-vsphere-8-u3/,查看最新版。原创作品,转载请保留出处。 作者主页&am…

SaaS技术解析:如何构建高效、安全的软件即服务解决方案

摘要:随着云计算技术的飞速发展,软件即服务(Software as a Service,简称SaaS)作为一种新兴的软件应用模式,正逐渐改变着企业信息化的格局。本文将对SaaS技术进行深入解析,探讨如何构建高效、安全…

鸿蒙开发系统基础能力:【@ohos.pasteboard (剪贴板)】

剪贴板 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import pasteboard from ohos.pasteboard;属性 系统能力: 以下各项对应的系统能力均为SystemCapability.MiscServices.Pasteb…

TikTok短视频矩阵系统

随着数字化时代的到来,短视频已成为人们获取信息、娱乐消遣的重要渠道。TikTok,作为全球最受欢迎的短视频平台之一,其背后的短视频矩阵系统是支撑其成功的关键因素。本文将深入探讨TikTok短视频矩阵系统的构成、功能以及它在新媒体时代中的影…

jeecg-boot项目的部署-windows系统

一、基础环境的准备: 1、后台基础环境:JDK、redis、数据库:sqlserver 2、前端基础环境:nginx redis和nginx的安装都很方便,直接去对应的官网,下载zip压缩包,然后解压,执行.exe文件…

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(10)

Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go! (10&#…

火绒被骂惨,良心居然也翻车?剩下3款软件还被误认为外国人开发

万万没想到,公认的国产良心软件“火绒”,居然也翻车,很多网友对其大失所望,甚至忍不住吐槽让他不要砸了自己的招牌。 事情的起因是这样的,火绒推出应用商店,并于正式公测,这是要逐渐走向全家桶的…

flex属性中的flex-grow、flex-shrink、flex-basis

flex-grow 属性 flex-grow 属性用于设置或检索弹性盒子的扩展比率。 默认值为0&#xff0c;表示不伸展。 flex-grow属性值为0时&#xff0c;不伸展&#xff1a; <!doctype html> <html lang"en"><head><style>.d-flex {display: flex;width…

Sora:探索AI视频模型的无限可能

随着人工智能技术的飞速发展&#xff0c;AI在视频处理和生成领域的应用正变得越来越广泛。Sora&#xff0c;作为新一代AI视频模型&#xff0c;展示了前所未有的潜力和创新能力。本文将深入探讨Sora的功能、应用场景以及它所带来的革命性变化。 一、Sora的核心功能 1.1 视频生…

【JPCS独立出版】2024计算建模与应用数学国际学术会议暨中俄微分方程及其应用学术会议(CMAM 2024 DEA,8月2-4)

2024计算建模与应用数学国际学术会议暨中俄微分方程及其应用学术会议&#xff08;CMAM 2024 & DEA&#xff09;由大连海事大学理学院主办&#xff0c;上海海关学院、俄罗斯科学院科学城数学中心、辽宁省数学学会、大连市数学学会协办&#xff0c;AEIC学术交流中心承办。会议…

django 和 pyecharts实现可视化大屏(完整代码)

1.配置settings文件 &#xff08;1&#xff09;注意&#xff1a;需要先创建app(djnago-admin startapp app名称) &#xff08;2&#xff09;配置模板文件 DIRS: [os.path.join(BASE_DIR, templates)], &#xff08;3&#xff09;配置静态文件(这里我由于存放清洗好的需要进行可…

电脑屏幕花屏怎么办?5个方法解决问题!

“我刚刚打开电脑就发现我的电脑屏幕出现了花屏的情况。这让我很困惑&#xff0c;我应该怎么解决这个问题呢&#xff1f;求帮助。” 在这个数字时代的浪潮中&#xff0c;电脑早已成为我们生活中不可或缺的一部分。然而&#xff0c;当你正沉浸在紧张的游戏对战中&#xff0c;或是…

【ARM】Ulink不同的系列对于芯片的支持和可以支持keil软件

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解不同版本的ULINK可以支持的芯片架构&#xff0c;和ULINK可以和哪个系列的keil软件进行在线调试 2、 问题场景 用于了解不同ULINK仿真器对于芯片的支持是不一样的&#xff0c;并不是ULINK可以支持所有的keil软件…

基于Python的求职招聘管理系统【附源码】

摘 要 随着互联网技术的不断发展&#xff0c;人类的生活已经逐渐离不开网络了&#xff0c;在未来的社会中&#xff0c;人类的生活与工作都离不开数字化、网络化、电子化与虚拟化的数字技术。从互联网的发展历史、当前的应用现状和发展趋势来看&#xff0c;我们完全可以肯定&…

Linux命令之文件操作

文件拷贝&#xff1a;cp命令 概述 该命令的形式如下&#xff0c;其将源文件复制到指定目的地下。当有多个源文件时&#xff0c;目的地为目录文件 登录后复制 cp [option] source dest cp [option] source ... dest_directory 1.2. 常见可选参数option如下&#xff1a; -r: 递归…