写点什么

带你熟悉 NLP 预训练模型:BERT

  • 2024-01-22
    广东
  • 本文字数:1970 字

    阅读完需:约 6 分钟

带你熟悉NLP预训练模型:BERT

本文分享自华为云社区《【昇思技术公开课笔记-大模型】Bert理论知识》,作者: JeffDing。

NLP 中的预训练模型


语言模型演变经历的几个阶段



  1. word2vec/Glove 将离散的文本数据转换为固定长度的静态词向量,后根据下游任务训练不同的语言模型

  2. ELMo 预训练模型将文本数据结合上下文信息,转换为动态词向量,后根据下游任务训练不同的语言模型

  3. BERT 同样将文本数据转换为动态词向量,能够更好地捕捉句子级别的信息与语境信息,后续只需对 BERT 参数进行微调,仅重新训练最后的输出层即可适配下游任务

  4. GPT 等预训练语言模型主要用于文本生成类任务,需要通过 prompt 方法来应用于下游任务,指导模型生成特定的输出。


BERT 模型本质上是结合了 ELMo 模型与 GPT 模型的优势。


  • 相比于 ELMo,BERT 仅需改动最后的输出层,而非模型架构,便可以在下游任务中达到很好的效果;

  • 相比于 GPT,BERT 在处理词元表示时考虑到了双向上下文的信息;

Bert 介绍



2018 年 Google 发布了 BERT(来自 Transformer 的双向自编码器)预训练模型,旨在通过联合左侧和右侧的上下文,从未标记文本中预训练出一个深度双向表示模型。因此,BERT 可以通过增加一个额外的输出层来进行微调,就可以达到为广泛的任务创建 State-of-the-arts 模型的效果,比如 QA、语言推理任务。


当时将预训练模应用于下游任务的策略通常有两种:基于特征的(feature-based)和基于微调(fine-tuning);前者比如 ELMo,后者比如 OpenAI GPT;


这两种策略在预训练期间具有相同的目标函数,在预训练期间,它们使用单向语言模型来学习一般的语言表示。但当前对预训练方法的限制(尤其是对基于微调的方法)是标准语言模型是单向(unidirectional)的,所以限制了在预训练阶段可选的模型结构体系。


比如 GPT 是从左到右的,每个 token 只能关注到前一个 token 的 self-attention layers。这种局限对于句子级任务(sentence-level tasks)来说还不是很打紧,但是对于 token-level tasks(比如 QA)就很致命,所以结合两个方向的上下文信息至关重要。

Bert Input


第一步:Tokenization, 输入的句子经过分词后,首尾添加[CLS]与[SEP]特殊字符,后转换为数字 id



第二步:Embedding, 输入到 BERT 模型的信息由三部分内容组成:


表示内容的 token ids


表示位置的 position ids


用于区分不同句子的 token type ids



将三种信息分别输入 Embedding 层



如果出现输入是句子对的情况呢?


BERT Architecture


BERT 由 Encoder Layer 堆叠而成,Encoder Layer 的组成与 Transformer 的 Encoder Layer 一致:

自注意力层 + 前馈神经网络,中间通过 residual connection 和 LayerNorm 连接



BERT(Bidirectional Encoder Representation from Transformers)是由 Transformer 的 Encoder 层堆叠而成,BERT 的模型大小有如下两种:


BERT BASE:与 Transformer 参数量齐平,用于比较模型效果(110M parameters)


BERT LARGE:在 BERT BASE 基础上扩大参数量,达到了当时各任务最好的结果(340M parameters)

BERT Output


BERT 会针对每一个位置输出大小为 hidden size 的向量,在下游任务中,会根据任务内容的不同,选取不同的向量放入输出层


pooler output


例如,在诈骗邮件分类任务中,我们会将表示句子级别信息的[CLS] token 所对应的向量,经过 Bert Pooler 放入 classfier 中,得到对 spam/not spam 分类的预测。



我们一般称[CLS]经过线性层+激活函数 tanh 的输出为 pooler output,用于句子级别的分类/回归任务

sequence output


例如,在词性标注任务(POS Tagging)中,我们需要获得每一个 token 所对应的类别,因此需要将[CLS]和[SEP]中有实际意义的 token 输出,分别输入对应的 classifier 中。



我们一般称 BERT 输出的每个位置对应的 vector 为 sequence output

BERT 的不同下游任务



BERT 预训练


BERT 预训练任务有两种:Masked Language Modelling(MLM) 和 Next Sentence Prediction (NSP)。


MLM:随机遮盖输入句子中的一些词语,并预测被遮盖的词语是什么(完形填空)


NSP:预测两个句子是不是上下文的关系


Masked Language Model(MLM)


Masked Language Modelling(MLM) 捕捉词语级别的信息


在输入中随机遮盖 15%的 token(即将 token 替换为[MASK])


将[MASK]位置对应的 BERT 输出放入输出层中,预测被遮盖的 token



在将[MASK]位置所对应的 BERT 输出放入输出层后,本质上是在进行一个多分类任务




为了使得预训练任务和推理任务尽可能接近,BERT 在随机遮盖的 15%的 tokens 中又进行了进一步的处理:


80%的概率替换为[MASK]


10%的概率替换为文本中的随机词


10%的概率不进行替换,保持原有的词元


Next Sentence Prediction(NSP)


Next Sentence Prediction (NSP) 捕捉句子级别信息,简单来说是一个针对句子对的分类问题,判断一组句子中,句子 B 是否为句子 A 的下一句(IsNext or NotNext)



Bert 微调


在下游任务中,我们使用少量的标注数据(labelled data)对预训练 Transformer 编码器的所有参数进行微调,额外的输出层将从头开始训练。



点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 5
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
带你熟悉NLP预训练模型:BERT_人工智能_华为云开发者联盟_InfoQ写作社区