当前位置: 首页 > news >正文

【深度学习】深刻理解BERT

        BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年提出的一种预训练的语言表示模型,它基于Transformer架构并能够处理自然语言处理(NLP)中的多种任务。BERT的核心创新是其使用了双向编码器的思想,相比于之前单向的语言模型(如GPT),BERT能同时利用上下文信息。

论文链接:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

一、BERT整体架构

        BERT由Transformer中的encoder组成,其中BERT模型有多个版本,主要有BERT-BaseBERT-Large。BERT-Base包含12层的Transformer编码器,每层有768个隐藏单元和12个自注意力头。BERT-Large则有24层Transformer编码器,每层有1024个隐藏单元和16个自注意力头,其中BERT-Large有更多的参数,通常能够获得更好的效果。encoder由三个部分组成——输入部分、多头注意力机制部分和前馈网络部分。对于BERT中的encoder,我们重点关注的是输入部分,对于Transformer来说,输入部分分为input embedding和positional encoding,但在BERT中,输入部分为token embedding、segment embedding和 position embedding。

        如下图所示,input的内容有三种——普通词汇、<CLS>、<SEP>,而<CLS>和<SEP>的存在是为了NSP任务(处理两个句子之间的关系,属于二分类任务)。<SEP>将两个不同的句子进行分隔,通过这个特殊的标记区分句子;<CLS>是每个序列的第一个标记,将<CLS>的输出向量接一个分类器,可以去做二分类任务,但<CLS>并非是代表整个句子的语义信息。Token Embeddings就是将所有输入进行正常的embedding;Segment Embeddings是由于我们处理的是两个句子,所以需要将两个句子进行区分;在Position Embeddings中,BERT没有像Transformer中的positional encoding一样采用正余弦函数,而是随机初始化让模型自己学习出来。一旦输入标记准备好,它们就会在层叠中流动。每一层都应用自注意力,将其结果通过前馈网络传递,并将其交给下一个编码器。

二、BERT 训练

        BERT的目的是想基于微调的NLP模型,预训练的模型抽取了足够多的信息,新的任务只需要增加一个简单的输出层。因此,BERT的训练包含pre-train和fine-tune两个阶段。pre-train阶段模型是在无标注的标签数据上进行训练,fine-tune阶段,BERT模型首先是被pre-train模型参数初始化,然后所有的参数会用下游的有标注的数据进行训练。

2.1. BERT预训练 

        BERT在大规模语料库上进行无监督预训练,学习到丰富的语言表示。对于无监督的目标函数来说,有两种目标函数比较受到重视:

  • Masked Language Model(MLM):AR(autoregressive)自回归模型,只能考虑单侧的信息,典型的就是GPT。如果输入“我喜欢苹果”,P(我喜欢苹果)= P(我)P(喜|我)P(欢|我喜)P(苹|我喜欢)(果|我喜欢苹)。

  • Next Sentence Prediction(NSP):AE(autoencoding)自编码模型,从损坏耳朵输入数据中预测重建原始数据。可以使用上下文的信息,BERT就是使用的AE。如果输入“我喜欢苹果”,需要经过mask,mask之后得到 “ 我喜欢苹mask”,那么 P(我喜欢苹果|我喜欢苹mask)= P(mask=果|我喜欢苹)。

        在MLM任务中,BERT使用了掩码语言模型来进行预训练,随机遮蔽输入文本中的某些单词,并让模型预测这些被遮蔽的单词。这种方式让BERT可以捕捉到更丰富的上下文信息。当我们进行两个词的mask之后得到“我喜欢mask mask”,P(我喜欢苹果|我喜欢mask mask) = P(苹|我喜欢)P(果|我喜欢),这样的话我们可以看到“苹”和“果”两个词是独立的,但其实并不是,这也是mask的缺点之一。在BERT中,80%概率下,将选中的词元变成<mask>,10%概率下,换成一个随机词元,10%概率下,保持原有的词元。

for index in mask_indices:if random.random() < 0.8:masked_token = "[MASK]"else:if random.random() < 0.5:masked_token = tokens[index]else:masked_token = random.choice(vocab_list)

        在NSP任务中,BERT通过预测两个句子是否是连续的(即判断句子A是否紧跟在句子B后)来增强其句子级别的理解能力。NSP样本分为正样本和负样本,正样本是从训练语料库中去除两个连续的段落,负样本是从不同的文档中随机创建一堆段落。但是,NSP将主题预测和连贯性预测合并成了一个单项任务。

