使用 Transformer 完成 IMDB 情感分类任务

news2025/1/13 13:21:26

前言

本文使用简单的 Transformer Block 实现对影评文本数据 IMDB 的情感分类任务。

数据

  1. 这里定义了两个关键的超参数:

    • vocab_size:表示词汇表的大小,即允许在文本数据中使用的不同的单词数量。
    • maxlen:表示文本序列的最大长度,超过这个长度的序列将被截断,不足这个长度的序列将被填充。
  2. 使用内置函数从 IMDB 电影评论文本数据集加载训练集和测试集。这是一个情感分类任务,其中评论标签被标记为积极或消极。结果只保留在数据中出现频率最高的前vocab_size个单词,其他单词将被忽略。这有助于限制词汇表的大小以降低模型的复杂性。

  3. 使用tf.keras.utils.pad_sequences函数在训练集和测试集的文本序列末尾填充或截断到指定的maxlen长度,以确保它们具有相同的长度,以满足神经网络要求的输入大小。

vocab_size = 20000
maxlen = 200

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.imdb.load_data(num_words=vocab_size)
x_train = tf.keras.utils.pad_sequences(x_train, maxlen=maxlen, padding='post', truncating='post')
x_test = tf.keras.utils.pad_sequences(x_test, maxlen=maxlen, padding='post', truncating='post')
print(len(x_train), "个训练样本")
print(len(x_test), "个测试样本")

结果打印:

25000 个训练样本
25000 个测试样本

嵌入

这段代码定义了一个名为 Embed 的自定义 Keras 层,用于实现 Transformer 模型中的嵌入层(Embedding Layer)。嵌入层将输入序列中的每个 token 和它们的位置嵌入到一个连续向量空间中,为 Transformer 模型提供适当的输入表示。这是 Transformer 模型中非常重要的一部分,用于捕捉序列数据中的语义信息和位置信息,主要参数如下。

  • maxlen:表示输入序列的最大长度,用于确定位置嵌入的维度。
  • vocab_size:表示词汇表的大小,即不同 token 的数量。
  • embed_dim:表示嵌入向量的维度,决定了最后得到的词向量维度。
class Embed(tf.keras.layers.Layer):
    def __init__(self, maxlen, vocab_size, embed_dim):
        super().__init__()
        self.token_emb = Embedding(input_dim=vocab_size, output_dim=embed_dim)
        self.pos_emb = Embedding(input_dim=maxlen, output_dim=embed_dim)

    def call(self, x):
        maxlen = tf.shape(x)[-1]
        positions = tf.range(start=0, limit=maxlen, delta=1)
        positions = self.pos_emb(positions)
        x = self.token_emb(x)
        return x + positions

Transformer Block

这段代码定义了一个名为 Block 的自定义 Keras 层,用来表示 Transformer 模型中的一个基本运算块(block)。每个基本块包含了两部分:多头自注意力层(Multi-Head Attention)前馈神经网络层(Feed-Forward Neural Network),以及一些为了防止过拟合的层标准化(LayerNormalization)Dropout残差连接等操作。

该 Block 部分通过多头自注意力和前馈神经网络实现了序列数据的特征提取表示学习,经过多个这样的基本块可以层层堆叠形成编码器解码器,这里只是简单当作一个提取序列数据的层。主要参数如下:

  • embed_dim:表示向量的维度。
  • num_heads:表示多头自注意力中的注意力头数量。
  • rate:Dropout 丢弃比例,在训练期间应用以防止过拟合。
class BLock(tf.keras.layers.Layer):
    def __init__(self, embed_dim, num_heads, rate=0.1):
        super().__init__()
        self.att = MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim)
        self.ffn = tf.keras.Sequential([tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dense(embed_dim)])
        self.norm1 = LayerNormalization(epsilon=1e-6)
        self.norm2 = LayerNormalization(epsilon=1e-6)
        self.dropout1 = Dropout(rate)
        self.dropout2 = Dropout(rate)

    def call(self, inputs, training):
        attn_output = self.att(inputs, inputs)
        attn_output = self.dropout1(attn_output, training=training)
        out1 = self.norm1(inputs + attn_output)
        ffn_output = self.ffn(out1)
        ffn_output = self.dropout2(ffn_output, training=training)
        return self.norm2(ffn_output + out1)

训练

这里主要是对模型进行编译和训练,选择 Adam 作为模型的优化器,损失函数选择稀疏分类交叉熵(sparse_categorical_crossentropy),评估指标选择准确率(accuracy)。这里为了防止过拟合我设置了回调函数 EarlyStopping ,这个回调函数在验证集上监视 val_accuracy ,并在连续两个 epoch 后指标没有提升时停止训练。

