Python Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用
Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用
近年来,Transformer 模型在自然语言处理(NLP)领域取得了巨大成功,为任务如翻译、生成文本、问答和情感分析带来了显著的性能提升。本文将介绍 Transformer 模型的基本原理,重点解释 BERT 和 GPT 等模型的工作机制,并展示它们如何在情感分析中提高效果。希望帮助对 Transformer 感兴趣的新手快速理解其核心思想和实际应用。
一、Transformer 模型的背景
在 Transformer 模型出现之前,序列到序列的任务主要依赖于循环神经网络(RNN)和长短期记忆网络(LSTM)。这些模型虽然在 NLP 领域取得了一定成功,但存在一些瓶颈:
- 训练速度较慢:由于 RNN 需要逐步处理输入序列,因此训练速度较慢。
- 长期依赖问题:随着序列长度的增加,模型的表现会下降,因为难以记住早期的信息。
Transformer 由 Vaswani 等人在 2017 年提出,它放弃了 RNN 的结构,采用一种完全基于 Attention 机制的架构。这种创新设计显著提升了模型的训练速度和对长序列的处理能力,使得 Transformer 成为了 NLP 领域的主流模型。
Transformer 模型的核心:Attention 机制
Transformer 模型的核心是“自注意力(Self-Attention)”机制。自注意力的作用是让模型在处理某个词汇时,可以“关注”到输入序列中的其他词汇,从而获得更丰富的上下文信息。这对于解决长期依赖问题至关重要。Attention 的计算公式如下:
[
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V
]
其中:
- ( Q )(Query):查询向量
- ( K )(Key):键向量
- ( V )(Value):值向量
- ( d_k ):向量的维度
Attention 的主要作用在于加权计算句子中每个词的权重,使得模型能够捕捉上下文中的依赖关系。
二、Transformer 的结构
Transformer 包含两个主要部分:编码器(Encoder) 和 解码器(Decoder),它们分别由多个相同的层堆叠而成。每一层都由两部分组成:自注意力层和前馈神经网络层。
- 编码器:将输入序列编码为上下文表示,每层包含自注意力层和前馈神经网络层。
- 解码器:根据编码器生成的表示和目标序列的上下文生成输出。
这种编码-解码结构使 Transformer 能够高效地处理复杂的 NLP 任务。
三、BERT 模型:双向 Transformer 编码器
BERT(Bidirectional Encoder Representations from Transformers)是基于 Transformer 的编码器架构模型,由 Google 于 2018 年提出。BERT 的创新之处在于其双向性,即在理解某个词时,BERT 可以同时考虑到该词的左右上下文信息。BERT 在多个 NLP 任务上取得了优秀的效果。
1. BERT 的预训练任务
BERT 通过以下两个任务进行预训练,从而在广泛的语料库中学习语言知识:
- 掩码语言模型(Masked Language Model,MLM):BERT 会随机掩盖部分词汇,让模型在上下文中预测被掩盖的词汇。
- 下一句预测(Next Sentence Prediction,NSP):BERT 在给定的一对句子时,需要判断第二句是否是第一句的后续句。
2. BERT 的优势
BERT 的双向编码使得它能够在情感分析等任务中捕捉更加准确的上下文信息。例如,句子“电影情节不够吸引人”中,“不够”表明否定含义,BERT 能够很好地理解这种含义,并在情感分析中给出更准确的预测。
3. BERT 在情感分析中的应用
在情感分析任务中,BERT 可以通过微调(Fine-Tuning)的方式来调整模型参数,使其适应特定的数据集和任务。通常,我们可以使用 BERT 的最后一层输出作为文本的表示,并通过一个简单的分类器(如全连接层)进行情感分类。BERT 的强大表现主要来自于它对上下文的全面理解,这对于理解复杂情感表达的句子尤其有效。
四、GPT 模型:生成式预训练 Transformer
GPT(Generative Pre-trained Transformer)是 OpenAI 提出的生成模型,主要用于文本生成任务。与 BERT 的主要区别在于,GPT 使用**单向(从左到右)**的 Transformer 结构,专注于生成式任务,特别适合文本生成和续写等任务。
1. GPT 的自回归模型
GPT 采用自回归(Auto-Regressive)的方式生成文本,即预测当前词时只关注之前的词。它的训练任务是预测下一个词,这使得它擅长生成连贯的句子。
2. GPT 的优势
由于 GPT 专注于生成任务,它在语言生成方面具有极大的优势,生成的文本流畅自然,非常适合回答问题、写文章等应用。
3. GPT 在情感分析中的应用
虽然 GPT 是生成模型,但经过微调后,它也可以用于分类任务,如情感分析。GPT 可以通过生成候选情感标签并根据概率选择最合适的标签来完成分类任务。GPT 在理解文本和生成自然语言方面的能力,使得它在复杂情感的判断中也有出色的表现。
五、BERT 和 GPT 的对比
模型 | BERT | GPT |
---|---|---|
架构 | 编码器(双向) | 解码器(单向) |
训练目标 | 掩码语言模型(MLM)、下一句预测 | 自回归预测 |
任务适配 | 情感分析、分类、问答等 | 文本生成、对话生成 |
上下文获取 | 双向上下文 | 单向上下文 |
选择适合的模型
在情感分析任务中,通常选择 BERT 等双向模型更为合适,因为它们可以更好地理解句子的全局含义和上下文。而在需要生成文本或延续对话时,GPT 会是一个较好的选择。
六、实际案例:使用 BERT 和 GPT 进行情感分析
为了更好地理解 BERT 和 GPT 在情感分析中的应用,我们通过具体代码来展示如何使用这两个模型来进行情感分类。
1. 使用 BERT 进行情感分析
我们可以通过 Hugging Face 的 Transformers 库来加载预训练的 BERT 模型,并进行情感分析。
安装所需库
pip install transformers torch
代码示例
from transformers import BertTokenizer, BertForSequenceClassification
import torch# 加载 BERT 模型和分词器
model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name)# 输入文本
text = "我非常喜欢这部电影!剧情引人入胜。"# 编码输入
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
outputs = model(**inputs)# 获取预测结果
logits = outputs.logits
predicted_class = torch.argmax(logits, dim=1).item()
sentiment = ["非常负面", "负面", "中性", "正面", "非常正面"][predicted_class]
print(f"情感分析结果: {sentiment}")
在这段代码中,我们加载了预训练的 BERT 模型,并将一段文本输入到模型中进行情感分析。结果将返回情感分类的标签。
2. 使用 GPT-2 进行情感分析
尽管 GPT-2 主要用于生成任务,但它经过微调后也可以用于情感分析任务。
代码示例
from transformers import GPT2Tokenizer, GPT2ForSequenceClassification
import torch# 加载 GPT 模型和分词器
model_name = "textattack/gpt2-base-SST-2"
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
model = GPT2ForSequenceClassification.from_pretrained(model_name)# 输入文本
text = "This movie was absolutely fantastic!"# 编码输入
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
outputs = model(**inputs)# 获取预测结果
logits = outputs.logits
predicted_class = torch.argmax(logits, dim=1).item()
sentiment = ["负面", "正面"][predicted_class]
print(f"情感分析结果: {sentiment}")
这里使用了预训练并微调过的 GPT 模型来预测文本的情感标签。同样,它会输出“正面”或“负面”标签。
七、总结
Transformer 的诞生为自然语言处理带来了巨大变革,特别是 BERT 和 GPT 等模型在情感分析、文本生成等任务上表现出色。BERT 作为双向模型,在理解上下文方面具有优势,非常适合分类任务如情感分析。而 GPT 的生成能力让它在对话系统等生成任务中表现出色。无论是使用 BERT 还是 GPT,Transformer 模型都能够在 NLP 任务中显著提高效果,推动了情感分析等应用的深入发展。
通过本文的介绍,相信新手们对 Transformer 模型及其在情感分析中的应用有了基本的理解。在实际应用中,可以根据任务的具体需求选择适合的模型并进行微调,以获得更好的效果。
相关文章:
Python Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用
Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用 近年来,Transformer 模型在自然语言处理(NLP)领域取得了巨大成功,为任务如翻译、生成文本、问答和情感分析带来了显著的性能提升。本文将介绍 Tr…...
【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)
文章目录 在写redis集群搭建的时候,有提到过使用nfs做storageclass,那时候kubernetes是1.20版本,https://dongweizhen.blog.csdn.net/article/details/130651727 现在使用的是kubernetes 1.29版本,根据之前的修改方式并未生效,反而提示:Error: invalid argument "Re…...
使用 Pandas 进行时间序列分析的 10个关键点
使用Pandas进行时间序列分析的10个关键点(由于篇幅限制,这里调整为10个,但实际操作中可能涉及更多细节)如下: 1. 创建时间序列数据 时间序列数据是指在多个时间点上形成的数值序列。在Pandas中,可以使用t…...
使用 Mermaid 语言描述 AGI 系统架构图
使用Mermaid语言描述AGI系统架构图 一、整体架构概述 以下是一个简化的AGI(Artificial General Intelligence,通用人工智能)系统架构的Mermaid描述。该系统主要包括数据收集与预处理、模型训练、推理与决策以及交互接口等模块,各…...
绘制线性可分支持向量机决策边界图 代码解析
### 绘制线性可分支持向量机决策边界图 def plot_classifer(model, X, y):# 超参数边界x_min -7x_max 12y_min -12y_max -1step 0.05# meshgridxx, yy np.meshgrid(np.arange(x_min, x_max, step),np.arange(y_min, y_max, step))# 模型预测z model.predict(np.c_[xx.ra…...
No.23 笔记 | WEB安全 - 任意文件漏洞 part 5
本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发,清晰地阐述了文件上传漏洞的定义及其产生的本质原因,同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…...
EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放
EasyPlayer.js功能: 1、支持解码H.264视频(Baseline, Main, High Profile全支持,支持解码B帧视频) 2、支持解码H.265视频(flv id 12) 3、支持解码AAC音频(LC,HE,HEv2 Profile全支持) 4、支持解码MP3音频以及Speex音频格式 5、可…...
WPF数据绑定的五大模式
WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows用户界面的UI框架。它支持数据绑定,允许开发者将UI元素与数据源绑定,从而实现数据和界面的自动同步。WPF数据绑定有几种不同的模式, 以下是五种…...
从零到一:大学新生编程入门攻略与成长指南
文章目录 每日一句正能量前言编程语言选择:为大学新生量身定制Python:简单而强大的选择JavaScript:Web开发的基石Java:面向对象的经典C#:微软的全能选手 学习资源推荐:编程学习的宝藏在线课程教程和文档书籍…...
详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute
目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读:详细分析Pytorch中的permute基本知识(附Demo) 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数,特别是用于二维张量(矩阵)的转置操…...
初识WebGL
思路: 构建<canvas>画布节点,获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构: <!DOCTYPE html> <html lang"en&…...
【力扣】Go语言回溯算法详细实现与方法论提炼
文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…...
「C/C++」C/C++ 之 第三方库使用规范
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...
六、元素应用CSS的习题
题目一: 使用CSS样式对页面元素加以修饰,制作“ 旅游攻略 ”网站。如下图所示 运行效果: 代码: <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…...
正式入驻!上海斯歌BPM PaaS管理软件等产品入选华为云联营商品
近日,上海斯歌旗下BPM PaaS管理软件(NBS)等多款产品入选华为云云商店联营商品,上海斯歌正式成为华为云联营商品合作伙伴。用户登录华为云云商店即可采购上海斯歌的BPM PaaS产品及配套服务。通过联营模式,双方合作能够深…...
使用 Axios 上传大文件分片上传
背景 在上传大文件时,分片上传是一种常见且有效的策略。由于大文件在上传过程中可能会遇到内存溢出、网络不稳定等问题,分片上传可以显著提高上传的可靠性和效率。通过将大文件分割成多个小分片,不仅可以减少单次上传的数据量,降…...
Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP
1 、安装OpenResty 安装使用 OpenResty,这是一个集成了各种 Lua 模块的 Nginx 服务器,是一个以Nginx为核心同时包含很多第三方模块的Web应用服务器,使用Nginx的同时又能使用lua等模块实现复杂的控制。 (1)安装编译工具…...
PART 1 数据挖掘概论 — 数据挖掘方法论
目录 数据库知识发掘步骤 数据挖掘技术的产业标准 CRISP-DM SEMMA 数据库知识发掘步骤 数据库知识发掘(Knowledge Discovery in Database,KDD)是从数据库中的大量数据中发现不明显、之前未知、可能有用的知识。 知识发掘流程(Knowledge Discovery Process)包括属性选择…...
Centos安装ffmpeg的方法
推荐第一个,不要自己编译安装,太难了,坑多。 在 CentOS 上安装 FFmpeg 有几种方法,以下是两种常见的方法: ### 方法一:使用 RPM Fusion 仓库安装 1. **启用 RPM Fusion 仓库**: RPM Fusion 是一个第三方仓库,提供了许多 CentOS 官方仓库中没有的软件包。 ```bash…...
理解SQL中通配符的使用
前言 SQL 是一种标准化的结构化查询语言,涉及结构化查询时,高效地检索数据至关重要。而通配符是SQL中模式匹配的有效的方法。使用通配符可以更轻松地检索到所需的确切数据。通配符允许我们定义多功能查询条件。本文将 介绍SQL通配符的基础知识及用法。 …...
SpringBoot篇(简化操作的原理)
目录 一、代码位置 二、统一版本管理(parent) 三、提供 starter简化 Maven 配置 四、自动配置 Spring(引导类) 五、嵌入式 servlet 容器 一、代码位置 二、统一版本管理(parent) SpringBoot项目都会继…...
Cesium的模型(ModelVS)顶点着色器浅析
来自glTF和3D Tiles的模型会走ModelVS.glsl。这个文件不单独是把模型顶点转换为屏幕坐标,还包含了丰富的处理过程。 Cesium是根据定义的Define判断某个行为是否需要被执行,比如#define HAS_SILHOUETTE,说明需要计算模型外轮廓线。 Cesium的…...
机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)
前言 在24年10.26/10.27两天,我司七月在线举办的七月大模型机器人线下营时,我们带着大家一步步复现UMI,比如把杯子摆到杯盘上(其中1-2位学员朋友还亲自自身成功做到该任务) 此外,我还特地邀请了针对UMI做了改进工作的fastumi作者…...
C++之多态的深度剖析
目录 前言 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 选择题 2.1.5 虚函数其他知识 协变(了解) 析构函数的重写 override 和 final关键字 3. 重载,重写&…...
Microsoft Office PowerPoint制作科研论文用图
Microsoft Office PowerPoint制作科研论文用图 1. 获取高清图片2. 导入PPT3. 另存为“增强型windows元文件”emf格式4. 画图剪裁 1. 获取高清图片 这里指通过绘图软件画分辨率高的图片,我一般使用python画dpi600的图片。 2. 导入PPT 新建一个PPT(注意&a…...
go语言进阶之并发基础
并发 什么是并发,也就是我们常说的多线程,多个程序同时执行。 并发的基础 线程和进程 进程 进程是操作系统中一个重要的概念,指的是一个正在运行的程序的实例。它包含程序代码、当前活动的状态、变量、程序计数器和内存等资源。进程是系…...
po、dto、vo的使用场景
现在项目中有两类模型类:DTO数据传输对象、PO持久化对象,DTO用于接口层向业务层之间传输数据,PO用于业务层与持久层之间传输数据,有些项目还会设置VO对象,VO对象用在前端与接口层之间传输数据,如下图&#…...
聊一聊Elasticsearch的一些基本信息
一、Elasticsearch是什么 Elasticsearch简称ES,是一款分布式搜索引擎。它是在Apache Lucene基础之上采用Java语言开发的。 Elasticsearch的官方网站对它的解释是:Elasticsearch是一个分布式、RESTful的搜索和数据分析引擎。 通过上边的官方解释&#…...
Unity 两篇文章熟悉所有编辑器拓展关键类 (上)
本专栏基础资源来自唐老狮和siki学院,仅作学习交流使用,不作任何商业用途,吃水不忘打井人,谨遵教诲 编辑器扩展内容实在是太多太多了(本篇就有五千字) 所以分为两个篇章而且只用一些常用api举例,…...
Spring SPI、Solon SPI 有点儿像(Maven 与 Gradle)
一、什么是 SPI SPI 全名 Service Provider interface,翻译过来就是“服务提供接口”。基本效果是,申明一个接口,然后通过配置获取它的实现,进而实现动态扩展。 Java SPI 是 JDK 内置的一种动态加载扩展点的实现。 一般的业务代…...
拉新推广怎么快速拉人/seo课程多少钱
<!--小练习,练习使用循环实现一个九九乘法表 第一步,最低要求:在Console中按行输出 n * m t 然后,尝试在网页中,使用table来实现一个九九乘法表 --> <!DOCTYPE html> <html><head><meta c…...
wow电影在线观看/系统清理优化工具
[转载自博客](http://blog.csdn.net/huang_wei_cai/article/details/52515817) 前言: Android Studio中对一个自己库进行生成操作时将会同时生成.jar与.aar文件。如下是本人测试可行的方案,需要学习的可以参考。 分别存储位置: *.jar&#x…...
删掉cache wordpress/万网域名查询官网
原文 对于我们CSS开发者来说经常听到一些关于LESS和SASS的信息,但是我们并不知道这都是什么意思,这篇文章就是为我们而准备的.在调查这些语言后,我已经发现它们都是一些js文件,运行后会产生相应CSS文件给我们.为什么我们要使用LESS和SASS它们呢,因为我们可以避免CSS中需要的重复…...
最优网络做网站骗/江苏seo
MVVM是Model-View-ViewModel的简写基于 vue 2.0 开发的。超多写好样式的组件共大家使用。vue 文件的语法主要有 javaScript, html 4 , ESlint这里只是第一版的简单介绍和链接。还在收集整理,学习中。饿了儿的开发组件,使用起来超简单的,但是文…...
家政公司网站建设多少钱/企业宣传片视频
安全知识 规范用语信息安全行业信息系统安全,网络安全网络系统安全和数据安全攻击与防御 产品形式软件,硬件,安全网关等 4A是指:认证Authentication、账号Account、授权Authorization、审计Audit,中文名称为统一安全管…...
如何攻击织梦做的网站/百度小说风云榜排行榜官网
embOS是一个优先级控制的多任务系统,是专门为各种微控制器应用于实时系统应用的嵌入式操作系统.是一个具有最小RAM和ROM占用的、高速的、多功能的高性能工具。 特点: 贯穿embOS的整个开发过程,微控制器有限的资源一直是开发者所顾…...