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

【深入浅出】深入浅出Bert(附面试题)

本文的目的是为了帮助大家面试Bert,会结合我的面试经历以及看法去讲解Bert,并非完整的技术细致讲解,介意请移步。

深入浅出】深入浅出Bert(附面试题)

  • 网络结构
    • Pre-Training
    • Fine-Tuning
  • 输入编码
    • 词向量编码
    • 句子编码
    • 位置编码
  • 面试题

提到Bert网络模型,首先离不开的应该是Transformer网络?由此引出第一个问题

  1. Bert和Transformer有什么不同?

    • 结构不同
      1. Bert网络网络结构是一个双向的Transformer网络,Bert的双向结构使得每个单词能够同时看到句子前后的单词,极大的增强了上下文理解的效果
      2. Bert则仅使用了Transformer的编码器部分,专注于双向上下文的语言理解任务
    • 任务不同。与Transformer网络原用于翻译的任务不同,Bert一开始只做了两种任务。
      1. 完形填空(随机Masked一些单词,用于推理缺失的单词)
      2. 句子推理(判断前后两个句子是否有关联关系)
  2. Bert和同时期的GPT2(后面会讲)有什么不同?

    • 结构不同。Gpt2采用采用单向Transformer解码器架构。

    • 场景不同

      双向上下文理解能力让BERT在自然语言理解(NLU)任务中表现出色,适用于需要上下文理解和信息提取的任务,例如问答、文本分类、命名实体识别等。

      自回归文本生成架构的单向性使GPT-2擅长自然语言生成

网络结构

请添加图片描述

观察这个网络结构,可以发现Bert模型的训练是通过预训练和微调两部分组成的。这两部分分别是什么?

Pre-Training

  1. Pre-Training阶段的作用?

    预训练阶段是一个无监督任务。在Bert模型中的预训练阶段中,有15%的词语被换成了[MASK]。

    在这15%中,还有80%的内容被替换成[MASK],有10%是随机换一个词,10%是不换的(原文真这么写的,有点烧脑是吧,别急,等我慢慢讲)

请添加图片描述

替换成[MASK]比较好理解,就是为了通过前后文关联来对[MASK]的内容进行预测进而更好的帮助模型理解语义信息

**随机换成其他的token其实是为了增加模型的鲁棒性。**你想想,大家使用GPT的时候每次提问的内容都是完全正确的吗?会不会经常出现一些错别字什么的?

Fine-Tuning

  1. Fine-Tuning是做什么的?

    Bert预训练好后,他没有具体的任务。而现实生活中我们需要它去做具体的任务,比如文本分类、问答系统、情感分析等,因此需要微调bert使得模型在任务上表现得更好。

    微调会保留BERT的预训练权重,但在任务数据上继续训练,并加上适应该任务的头部层(output head),这样Bert可以适用于特定的任务。

  2. Fine-Tuning具体是怎么做的?

    • 分类任务:将Bert的[CLS]标记输出嵌入向量接一个全连接层,用于句子分类
    • 句子关系判断任务:类似分类任务,用[CLS]嵌入接全连接层输出句对关系
    • 序列标注任务:如命名实体识别(NER),Bert会针对每个token的输出都连接一个分类层,预测每个token的标签。

不知道大家看着一段内容的时候有没有注意到有的任务是[CLS]而有的任务用的是每个token的输出

  1. CLS标签在预测过程中是做什么的?或者说使用Bert做句子分类任务和实体识别任务有什么不同?高频问题

    Bert在预训练时,[CLS]标记被设计为整个句子或句对的表示,它可以在微调过程中学习到句子的整体信息。因此CLS代表的是整个句子的全局向量,将这个向量用于分类即可。

    在Bert中,每个token的输出代表其对应的上下文信息,能够更精细地反映局部语义,从而更适合逐个token的预测。使用每个token的输出,模型可以为每个词单独生成标签或确定其在句中的位置。

输入编码

请添加图片描述

词向量编码

用于判断有没有被【mask】

吃饭了【mask】?–》吃饭 了 【mask】–》[cls] 1 1 0 [seq]相当于三个token

句子编码

