佛山网站设计优化公司,南宁网站搭建,免费微信网站源码,seo搜索优化是什么意思BERT全称#xff1a;Pre-training of deep bidirectional transformers for language understanding#xff0c;即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹…BERT全称Pre-training of deep bidirectional transformers for language understanding即深度双向Transformer。 模型训练时的两个任务是预测句⼦中被掩盖的词以及判断输⼊的两个句⼦是不是上下句。在预训练 好的BERT模型后⾯根据特定任务加上相应的⽹络可以完成NLP的下游任务⽐如⽂本分类、机器 翻译等。Masked LM和Next Sentence Prediction。
只使⽤了transformer的encoder部分它的整体框架是由多层transformer的encoder堆叠⽽成的。 每⼀层的encoder则是由⼀层muti-head-attention和⼀层feed-forword组成⼤的模型有24层 每层16个attention heads⼩的模型12层每层12个attention heads。feed-forward的维度是4 * d_model也就是4 * 768 3072。
在BERT中输⼊的向量是由三种不同的embedding求和⽽成分别是 a. wordpiece embedding词嵌⼊WordPiece是指将单词划分成⼀组有限的公共⼦词单元能在单词的有效性和字符的灵活性之间取得⼀个折中的平衡 b. position embedding不是三⻆函数⽽是⼀个跟着训练学出来的向量也就是nn.Embedding c. segment embedding⽤于区分两个句⼦的向量表示。这个在问答等⾮对称句⼦中是⽤区别的。
BERT常⻅⾯试问题bert的具体⽹络结构以及训练过程bert为什么⽕它在什么的基础上改进 了些什么
答bert是⽤了transformer的encoder侧的⽹络作为⼀个⽂本编码器使⽤⼤规模数据进⾏预训练预训练使⽤两个loss⼀个是mask LM遮蔽掉源端的⼀些字然后根据上下⽂去预测这些字⼀个是next sentence判断两个句⼦是否在⽂章中互为上下句然后使⽤了⼤规模的语料去预训练。在它之前是GPTGPT是⼀个单向语⾔模型的预训练过程它和gpt的区别就是bert为啥叫双向bi-directional更适⽤于⽂本⽣成。
mask的具体做法Masked LM 即掩码语⾔模型它和⼀般的语⾔模型如N元语⾔模型不同。 a. N元语⾔模型第 i 个字的概率和它前 i-1 个字有关也就是要预测第 i 个字那么模型就得先从头到尾依次预测出第1个到第 i-1 个字再来预测第 i 个字这样的模型⼀般称为⾃回归模型 Autoregressive LM。 b. ⽽Masked LM 通过随机将句⼦中的某些字MASK掉然后通过该MASK掉的字的上下⽂来预测 该字我们称这样的语⾔模型为⾃编码语⾔模型Autoencoder LM。Bert 的 MASK 机制是 这样的它以token为单位随机选择句⼦中 15%的 token然后将其中 80% 的 token 使⽤ [MASK] 符号进⾏替换将 10% 使⽤随机的其他 token 进⾏替换剩下的10%保持不变。
更细节的阐述在⼀个句⼦中随机选中⼀定百分⽐实际是15%的token将这些token⽤ [MASK]替换。然后⽤分类模型预测[MASK]实际上是什么词。作者发现在pre-training阶段 ⼀句话中有15%的token被选中然后将这些token⽤[MASK]替换。⽽在fine-tuning阶段给 BERT模型的输⼊并没有token被[MASK]替换。为了减少pre-training与fine-tuning阶段的差异 在pre-training阶段对MLM任务进⾏改进在被选中的15%的token中有80%被替换为 [MASK]有10%被替换为⼀个随机token有10%保持不变。如下所示
具体怎么做分类输⼊[CLS]我 mask 中 mask 天 安 ⻔[SEP]预测句⼦的mask多分类问题。
NSP任务下⼀个句⼦预测⽤于判断两个句⼦是否互为上下⽂。输⼊[CLS]a[SEP]b[SEP]预测b 是否为a的下⼀句即⼆分类问题。
具体实现因为与⽂本中已有的其它词相⽐CLS这个⽆明显语义信息的符号会更“公平”地融合⽂ 本中各个词的语义信息从⽽更好的表示整句话的语义。
11. BERT和transformer
a. 相同点
ⅰ. 基础架构相同BERT使⽤Transformer作为编码器ⅱ. 都使⽤了位置编码ⅲ. 都是多层堆叠的层级结构。
b. 不同点
ⅰ. 训练⽅式不同Transformer在训练时输⼊序列从左到右进⾏处理逐步⽣成输出。这意 味着在⽣成每个位置的隐藏表示时只能依赖于已经⽣成的左侧部分BERT 使⽤了双 向双向上下⽂的训练⽅式。它通过遮蔽输⼊⽂本中的⼀些词然后预测这些词的上下 ⽂从⽽使模型能够考虑到每个词的上下⽂信息。ⅱ. 此外还有输出层的差异Transformer通常在输出层使⽤Softmax函数进⾏概率分布的计 算适⽤于分类任务BERT常⽤于⽣成上下⽂相关的词嵌⼊⽽不是直接在输出层进⾏分 类。
BERT采⽤LayerNorm结构和BatchNorm的区别主要是做规范化的维度不同
a. BatchNorm针对⼀个batch⾥⾯的数据进⾏规范化针对单个神经元进⾏⽐如batch⾥⾯有64 个样本那么规范化输⼊的这64个样本各⾃经过这个神经元后的值64维。图像领域⽤BN⽐ 较多的原因是因为每⼀个卷积核的参数在不同位置的神经元当中是共享的因此也应该被⼀起规范化。b. LayerNorm则是针对单个样本不依赖于其他数据常被⽤于⼩mini-batch场景、动态⽹络场 景和 RNN特别是⾃然语⾔处理领域就BERT来说就是对每层输出的隐层向量768维做规范化。
Attention时为啥要除以根号下dk作者在论⽂中的解释是点积后的结果⼤⼩是跟维度成正⽐的所以经过softmax以后梯度就会变很⼩除以根号下dk后可以让attention的权重分布⽅差为1⽽不是dk。
NLP中构造词表
a. 传统构造词表的⽅法是先对各个句⼦进⾏分词然后再统计并选出频数最⾼的前N个词组成词表。 b. 存在问题 ⅰ. 模型预测的词汇是开放的对于未在词表中出现的词(Out Of Vocabulary, OOV)模型将 ⽆法处理及⽣成 ⅱ. 词表中的低频词/稀疏词在模型训练过程中⽆法得到充分训练进⽽模型不能充分理解这些 词的语义 ⅲ. ⼀个单词因为不同的形态会产⽣不同的词但是在词表中这些词会被当作不同的词处理 ⼀⽅⾯增加了训练冗余另⼀⽅⾯也造成了⼤词汇量问题。
上述问题的⼀种解决思路是使⽤字符粒度来表示词表虽然能够解决OOV问题但单词被拆分成字 符后⼀⽅⾯丢失了词的语义信息另⼀⽅⾯模型输⼊会变得很⻓这使得模型的训练更加复杂 难以收敛。针对上述问题Subword(⼦词)模型⽅法被提出。它的划分粒度介于词与字符之间⽐如 可以将”looking”划分为”look”和”ing”两个⼦词⽽划分出来的look”ing”⼜能够⽤来构造其它 词如look和ed⼦词可组成单词looked因⽽Subword⽅法能够⼤⼤降低词典的⼤⼩同时对 相近词能更好地处理。
⽬前有三种主流的Subword算法它们分别是Byte Pair Encoding (BPE), WordPiece和Unigram Language Model。
理解BERT中的三部分输⼊1wordpiece embedding词嵌⼊使⽤wordpiece⽅法对语料进 ⾏分词并编码2position embedding不是三⻆函数⽽是⼀个跟着训练学出来的向量也就是 nn.Embedding3segment embedding⽤于处理句⼦对任务对输⼊序列中的每个单词标记其 所属句⼦通常使⽤ 0 和 1 表示两个句⼦然后通过嵌⼊层将每个句⼦标记转换为⼀个向量表示。
当⼀个batch的数据输⼊模型的时候⼤⼩为(batch_size, max_len, embedding)其中batch_size 为batch的批数max_len为每⼀批数据的序列最⼤⻓度embedding则为每⼀个单词或者字的 embedding维度⼤⼩。⽽Batch Normalization是在batch间选择同⼀个位置的值做归⼀化相当于 是对batch⾥相同位置的字或者单词embedding做归⼀化Layer Normalization是在⼀个Batch⾥⾯ 的每⼀⾏做normalization相当于是对每句话的embedding做归⼀化。显然LN更加符合处理⽂本 的直觉。