Bert详解 Bert框架基本架构Embeddingpre-trainingMLMMask Language ModelNSPNext Sentence Predictionfine-tuning优缺点基本架构由Transformer的Encoder层堆叠而来每个部分组成如下EmbeddingEmbedding由三种Embedding求和而成Token Embeddings词向量第一个单词是CLS标志可以用于之后的分类任务通过建立词向量表将每个词转化成一个一维向量作为模型的输入。首先对文本进行tokenization处理且在文本开头([CLS])和结尾([SEP])分别插入两个特殊的Token[CLS]表示该特征用于分类模型对非分类模型该符号可以省去。[SEP]表示分句符号用于断开输入语料中的两个句子。Bert处理英文文本需要含有30522个词Token Embeddings将每个词转化成768维向量Segment Embeddings区别两种句子因为预训练不光做LM语言模型从左往右生成还要做以两个句子为输入的分类任务。Segment Embeddings有两种向量表示01用于表示两个句子前一个句子全部赋值为0后一个句子全部赋值为1然后拼接起来。如问答系统任务要预测下一句输入是有关联的句子文本分类只有一个句子则全部为0Position Embeddings与Transformer中不一样不是三角函数的固定位置编码而是学习出来的由于出现在文本不同位置的字/词所携带的语义信息存在差异(如 ”你爱我“ 和 ”我爱你“)你和我虽然都和爱字很接近但是位置不同表示的含义不同。在 RNN 中第二个 ”I“ 和 第一个 ”I“ 表达的意义不一样因为它们的隐状态不一样。对第二个 ”I“ 来说隐状态经过 ”I think therefore“ 三个词包含了前面三个词的信息而第一个 ”I“ 只是一个初始值。因此RNN 的隐状态保证在不同位置上相同的词有不同的输出向量表示。BERT 中处理的最长序列是 512 个 Token长度超过 512 会被截取BERT 在各个位置上学习一个向量来表示序列顺序的信息编码进来意味着 Position Embeddings 实际上是一个 (512, 768) 的 lookup 表表第一行是代表第一个序列的每个位置第二行代表序列第二个位置。最后BERT 模型将Token Embeddings (1, n, 768) Segment Embeddings(1, n, 768) Position Embeddings(1, n, 768) 求和的方式得到一个 Embedding(1, n, 768)作为模型的输入。[CLS]的作用Bert在第一句前会加一个[CLS]标志最后一层该位对应向量可以作为整句话的语义表示从而用于下游的分类任务等。原因self-attention是用文本中的其它词来增强目标词的语义表示但是目标词本身的语义还是会占主要部分的与文本中已有的其它字/词相比这个无明显语义信息的符号会更“公平”地融合文本中各个字/词的语义信息。pre-trainingbert是一个多任务模型由两个自监督任务组成即MLM和NSPMLMMask Language Model在训练的时候随机从输入语料上mask掉一些单词然后通过的上下文预测该单词该任务非常像我们在中学时期经常做的完形填空。在BERT的实验中15%的WordPiece Token会被随机Mask掉。在训练模型时一个句子会被多次喂到模型中用于参数学习但是Google并没有在每次都mask掉这些单词而是在确定要Mask掉的单词之后做以下处理。80%的时候会直接替换为[Mask]将句子 “my dog is cute” 转换为句子 “my dog is [Mask]”。10%的时候将其替换其它任意单词将单词 “cute” 替换成另一个随机词例如 “apple”。将句子 “my dog is cute” 转换为句子 “my dog is apple”。10%的时候会保留原始Token例如保持句子为 “my dog is cute” 不变。优点1被随机选择15%的词当中以10%的概率用任意词替换去预测正确的词相当于文本纠错任务为BERT模型赋予了一定的文本纠错能力2被随机选择15%的词当中以10%的概率保持不变缓解了finetune时候与预训练时候输入不匹配的问题预训练时候输入句子当中有mask而finetune时候输入是完整无缺的句子即为输入不匹配问题。缺点针对有两个及两个以上连续字组成的词随机mask字割裂了连续字之间的相关性使模型不太容易学习到词的语义信息NSPNext Sentence Prediction判断句子B是否是句子A的下文。如果是的话输出’IsNext‘否则输出’NotNext‘训练数据的生成方式是从平行语料中随机抽取的连续两句话其中50%保留抽取的两句话它们符合IsNext关系另外50%的第二句话是随机从预料中提取的它们的关系是NotNext的fine-tuning微调(Fine-Tuning)的任务包括基于句子对的分类任务基于单个句子的分类任务问答任务命名实体识别优缺点优点BERT 相较于原来的 RNN、LSTM 可以做到并发执行同时提取词在句子中的关系特征并且能在多个不同层次提取关系特征进而更全面反映句子语义。相较于 word2vec其又能根据句子上下文获取词义从而避免歧义出现缺点模型参数太多而且模型太大少量数据训练时容易过拟合。BERT的NSP任务效果不明显MLM存在和下游任务mismathch的情况。BERT对生成式任务和长序列建模支持不好。内容参考读懂BERT看这一篇就够了