E. 深度学习 — Transformer - BERT(Bidirectional Encoder Representations from Transformers)
概述
- 本质
- BERT的本质上是通过在海量的语料的基础上运行自监督学习方法为单词学习一个好的特征表示,所谓自监督学习是指在没有人工标注的数据上运行的监督学习。
- 特点
- 采用MLM对双向的Transformers进行预训练,以生成深层的双向语言表征。
- 利用Next Sentence Prediction任务学习句子级别信息
- 进一步完善和扩展了GPT中设计的通用任务框架,使得BERT能够支持包括:句子对分类任务、单句子分类任务、阅读理解任务和序列标注任务
- 预训练后,只需要添加一个额外的输出层进行fine-tune,就可以在各种各样的下游任务中取得state-of-the-art的表现。在这过程中并不需要对BERT进行任务特定的结构修改。
- 工作量
- Train data
- 3 billions of words(哈利.波特 全系列的 3000 倍)
- epochs
- 1 million
- Train data
任务分类
- NLP 任务
- Input
- one sentence
- multiple sentence两句之间,加入分隔符:[SEP]
- QA
- sentence1: Query
- sentence2: Document
- NLI(自然语言推理)
- sentence1: Premise
- sentence2: Hypothesis
- QA
- Output
- one class
- 方法一:输入语句加入[CLS]标记,对应的embedding 进入另一个模型分类
- 方法二:所有的输出,再次分类
- class for each token:比如说词性标注
- 每个token embedding,都进入一个model,预测class
- copy from input
- 任务模型
- 输入:两个vector,一个预测 开始位置,一个预测 结束位置
- 输出:通过softmax获取最高的值,该值对应的位置,即是所需要的开始/结束的位置
- 任务模型
- general sequence
- 方法一:任务模型,即decoder,解决transformer
- 方法二:任务模型,结合Bert(或者任务就是Decoder),当做RNN模型进行操作
- one class
- Input
具体实现
- 预训练的任务类型(Pre - train)
- Masked Language Model(MLM)
- 概述
- 简单来说就是以15%的概率用mask token ([MASK])随机地对每一个训练序列中的token进行替换,然后预测出[MASK]位置原有的单词。
- 实现
- 80%的时候是[MASK]。如,my dog is hairy——>my dog is [MASK]
- 10%的时候是随机的其他token。如,my dog is hairy——>my dog is apple
- 10%的时候是原来的token(保持不变,个人认为是作为2)所对应的负类)。如,my dog is hairy——>my dog is hairy
- Mask Level
- Char Level:一个字
- Whole Work:一个词
- Phrase-level:一个短语
- Entity-level
- 随机指定Mask的长度,每种类型的长度有一定的概率:SpanBert
- 概述
- Next Sentence Prediction(貌似没有实用价值)
- 概述
- 一些如问答、自然语言推断等任务需要理解两个句子之间的关系,而MLM任务倾向于抽取token层次的表征,因此不能直接获取句子层次的表征。
- 为了使模型能够有能力理解句子间的关系,BERT使用了NSP任务来预训练,简单来说就是预测两个句子是否连在一起。
- 实现
- 对于每一个训练样例,我们在语料库中挑选出句子A和句子B来组成,50%的时候句子B就是句子A的下一句(标注为IsNext),剩下50%的时候句子B是语料库中的随机句子(标注为NotNext)。接下来把训练样例输入到BERT模型中,用[CLS]对应的C信息去进行二分类的预测。(只有两种标签:isNext 和 NotNext)
- 概述
- SOP(Sentence order prediction)
- Masked Language Model(MLM)
- 微调(Fine - tune)
- 概述
- 对于NSP任务来说,其条件概率表示为 softmax,其中 是BERT输出中的[CLS]符号, 是可学习的权值矩阵。
- 对于其它任务来说,我们也可以根据BERT的输出信息作出对应的预测。图5展示了BERT在11个不同任务中的模型,它们只需要在BERT的基础上再添加一个输出层便可以完成对特定任务的微调。这些任务类似于我们做过的文科试卷,其中有选择题,简答题等等。
- 方式
- 方式一
- 预训练模型固定住,任务模型进行微调
- 方式二
- 预训练模型和任务模型一起进行微调
- 优势
- 效果会更高
- 缺点
- 每个任务,都要存一遍预训练模型
- 方式三:Adaptor
- 在预训练模型中,在额外添加少量的layer,调参只调这些layer
- 存储的时候,预训练模型本身只存一份,额外的layer,分别存储
- 插入Adaptor的地方,各种各样
- 方式一
- 概述
Multilingual BERT
- 概述
- 精通多语言 BERT
- 思路
- 不同的语言,可能有相似的语义
- 优势
- Zero-shot:学习了英文,中文QA的效果也不差
应用场景
- 基于句子对的分类任务:
- MNLI:给定一个前提 (Premise) ,根据这个前提去推断假设 (Hypothesis) 与前提的关系。该任务的关系分为三种,蕴含关系 (Entailment)、矛盾关系 (Contradiction) 以及中立关系 (Neutral)。所以这个问题本质上是一个分类问题,我们需要做的是去发掘前提和假设这两个句子对之间的交互信息。
- QQP:基于Quora,判断 Quora 上的两个问题句是否表示的是一样的意思。
- QNLI:用于判断文本是否包含问题的答案,类似于我们做阅读理解定位问题所在的段落。
- STS-B:预测两个句子的相似性,包括5个级别。
- MRPC:也是判断两个句子是否是等价的。
- RTE:类似于MNLI,但是只是对蕴含关系的二分类判断,而且数据集更小。
- SWAG:从四个句子中选择为可能为前句下文的那个。
- 基于单个句子的分类任务
- SST-2:电影评价的情感分析。
- CoLA:句子语义判断,是否是可接受的(Acceptable)。
模型压缩
- Distill BERT
- Tiny BERT
- Mobile BERT
- Q8BERT
- ALBERT
其他
- SpanBert
- 输入
- 随机Mask指定长度的token
- 预训练
- SBO - Span Boundary Objective
- 输入
- Transformer-XL(XLNet)
- 解决的问题
- 读取非常长的Sequence
- 特点
- 获取sentence的一部分信息,预测Mask的token
- 解决的问题
- ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)
- 步骤
- 通过Small BERT 预测Mask的Embedding
- 通过ELECTRA预测是否被替换过
- 优点
- 预测Yes/No更加简单
- 每个输出都有用
- 步骤
- RoBERTa
- structBERT