大纲
- BERT的输入输出
- BERT选择mask掉15%比例的原因
- BERT中3中情况mask的作用
- BERT最多输入512的原因
- BERT为什么要在第一句前加[CLS]标志
- BERT的非线性来源于哪里
- BERT的三个embedding直接相加会对语义有影响吗
- BERT中为什么采用层归一化(LN)而不是批量归一化(BN)
- BERT如何解决长文本问题
- 为什么BERT需要额外的segment embedding(段embedding)
- BERT为什么采用warm-up
- BERT如何区分一词多义
- ELMO和BERT的区别
- BERT和Transformer中Encoder的区别
- BERT的损失函数
- BERT中的MLM和NSP预训练任务
- BERT中标注为mask的输入会被attention吗
- MASK矩阵在深度学习中有哪些应用场景
- BERT预训练任务中被选的15%的词中仅80%被真正mask的目的
- BERT为什么使用学习的position embedding而非正弦position embedding
- multi-head attention的具体结构
- multi-head-attention的意义
- 为什么BERT在mask时,把mask掉的词用[mask]替代,transformer是在attention过程中对后面的词不可见
- BERT的流程
- 分词模块FullTokenizer做了哪些事情
- BERT中如何获取词意和句意
BERT的输入输出
BERT的输入
BERT模型将字向量(token embedding)、文本向量(segment embedding)、和位置向量(position embedding)的加和作为模型输入(word embedding)
输入:word embedding = token embedding + segment embedding + position embedding
- token embedding:表示文本中各个字/词的原始词向量,该向量可以随机初始化,也可以利用word2vector等算法进行预训练以作为初始值。
- segment embedding:文本向量,该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,并与单字/词的语义信息相结合。
- position embedding:位置向量**,由于出现在文本不同位置的字/词携带的语义信息存在差异**(比如“我爱你”和“你爱我”),因此BERT模型对不同位置的字/词分别附加一个不同的向量以作区分,即解决一词多义。
在BERT模型中,还可以将英文词汇作进一步切割(子词切分类似BPE),划分为更细粒度的语义单位(wordpiece),例如 将playing分割为play和ing。
BERT的输出
输出是文本中各个字/词融合了全文语义信息后的向量表示。
BERT选择mask掉15%比例的原因
BERT采用的是Masked LM,会选取语料中所有词的15%进行随机mask,论文中表示是收到完形填空的启发,类似CBOW中华东窗口的中心词,从CBOW的角度看10%-20%的比例都是可行的。
BERT中3中情况mask的作用
- 预训练在句子编码的时候将部分词mask,作用是用被mask词前后的词猜测mask掉的词是什么,因为是认为mask的,所以计算机知道mask词的正确值,所以可以判断模型猜测的词是否准确。
- Transformer模型的decoder层存在,ask,例如在翻译任务中,翻译我爱你为i love you,模型在预测love的时候不知道you的信息,所以需要把后面you的信息mask掉。但是BERT只有encoder层,所以这个是transformer模型的特征。
- attention模块有一个可选择的mask操作,主要是句子可能存在填0的操作,attention模块不需要把填0的无意义信息算进来,所以使用mask。
BERT最多输入512的原因
因为BERT预训练模型设置config的max_position_embeddings为512和type_vocab_size为2,所以最多输入512,最多两个句子合成一句。硬件条件允许的情况下可以更改config重新预训练。
- 这是初始值设置的原因,前者对应position embedding,后者对应segment embedding
- 在BERT中,token、position、segment embedding 都是通过学习得到的
- 因此在直接使用google的BERT预训练模型时,输入最多512个词(还要除掉[CLS]和[SEP]),最多两个句子合成一句。之外的词和句子没有对应的embedding。
BERT为什么要在第一句前加[CLS]标志
因为与文本中已有的其他词相比,这个无明显语义信息的符号会更公平的融合文本中各个词的语义信息,从而更好的表示整句话的意义
- BErt在第一句前会加一个[CLS]标志,最后一层该位对应向量可以作为整句话的语义表示,从而用于下游分类任务等。
- self-attention是用文本中的其他词来增强目标词的语义表示,但是目标词本身的语义还是会占主要部分,因此经过BERT的12层,每次词的embedding融合了所有词的信息,可以去更好的表示自己的语义。
- [CLS]位本身没有语义,经过12层,得到的是attention后所有词的加权平均,相比其他正常词,可以更好的表征句子语义。
- 也可以通过最后一层所有词的embedding作pooling去表征句子语义
BERT的非线性来源于哪里
前馈层的gelu激活函数和self-attention,self-attention是非线性的。
BERT的三个embedding直接相加会对语义有影响吗
BERT的三个embedding相加,本质上可以看做是一个特征的融合,BERT还有Layer Norm,会把embedding结果统一到相同的分布,所以BERT可以学到融合后特征的语义信息。
- embedding数学的本质,就是以one hot为输入的单层全连接。
- word embedding = token embedding + position embeddin