LLM:BERT or BART 之BERT
文章目录
- 前言
- 一、BERT
- 1. Decoder-only
- 2. Encoder-only
- 3. Use of Bidirectional Context
- 4. Masked Language Model (MLM)
- 5. Next Sentence Prediction (NSP)
- 6. Fine-tune
- 1、情感分析
- 2、句对分析
- 3、命名实体识别(NER)
- 7. BERT总结
- 总结
前言
NLP选手对这两个应该很熟,最近因为多模态的发展,作为cv选手还是很有必要了解一下这两个模型。这两个模型也算是LLM的先驱了。
本文将对BERT做一个基本的介绍
paper:https://arxiv.org/pdf/1810.04805
github:https://github.com/google-research/bert
一、BERT
BERT (Bidirectional Encoder Representations from Transformers) 是一个 Encoder-only 模型,它使用了Transformer的编码器部分来处理输入的文本,并生成文本的表示。BERT主要有以下4个特征:

有必要说明一下 Encoder-only 和 decoder-only 架构的区别。OpenAI首次在2018年创造了decoder-only的GPT应用于NLG。随后Google发布了encoder-only的BERT应用于NLU。下面简单介绍一下两种模型的gap
1. Decoder-only
Goal: 根据输入序列预测一个新的输出序列
Transformer中的 decoder block 负责基于编码器提供的输入生成输出序列。decoder-only 是通过完全省略encoder并将多个解码器堆叠在一个模型中来构建的。这些模型接受prompt作为输入,并通过每次预测一个最可能的token来生成响应。因此,只有解码器的模型在NLG任务中表现出色,例如:会话聊天机器人、机器翻译和代码生成。
2. Encoder-only
Goal: 对输入序列的word进行预测
encoder block负责接受输入序列,并为每个token创建丰富的数字向量表示。encoder-only模型省略了解码器,并将多个Transformer encoder堆叠在一起以生成单个模型。模型不接受prompt,而是接受用于进行预测的输入序列(例如,预测序列中缺失的单词)。encoder-only模型缺少用于生成新词的decoder,因此不能像使用GPT那样用于聊天。相反,encoder-only模型最常用于NLU任务,例如:命名实体识别(NER)和情感分析。
(从技术上讲,使用BERT生成文本是可能的,但这不是该结构的目的,并且结果在任何方面都无法与仅解码器模型相媲美。)

3. Use of Bidirectional Context
作为一种语言模型,BERT预测了在观察到先前单词的情况下观察到某些单词的概率。所有语言模型都共享这个基本方面。然而,正是对这些概率的利用赋予了模型特定于任务的行为。例如,GPT被训练来预测序列中下一个最可能的单词。也就是说,模型预测下一个单词,前提是前面的单词已经被观察到。其他模型可能在情感分析上进行训练,使用诸如积极或消极等文本标签来预测输入序列的情感。对文本进行任何有意义的预测都需要理解周围的上下文,特别是在NLU任务中。BERT通过它的一个关键属性:bidirectionality来确保良好的理解。
bidirectionality(双向性)是BERT最核心的属性,是其在NLU任务中的高性能的关键。
双向性表示输入序列中的每个单词都可以从前面和后面的单词中获得上下文。简单来说,我们说注意机制可以关注每个单词的前后标记。BERT只对输入序列中的单词进行预测,而不像GPT那样生成新的序列。因此,当BERT在输入序列中预测一个单词时,它可以结合周围所有单词的上下文线索。这提供了两个方向的context,帮助BERT做出更明智的预测。