区分句子a 和 b**,用在两个句子中间

这里不分词了啊,麻烦。

今天天气怎么样?很晴朗。

[cls] 0 0 0 0 0 0 0 0 [seq] 1 1 1 [seq]

位置编码

在最初训练的时候,Bert随机赋值位置编码。Bert使用可训练的位置嵌入,即位置编码和token的embedding一样,作为模型参数的一部分,在训练过程中被更新。用于表示每个token在序列中的位置,定义每个位置的向量,这些位置向量是可学习的。

面试题

好啦,终于到这里了,看看你学废了吗?

  1. Bert分为什么任务?作用是什么?

  2. 在参与损失函数的计算时,参与计算的Token有哪些?是全部的15%吗?

    只有被真正mask的才会参与计算。15%的80%

  3. 在实现损失函数的时候,怎么确保那些填充(padding)的token不参与损失计算?

    计算损失时,将每个token中的损失值与mask位相乘,确保填充位损失变成0。

  4. Bert的优缺点有什么?

  5. Bert的三个Embedding为什么直接相加?

    BERT的三个Embedding(Token Embedding、Position Embedding和Segment Embedding)直接相加是因为它们分别表示输入信息的不同方面,合并后形成了每个token的整体嵌入表示。

相关文章:

【深入浅出】深入浅出Bert(附面试题)

本文的目的是为了帮助大家面试Bert,会结合我的面试经历以及看法去讲解Bert,并非完整的技术细致讲解,介意请移步。 深入浅出】深入浅出Bert(附面试题) 网络结构Pre-TrainingFine-Tuning 输入编码词向量编码句子编码位置…...

Docker-安装

操作系统:Ubuntu 20.04.6 LTS 更新apt sudo apt update 删除旧版本docker sudo apt-get remove docker docker-engine docker.io 安装docker sudo apt install docker.io 查看docker版本 docker --version 启动docker 启动docker sudo systemctl start docker 启用…...

《盼归》

《盼归》 烈日炎炎天桥上,小月踮脚望远方。 汗水滑落笑颜开,心中英雄是父忙。 车声轰鸣情意长,喇叭回应泪两行。 生日快乐声声唤,盼父归来情意长。 在一个炎热的夏日午后,阳光炙烤着大地,天桥上的温度达…...

第十九章 Vue组件之data函数

目录 一、引言 二、示例代码 2.1. 工程结构图 2.2. main.js 2.3. App.vue 2.4. BaseCount.vue 三、运行效果 一、引言 在Vue CLI脚手架中一个组件的data选项必须是一个函数,以此保证每个组件实例,维护独立的一份数据对象。每次创建新的组件实…...

【jvm】什么时候对象进入老年代

目录 1. 对象年龄达到阈值2. 大对象直接进入老年代3. 动态晋升条件 1. 对象年龄达到阈值 1.基本机制:当一个对象在新生代(包括Eden区和Survivor区)中经历了多次垃圾回收(GC)后仍然存活,其年龄会逐渐增加。…...

Vue.nextTick 使用指南:数据更新与 DOM 同步利器

前言 在使用 Vue.js 开发单页面应用时,我们常常需要在数据更新后执行一些操作,比如更新 DOM 或者进行一些依赖于最新数据的计算。这时候,Vue.nextTick 就显得尤为重要,本文将详细介绍 Vue.nextTick 的作用与使用方法。 什么是 V…...

第三百零一节 Lucene教程 - Lucene索引文件

Lucene教程 - Lucene索引文件 索引是识别文档并为搜索准备文档的过程。 下表列出了索引过程中常用的类。 类描述IndexWriter在索引过程中创建/更新索引。Directory表示索引的存储位置。Analyzer分析文档并从文本中获取标记/单词。Document带有字段的虚拟文档。分析仪可以处理…...

动态规划 01背包(算法)

现有四个物品,小偷的背包容量为8,怎么可以偷得价值较多的物品 如: 物品编号: 1 2 3 4 物品容量: 2 3 4 5 物品价值: 3 4 5 8 记f(k,w) ,当背包容量为w,可以偷k件物品…...

