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通配符的基础知识及用法。 …...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...