• BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding


    摘要:

    提出了一个新的语言表示模型(language representation), BERT: Bidirectional Encoder Representations from Transformers。不同于以往提出的语言表示模型,它在每一层的每个位置都能利用其左右两侧的信息用于学习,因此,它具有强大的表示能力,所以,BERT在预训练之后,只需要加一个简单的输出层,并在新结构上fine-tuned 就能获得 SOTA的结果。

    引言

    语言模型预训练在自然语言处理任务中占据着越来越重要的位置。当前有两种方法将预训练的特征表示用于具体的任务,分别是:

    1. feature based。 如 ELMo针对不同的任务使用不同的网络结构,并将预训练的特征表示作为额外的特征输入到具体的网络中。
    2. fine-tuning。如GPT,对不同的任务只引入很少的额外参数,在应用到下游任务时直接在pre-train的网络上fine-tune。

    它们的目标函数都是单向的语言模型。从左到右的单向语言模型的表达能力有限,因为在attention layer中,每个单词只能获取到其左边的信息,而在SQuAD 这样的token-level的任务中,获取左右两边的信息是至关重要的。BERT提出了两个新的预训练的目标函数:

    1. Masked Language Model
    2. Next Sentence Prediction

    其中MLM的目标函数允许BERT采用双向的attention(一般的LM建模只能是单向的,因为如果采用双向attention,那么对于指定token,其在网络下一层的输入信息会包含当前token的相关信息,因为信息是双向流动的,每个token位置都能获取整个句子的信息,由于LM的任务是给定一个序列,预测序列的下一个token,所以LM不能获取token后面的信息,BERT采用的是双向的attention,相当于Transformer中的encoder部分)。MLM能使用双向的attention是因为其随机屏蔽一段句子中的一部分单词,然后MLM的任务就是预测这些被屏蔽的单词,所以即便信息是双向流动,也不导致信息泄露。

    BERT

    模型结构

    BERT的每一层都是transformer中的双向encoder结构,假设 层数为L,hidden size 为H,self-attention head的个数为A, 设feedforward部分的hidden size为 4H。
    BERT base: L=12,H=768,A=12, total parameter:110M
    BERT large:L=24, H=1024,A=16, total parameter:340M

    BERT 与 GPT和ELMo的结构对比如上图。
    bert是language understanding model,因为他的信息是双向流动的,不好做generation的任务,双向的 transformer 也被称为 transformer ecoder。
    gpt是language generation model,他基于单向的lm,所以可以做序列生成的任务,也被称为 transformer decoder, 但其实称为transformer decoder并不准确,因为transformer decoder除了 self-attention 之外还有来自encoder的cross-attention,但gpt并没有cross-attention。

    输入表示


    输入可以分为三部分,分别是token的表示,segment的表示(用于区分句子A和句子B,比如QA等问题需要涉及sentence-level的学习),和positional encoding.

    预训练任务

    Masked LM
    随机屏蔽掉一部分token, MLM的任务是根据未屏蔽的token预测被屏蔽的token. 每个句子屏蔽15%的单词,用[MASK] 替代,但是这种做法会导致 预训练过程和fine-tining阶段不匹配,因为fine-tuning阶段没有[MASK]这个token。所以,并不总是将masked单词替换成[MASK],具体做法如下:
    a. 对于被15%被替换的单词,80%的时间都是用[MASK]替换
    b. 10%的时间随机选择一个单词替代
    c. 10%的时间保持不变
    transformer encoder不知道它要预测的是哪个单词,也不知道哪个单词是被随机替换的,所以,对于每个单词,它都需要学习到上下文的表示分布情况(这个比较玄学)。而且只有1.5%的单词被随机替换了,这并不不会干扰模型的学习。

    MLM的另一个缺点是在每个batch中只会预测15%的token,相比于预测全部的token,它需要更多的迭代次数以收敛。

    • Next Sentence Prediction
      很多nlp任务比如 Question Answering(QA), Natural Language Inference(NLI) 都需要理解句子间的关系,而在 语言建模中这种关系并不会直接体现。bert在预训练中加入了一个二分类任务:判断一个句子是不是另一个句子的下一句。

    实验

    GLUE dataset

    这是一个用于language understanding模型的数据集合,其中有single-sentence 的任务也有 sentence-pair的任务,如上图(a)所示,两个句子拼接在一起,通过segment embedding区分句子A和句子B,取第一个token [CLS]在最后一层对应的hidden state作为整个sequence 的represention C,然后将C与待fine-tunning的参数W相乘之后取softmax就是分类的各类概率。

    SQuAD v1.1

    问答数据集。如上图(c)所示, 问答的输入一个问题以及一段话,需要在这一段话中找到问题的答案,具体到这里的任务其实是定位答案在这一段话中的位置,所以需要找到 start position和 end position。在fine-tunning阶段需要学习一个 start vector (Sin R^{H})和一个end vector (Ein R^{H}),对于每个token,其最后一层的hidden state表示为 (T_iin R^{H}),那么每个token为 start token 的概率为:

    [P_{i} = frac{e^{ST_i}}{sum_{j}e^{ST_j}}$$。同理可计算 end token 的概率。 ### Named Entity Recognition CoNLL2003中的每个单词都被标注为{Person, Organization, Location, Miscellaneous, Other(non-named entity)}。任务是对每个input token进行分类,将最后一层的$T_i$输入到classificaiton layer就行。]

  • 相关阅读:
    如何搭建ssh服务?
    安利三款提升幸福感的chrome插件
    EF6学习笔记七:代码迁移
    EF6学习笔记六:实体拆分(Entity Spliting)实现TPT、表拆分(Table Spliting)实现TPH
    EF6学习笔记五:继承三策略
    EF6学习笔记四:一对多、多对多、一对一关系配置(Fluent API)
    EF6学习笔记三:全局约定和自定义约定,整理并记下来
    EF6学习笔记二:一些详细配置,开始设计一个稍微能用的数据模型
    EF6学习笔记一:code-first简单创建数据库、表的一些过程
    Spring Cloud微服务实战 打造企业级优惠券系统 2-9 Spring Data JPA
  • 原文地址:https://www.cnblogs.com/mata123/p/11198075.html
Copyright © 2020-2023  润新知