2.2 BERT的微调

        在海量的语料上训练完BERT之后,便可以将其应用到NLP的各个任务中了。 微调(Fine-Tuning)的任务包括:基于句子对的分类任务,基于单个句子的分类任务,问答任务,命名实体识别等。

基于句子对的分类任务:需要判断两个句子之间的关系或相似性。 

  • MNLI (Multi-Genre Natural Language Inference):

    • 任务描述:给定一个前提(Premise),根据这个前提推断假设(Hypothesis)与前提的关系。任务的目标是确定假设与前提之间的关系是否成立。
    • 关系分类:任务的标签有三种类型:
      • 蕴含关系(Entailment):假设在语义上可以从前提推导出。
      • 矛盾关系(Contradiction):假设与前提在语义上相互矛盾。
      • 中立关系(Neutral):假设与前提之间没有明确的推导关系。
    • 例子
      • 前提:“The cat sat on the mat.”
      • 假设:“A cat is resting on a rug.”
      • 标签:蕴含关系(Entailment)
  • QQP (Quora Question Pairs):

    • 任务描述:判断Quora上两个问题句是否表示的是一样的意思。
    • 目标:判断两个问题是否问的是同一件事,从而判断它们是否具有相同的意图。
    • 例子
      • 问题1:“What is the best way to lose weight?”
      • 问题2:“How can I shed fat fast?”
      • 标签:相同(Duplicate)
  • QNLI (Question Natural Language Inference):

    • 任务描述:用于判断一个文本是否包含问题的答案,类似于阅读理解的定位问题。
    • 目标:给定一个问题和一段文本,判断这段文本是否包含问题的答案。
    • 例子
      • 问题:“What is the capital of France?”
      • 文本:“France is a country in Europe. Paris is its capital.”
      • 标签:是(Yes)
  • STS-B (Semantic Textual Similarity - Benchmark):

    • 任务描述:预测两个句子的相似性,输出一个数值(0到5之间)。
    • 目标:评估两个句子的语义相似度。这个任务是一个回归问题,不是分类问题。
    • 例子
      • 句子1:“I like to play football on Sundays.”
      • 句子2:“Football is a sport I enjoy playing on weekends.”
      • 标签:4(非常相似)
  • MRPC (Microsoft Research Paraphrase Corpus):

    • 任务描述:判断两个句子是否是等价的(是否语义相同)。
    • 目标:判断两个句子是否是同义句。
    • 例子
      • 句子1:“I will arrive in the morning.”
      • 句子2:“I will reach there by the morning.”
      • 标签:相同(Paraphrase)
  • RTE (Recognizing Textual Entailment):

    • 任务描述:类似于MNLI,但仅对蕴含关系进行二分类判断。
    • 目标:判断两个句子之间是否有蕴含关系。
    • 例子
      • 前提:“The dog is running in the park.”
      • 假设:“A dog is playing outside.”
      • 标签:蕴含关系(Entailment)
  • SWAG (Situations With Adversarial Generations):

    • 任务描述:从四个选项中选择一个,作为前句的自然下文。
    • 目标:通过选择合适的下文来理解前句的意义和场景。
    • 例子
      • 句子:“He opened the door and stepped outside.”
      • 选项:
        1. “He turned around and closed the door.”
        2. “He felt the warm sun on his face.”
        3. “The door slammed shut behind him.”
        4. “He heard a car honking from the street.”
      • 标签:选项2(自然下文)

基于单个句子的分类任务:主要是针对单个句子的分类问题。

  • SST-2 (Stanford Sentiment Treebank):
    • 任务描述:电影评价的情感分析,判断句子的情感是正面还是负面。
    • 目标:基于给定的电影评论句子判断情感极性(正面或负面)。
    • 例子
      • 句子:“The movie was amazing and heartwarming.”
      • 标签:正面(Positive)
  • CoLA (Corpus of Linguistic Acceptability):
    • 任务描述:判断句子是否语法上可接受。
    • 目标:判断给定的句子是否符合语言的语法规则。
    • 例子
      • 句子:“He is running.”
      • 标签:可接受(Acceptable)

问答任务:涉及从给定文本中提取答案。

  • SQuAD v1.1 (Stanford Question Answering Dataset):
    • 任务描述:给定一个问题和一段描述文本,输出问题的答案。
    • 目标:通过模型在文档中定位问题的答案,类似于做阅读理解的简答题。
    • 例子
      • 问题:“What is the capital of France?”
      • 文本:“France is a country in Europe. Paris is its capital.”
      • 答案:Paris

