网站改版降权,没有固定ip做网站,公司网站开发设计题目怎么写,h5易企秀官网百面Bert
Q1. Bert与Transformer有什么关系
Bert是基于Transformer架构中的Encoder进行搭建的。 具体来说#xff0c;Bert的核心组件是几个Encoder layer的堆叠。Encoder layer中#xff0c;也是两个子层#xff0c;分别是注意力层和intermediate层#xff08;Bert中的叫…百面Bert
Q1. Bert与Transformer有什么关系
Bert是基于Transformer架构中的Encoder进行搭建的。 具体来说Bert的核心组件是几个Encoder layer的堆叠。Encoder layer中也是两个子层分别是注意力层和intermediate层Bert中的叫法实际就是前馈层。
注意力层中有一点不同的是当Q和K计算了相似度之后要和一个可训练的position embedding相加。Transformer中的Position embedding是不可训练的。这也导致Bert处理的序列长度是有限的不能超过训练时的最大长度。 在intermediate层中是一个线性层激活函数输出层。这里的激活函数是GELU激活函数⾼斯误差线性单元激活函数。
Q2. Bert采用了什么预训练微调的范式
从2018年的ELMo开始预训练微调的范式开始走入NLP领域。ELMo是基于双向的LSTM在训练数据进行预训练在下游任务进行微调。 Bert也采用了该范式一是将模型结构换为了Transformer二是采用了新的预训练任务。 因为传统的LM预训练是在无监督数据上进行即对一段无标注的文本采用上文预测下文的方式这是单向建模。虽然有Position embedding但是模型仍然不能拟合双向的语义关系。
MLMMasked Language Modeling 随机对句子中15%的token进行遮蔽在训练时预测这些被遮蔽的token即“完形填空”这样模型就可以学习到双向的语义。 但是这里有一个问题Bert在微调时并没有Mask过程因此预训练和微调的不一致会影响模型的表现。因此15%的token中每个token有80%进行遮蔽10%被随机替换为其他token10%保持不变。这里保持不变就意味和下游微调任务对齐随机替换则是希望模型不只关注被预测的token也要关注其他token进而对整个句子进行建模。NSPNext Sentence Prediction下一个句子预测希望模型在句子级别进行建模完成问答匹配、自然语言推理等任务。核心任务是判断一个句子对是否是连续的上下文。这样的训练语料可以从文本中摘取并通过随机替换的方式获取负样本。 Input: “I love you” “Because you are beauty” Output:“1” Q3. 下游任务微调
所谓微调其实和训练时更新模型参数的策略⼀致只不过在特定的任务、更少的训练数据、更⼩。 的 batch_size 上进⾏训练更新参数的幅度更⼩。 BERT 设计了更通⽤的输⼊和输出层来适配多任务下的迁移学习。对每⼀个输⼊的⽂本序列BERT 会 在其⾸部加⼊⼀个特殊 token 。在后续编码中该 token 代表的即是整句的状态也就是句级的语义表 征。在进⾏ NSP 预训练时就使⽤了该 token 对应的特征向量来作为最后分类器的输⼊。 Q4. 预训练任务都有效吗
Bert的变体 由Facebook开发的RoBERTa对此进行实验发现NSP任务并不一定有效因为其太简单。甚至会影响模型的性能。因此后续去掉了该任务。 Bert的变体ALBERT也认为NSP过于简单不过并没有直接去掉该任务而是对其进行优化。正样本为连续的两个句子组成一个句子对。负样本是将正样本中的两个句子先后顺序颠倒。 输⼊ Sentence AI love you. Sentence B: Because you are wonderful. 输出 1正样本 输⼊ Sentence ABecause you are wonderful. Sentence B: I love you. 输出 0负样本 Q5. Mask具体是怎么做的
Bert中是在数据预处理阶段进行Mask也就是在训练时Masked的位置已经确定因为Bert训练了40epoch其每10个epoch使用一组masked的结果这样可以使训练数据更丰富。 在后续的变体中广泛采用了训练时Mask的做法实验表明这样做会带来微弱的提升但是因为这样的工程实验更简洁。
Q6. Tokenizer编码策略 RoBERTa、BERT 和 Transformer ⼀样都使⽤了 BPE 作为 Tokenizer 的编码策略。BPE即 Byte Pair Encoding字节对编码是指以⼦词对作为分词的单位。例如对“Hello World”这句话可能会切分为“Hello World”四个⼦词对。⽽对于以字为基本单位的中⽂⼀般会按照 字节编码进⾏切分。例如在 UTF-8 编码中 “我”会被编码为“E68891”那么在 BPE 中可能就会切分成“E68”“891”两个字词对。 一般来说词表越大性能越好但是这也会带来embedding参数的增加因为embedding表的shape为vocab_sizehidden_size