model = tf.keras.Sequential([
    Input(shape=(maxlen,)),
    Embed(maxlen, vocab_size, 32),
    BLock(32, 4),
    GlobalAveragePooling1D(),
    Dropout(0.1),
    Dense(20, activation='relu'),
    Dropout(0.1),
    Dense(2, activation='softmax')
])
callbacks = [tf.keras.callbacks.EarlyStopping(patience=2, monitor='val_accuracy')]
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test, y_test), callbacks=callbacks)

结果打印,经过了 3 轮训练后提前停止了训练,最终的验证集准确率能达到 84%

Epoch 1/10
782/782 [==============================] - 9s 10ms/step - loss: 0.4148 - accuracy: 0.7963 - val_loss: 0.3230 - val_accuracy: 0.8642
Epoch 2/10
782/782 [==============================] - 11s 14ms/step - loss: 0.2207 - accuracy: 0.9165 - val_loss: 0.4794 - val_accuracy: 0.8006
Epoch 3/10
782/782 [==============================] - 12s 15ms/step - loss: 0.1476 - accuracy: 0.9477 - val_loss: 0.4001 - val_accuracy: 0.8434

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型-机器学习中的集成学习

机器学习中的集成学习 集成学习概述及主要研究领域 1.1 集成学习概述💥 “众人拾柴火焰高”、“三个臭皮匠顶个诸葛亮”等词语都在表明着群体智慧的力量,所谓的“群体智慧”指的就是一群对某个主题具有平均知识的人集中在一起可以对某一些问题提供出更…

觅瑞集团两年亏损9亿:现金流承压营销成本近亿,应收账款周期过长

《港湾商业观察》黄懿 4月30日,Mirxes Holding Company Limited(下称“觅瑞集团”)递表港交所,拟在香港主板挂牌上市,中金和建银国际为联席保荐人,这是继2023年7月25日递表失效后的再一次申请。觅瑞集团国…

记录vue一个echarts页面 柱状图加平均分横线 双柱状图 横向双柱状图

<template><div class"app-container"><el-form :model"queryParams" ref"queryForm" size"small" v-show"showSearch" label-width"85px"><el-form-item label"园所名称" prop&q…

【Vue】智慧商城

步骤一般都是&#xff1a; 静态结构 > 封装接口 > 路由获取参数 > 获取数据 动态渲染 先封装接口再路由获取参数的原因是因为&#xff0c;只有先封装好了接口&#xff0c;才能知道我们需要哪些参数 接口文档&#xff1a;https://apifox.com/apidoc/shared-12ab6b18-a…

LabVIEW结构体内部缺陷振动检测

结构体内部缺陷会改变其振动特性&#xff0c;通过振动分析可以检测并定位这些缺陷。本文详细分析内部缺陷对振动的影响&#xff0c;从频谱分析、时域分析和模态分析等多角度探讨基于LabVIEW的检测方法&#xff0c;提供实施步骤和注意事项&#xff0c;帮助工程师有效利用LabVIEW…

安全生产信息化平台:高效构建安全台账管理体系

随着科技的飞速发展&#xff0c;信息化已成为推动企业安全生产管理的重要手段。传统的安全台账管理方式&#xff0c;涉及记录、整理、汇编等多个繁琐环节&#xff0c;不仅耗时费力&#xff0c;而且在查找和检索时也不便。安全生产信息化平台的出现&#xff0c;为企业提供了全新…

【Linux】线程(附源码)

目录 1.线程概述 2.创建线程 3.线程退出 4.线程回收 5.线程分离 1.线程概述 线程是轻量级的进程&#xff08;LWP&#xff1a;light weight process&#xff09;&#xff0c;在Linux环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合&#xff0c;…

[图解]企业应用架构模式2024新译本讲解12-领域模型5

1 00:00:00,560 --> 00:00:04,690 刚才是往那个表里面添加数据了 2 00:00:04,700 --> 00:00:07,960 相当于&#xff0c;或者往这个合同里面添加数据了 3 00:00:08,430 --> 00:00:09,530 现在要查询怎么办 4 00:00:09,900 --> 00:00:10,930 跟前面一样 5 00:00:…

C# WPF入门学习主线篇(八)—— ListBox常见属性和事件

