一:模型简介
BERT的全称为Bidirectional Encoder Representations from Transformers,即双向Transformer的Encoder。Bert模型算是Transformer模型(encoder)的一种堆栈,不同的是把其改造成双向模型,同时完成单词补全(Masked model)和句子关系预测(sentence prediction)两个任务,提高了模型的特征提取能力。
二:论文
Bert:Pre-training of Deep Bidirectional Transformer for language understanding
发布者:Google AI Language,2018-NAACL
三:Motivation
解决之前单向模型无法捕捉足够的语义信息,提出使用双向编码器的预训练模型
四:Contributions
1:MLM(Masked Language Model)
通过对输入部分单词进行掩盖,使得模型能够获取目标单词的双向上下文信息,
2:NSP (Next Sentence Prediction)
在预训练期加入了句子级别的任务,使得模型可以获取句子级别的语义信息,对于有些如问答(QA),和自然语言推理(NLI)任务非常有用
3:Segment Positional Embedding
为了区分不同的句子,加入了segment position embedding
五:Disadvantage
- MLM在预训练的输入中加入了[MASK]符号,但是在微调阶段却没有,这使得两阶段之间出现了gap,Bert也意识到这个问题了,所以它选择部分的mask,部分替换,部分的保留,但还是有Mask符号不是,问题还是存在滴(解决方案可参考:模型卡-XLNet,模型卡-ELECTRA)
- 每次只掩盖部分单词,目标函数只对这部分单词起作用,导致数据的利用率不高(如果语料够大,训练时间够长,这个问题可以缓解,解决方案可参考:模型卡-ELECTRA)
- MLM有一个条件独立性的假设,即给定未被掩盖的单词时,被掩盖单词之间相互独立,但是有些短语或者中文中的词,只有在一个整体中才能表达正确的意思。另外使用了wordpiece embedding(BPE)的编码方式,有些词被分为多个,只掩盖住一个,不能很好地进行任务学习(解决方案可参考:模型卡-ERNIE-Baidu,模型卡-ERNIE-THU)。
- 对于模型来说,NSP中负例句子取至不同文档,所以对于NSP任务来说只是在预测文章主题是否相同,NSP任务过于简单,模型无法很好地学习到有用信息。(解决方案可参考:模型卡-ALBert,模型卡-StructureBert)
- 不同的segment之间没有信息的流动,预训练时segement的切分是按照tokens进行切分的,不是按照自然语句或者语义分界进行切分的,所以会出现上下文碎片化(context fragmentation)问题。解决方案可参考:模型卡-Transformer-XL,模型卡-XLNet
- 其是Auto-encoding模型,天生不利于生成式任务,这个好像有一些论文是讨论如何来进行生成式任务的,有时间需要读一下,另外XLNet实际上部分解决的生成式任务。参考:模型卡-XLNet
Notes:
- 输入的token position encoding和Transformer中使用正余弦函数不一样,这个是直接初始化一个随机值,然后让模型自己去学习单词的位置表示,是可学习的参数值
- Bert即可当Fine-tuning模型去使用,也可以当Feature-Based模型去使用
- 训练的数据集要比Transformer大,BooksCorpus和Wikipedia数据集,主要是长篇章的训练集。