【学习笔记】BERT

news/发布时间2024/5/18 12:19:08

BERT问答

  1. BERT分为哪两种任务,各自的作用是什么;
  2. 在计算MLM预训练任务的损失函数的时候,参与计算的Tokens有哪些?是全部的15%的词汇还是15%词汇中真正被Mask的那些tokens?
  3. 在实现损失函数的时候,怎么确保没有被 Mask 的函数不参与到损失计算中去;
  4. BERT的三个Embedding为什么直接相加?
  5. BERT的优缺点分别是什么?
  6. 你知道有哪些针对BERT的缺点做优化的模型?
  7. BERT怎么用在生成模型中?

 

  1. BERT的两种任务
    • Masked Language Model (MLM):这个任务的作用是让模型学会理解文本中的上下文信息。在这个任务中,约15%的输入词汇会被随机遮蔽,然后模型需要预测这些被遮蔽的词汇。这帮助BERT学习词汇的双向上下文表示。
    • Next Sentence Prediction (NSP):这个任务的作用是让模型理解文本之间的关系。模型会接受一对文本句子作为输入,然后判断这两个句子是否是连续的。这有助于BERT学习句子和文本段落之间的关系。
  2. MLM预训练任务的损失函数
    • 在计算MLM任务的损失函数时,只参与计算那些真正被Mask的tokens。BERT的输入序列中,大约15%的词汇会被随机选择并替换为[MASK]符号,模型需要预测这些位置上的词汇。只有这些被遮蔽的位置上的预测与真实标签进行比较,用于计算损失。其他位置上的词汇不参与计算损失。
  3. 确保未被Mask的tokens不参与损失计算
    • 在实现损失函数时,通常会使用掩码(masking)来确保未被Mask的tokens不参与损失计算。只有真正被Mask的位置上的预测与真实标签进行比较,其他位置上的损失被忽略。
  4. BERT的三个Embedding相加
    • BERT模型中包含三种嵌入(Embedding):Token Embedding、Segment Embedding和Position Embedding。这三种嵌入分别用于表示词汇、句子片段和词汇的位置信息。它们被相加在一起,以创建输入序列的最终表示。这种相加操作允许模型同时考虑词汇、句子关系和位置信息,有助于模型更好地理解文本的上下文。
  5. BERT的优缺点
    • 优点:
      • 强大的上下文表示:BERT学会了深度的上下文表示,适用于多种自然语言处理任务。
      • 预训练和微调:可以通过预训练模型在特定任务上微调,使其适应各种应用领域。
      • 解决一词多义问题:通过上下文信息,能够更好地处理一词多义问题。
    • 缺点:
      • 预训练代价高昂:训练BERT等大型模型需要大量的数据和时间。
      • BERT没有解码器部分,因此不能直接用于生成序列的任务,如机器翻译。
  6. BERT的改进模型
    • ALBERT使用了参数共享策略,规模更小,NSP任务改成了SOP任务
    • RoBERTa只使用MLM任务,去掉了NSP任务,从原版静态掩码改为动态掩码,使用了更大规模的训练数据。
  7. BERT在生成模型中的应用
    • BERT本身不是生成模型,但可以与生成模型结合使用,以改善生成任务的性能。一种常见的方法是将BERT用作编码器,将其生成的上下文表示馈送到生成模型(如GPT-3)中,以帮助生成更准确的文本。这种结合可以用于文本生成、对话系统和自动摘要等任务。

BERT精读

BERT: Bidirectional Encoder Representations from Transformers,双向Transformer编码器,用来做预训练,针对一般的语言理解任务。

BERT没有decoder结构,和单向的GPT相比,机器翻译、文本摘要一类的生成性任务不太好做。

Abs

BERT与ELMo和GPT相关,利用无标记文本联合左右的上下文信息来预训练双向表示。

  • BERT v.s. ELMo:ELMo基于RNN,BERT基于Transformer;BERT+额外输出层就可以应用到不同的下游任务,只需要微调最上层;而ELMo应用到下游任务要对架构做调整
  • BERT v.s. GPT:都基于Transformer;GPT学习单向表示,由左侧做预测,BERT学习双向表示

Intro

预训练语言模型主要用于两类NLP任务:① 句子层面的任务 ② 词源层面的任务 (token-level)

预训练表示用于下游任务的策略:① 基于特征 (ELMo学到的表示作为新的特征输入) ② 基于微调 (GPT根据新的数据集调整模型权重)

单向语言模型存在局限性!⇒ BERT:双向语言模型 ① 每次随机mask一些tokens,预测被盖住的词(完形填空)②下一句预测(两个句子是否相邻)

Related

  • 无监督基于特征 - ELMo
  • 无监督基于微调 - GPT
  • 在有标记数据上做迁移学习

Method

2 steps: ① pre-training ② fine-tuning

架构

多层双向Transformer的编码器

L - Transformer块的个数 H - 隐层大小 A - 多头自注意力机制里的head个数 A * 64 = H

$BERT_{BASE}$:110M参数 L = 12, H = 768, A = 12

$BERT_{LARGE}$:340M参数 L = 24, H = 1024, A = 16

参数计算部分可以去复习Transformer精读的编码器架构

输入/输出表示

输入:一个句子/一个句子对,作为一个sequence输入,用WordPiece来切词

[CLS][句子A][SEP][句子B]

CLS学习整个序列的信息

每个token在嵌入层的输出(进入BERT的输入)由本身的embedding+属于哪个句子的embedding+ 位置embedding组成,每个embedding都是学习得到的

