前言

        该文章是本人学习过程中的笔记内容,如有错误请指正。        

        BERT模型基础架构由三个模块组成:词嵌入模块(Embedding),transformer的Encoding模块,预微调模块。

        BERT有两大预训练任务:Masked LM(language model)掩码语言模型、NSP(Next Sentence Prediction)下一句话预测任务

一、词嵌入模块

1.1 组成

        由词嵌入张量、句子分段嵌入张量、位置编码张量 组成。

词嵌入张量(Token Embeddings)

        将句子中的每个词转为计算机可以处理的数字张量,第一个词是任务类型的标记(例如:[CLS],分类标记),每段句子之间由 [SEP] 来分割。

句子分段嵌入张量(Segment Embeddings) 

        将两个句子进行区分标记,服务于BERT的NSP预训练任务。

位置编码张量(position)

        给句子中的每个词给予一个位置编码信息。

1.2 输出

        由以上三个模块直接加和而成。

1.3 与transformer模型中的Embedding模块的区别

        transformer模型的Embedding模块中只有 词嵌入张量 和 位置编码张量 的直接加和,

        而BERT中,多了一个 句子分段嵌入张量 的加和。

二、transformer模块

        只使用transformer模块中的encoding编码器部分。

        由12层编码器层组成

        输入:512维

        输出:768维

        头数:12头

        参数:110M

如果输入的长度超过了512该怎么办?

        可以取开头、取结尾、或取开头的部分和结尾的部分拼凑起来。

        但要留出任务类型标识(例如:[CLS])和分割标识([SEP]),还剩下的510给输入文本。

        如果是取开头和结尾:

                输入维度是800以内,则开头取128,结尾取382;

                输入维度是800以上,则开头取256,结尾取254。

三、预微调模块

        只需要对这个模块作一些改动就可以实现多种下游任务的处理。

        例如:句子对分类任务、单句分类任务

四、BERT的两大预训练任务

4.1 Masked LM

        一般的语言模型都是从左到右,或者从左到右和从右到左的拼接 来训练模型的,这样模型训练提取到的特征有限,BERT就使用一个深度双向表达模型(MLM)来更好的提取特征。

        任务是随机选取15%的Token(即每个词)来做掩码任务。

        其中被选择的Token中,

        80%的Token用 [MASK] 来替换,

        10%的Token用 随机错误的Token 来替换,

        10%的Token保持原Token不变。

4.1.1 任务这样设计的好处

        只使用15%的Token来做任务,保留了原本文章句子的语言能力和表达规则。

        模型不知道哪些词需要被预测,哪些词被MASK,哪些词是正确的,这样就逼着模型要真正理解句子中的语义,才能完成任务。

4.1.2 为什么要用80%、10%、10%这样的比例来替换

        用 [MASK] 替换80%的Token,是为了训练模型 同时双向 理解文本的能力。

        用 随机错误的Token 来替换10%的Token,是为了强制让模型从句子的上下文来理解语义,真正理解词的含义,不会让模型通过出现的频率去猜。

        保持10%Token不变,是为了不让模型学傻。

4.2 NSP

        在QA(Question-Answer)问答之类的任务中,模型需要正确理解两个句子之间的关系和含义,就需要Next Sentence Prediction任务来训练模型。

        所有参与任务的句子对(A-B)中,所有的句子A不变,

        50%的句子B保持不变,标记为isNext(正样本)

        50%的句子B被随机的原始句子替换,标记为notNext(负样本)。

五、BERT模型的优缺点

5.1 优点

        1.模型理解能力因为双向理解而更强

        2.有预微调模块,可以适应不同的下游任务。

        3.在公开的数据集上的效果好。

5.2 缺点

        1.模型的参数量相对于RNN之类的算法而言比较大。

        2.因为MLM任务中选择了15%的Token做双向理解训练,导致模型训练收敛的速度相对慢。

        3.中文处理有局限性,例如一些生僻字。

        4.MLM训练任务中的[MASK]标记只在训练阶段出现,在预测阶段不会出现,就造成了一定的信息偏差,过多使用[MASK]会让模型的性能下降。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