命名实体识别任务(NER):这类任务的目标是识别句子中的命名实体。

  • CoNLL-2003 NER (Named Entity Recognition):
    • 任务描述:判断句子中的单词是否是命名实体,如人名、组织名、地点名等。
    • 目标:从给定的文本中提取出命名实体并进行分类。
    • 例子
      • 句子:“Barack Obama was born in Hawaii.”
      • 实体:Barack Obama(人名),Hawaii(地点名)

三、BERT,GPT,ELMO的区别

        下面是BERT、GPT和ELMO的对比表格:

特性BERTGPTELMO
模型架构Transformer 编码器 (双向)Transformer 解码器 (单向)双向LSTM
训练目标Masked Language Model (MLM),Next Sentence Prediction (NSP)自回归语言模型 (预测下一个词)上下文相关的词嵌入 (基于LSTM)
训练方式双向(左右文同时考虑)单向(仅考虑左侧上下文)双向(前向和反向LSTM)
应用场景文本分类、问答、命名实体识别、推理任务等文本生成、对话生成、翻译等情感分析、问答、文本分类、命名实体识别等
优点强大的上下文理解能力,适合推理任务和理解任务强大的文本生成能力,适合生成任务动态生成词嵌入,能够捕捉上下文的词义变化
主要优势适用于理解类任务,处理句子对之间的关系适用于生成类任务,生成流畅的文本提供上下文相关的词嵌入,灵活性强
任务示例文本分类(SST-2),问答(SQuAD),推理(MNLI)文本生成,翻译,问答等情感分析,问答,文本分类等

参考资料:

一文彻底搞懂 Bert(图解+代手撕)_bert详解-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_42029738/article/details/139578563

读懂BERT,看这一篇就够了 - 知乎icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/403495863

预训练之NSP任务详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.player.switch&vd_source=0dc0c2075537732f2b9a894b24578eed&p=4icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.player.switch&vd_source=0dc0c2075537732f2b9a894b24578eed&p=4

预训练之MLM详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.videopod.episodes&vd_source=0dc0c2075537732f2b9a894b24578eed&p=3icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.videopod.episodes&vd_source=0dc0c2075537732f2b9a894b24578eed&p=3

Bert输入部分详细解读_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.videopod.episodes&vd_source=0dc0c2075537732f2b9a894b24578eed&p=2icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1Ey4y1874y?spm_id_from=333.788.videopod.episodes&vd_source=0dc0c2075537732f2b9a894b24578eed&p=2

70 BERT微调【动手学深度学习v2】_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV15L4y1v7ts?spm_id_from=333.788.recommend_more_video.0&vd_source=0dc0c2075537732f2b9a894b24578eed

相关文章:

【深度学习】深刻理解BERT

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由Google于2018年提出的一种预训练的语言表示模型&#xff0c;它基于Transformer架构并能够处理自然语言处理&#xff08;NLP&#xff09;中的多种任务。BERT的核心创新是其使用了双向编…...

一种基于通义千问prompt辅助+Qwen2.5-coder-32b+Bolt.new+v0+Cursor的无代码对话网站构建方法

前言 今年似乎大模型之间的“内卷”已经有些偃旗息鼓了&#xff0c;各大技术公司逐渐从单纯追求模型参数量的竞赛中抽身&#xff0c;转向更加注重模型的实际应用效果与效率&#xff0c;开始内卷起了LLM“载具” 不知道这个词是不是我第一个发明的哈&#xff0c;总之我更喜欢…...

Java版-图论-最小生成树-Kruskal算法

实现描述 为了造出一棵最小生成树&#xff0c;我们从最小边权的边开始&#xff0c;按边权从小到大依次加入&#xff0c;如果某次加边产生了环&#xff0c;就扔掉这条边&#xff0c;直到加入了 n-1 条边&#xff0c;即形成了一棵树。 实现代码 首选我们对所有的边&#xff0c…...

计算机网络知识总结

1.网络协议是什么&#xff1f; 在计算机网络要做到有条不紊地交换数据&#xff0c;就必须遵守一些约定好的规则&#xff0c;比如交换数据地格式&#xff0c;是否需要发送一个应答信息。这些规则被称为网络协议。 分层结构 应用层&#xff1a;为计算机用户提供服务表示层&…...

普通算法——欧拉筛

欧拉筛 思路&#xff1a; 对欧拉筛的实现&#xff0c;主要是依靠一个数组模拟的栈来实现&#xff0c;核心思路为用栈储存已经发现的素数 在之后的遍历中&#xff0c;即可以素数数组中的数为因数来筛出此素数的倍数 遍历是以当前的 i i i 值为基数&#xff0c;来乘当前素数数…...

【知识科普】DNS(域名解析服务)深入解读