举个具体例子:考虑一个文本序列“今天打算去公园散步,然后去游乐园。”
在单向编码中,每个词或标记的编码仅依赖于其之前的词或标记。因此,在编码“散步”这个词时,模型只会考虑在它之前的词。
在双向编码中,每个词或标记的编码都会同时考虑其前后的词或标记。因此,在编码“散步”这个词时,模型会同时考虑所有词,从而更全面地理解整个句子的语义。
4. Masked Language Model (MLM)
Masked Language Model,是BERT预训练的一个重要部分。此阶段,模型的任务是预测输入句子中被**随机遮蔽(masked)**掉的部分单词。
输入文本处理:首先,对于输入的句子,随机选择句子中15%的单词进行遮蔽。对于每个被选中的单词,有80%的概率直接用[MASK]标记替换,10%的概率用随机的一个单词替换(这有助于模型学习理解上下文的重要性,而不仅仅是依赖于[MASK]标记),剩下的10%则保持不变(这有助于模型在微调阶段更好地处理未遮蔽的单词)。
模型预测:模型的目标是根据上下文预测这些被遮蔽单词的原始值。这种机制促使BERT能够深入理解文本中的语义关系。
举个例子:I love you
1)80%的时候是[MASK]。如,I love [MASK]
2)10%的时候是随机的其他token。如,I love her
3)10%的时候是原来的token。
5. Next Sentence Prediction (NSP)
Next Sentence Prediction,即下一句预测,是BERT预训练的另一个重要部分,旨在提高模型对句子间关系的理解能力。
句子对生成:在预训练时,模型不仅接收单个句子作为输入,还接收句子对。这些句子对可能是连续的(即真实的下一句),也可能是随机组合的(即非连续的)。
模型预测:对于每个句子对,模型需要预测第二个句子是否是第一个句子的真实下一句。这是一个简单的二分类任务,输出是一个[0, 1]范围内的值,表示第二个句子是第一个句子真实下一句的概率。
PS:在BERT的后续版本中,Next Sentence Prediction(NSP)任务被废弃了。因为研究人员发现这个任务对下游任务的性能提升有限。
6. Fine-tune
预训练完成后,BERT 模型可以通过微调(Fine-Tuning)应用于各种下游任务,如文本分类、命名实体识别、问答等。微调过程中,模型的权重会被更新以适应特定任务。 下面举几个例子:
1、情感分析
分类一句话是正面情感或负面情感
输入
[CLS] 这部电影非常精彩!
2、句对分析
判别两句话的关系
输入是一个固定长度的序列,由两部分组成:
CLS 标记:句子开头的特殊标记,用于句子级任务(如文本分类)。
SEP 标记:用于分隔两个句子,或者标记句子结束。 例如:
输入句子:“我喜欢看电影。” 和 “最近上映的电影真不错。”
转化为:
[CLS] 我 喜欢 看 电影 。 [SEP] 最近 上映 的 电影 真 不错 。 [SEP]
3、命名实体识别(NER)
简单来说就是对句子中的每个词或子词进行标注。(这个任务还是一个蛮大的领域,感兴趣可以查查)


7. BERT总结
BERT是一个encoder-only模型,为NLU任务开发,作为预训练模型可应用于多种语义理解任务上。我觉得其预训练方式绝对是里程碑式的操作,甚至CV后面的MAE也是借鉴它的想法
总结
本文对不熟悉BERT的人做个简单介绍,想了解BERT的代码实现和更多应用可以参考原文和开源代码。BERT在NLP领域有着变革性的地位,为后续的研究提供了新的思路!
相关文章:
LLM:BERT or BART 之BERT
文章目录 前言一、BERT1. Decoder-only2. Encoder-only3. Use of Bidirectional Context4. Masked Language Model (MLM)5. Next Sentence Prediction (NSP)6. Fine-tune1、情感分析2、句对分析3、命名实体识别(NER) 7. BERT总结 总结 前言 NLP选手对这…...
EtherCAT主站IGH-- 18 -- IGH之fsm_mbox_gateway.h/c文件解析
EtherCAT主站IGH-- 18 -- IGH之fsm_mbox_gateway.h/c文件解析 0 预览一 该文件功能`fsm_mbox_gateway.c` 文件功能函数预览二 函数功能介绍`fsm_mbox_gateway.c` 中主要函数的作用1. `ec_fsm_mbg_init`2. `ec_fsm_mbg_clear`3. `ec_fsm_mbg_transfer`4. `ec_fsm_mbg_exec`5. `e…...
深入探讨防抖函数中的 this 上下文
深入剖析防抖函数中的 this 上下文 最近我在研究防抖函数实现的时候,发现一个耗费脑子的问题,出现了令我困惑的问题。接下来,我将通过代码示例,深入探究这些现象背后的原理。 示例代码 function debounce(fn, delay) {let time…...
【AI论文】魔鬼在细节:关于在训练专用混合专家模型时实现负载均衡损失
摘要:本文重新审视了在训练混合专家(Mixture-of-Experts, MoEs)模型时负载均衡损失(Load-Balancing Loss, LBL)的实现。具体来说,MoEs的LBL定义为N_E乘以从1到N_E的所有专家i的频率f_i与门控得分平均值p_i的…...
Gurobi基础语法之addVar 和 addVars
addVar 和 addVars作为 Gurobi模型对象中的方法,常常用来生成变量,本文介绍了Python中的这两个接口的使用 addVar addVar(lb0.0, ubfloat(inf), obj0.0, vtypeGRB.CONTINUOUS, name, columnNone) lb 和 ub让变量在生成的时候就有下界和上届,…...
C语言学习阶段性总结(五)---函数
函数构成五要素: 1、返回值类型 2、函数名 3、参数列表(输入) 4、函数体 (算法) 5、返回值 (输出) 返回值类型 函数名 (参数列表) { 函数体; return 返回值; } void 类型…...
K8S 快速实战
K8S 核心架构原理: 我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图: K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave…...
java后端之事务管理
Transactional注解:作用于业务层的方法、类、接口上,将当前方法交给spring进行事务管理,执行前开启事务,成功执行则提交事务,执行异常回滚事务 spring事务管理日志: 默认情况下,只有出现Runti…...
【Redis】缓存+分布式锁
目录 缓存 Redis最主要的使用场景就是作为缓存 缓存的更新策略: 1.定期生成 2.实时生成 面试重点: 缓存预热(Cache preheating): 缓存穿透(Cache penetration) 缓存雪崩 (Cache avalan…...
二分查找题目:寻找两个正序数组的中位数
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:寻找两个正序数组的中位数 出处:4. 寻找两个正序数组的中位数 难度 8 级 题目描述 要求 给定两个大…...
网络安全 | F5-Attack Signatures详解
关注:CodingTechWork 关于攻击签名 攻击签名是用于识别 Web 应用程序及其组件上攻击或攻击类型的规则或模式。安全策略将攻击签名中的模式与请求和响应的内容进行比较,以查找潜在的攻击。有些签名旨在保护特定的操作系统、Web 服务器、数据库、框架或应…...
Redis --- 分布式锁的使用
我们在上篇博客高并发处理 --- 超卖问题一人一单解决方案讲述了两种锁解决业务的使用方法,但是这样不能让锁跨JVM也就是跨进程去使用,只能适用在单体项目中如下图: 为了解决这种场景,我们就需要用一个锁监视器对全部集群进行监视…...
LeetCode100之全排列(46)--Java
1.问题描述 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案 示例1 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例2 输入:nums [0,1] 输出…...
goframe 博客分类文章模型文档 主要解决关联
goframe 博客文章模型文档 模型结构 (BlogArticleInfoRes) BlogArticleInfoRes 结构体代表系统中的一篇博客文章,包含完整的元数据和内容管理功能。 type BlogArticleInfoRes struct {Id uint orm:"id,primary" json:"id" …...
【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
文章目录 🌍一. WEB 开发❄️1. 介绍 ❄️2. BS 与 CS 开发介绍 ❄️3. JavaWeb 服务软件 🌍二. Tomcat❄️1. Tomcat 下载和安装 ❄️2. Tomcat 启动 ❄️3. Tomcat 启动故障排除 ❄️4. Tomcat 服务中部署 WEB 应用 ❄️5. 浏览器访问 Web 服务过程详…...
安卓日常问题杂谈(一)
背景 关于安卓开发中,有很多奇奇怪怪的问题,有时候这个控件闪一下,有时候这个页面移动一下,这些对于快速开发中,去查询,都是很耗费时间的,因此,本系列文章,旨在记录安卓…...
Kitchen Racks 2
Kitchen Racks 2 吸盘置物架 Kitchen Racks-CSDN博客...
嵌入式学习笔记-杂七杂八
文章目录 连续波光纤耦合激光器工作原理主要特点应用领域设计考虑因素 数值孔径(Numerical Aperture,简称NA)数值孔径的定义数值孔径的意义数值孔径的计算示例数值孔径与光纤 四象限探测器检测目标方法四象限划分检测目标的步骤1. 数据采集2.…...
14-7C++STL的stack容器
(一)stack容器的入栈与出栈 (1)stack容器的简介 stack堆栈容器,“先进后出”的容器,且stack没有迭代器 (2)stack对象的默认构造 stack采用模板类实现,stack对象的默认…...
Vue 3 中的响应式系统:ref 与 reactive 的对比与应用
Vue 3 的响应式系统是其核心特性之一,它允许开发者以声明式的方式构建用户界面。Vue 3 引入了两种主要的响应式 API:ref 和 reactive。本文将详细介绍这两种 API 的用法、区别以及在修改对象属性和修改整个对象时的不同表现,并提供完整的代码…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
