自然语言处理--预训练模型
发布日期:2021-05-10 05:30:11 浏览次数:28 分类:精选文章

本文共 1787 字,大约阅读时间需要 5 分钟。

一、ELMo

二、Bert

全称Bidirectional Encoder Representations from Transformers,谷歌于2018年提出的通用语言模型,采用基于微调的双向Transformers编码实现。预训练方式包含feature-based和fine-tuning,feature-based需要根据不同任务设计不同网络结构,预训练的结果作为额外特征,如Word2Vec,fine-tuning使用时只需要根据具体任务额外增加一个输出层进行微调,不需要为特定任务修改网络结构,如Bert。

GPT利用Transformer自编码训练单向语言模型,舍弃下文语境信息,然而仅根据一个方向的上下文,无法确定多义词的准确含义,需要根据双向的上下文。Bert捕获双向的上下文语境信息,由双向Transformers编码器层堆叠组成。Bert采用的语言数据包含维基百科的大规模语料库和图书语料库,提供Bert-base和Bert-large两个版本,使用L表示Transformer层数,A表示多头注意力的自注意力数,H表示隐藏层层数,Bert-base:L=12,H=768,A=12,参数总量110M(1.1亿),Bert-large:L=24,H=1024,A=16,参数总数340M(3.4亿)。

嵌入涵盖词类、句法和位置等信息,由标记嵌入(token embedding)、片段嵌入(segment embedding)和位置嵌入(position embedding)三部分组成,标记嵌入是大规模无监督训练获取的词向量,片段嵌入划分文本的句子或段落,位置嵌入融合文本中词语的位置信息,输入表示是标记嵌入、片段嵌入和位置嵌入的总和,增强Bert的通用性,支持多种语言的处理。Bert首先使用标记嵌入,然后进行位置嵌入,序列长度最多512个标记嵌入,序列的第一个标记嵌入为分类嵌入[CLS],句子偶对打包成一个序列,使用[SEP]将句子分开,添加片段嵌入。。

Bert采用预训练+微调两段式方法。预训练包含遮挡语言模型(Masked Language Model,MLM)和预测下一个句子(Next Sentence Prediction,NSP)两个无监督任务。MLM不预测句子而预测单词,类似完形填空,采用[Mask]随机遮盖输入序列15%的词,利用剩余序列的句法规则和语义信息预测被遮挡词,存在两个问题:1.由于微调阶段没有[Mask],对输入序列不遮盖,造成预训练和微调不匹配,对随机遮盖的词,80%的词[Mask]遮盖,10%的词随机替换,10%的词保持不变,尽可能保持每个词的上下文表示,缓解预训练和微调的不一致性,随机替换发生率1.5%,不影响模型性能。2.预训练只预测15%的词,需要更多的步骤,收敛速度较慢。NSP从句子层面学习句子之间的关系,预测两个输入句子是否相邻,随机抽取相邻句子和不相邻句子分别构建正样本和负样本,选择句子A和B作为训练样本,B有50%概率是A的下一句,50%的概率是随机句子。MLM和NSP均采用交叉熵损失函数,总损失将两个任务的损失相加。

 

 

 

模型:Transformers编码器包含多头注意力层,残差归一化层,前馈线性转换层和归一化层,输入和输出形式完全相同,将输入文本中词的语义向量转换为增强语义向量,加全连接层进行预训练,去掉全连接层用于下游NLP任务

输出:输出不固定,根据上下文信息进行调整,同一个词语在不同语境下,编码输出不尽相同,解决多义词问题,每一个位置输出一个向量表示编码当前位置的语义信息,根据不同的任务,采用不同方式运用,通常取特殊位置([CLS],[SEP])的输出进行分类,或取所有位置的输出

Bert通过预训练,微调找到更宽广平坦的区域,泛化误差小,能有效防止过拟合,

1.为何在第一句前加[CLS]标志

2.嵌入直接相加对语义的影响
3.token分3种情况mask的作用
4.为何mask掉15%的词
5.非线性的来源
6.如何区分一词多义
7.为何使用LayerNorm
8.需要输入?为何不用position id?
9.针对不同任务,如何fine-tuning
10.对比ELMO的伪双向
11.对比Transformer的Encoder
12.损失函数

 

三、GPT

上一篇:自然语言处理--文本表示
下一篇:leetcode--数学

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月17日 23时18分45秒