文章目录 概述一、基本概念二、域名解析的原理三、域名解析的类型四、域名解析的常见问题及解决方法五、域名解析的重要性 部署一、准备环境二、安装DNS软件三、配置DNS服务器四、测试DNS解析五、维护和管理DNS服务器 配置文件一、BIND DNS服务器配置文件格式二、Windows系统DN…...

数据结构第一弹-数据结构在不同领域的应用

大家好&#xff0c;今天和大家一起总结一下数据结构在不同领域和场景的应用~ 不同的数据结构适用于解决不同类型的问题&#xff0c;从简单的数组到复杂的图结构&#xff0c;每种数据结构都有其独特的应用场景。 1. 数组与链表 1.1 概念 数组&#xff1a;一种线性数据结构&a…...

如何创建基于udp的客户端和服务端

1.先创建好udpServer.hpp、udpServer.cc、udpClient.hpp、udpClient.cc的框架。 #pragma once #include <string> #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <cerrno> #include…...

ThinkPHP框架审计--基础

基础入门 搭建好thinkphp 查看版本方法&#xff0c;全局搜version 根据开发手册可以大致了解该框架的路由 例如访问url http://127.0.0.1:8094/index.php/index/index/index 对应代码位置 例如在代码下面添加新方法 那么访问这个方法的url就是 http://127.0.0.1:8094/index.…...

Java8 CompletableFuture异步编程

文章目录 CompletableFuturede介绍CompletableFuturede使用场景常用异步编程实现方案- Thread- ExecutorService- CountDownLatch- CyclicBarrier- ForkJoinPool- CompletableFuture各种实现方案总结 CompletableFuturede结构结构梳理- Future接口- CompletionStage接口常用方法…...

Java的Mvc整合Swagger的knife4框架

Swagger的介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger&#xff0c;就是把相关的信息存储在它定义的描述文件里面&#xff08;yml或json格式&#xff09;&#xff0c;再通过维护这个描述 文件可以去更…...

分阶段构建在复杂系统中的应用:以推荐系统为例

引言 在信息技术飞速发展的今天&#xff0c;复杂系统的构建已经成为许多企业和组织面临的重要挑战。复杂系统通常由多个相互依赖、相互作用的组件构成&#xff0c;这些组件在功能上相互关联&#xff0c;形成了一个高度耦合的整体。对于这样的系统&#xff0c;采用分阶段构建的…...

2024年12月9日历史上的今天大事件早读

1447年12月9日 中国明朝皇帝明宪宗出生 1824年12月9日 西属美洲独立战争的阿亚库乔之战爆发 1882年12月9日 中国清代数学家李善兰逝世 1917年12月9日 葡萄牙共和政府垮台 1935年12月9日 红军表示与东北抗联军一致抗日 1935年12月9日 “一二九”运动爆发 1941年12月9日 中…...

快捷构建AI大模型,源码自取可直接运行

Node.js 和 WebSocket 实现一个基于kimi&#xff08;Moonshot 月之暗大模型&#xff09;的AI工具 前端&#xff1a;前端界面比较容易&#xff0c;只需要简单的额css js即可&#xff0c;本文使用vue作为作为demo。 后端&#xff1a;我java很垃圾&#xff0c;写不出好的代码&am…...

怎么为开源项目做贡献提PR?

GitHub 慢的话&#xff0c;https://ask.csdn.net/questions/8166374 复刻项目 以 https://github.com/open-frame/uniapp-init 项目为例 复刻完就会在你的仓库里有个同样的项目 拉取复刻下来的项目 然后常规的改动项目、git推送。比如我改了一个忽略文件&#xff1a; 提交…...

如何在 JavaScript 中设置定时器?

在 JavaScript 中&#xff0c;设置定时器通常使用两个内置的函数&#xff1a;setTimeout() 和 setInterval()。它们允许你在指定的时间延迟后执行某个函数或者以某个间隔反复执行某个函数。下面&#xff0c;我将结合实际项目代码示例讲解如何使用它们。 1. setTimeout() — 延…...

【学习路线】Java

Java基础 基础 基础语法 面向对象 集合框架 JCF 进阶 并发编程 JVM 企业级开发 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 实战 数据库 MySQL Redis 计算机基础 计算机组成原理 操作系统 计算机网络 数据结构与算法 设计模式 参考&#xff1a;…...

[GYCTF2020]Easyphp

