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

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

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

提到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的整体嵌入表示。

相关推荐
草莓熊Lotso35 分钟前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
Coder_Boy_2 小时前
技术发展的核心规律是「加法打底,减法优化,重构平衡」
人工智能·spring boot·spring·重构
会飞的老朱4 小时前
医药集团数智化转型,智能综合管理平台激活集团管理新效能
大数据·人工智能·oa协同办公
聆风吟º5 小时前
CANN runtime 实战指南:异构计算场景中运行时组件的部署、调优与扩展技巧
人工智能·神经网络·cann·异构计算
Codebee7 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
聆风吟º8 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
uesowys8 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
AI_56788 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子8 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能9 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算