赞
踩
BERT模型将字向量(token embedding)、文本向量(segment embedding)、和位置向量(position embedding)的加和作为模型输入(word embedding)
输入:word embedding = token embedding + segment embedding + position embedding
输出是文本中各个字/词融合了全文语义信息后的向量表示。
BERT采用的是Masked LM,会选取语料中所有词的15%进行随机mask,论文中表示是收到完形填空的启发,类似CBOW中华东窗口的中心词,从CBOW的角度看10%-20%的比例都是可行的。
因为BERT预训练模型设置config的max_position_embeddings为512和type_vocab_size为2,所以最多输入512,最多两个句子合成一句。硬件条件允许的情况下可以更改config重新预训练。
因为与文本中已有的其他词相比,这个无明显语义信息的符号会更公平的融合文本中各个词的语义信息,从而更好的表示整句话的意义
前馈层的gelu激活函数和self-attention,self-attention是非线性的。
BERT的三个embedding相加,本质上可以看做是一个特征的融合,BERT还有Layer Norm,会把embedding结果统一到相同的分布,所以BERT可以学到融合后特征的语义信息。
norm的本质是通过把一部分不重要的复杂信息损失掉,以此来降低拟合难度以及过拟合的风险,从而加速模型的收敛,norm的目的就是让分布稳定下来降低各维度数据的方差。
因为bert预训练的其中一个任务是判断segment A 和 segment B 之间的关系,这就需要embedding中能包含当前token属于哪个segment的信息,然而无论是token embedding还是 position embedding 都无法表示出这种信息,因此额外创建一个segment embedding matrix 用来表示当前token属于哪个segment的信息,segment vocab size就是2,其中index=0表示token输入segment A,index=1表示token属于segment B。
bert有position embedding,对于不同的上下文信息,最后输出的word embedding 是不同的,BERT对于一个词可以学习到上下文的信息,在上下文信息不同的情况下它最后对应的12层transformer的输出结果是不一样的。
主要是位置编码和输入参数的不同。
BERT的损失 = MLM的损失 + NSP的损失
第一部分是来自MASK-LM的单词级别的分类任务,另一部分是句子级别的分类任务;通过这两个任务的联合学习,使得BERT学习到的表征既有token级别信息,同时也包含了句子级别的语义信息。
BERT模型通过对Masked LM任务和Next Sentence Prediction任务进行联合训练,使模型输出的每个字词的向量表示都能尽可能全面、准确的刻画输入文本(单句或语句对)的整体信息,为后续的微调任务提供了更好的模型参数初始值。
BERT由12层transformer layer(encoder端)构成,首先word emb,pos emb,seg emb 做加和作为网络输入,每层由一个multi-head attention,一个feed forward以及两层layerNorm构成
具体可以描述为:
BERT中 multi-head 7686412与直接使用768*768矩阵统一计算有什么区别?
举例
“北京” “大学” 运动会
做mask变成 “北京” “[mask]” “运动会”
做attention mask 变成 “北京” “运动会”
BERT和Transformer的目标是不一致的
get_pooled_out 代表蕴含了整条语句的信息。
get_sentence_out 代表了获取每个token的output输出,用的是cls向量。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。