[GYCTF2020]Easyphp 知识点 反序列化 、字符逃逸 解题 审代码 <?php error_reporting(0); session_start(); function safe($parm){$array array(union,regexp,load,into,flag,file,insert,"",\\,"*","alter");return str_replace($arr…...

JavaScript 数组的高级用法与最佳实践

在前端开发中&#xff0c;JavaScript 数组是不可或缺的工具。它们不仅用于存储数据&#xff0c;还提供了丰富的方法来操作和处理这些数据。掌握 JavaScript 数组的高级用法和最佳实践对于编写高效、可维护的代码至关重要。本文将深入探讨 JavaScript 数组的高级用法&#xff0c…...

通信协议 http、tcp、udp

目录 1. 五层网络协议 2. http 3. tcp、udp 4. tcp 3次握手、4次挥手 5. socket 6. httpclient 遇到的问题 1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码 2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed …...

Scala的隐式对象和隐式类

1.隐式对象 object Test1 {case class DatabaseConfig(drive:String,url:String)//隐式对象//格式:就是在对象前面加一个 implicit//作用:给函数当默认值implicit object MySqlConfig extends DatabaseConfig("sqlserver.jdbc","localhost:3306")//定义一…...

【AIGC】2016-ACCV-即时追捕:自然环境下的自动唇音同步

2016-ACCV-Out of time: automated lip sync in the wild 摘要1. 引言1.1 相关作品 2. 表示和架构2.1 音频流2.2 视觉流2.3 损失函数2.4 训练 3. 数据集3.1 编制训练数据 4. 实验4.1 确定口型同步误差4.2 应用&#xff1a;主动说话人检测4.3 应用&#xff1a;唇读 5. 结论参考文…...

启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率

启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可。启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可实现对集装箱箱号的精准捕捉与识别。这两台相机分别安装在货车通道的后侧和随意侧面&a…...

让IIS支持PUT请求解决IIS里不支持PUT请求的问题405 Method Not Allowed

文章目录 一、问题描述二、解决方案1.删除WebDav模块2.修改Web.config&#xff08;可选&#xff09; 一、问题描述 好不容易系统开发好了&#xff0c;兴高采烈地上线&#xff0c;部署好了网站&#xff0c;访问正常&#xff0c;打开方式正确&#xff01; 但当我修改某些数据时&…...

入门级捡垃圾工作站记录

入门级捡垃圾工作站记录 想法 一直想着拥有有一台自己的多功能机子&#xff0c;一个笔记本很难事事包办&#xff0c;本来打算配一个台式机&#xff0c;后来研究了一下&#xff0c;索性捡垃圾拼装的工作站&#xff0c;性价比更高&#xff0c;稳定性也更强&#xff0c;而且还可…...

2024.12.9——攻防世界ics-06

知识点&#xff1a;index文件 ics 文件&#xff08;iCalendar 格式文件&#xff09; bp抓包 密码爆破 题目&#xff1a;云平台报表中心收集了设备管理基础服务的数据&#xff0c;但是数据被删除了&#xff0c;只有一处留下了入侵者的痕迹。 一、解题思路 step 1 打开靶机审题…...

微信小程序介绍-以及写项目流程(重要)

前言&#xff1a;本篇文章介绍微信小程序以及项目介绍&#xff1a; 文章介绍&#xff1a;介绍了微信小程序常用的指令、组件、api。tips&#xff1a;最好按照官方文档来进行学习&#xff0c;大致可以我的目录来学习&#xff0c;对于写项目是没有问题的 微信小程序官方文档https…...

国内国际标准!羊毛衫检测项目、检测要求及标准

本文整理了羊毛衫检测项目、检测要求及标准有关内容 一、羊毛衫检测项目 羊毛衫的检测项目主要包括以下几个方面&#xff1a; 纤维含量检测&#xff1a;检测羊毛衫中羊毛及其他纤维的比例&#xff0c;确保纤维质量符合产品标识或相关标准要求。 甲醛含量检测&#xff1a;测…...

MySQL知识大总结(进阶)

一&#xff0c;数据库的约束 1&#xff0c;约束类型 1not null非空约束&#xff0c;标记这个字段不可以为空2unique唯一约束&#xff0c;标记这个字段的值是该列唯一的值&#xff0c;在这一列的其他行&#xff0c;不可以与该字段相等3default 默认约束&#xff0c;在该字段没…...

【C语言】库函数常见的陷阱与缺陷(2):字符串转化函数

目录 一、atoi 函数 1.1. 功能与用法 1.2. 陷阱与缺陷 1.2.1. 输入验证不足 1.2.2. 溢出问题 1.3 安全替代 1.4. 代码示例 二、atof 函数 2.1. 功能与用法 2.2. 陷阱与缺陷 2.3. 安全使用建议 2.4. 代码示例 三、strtol 函数 3.1. 功能与用法 3.2. 陷阱与缺陷 …...