预训练

  • Masked LM (MLM) : WordPiece生成的每个token(即不包括CLS和SEP)有15%可能性被mask

    ❗微调的时候不用mask,导致了预训练和微调的mismatch

    解决方法:15%被mask的词源里,80%的可能真的被[MASK],10%的可能被替换为随机token,10%的可能不变(模拟微调的场景)

  • Next Sentence Prediction (NSP) : 判断句子对<A, B>是否相邻(50% IsNext,50%NotNext)

微调

根据特定的下游任务设计输入/输出,BERT+输出层经过softmax得到label

  • Case 1:情感分析

用预训练参数初始化BERT比随机初始化更快更好!

  • Case 2:词性标注

  • Case 3:立场分析

  • Case 4:基于文本提取的QA

实验

任务集benchmark:General Language Understanding Evaluation (GLUE)

在9个任务上取正确率均值,评估自监督学习模型的好坏

拓展

  • 预训练sequence-to-sequence模型

    编码器输入被破坏的序列,解码器重建输入

    破坏的方式多样:mask单字、删除、置换、旋转、填词

  • BERT是怎么工作的?

    Case 1:

    和CBOW很像,结合了上下文的深度word embedding

    推测:BERT学到了上下文相关的语义,同义字学到的embedding比较近

    Case 2:

    但BERT不仅能学到语义,没有含义的句子也能拿来做分类任务!(如DNA分类)

    推测:BERT的能力不完全来自于能看懂文章,还可能有其他理由。(或许本质上就是比较好的初始化参数!)

    Case 3:

    用104种语言预训练的Multi-lingual BERT,用英文QA微调,在中文QA上做测试,效果竟然不错!

    推测:BERT能学到跨语言的同义字对齐(深 - deep)实验证明对齐需要大量训练数据!

    Case 4:

    如果不管什么语言,同义字的embedding都很近,重建时语言为什么不会乱掉?

    推测:BERT还可以学到不同语言之间的差异!

    把所有中文embedding的均值和英文embedding的均值做差值,英语输入通过Multi-BERT得到的输出加上这个差值做重建,或许能得到相近的中文词!

    实验发现,真的可行!!

    非常有趣的结果!

    我的个人想法:不同的语种或许可以视为不同的domain,加上均值差异的过程或许可以视为特征对齐,实际上是在做域适应(Domain Adaptation)!

    那么机器翻译可不可以当成DA来做?

    有空准备实验一下自己的想法,但大概率已经有前辈做过了吧!

  • 模型压缩

    BERT是一个很大的模型,有没有办法让它变小呢?

    因此出现了Distill BERT、Tiny BERT、Mobile BERT、Q8BERT、ALBERT…

    放一个链接:

    All The Ways You Can Compress BERT

  • Adaptor

    BERT是个大模型,对每一个下游任务都做微调,多个下游任务要存储大量参数!

    因此引入Adapter,微调时只调整Adaptor的参数,多个下游任务可以共享model参数!

    下图为Adaptor的位置及其架构:

  • 特征加权

    每一层抽取出来的信息会不一样,不同的下游任务可能会关注不同层的信息,哪个层的信息比较重要(权值)让下游任务自己来学习

  • UniLM

    既可以做Encoder,也可以做Decoder,也可以作为Encoder+Decoder+ ELECTRA

  • ELECTRA

    对于每个token的输出都做二元分类:yes/no,预测当前token是否被替换

    比预测mask的词更简单,同时每个位置的输出都能用上

    如果是意思相差很大的词,则学到的无意义(对机器来说太简单!)

    怎么生成意思差不多但又不一样的词呢?用small BERT来生成被mask的词!

    注意:这不是GAN!small BERT自己训练,不需要骗过分类器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/05031275.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

docker简介

一、Docker介绍 1.1、什么是docker Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的cgroup,namespace,Union FS等技术,对应用进程进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。 ​ Docker早期版本实现是基于LXC,并进一步对其…

Zookeeper

一个分布式应用程序的协调服务,Dubo使用Zookeeper作为注册中心Zookeeper Zookeeper是Apache Hadoop项目下的一个子项目,是一个树形目录服务,简称zk;是一个分布式应用程序的协调服务。 作用: 配置管理:从配置中心拉取对应的配置信息供自己的服务使用,运维时只需要配置配置…

9.25闲话

今天还是很摆。 上午模拟赛。T1 结论题,秒了。T2 haosen 给初中组讲过,忘了。T3 不知道什么题,打了 55pts 暴力跑路。T4 一眼不可做,跑路。 最终得分:\(100+10+55+5=170\),rk3。神包峰学长太深了😍😍😍 haosen 讲过一遍 T2,但是当时没听懂😅😅😅。今天神包峰…

金蝶云星空自定义WebApi

1、创建项目,命名规范:开发商.K3.SCM.WebApi.ServicesStub2、添加引用 using Kingdee.BOS.ServiceFacade.KDServiceFx; using Kingdee.BOS.WebApi.ServicesStub;3、新建类,继承webapi业务抽象服务AbstractWebApiBusinessService。/// <summary>/// 根据客户名称获取客…

AnsibleFATE部署过程

前言 基本上按照官方文档就行了,先做before deploy,再做three side guide.md。以下是可能出现的问题 这个AnsibleUndefinedVariable: ‘ansible_ssh_host‘ is undefined.是肯定会遇到的,参考我这篇 安全性限制 ansible提示 warning: now open files is 1024, and need to …

第三次作业

1、使用SQL语句ALTER TABLE修改curriculum表的“课程名称”列,使之为空。 alter table curriculum drop `课程名称`;运行结果:2、使用SQL语句ALTER TABLE修改grade表的“分数”列,使其数据类型为decimal(5,2)。 alter table grade MODIFY `分数` DECIMAL(5,2);运行结果:3、…