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

【深入浅出】深入浅出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的整体嵌入表示。


http://www.kler.cn/a/379473.html

相关文章:

  • AT89S51/STC89C51开发板教学
  • PyQt5的安装与简介
  • 【学习】软件测试中的过程管理为何如此重要
  • 小张求职记四
  • 华为云计算知识总结——及案例分享
  • 数据库作业5
  • Ubuntu 开通 SSH 连接方式指南
  • 论文阅读笔记Dense Passage Retrieval for Open-Domain Question Answering
  • 突破自闭症治疗的创新方法和评估
  • 数据库动态扩容:Java实现与技术策略
  • Spring Boot——配置文件
  • 基于Python的乡村居民信息管理系统【附源码】
  • 国自然基金项目撰写技巧
  • LeetCode100之盛最多水的容器(11)--Java
  • 【JAVA】第3关:素数链
  • HJ43 迷宫问题
  • 虚拟机安装
  • 危机来临前---- 力扣: 876
  • 双指针-01-三数之和
  • LeetCode:3259. 超级饮料的最大强化能量(DP Java)
  • 架构师考试系列(8)论文专题:信息系统安全设计
  • 微服务系列三:微服务核心——网关路由
  • 穿越数据迷宫
  • 总结拓展十五:SAP物料分割评估
  • C++ | Leetcode C++题解之第530题二叉搜索树的最小绝对差
  • 解决Corrupt JPEG data: premature end of data segment