| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 深度学习(二)BERT模型及其一系列衍生模型 -> 正文阅读 |
|
[人工智能]深度学习(二)BERT模型及其一系列衍生模型 |
文章目录
声明本文仅供本人形成系统的知识体系,不供商用!!! 温馨提示:想要读懂本章内容,需提前了解 Transformer 哦:Transformer 详解 一、BERT 概述1. BERT 是什么?
基本原理: 设计了两个任务来预训练该模型:MLM 任务以及 Next Sentence Predict 任务,得到一个对语言有一定理解的通用模型,再将该模型利用 fine-tune 处理下游任务。下面这个示意图最重要的概念是预训练步骤跟 fine-tuning 步骤所用的 BERT 是一模一样的 2. 传统方法 VS 预训练方法传统方法: 1.收集数据集 2.模型搭建 3.模型训练 4.预测评估 预训练: 2.在自然语言处理中适用被人的模型,当输入我们自己的语言是,自动输出句子的表征,如 Google 的BERT,在输入一句话,输出矩阵表示这句话,其中融合了多方面信息。 Bert 的两大主要作用:Pre-train、Fine-tune 3. BERT 的输入
??????????? ~~~~~~~~~~~ ??????????? 以词 fragment 来说,其可以被拆成 frag 与 ##ment 两个 pieces。
???????????
~~~~~~~~~~~
??????????? [CLS] 我的狗很可爱 [SEP] 企鹅不擅长飞行 [SEP]
① 5 种特殊的 token[CLS]:在做分类任务时其最后一层的 repr. 会被视为整个输入序列的 repr. 4. 核心结构1. Multi-Head2. Encoder4. 预训练方式
1.MLM(Masked Language Model) 任务
my dog is hairy → my dog is [MASK ] ???? ~~~~ ????此处将 hairy 进行了mask处理,然后采用非监督学习的方法预测mask位置的词是什么,但是该方法有一个问题,因为是mask15%的词,其数量已经很高了,这样就会导致某些词在fine-tuning阶段从未见过,为了解决这个问题,作者做了如下的处理:
为啥要以一定的概率使用随机词呢? 2.Next Sentence Predict :句与句的关系
3.Multi-Task LearningBERT 预训练阶段实际上是将上述两个任务结合起来,同时进行,然后将所有的 Loss 相加:
5.BERT 的输出?BERT 模型的主要输入是文本中各个字/词(或者称为 token)的原始词向量,该向量既可以随机初始化,也可以利用 Word2Vector 等算法进行预训练以作为初始值;输出是文本中各个字/词融合了全文语义信息后的向量表示,如下图所示(为方便描述且与 BERT 模型的当前中文版本保持一致,统一以「字向量」作为输入): 模型输出则是输入各字对应的融合全文语义信息后的向量表示 实际上,在做 Next Sentence Prediction 任务时,在第一个句子的首部会加上一个 [CLS] token,在两个句子中间以及最后一个句子的尾部会加上一个 [SEP] token。 6. Fine-TuningFine-Tuning 共分为 4 中类型 ① case 1 Classification
为什么要用第一个位置? ② case 2 Slot filling
③ case 3 Infer
④ case 5 QA如果现在的任务是 QA(问答),举例来说,如上图,将一篇文章,和一个问题(这里的例子比较简单,答案一定会出现在文章中)送入模型中,模型会输出两个数 s,e,这两个数表示,这个问题的答案,落在文章的第 s 个词到第 e 个词。具体流程我们可以看下面这幅图 首先将问题和文章通过 [SEP] 分隔,送入 BERT 之后,得到上图中黄色的输出。此时我们还要训练两个 vector,即上图中橙色和黄色的向量。首先将橙色和所有的黄色向量进行dot product,然后通过 softmax,看哪一个输出的值最大,例如上图中 d 2 d_2 d2? 对应的输出概率最大,那我们就认为 s=2 同样地,我们用蓝色的向量和所有黄色向量进行dot product,最终预测得 d 3 d_3 d3?的概率最大,因此e=3。最终,答案就是s=2,e=3 你可能会觉得这里面有个问题,假设最终的输出s>e怎么办,那不就矛盾了吗?其实在某些训练集里,有的问题就是没有答案的,因此此时的预测搞不好是对的,就是没有答案 7. Fine tune BERT 来解决新的下游任务有 5 个简单步骤
8. BERT 有什么局限性?① BERT 在第一个预训练阶段,假设句子中多个单词被 Mask 掉,这些被 Mask 掉的单词之间没有任何关系,是条件独立的,然而有时候这些单词之间是有关系的,但是需要注意的是,这个问题并不是什么大问题,甚至可以说对最后的结果并没有多大的影响,因为本身 BERT 预训练的语料就是海量的(动辄几十个 G),所以如果训练数据足够大,其实不靠当前这个例子,靠其它例子,也能弥补被 Mask 单词直接的相互关系问题,因为总有其它例子能够学会这些单词的相互依赖关系。 ② BERT 的在预训练时会出现特殊的 [MASK],但是它在下游的 fine-tune 中不会出现,这就出现了预训练阶段和 fine-tune 阶段不一致的问题。其实这个问题对最后结果产生多大的影响也是不够明确的,因为后续有许多 BERT 相关的预训练模型仍然保持了 [MASK]标记,也取得了很大的结果,而且很多数据集上的结果也比 BERT 要好。但是确确实实引入 [MASK] 标记,也是为了构造自编码语言模型而采用的一种折中方式。 ③ 另外还有一个缺点,是 BERT 在分词后做 [MASK] 会产生的一个问题,为了解决 OOV 的问题,我们通常会把一个词切分成更细粒度的 WordPiece。BERT 在 Pretraining 的时候是随机 Mask 这些 WordPiece 的,这就可能出现只 Mask 一个词的一部分的情况,例如: ④ [MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现; ⑤ BERT对硬件资源的消耗巨大(大模型需要16个tpu,历时四天;更大的模型需要64个tpu,历时四天。 ???????? ~~~~~~~~ ???????? probability 这个词被切分成”pro”、”#babi” 和 ”#lity”3 个 WordPiece。有可能出现的一种随机 Mask 是把 ”#babi” Mask 住,但 是”pro” 和 ”#lity” 没有被 Mask。这样的预测任务就变得容易了,因为在 ”pro” 和 ”#lity” 之间基本上只能是 ”#babi” 了。这样它只需要记住一些词 (WordPiece 的序列) 就可以完成这个任务,而不是根据上下文的语义关系来预测出来的。类似的中文的词 ”模型” 也可能被 Mask 部分(其实用”琵琶”的例子可能更好,因为这两个字只能一起出现而不能单独出现),这也会让预测变得容易。 ???????? ~~~~~~~~ ???????? 为了解决这个问题,很自然的想法就是词作为一个整体要么都 Mask 要么都不 Mask,这就是所谓的 Whole Word Masking。这是一个很简单的想法,对于 BERT 的代码修改也非常少,只是修改一些 Mask 的那段代码。 9. BERT 优点
10. BERT 与 Transformer 的区别Bert 中的 Transform 和 传统的 Transform 激活函数不一样,前馈用的一维卷积代替线性层,Transformer 输出是一个新的序列, Bert 只是输出一种表示,一个矩阵 二、BERT 改进版本1. ELMo早于BERT,强调了context embedding 的重要性,使用 LSTM 作为核心编码器 2. GPT早于BERT,启用了 Transformer 作为核心编码器,开始使用特有 token 连接不同句子,用传统语言模型的方式训练,即前 n 个字预测第 n + 1 个子字,不像 Bert 的完型填空,但在此基础上增加了有监督任务训练,预训练上基本没用 LSTM 了,但是在下游任务中还是在用。 3. Ernie-baidu将 Bert 中Mask 随机 token, 改为了 Mask 随机实体或词组 4. Ernie - Tsingha1.引入知识图谱,将实体信息融合到预训练任务中,使用了自己训练的知识图谱实体 Embedding (清华拥有自己的实体标注数据集,有这个资本) 5. GPT2继 GPT 后,继续使用单向语言模型,对 transformer 进行了小改动,强调 zero-shot ,任何一个任务,可以看做输入条件下的输出。 6. UNILM使用 BERT 的模型结构,同时进行 Mask LM,单向 LM,和 seq2seq 训练 (作者认为只是用 Mask LM 太受限,引入传统单向方式 + seq2seq 训练) 这样的结构会导致比如第一个字只能看到自己,第二个字只能看到自己与前一个字,以此类推,传统的单向语言模型, 7. Transformer-XL & XLNet原 BERT 中的问题:Bert 中有一个交互矩阵,就是那个 Mask, 和输入长度相关,如果输入长度很长,这个矩阵就会很大,所以 Bert 对长度有限制 512。 此模型希望解决 Transforme r的长度限制问题 1.循环机制来解决其实就是将前 512 个输出传到下一层,和 RNN 的机制很像,将隐单元向量不断向后传递,将前一段文本的隐向量与后一段文本印象里拼接之后计算 attention 2.将Transformer 中的绝对位置编码改为相对位置编码公式中其实就是将位置编码与常规词嵌入那部分叠加的写出来,然后做一个分配率, 3. 训练方式的改进AR 语言模型 auto regressive language model单向预测下一个字 AE 语言模型 auto encoding language model双向信息输入,预测中间某个mask的字 AR 语言模型与 AE 语言模型融合调整句子顺序,之后进行单向预测,它调整为了将句子顺序打乱,做单向预测实际上 embedding 的时候还是引入了位置信息,只是看起来位置变了,还是通过 mask 的操作。词向量本身是没有变的 8. Roberta相较于 BERT 模型结构不变,训练方式调整:
反思: 挖掘旧的方法的潜力,有时比创新还要有效 9. SpanBert与BERT的主要区别有三个:
完型填空任务的一种延伸,Mask 字采样 SBO 任务Mask 片段长度采样分布
10. ALBERT① 试图解决Bert模型过大的问题,想办法减少参数量:
② 论文认为NSP任务过于简单,用 SOP(Sentence order prediction)任务替代 NSP 任务,预测两句话的前后关系,同样是二分类任务,如:
???????????
~~~~~~~~~~~
??????????? [CLS] 你好啊 BERT [SEP] 好久不见 [SEP] -> Positive ③ 局限性
贡献: 工程角度讲价值不大,但是证明了参数量并非模型能力的绝对衡量标准 11. T5(Text-to-Text Transfer Transformer)① Seq2seq 理论上可以解决一切 NLP 问题:
② 预训练任务设计 text corruption 12. GPT31750 亿参数量,是GPT-2的116倍、模型结构与GPT-2相同、继续使用单向语言模型预训练
人工智能的目标:像人一样的学习能力 三、浅谈预训练的发展方向
Reference2. 進擊的 BERT:NLP 界的巨人之力與遷移學習 强推 ☆☆☆ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:43:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |