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 的用法、区别以及在修改对象属性和修改整个对象时的不同表现,并提供完整的代码…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...