使用常数指针作为函数参数

在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用setbas…...

wps宏代码学习

推荐学习视频&#xff1a;https://space.bilibili.com/363834767/channel/collectiondetail?sid1139008&spm_id_from333.788.0.0 打开宏编辑器和JS代码调试 工具-》开发工具-》WPS宏编辑器 左边是工程区&#xff0c;当打开多个excel时会有多个&#xff0c;要注意不要把…...

libavdevice.so.58: cannot open shared object file: No such file ordirectory踩坑

博主是将大图切分成小图时遇到 问题一、linux编译后&#xff0c;找不到ffmpeg中的一个文件 产生原因&#xff0c;各种包集成&#xff0c;然后安装以后乱七八糟&#xff0c;甚至官方的教程也不规范导致没有添加路径到系统文件导致系统执行的时候找不到 1.下载 博主进行的离线…...

Rust:Vec<u8> 与 [u8] 之间的转换

在 Rust 中&#xff0c;Vec<u8> 是一个动态数组&#xff0c;而 &[u8] 是一个指向字节切片的不可变引用。这两者之间经常需要进行转换&#xff0c;因为它们在处理字节数据时非常常见。 从 &[u8] 转换为 Vec<u8> 要将一个字节切片 &[u8] 转换为一个 Ve…...

Leetcode 课程表

这段代码的算法思想是基于**深度优先搜索&#xff08;DFS&#xff09;**来检测图中的环路&#xff0c;从而判断是否可以完成所有课程。具体来说&#xff0c;我们将每门课程和它的先修关系视为一个有向图&#xff0c;问题的核心就是判断这个有向图中是否存在环路。如果有环路&am…...

Java面试经典 150 题.P55. 跳跃游戏(009)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public boolean canJump(int[] nums) {int…...

登录的时候密码使用crypto-js加密解密

首先要下载插件 npm install crypto-js 然后新建一个js文件 crypto.js // 导入 CryptoJS 模块 import CryptoJS from crypto-js; const secretKey"pZsgDSvzaeHWDkhLDxvrrrYvBlAsIHmZ";//一般是后端提供的 /*** description: 加解密函数* param {*} data 需要加密的数…...

LLM大模型部署实战指南:部署简化流程

LLM大模型部署实战指南:Ollama简化流程,OpenLLM灵活部署,LocalAI本地优化,Dify赋能应用开发 1. Ollama 部署的本地模型(🔺) Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。,这是 Ollama 的官网地址:https://ollama.com/ 以下是其…...

24年10月Google Play政策更新通知

今天gmail邮箱里收到了google play最新的政策更新通知&#xff0c;这次的通知对于我来说&#xff0c;影响不大&#xff0c;邮件内容主要分为三部分。 一、政策更新部分 这里更新的政策只有医疗功能相关的。针对健康和医疗应用增加了最新的医疗指南和免责声明要求&#xff0c;并…...

玄机-应急响应- Linux入侵排查

一、web目录存在木马&#xff0c;请找到木马的密码提交 到web目录进行搜索 find ./ type f -name "*.php" | xargs grep "eval(" 发现有三个可疑文件 1.php看到密码 1 flag{1} 二、服务器疑似存在不死马&#xff0c;请找到不死马的密码提交 被md5加密的…...

数据驱动业务中的BDS对账班牛返款表集成方案

数据驱动业务中的BDS对账班牛返款表集成方案 BDS对账班牛返款表_update&#xff1a;班牛数据集成到MySQL的技术实现 在数据驱动的业务环境中&#xff0c;如何高效、准确地将分散在不同系统中的数据进行整合&#xff0c;是每个企业面临的重要挑战。本文将分享一个具体的技术案例…...

【Kubernetes实战】三、资源组件Namespace、Pod、Label、Deployment、Service概述。

目录 1. Namespace1) namespace作用2) namespace资源的具体操作 2. Pod1) Pod概述2) Pod资源的具体操作 3. Label1) Label概述2) Label资源的具体操作 4. Deployment1) Deployment概述2) Deployment控制器的具体操作 5. Service1) Service概述2) Service资源的具体操作 1. Name…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...