C# WPF入门学习主线篇&#xff08;八&#xff09;—— ListBox常见属性和事件 欢迎来到C# WPF入门学习系列的第八篇。在前面的文章中&#xff0c;我们已经探讨了WPF中的Button、TextBox和Label控件的使用。今天&#xff0c;我们将深入了解WPF中的另一个常用控件——ListBox。本…

java web如何调用py脚本文件

Controller public class IndexController {RequestMapping("/pythonTest")ResponseBodypublic String pythonTest(){// 假设你的Python脚本名为script.pyString pythonScriptPath "D:\\project\\c1\\hello.py";ProcessBuilder processBuilder new Proce…

【解读】小提琴图

ref&#xff1a;解读文献中的箱线图&#xff08;Box-plot&#xff09;和小提琴图&#xff08;Violin-plot)&#xff09;_小提琴图和箱线图的区别-CSDN博客小提琴图展示了每个变量的数据分布情况&#xff0c;通过图中的“小提琴”形状可以看出数据的密度和分布情况。 在图中&…

在Visual Studio Code中使用pytest进行AWS Lambda函数测试的最佳实践

背景/引言 在现代软件开发中&#xff0c;自动化测试已经成为保证代码质量的重要一环。对于AWS Lambda函数开发者来说&#xff0c;使用pytest进行单元测试和集成测试是一个高效且可靠的方法。本文将介绍在Visual Studio Code中使用pytest测试AWS Lambda函数的最佳实践&#xff…

攸信动态丨攸信技术接受厦门电视台《厦视直播室》栏目组采访

近日&#xff0c;厦门攸信信息技术有限公司&#xff08;简称“攸信技术&#xff08;UMS&#xff09;”&#xff09;荣幸地接受厦门电视台《厦视直播室》栏目组的采访。 智能制造作为当今技术创新的前沿阵地&#xff0c;正日益成为推动工业发展的核心力量。攸信技术&#xff0c;…

门禁系统一套多少钱,门禁系统设备的价格

门禁系统一套多少钱&#xff0c;门禁系统设备的价格 现今门禁系统有诸多品牌&#xff0c;不同品牌的价格亦有所差别&#xff1b;知名的大品牌价格往往更贵&#xff0c;而一些小众品牌又不太了解&#xff0c;价格虽便宜些&#xff0c;却担心质量不佳&#xff0c;售后也不好处理&…

适用于 macOS 的最佳免费数据恢复软件

升级到 macOS 后&#xff0c;它可以帮助您从 HDD、SSD、存储卡、USB 闪存驱动器、数码相机或其他存储介质设备中完全恢复已删除、格式化或无法访问的数据。 当 macOS Monterey 用户寻找数据恢复解决方案时&#xff0c;免费数据恢复软件始终是一个不错的选择。实际上&#xff0…

FuTalk设计周刊-Vol.060

#AI漫谈 热点捕手 1.浙大、蚂蚁集团推出MaPa&#xff1a;文本生成超真实3D模型 与传统纹理方法不同的是&#xff0c;MaPa通过文本能直接生成高分辨率、物理光照、超真实材质的3D模型&#xff0c;可以极大提升游戏、VR、AR、影视等行业的开发效率。 链接https://mp.weixin.qq…

Elasticsearch 为时间序列数据带来存储优势

作者&#xff1a;来自 Elastic Martijn Van Groningen, Kostas Krikellas 背景 Elasticsearch 最近投资了对存储和查询时间序列数据的更好支持。存储效率一直是关注的主要领域&#xff0c;许多项目取得了巨大的成功&#xff0c;与将数据保存在标准索引中相比&#xff0c;可以节…

STM32-CAN

一、CAN总线简介 1.1 CAN简介 CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO 国际标准化的串行通信 协议。异步半双工。 ISO11898&#xff1a;123kbps~1Mbps。 ISO11519&#xff1a;125kbps 特点&#xff1a; 多主控制没…

高考后的家庭移民新选择

随着高考的落幕&#xff0c;您是否在思考未来的更多可能性&#xff1f;移民&#xff0c;作为一种生活选择&#xff0c;为许多家庭提供了一个全新的生活和教育环境。我们理解&#xff0c;每个家庭都希望为自己的孩子提供最好的未来。 移民国家通常拥有多元和包容的教育体系&…

Nginx Location匹配 和 Rewrite重写

前言&#xff1a;Nginx 正则表达式 ^匹配输入字符串的起始位置$匹配输入字符串的结束位置*匹配前面的字符零次或多次匹配前面的字符一次或多次&#xff1f;匹配前面的字符零次或一次.匹配除 “\n” 之外的任何单个字符\将后面接着的字符标记为一个特殊字符或一个原义字符或一个…