首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >机器学习|7种经典预训练模型原理解析

机器学习|7种经典预训练模型原理解析

作者头像
智能生信
发布2021-02-04 14:34:07
发布2021-02-04 14:34:07
6.1K0
举报
文章被收录于专栏:智能生信智能生信

作者 | 何文嘉 校对 | 李仲深

一、研究背景

目前无论在CV领域还是NLP领域,预训练都是一个很普遍和普适的方法。我们都知道深度学习的模型越庞大,模型参数越多,为了避免过拟合就需要相应大规模的数据集,但对于很多任务而言,样本标注的成本昂贵。相反,大规模无标签数据库相对容易建立,为了充分利用这些无标记数据,我们可以先使用它们在其他一些任务上学习一个好的特征表示,再用于训练目标任务。

二、简介

随着机器学习和深度学习的发展,各种预训练模型 (Pre-Training Model, PTM) 相继问世,目前已经证明在大型无标签数据库中学习的PTMs可以学习到通用普适的特征表示从而对下游任务有所帮助。PTMs能够提供一个更好的模型初始化,通常会产生一个更好的模型表现和加快在目标任务中的收敛速度。出于PTMs的强大和其普适性,本篇为大家介绍7大经典的PTMs,从原理上理解各个PTMs的特点。最后附上了7大模型的对比表格和学习路线。

目录

  • NNLM
    • 语言模型 (Language Model, LM)
    • n元语法 (n-gram)
    • 神经网络语言模型 (Neural Network Language Model, NNLM)
    • 模型解释
  • Word2Vec
    • 基本模型
    • Word2Vec的两种实现方式
    • 分层Softmax (Hierarchical Softmax)
    • 负采样 (Negative Sampling)
  • GloVe (Global Vectors)
    • 核心思想
    • 总结概括
  • FastText
    • 字符级嵌入
    • Sub-word生成
    • 训练流程
    • 论文中的直觉
  • CoVe (Contextualized Word Vectors/Context Vector)
    • 模型分析
    • 结果分析
  • ELMo (Embedding from Language Model)
    • “偷窥”问题
    • 数学描述
  • Transformer
  • GPT-1/2
    • GPT-1
    • GPT-2
  • BERT
    • Token Embeddings
    • Segment Embedding
    • Position Embedding
    • 任务1:Masked Language Model
    • 任务2:Next Sentence Prediction
    • Fine-tune
    • 具体使用
    • 效果
  • ELMO,GPT, BERT的对比
  • 典型PTM的对比

2.1 NNLM

论文:https://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf 博客:https://zhuanlan.zhihu.com/p/84338492

语言模型 (Language Model, LM)

一个句子由n个词

\omega_{1}, \omega_{2} \ldots \omega_{n}

组成,根据全概率公式/贝叶斯公式有

P(S)=P\left(\omega_{1}, \omega_{2}, \ldots, \omega_{n}\right)=P\left(\omega_{1}\right) P\left(\omega_{2} \mid \omega_{1}\right) \ldots P\left(\omega_{n} \mid \omega_{1}, \ldots, \omega_{n-1}\right) P\left(\omega_{n-1} \mid \omega_{1}, \ldots, \omega_{n-2}\right)

标准的LM主要存在两个问题:

  1. 难以计算:形如
P\left(\omega_{n} \mid \omega_{1}, \ldots, \omega_{n-1}\right)

的概率参数空间太大(组合爆炸),可能性过多

  1. 维度灾难:这种很多词汇的组合出现在语料库中的概率很有可能为零,因此条件概率
P\left(\omega_{n} \mid \omega_{1}, \ldots, \omega_{n-1}\right)

非常稀疏。加上是多个条件概率相乘,容易导致

P(S)\approx0

形象表达(假如Vocabulary只有5个tokens):

LM实际操作的流程就是每次生成词(token)后,将其添加到输入序列。新的序列就会作为模型下一步的输入内容。该理念称为“自回归(auto-regression)”。

n元语法 (n-gram)

为了简化LM,引入马尔科夫假设:

在给定当前知识或信息的情况下,过去(即当前以前的历史状态)对于预测将来(即当前以后的未来状态)是无关的。

因此,n-gram的核心思想是:

i

个词仅与其前面

(n-1)

个词有关

n=1

时,一元语法 (unigram),各个词之间相互独立,LM中一个句子出现的概率简化为

P(S)=P\left(\omega_{1}\right) P\left(\omega_{2} \mid \omega_{1}\right) \ldots P\left(\omega_{n} \mid \omega_{1}, \ldots, \omega_{n-1}\right) P\left(\omega_{n-1} \mid \omega_{1}, \ldots, \omega_{n-2}\right)=\prod_{i=1}^{n} P\left(\omega_{i}\right)

同理当

n=2

时,为二元语法 (bigram),有

P(S)=P\left(\omega_{1}\right) P\left(\omega_{2} \mid \omega_{1}\right) P\left(\omega_{3} \mid \omega_{2}\right) \ldots P\left(\omega_{n} \mid \omega_{n-1}\right)

依次类推, n = 3, 4 .... 但是一般用的都是二元, 三元模型。

传统n-gram的问题:

  1. 局部性:无法利用大于n个词距离的词汇信息, 也无法计算词汇间的相似度
  2. OOV (Out Of Oocabulary) 问题:无法处理从未出现过的词

神经网络语言模型 (Neural Network Language Model, NNLM)

2003年第一次提出了词向量的概念, 核心思想是将文本用稠密, 低维, 连续的向量表达.

NNLM的主要任务是利用前n-1个词汇,预测第n个词汇。

NNLM的框架图:

模型解释

输入层

根据n-gram,每一次的输入都是某个句子中的

n-1

个词,也就是一组词,每个词汇将由one-hot vector的形式编码。记词汇表总大小记为

|V|

,对于输入的每以个词

w_t (1\times|V|)

,都会与

Embedding \ size

Embedding \ dimension

m

的矩阵

C (|V| \times m)

相乘, 得到一个

distribution \ vector
h (1 \times m)

。则一个输入总共得到

n-1

distribution \ vectors

原理

上述操作其实从侧面也达到了降维的目的。参数矩阵

C

其实相当于一本字典 (Look-up Table),因为每一行都储存的向量都与某个one-hot-vector唯一对应。每当有词汇输入的时候,根据词汇的one-hot-vector的特性,通过

w_t \cdot C

能提取出

C

中相应行的向量,如下图所示,而该行向量即可作为词汇的词向量。而

C

一开始是随机初始化,之后在训练阶段由模型通过反向传播 (Back Propagation, BP) 不断优化得到的。

隐含层

将输入层得到的

n-1

distribution \ vectors

拼接 (concat) 在一起并转置,得到一个

(n-1)m \times 1

的向量

x

隐含层为一个简单的tanh激活层,将

x

通过非线性得到隐含层的输出

h

\text {h}=\tanh (H x+d)

其中

H:u \times (n-1) m,\ d: u \times 1,\ h:u \times 1
输出层

将隐含层的输出

h

与原始合并的向量

x

组合在一起得

y=b+W x+Uh

其中

U:|V| \times u,\ W: |V| \times (n-1)m,\ b:|V| \times 1

如果不想利用原始合并词向量的信息的话,可以将

W

设为零矩阵。

最后通过对

Softmax

y

进行归一化,作为关于单词

w_t

的条件概率的估计值

p\left(\omega_{t} \mid \omega_{t-1}, \ldots, \omega_{t-n+1}\right)=\frac{e^{y_{\omega_{t}}}}{\sum_{i=1}^{n-1} e^{y_{\omega_{i}}}}
损失函数
L=\frac{1}{T} \sum_{t} \log \hat{P}\left(w_{t} \mid w_{t-1}, \ldots, w_{t-n+1}\right)+R(\theta)

其中

T

T

组输入,具体意义是将一个句子划分成

T

个词组,每个词组都是包含

n-1

个词的一个模型输入,

R(\theta)

为正则化项。

模型更新

整个模型的参数为

\theta=(b, d, W, U, H, C)

只有矩阵

C

是训练词向量的目标。


2.2 Word2Vec

论文:http://export.arxiv.org/pdf/1301.3781 博客:https://blog.csdn.net/itplus/article/details/37998797

基本模型

一个token输入,预测一个token的情况:

会发现和NNLM非常相似,而且比NNLM简单,连非线性的激活函数都没有。

Word2Vec仅仅是通过一个全连接把输入向量映射到隐藏层,然后再通过一个全连接把隐藏层向量映射到输出层。

根据上图,输入输出层的维度都是

1 \times V

即词汇表的大小,输入层每个token都是用一个one-hot vertor来表示,而输出层向量通过Softmax得出预测单词的概率分布,即由词汇表中每个词的预测概率组成的向量。隐藏层维度为

1 \times h

h

是词向量的维度,是自定义的超参数。

输出层根据概率分布,选择预测概率最大的词作为预测词。

Word2Vec的两种实现方式

简略图:

细节图(CBOW为左图,Skip-Gram为右图):

CBOW
  • 有多个输入,隐藏层需要对每个进入隐藏层的向量求和取平均
  • 用中心词的上下文来预测中心词应该是什么词
Skip-Gram
  • 有多个输出,每个输出代表上下文某一个位置的预测词的概率分布
  • 用中心词预测上下文应该是什么词

分层Softmax (Hierarchical Softmax)

核心思想
  • 将Vocabulary里的所有token构造一棵Huffman树(其实也可以是普通的二叉树,只是Huffman树适合于编码,而且效率较高)
  • 每个叶节点代表特定的token,而且根据Huffman树的特性,它有唯一的编码
  • 模型的输出从树的根节点开始进行预测,每到一个节点都预测是属于哪一侧,相当于将原本的
|V|

分类拆分成

log|V|

个二分类

具体说明

负采样 (Negative Sampling)

核心思想
  • 词汇太多,于是采样
|NEG(w)|

个词汇作为预测词,模型只考虑预测集合

|NEG(w)| \cup w

中的词的正确概率即可。原本需要预测

|V|

个词是不是正确答案,而负采样后,只需要预测

|NEG(w)|+1

个词是不是正确答案即可,大大减少了运算量。

  • 最大化正样本的预测概率,最小化负样本的预测概率。
具体说明

2.3 Glove(Global Vectors)

论文:http://nlp.stanford.edu/pubs/glove.pdf 博客:https://zhuanlan.zhihu.com/p/42073620

核心思想

通过词

k

与词

i

的关系和词

k

与词

j

的关系预测词

i

与词

j

的关系(Ratio关系)。直观理解,同学A与同学B是好朋友,同学A与同学C好朋友,那么同学A与同学C也有很大可能是好朋友。

总结概括

无论用了什么奇技淫巧,最根本的思想其实很简单,就是寻找词的embedding,使得任意三个不同的词

i,j,k

满足Ratio关系:

\frac{\exp \left(w_{i}^{T} w_{k}\right)}{\exp \left(w_{j}^{T} w_{k}\right)}=\frac{P_{i k}}{P_{j k}}

2.4 FastText

论文:https://arxiv.org/pdf/1607.01759.pdf 博客:https://mp.weixin.qq.com/s/Tz8eCmLVboMq3eIMrW2KKA

使用FastText进行文本分类的同时产生词的embedding,初始化的embedding随着文本分类的训练不断更新。

FastText有两个任务和损失,一个是文本分类的损失,另一个是语言建模(广义)的损失。

其实这种多个损失的学习方式本质上也是一种广义的多任务学习。

字符级嵌入

FastText词嵌入的可视化指南

Word2Vec把语料库中的每个单词当成原子,它会为每个单词生成一个向量,这忽略了单词内部的形态特征,如“apple”与“apples”,两个单词都有较多的公共字符,即它们的内部形态类似,但是在传统的word2vec中,这种单词内部形态信息因为它们被转换成不同的id丢失了。为了克服这个问题,fastText使用了字符级别的n-grams来表示一个单词,对于“apple”,假设n的取值为3,则它的trigram有:

"<ap","app","ppl","ple","le>"

其中“<”表示前缀,“>”表示后缀,可以使用这5个trigram的向量叠加来表示“apple”的词向量

模型结构图:

Sub-word生成

不同长度的字符n-grams的例子如下:

Word

Length(n)

Character n-grams

eating

3

<ea, eat, ati, tin, ing, ng>

eating

4

<eat, eati, atin, ting, ing>

eating

5

<eati, eatin, ating, ting>

eating

6

<eatin, eating, ating>

由于存在大量的唯一的n-grams(组合爆炸),我们应用哈希来限制内存需求。我们不是学习每个唯一的n-grams的嵌入,而是学习一个总的B嵌入,其中B表示存储桶的大小。文章中用的桶的大小为200万。同一个桶里的token共用一个嵌入向量。

每个字符n-gram被散列到1到b之间的整数,尽管这可能会导致冲突,但它有助于控制词汇表的大小。原论文使用Fowler-Noll-Vo散列函数的FNV-1a变体将字符序列散列为整数值。****

训练流程

1、首先,中心词的嵌入是通过取字符n-grams的向量和整个词本身来计算的。后面是针对中心词进行优化的,要使得中心词与上下文单词在某个语言特征空间中尽可能相近。

2、对于实际的上下文单词,我们直接从嵌入表示中获取它们的单词向量,不需要加上n-grams。

3、现在,我们随机采集负样本,使用与unigram频率的平方根成正比的概率。对于一个实际的上下文词,抽样2个随机的负样本单词。

4、我们在中心词和实际上下文词之间取点积,并应用sigmoid函数来得到0到1之间的匹配分数,其实就是逻辑回归

5、基于这种损失,我们使用SGD优化器更新嵌入向量,目标是使实际上下文词更接近中心词,同时增加了与负样本的距离

这一部分是总损失函数的一部分,总损失函数的另一部分是文本分类的损失。

论文中的直觉

对于形态丰富的语言(如捷克语和德语),FastText显著提高了句法词类比任务的性能。

但与Word2Vec相比,FastText降低了语义类比任务的性能。


2.5 CoVe (Contextualized Word Vectors/Context Vector)

论文:http://arxiv.org/pdf/1708.00107 博客:https://zhuanlan.zhihu.com/p/110705137

模型分析

用一个 Encoder-Decoder 框架在机器翻译的训练语料上进行预训练(如上图a),而后用训练好的模型,只取其中的 Embedding 层和 Encoder 层,同时在一个新的任务上设计一个 task-specific 模型,再将原先预训练好的 Embedding 层和 Encoder 层的输出作为这个 task-specific 模型的输入,最终在新的任务场景下进行训练(如上图b)。

所谓的上下文相关向量CoVe实际上就是通过机器翻译模型直接得到的:其中GloVe(w)表示将单词w通过GloVe的词表映射层对应的向量表示,然后将这个向量表示作为机器翻译模型中Ecoder的输入,得到的Encoder的输出就是上下文向量CoVe。

这个是典型的Seq2Seq结构,所以Encoder和Decoder可以(或通常)是LSTM/GRU。

对于目标任务的训练,一个新的/在预训练中没见过的序列通过embedding层得到各个词的word vectors,然后输入到预训练好的Encoder,得到的输出就是上下文的向量,这也是CoVe属于Contextual的PTM的原因。

输入的Word Vectors可以是one-hot,也可以是Word2Vec,GloVe等方法产生的词向量,也可以是随机初始化。

CoVe 更侧重于如何将现有数据上预训练得到的表征迁移到新任务场景中,这个预训练得到的encoder的信息其实就是一种语境化或者上下文相关的信息。CoVe 是在监督数据上进行的预训练,是监督学习预训练的典型代表,目前流行的预训练任务都是自监督的,如BERT。

结果分析

作者将随机初始化的词向量、使用GloVe初始化的向量、GloVe+CoVe词向量在各个数据集上对模型性能的影响进行了对比:

可以看到单独使用GloVe向量比使用随机初始化的向量要好,使用GloVe+CoVe词向量的结果又要比GloVe向量要好。

Char是指字符级的嵌入,如CharCNN。

2.6 ELMo (Embedding from Language Model)

论文:https://arxiv.org/pdf/1802.05365.pdf 博客: https://zhuanlan.zhihu.com/p/52483135 https://zhuanlan.zhihu.com/p/88993965 https://zhuanlan.zhihu.com/p/63115885

ELMo = char-level + 多层BiLM

可能需要BiLM的例子:“我之所以今天没有去上课,是因为我生病了。”

这里和传统的LM不同了,是用深度学习模型LSTM来进行LM学习。理论上是对标准的LM进行建模,而不是采用简化的unigram或bigram等简化版本。这是由LSTM的架构特点决定的,但这也是LSTM能够自己“窥视”自己的原因。因此,ELMo要用两个独立的单向LSTM。

ELMo使用了字符级嵌入:

模型结构示意图:

ELMo原理解析及简单上手使用

词嵌入:ELMo原理

“偷窥”问题

为什么双向LSTM会导致看见答案:

如图所示的正向LSTM,"克"是根据“扑”这个字和隐藏向量 h2 来预测出来的。h2 包含了和打 这两个字的信息,所以预测“克”这个字时,是根据前面所有的字来预测的。反向的话,“克”就是根据 “扑”和 h1 来预测的,但是 h1 包含了“克”的信息,所以反向的话会导致模型看到答案。

数学描述

前向的LM表达式:

p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} \mid t_{1}, t_{2}, \ldots, t_{k-1}\right)

后向的LM表达式:

p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} \mid t_{k+1}, t_{k+2}, \ldots, t_{N}\right)

两个LSTM的输出分别是:

[\overrightarrow{h_{k, L}^{L M}} , \overleftarrow{h_{k, L}^{L M}}]

前向LSTM隐藏层的输出

\overrightarrow{h_{k, L}^{L M}}

通过Softmax预测

t_{k+1}

,得到前向的条件概率,后向LSTM同理。即两个单向的LSTM分别进行预测单词的条件概率的计算和,分别取对数并进行求和,以保证前向和后向的信息独立,防止模型自己“窥视”答案。

损失函数:

L(\Theta) = \sum_{k=1}^{N}\left(\log p\left(t_{k} \mid t_{1}, \ldots, t_{k-1} ; \Theta_{x}, \vec{\Theta}_{L S T M}, \Theta_{s}\right)+\log p\left(t_{k} \mid t_{k+1}, \ldots, t_{N} ; \Theta_{x}, \overleftarrow{\Theta}_{L S T M}, \Theta_{s}\right)\right)

一个

L

层的双向语言模型可以得到一个token的一组

2L+1

个的表示:

\begin{aligned} R_{K}=&\left\{x_{k}^{L M}, \overrightarrow{h_{k, j}^{L M}}, \overleftarrow{h_{k, j}^{L M}} \mid j=1, \ldots, L\right\} =\left\{h_{k, j}^{L M} \mid j=0, \ldots, L\right\} \end{aligned}

对于下游模型,ELMo可以将所有层的表示合并为一个向量作为token的表示,也可以简单地只选择第L层的隐藏层输出作为表示。但是通常我们会计算不同任务下Bi-LM各层的权重

\mathbf{E L M O}_{k}^{t a s k}=E\left(R_{k} ; \Theta^{t a s k}\right)=\gamma^{t a s k} \sum_{j=0}^{L} s_{j}^{t a s k} \mathbf{h}_{k, j}^{L M}

其中,

s^{t a s k}

是Softmax规范化的权重,常量参数

\gamma^{t a s k}

允许模型缩放整个ELMo产生的表征向量。

\gamma

对于帮助优化非常重要,考虑到各个BiLM层分布不同,某些情况下对各个BiLM层使用Layer Normalization会有帮助。

ELMO解决了大部分问题,其中最重要的一个是:它解决了一词多义的问题。

  • Word2Vector来说,词与Vector是一一对应的关系,输入句子,然后输出句子中每个字对应Vector,可以看成查表的过程。如:输入 “画画 ”,Word2Vector就会输出两个一样的Vector,但是第一个画是动词、第二个画是名词,他们的vector应该是不一样的,但Word2Vector并不能区分。即使在训练过程中对embedding矩阵进行更新,它依旧还是一一对应的关系。
  • 向ELMO输入“画画” ,输出的两个向量是经过2层LSTM后的结果,它们是不同的。这是ELMO根据输入句子的语境得到的结果。这也是ELMo被分为Contextual PTM的原因。

2.7 Transformer

论文:http://arxiv.org/abs/1706.03762 博客:https://zhuanlan.zhihu.com/p/48508221

关键是搞清楚哪些是参数,是需要学习的,哪些是输入输出。

下面逐层拆解,又高层逐步往底层拆解:

W^Q,W^K,W^V

都是参数,需要模型通过训练学习的,关键是理解其提供的机制:

注意力机制的直观理解:

一个token对其他token进行“注意”:

维度变换用线性代数的知识理解即可。

Q,V,Z

的两行,

K^T

的2列,代表这个序列有2个单词,

Q,V,Z

的3列,

K^T

的3行,代表这个嵌入维度是3。

注意力的直观表示(训练完成后通过各个词的

Q

K

的内积得出的 Score进行可视化,线段越深,得分越高,相关度越高):

残余连接+规范化:

Multi-head Attention(其实就是多组Self-Attention结果的拼接):

详细的整体架构如下(只是一组Encoder和Decoder):

位置编码:

Transformer的Decoder随着下面的GPT-1/2来讲解,因为GPT-1/2的结构就是基于Transformer的Decoder。


2.8 GPT-1/2

论文: https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf 博客: https://zhuanlan.zhihu.com/p/59286975 https://baijiahao.baidu.com/s?id=1652093322137148754&wfr=spider&for=pc https://zhuanlan.zhihu.com/p/95496557

本质上就是Attention模块的不断堆叠,然后就大力出奇迹了,所以真的是 Attention is All You Need

GPT-1

不同任务的输入形式要做出相应的改动:

GPT-2

数据流向

大力出奇迹:

img

Masked Self-Attention:

Masked Self-Attention和Self-Attention的对比:

Position Encoding:

混合编码:

对输入序列的9个已知token进行attention:

attention得分表格:

映射回

|V|

维,得出每个token的概率分布:

注意力细节

Self-Attention:

Multi-head Self-Attention:

GPT2 Self-Attention:

和Transformer一样的,只是分析得更细节更形象而已。

参数计算:


2.9 BERT

论文:https://arxiv.org/pdf/1810.04805.pdf 博客:https://zhuanlan.zhihu.com/p/46652512

架构和GPT几乎一样,都是基于Attention机制模块的堆叠,只是BERT用的是Transformer的Encoder而不是Decoder。

模型对比图:

由于时间序列的关系,RNN模型预测当前词只依赖前面出现过的词,对于后面的信息无从得知。Maked Language Model (MLM) 是为了解决单向信息问题,现有的语言模型的问题在于,没有同时利用双向信息,如

  • ELMO号称是双向LM,但实际上是两个单向 RNN 构成的语言模型的拼接,不是真正的双向,即预测一个词的时候还是只是用了一侧上下文的信息。
  • GPT的Mask Self-Attenion明显只用了一侧信息进行解码。

BERT有两个任务:

  1. MLM (Maked Language Model)
  2. NSP (Next Sentence Prediction)

BERT的区域部分几乎和GPT一毛一样,都是基于Attention模块的堆叠。

Bert的Embedding层:

Token Embeddings

Segment Embedding

Position Embedding

任务1:Masked Language Model

Bert 预训练过程就是模仿我们学习语言的过程,要准确的理解一个句子或一段文本的语义,就要学习上下文关系,从上下文语义来推测空缺单词的含义。而 Bert 的做法模拟了英语中的完形填空,随机将一些单词遮住,让 Bert 模型去预测这个单词,以此达到学习整个文本语义的目的。

随机 mask 预料中 15% 的 Token,然后预测 [MASK] Token,与 masked token 对应的最终隐藏向量被输入到词汇表上的 Softmax 层中。这虽然确实能训练一个双向预训练模型,但这种方法有个缺点,因为在预训练过程中随机 [MASK] Token 由于每次都是全部 mask,预训练期间会记住这些 MASK 信息,但是在fine-tune期间从未看到过 [MASK] Token,导致预训练和 fine-tune 信息不匹配。

代码语言:javascript
复制
my dog is hairy → my dog is [MASK] 80%选中的词用[MASK]代替
my dog is hairy → my dog is apple  10%将选中的词用任意词代替
my dog is hairy → my dog is hairy  10%选中的词不发生变化

任务2:Next Sentence Prediction

代码语言:javascript
复制
Input = [CLS] the man went to [MASK] store [SEP]
        he bought a gallon [MASK] milk [SEP]
Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP]
        penguin [MASK] are flight ##less birds [SEP]
Label = NotNext

Fine-tune

fine-tune 就是指在已经训练好的语言模型基础上,使用有标签的数据对参数进行调整,使其更好的适用于下游任务。如对于分类问题在语言模型基础上加一层 Softmax 网络,然后再新的预料上重新训练进行 fine-tune。

具体使用

效果


三、总结对比

ELMO,GPT, BERT的对比

  • ELMO:使用两个单向LSTM代替一个双向LSTM
  • GPT :通过mask得分矩阵避免当前字看到之后所要预测的字,所以GPT是只有正向的,缺失了反向信息
  • BERT:将所要预测的字用[MASK]字符代替,无论你是正向的还是反向的,你都不知道[MASK]这个字符原来的字是什么,只有结合[MASK]左右两边的词语信息来预测。这就达到了用双向模型训练的目的,但也导致了 预训练-微调不一致的问题

典型PTM的对比

模型

学习类型

类别

预训练任务

年份

NNLM

自监督

第一代,Non-Contextual

LM (Language Model)

2003,上古时代

Word2Vec

自监督

第一代,Non-Contextual

CBOW:上下文预测中心词;Skip-Gram:中心词预测上下文

2013,古代

GloVe

无监督

第一代,Non-Contextual

共现矩阵中单词出现的Ratio规律

2014,古代

FastText

有监督

第一代,Non-Contextual

TC (Text Classification)

2016,中世纪

CoVe

有监督

第二代,Contextual

MT (Machine Translation)

2017,中世纪

ELMo

自监督

第二代,Contextual

Bi-LM (Bi-directional Language Model)

2018,近代

GPT

自监督

第二代,Contextual

LM (Language Model)

2018,近代

BERT

自监督

第二代,Contextual

MLM+NSP (Masked Language Model + Next Sentence Prediciton)

2018,近代

BERT的后浪们

……

第二代,Contextual

……

2019+,现代

BERT的后浪们

2020 年 3月 新番 李宏毅 人类语言处理 独家笔记 预训练语言模型们 (上) - 19

概括

四、思考

  • 第一代PTMs和第二代PTMs的本质区别是什么,如何理解预训练模型中的上下文有关和上下文无关
  • 所有的PTMs的共同特点是什么
  • 在PTMs和机器学习模型的设计上有什么共同之处
  • 不同的PTMs是如何来捕捉文本的语言特征的
  • 为什么Attention有效,而简单的全连接神经网络不行,差别在哪里,两者都是加权求和
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智能生信 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
    • 语言模型 (Language Model, LM)
      • n元语法 (n-gram)
      • 神经网络语言模型 (Neural Network Language Model, NNLM)
      • 模型解释
    • 基本模型
      • Word2Vec的两种实现方式
      • 分层Softmax (Hierarchical Softmax)
      • 负采样 (Negative Sampling)
      • 核心思想
      • 总结概括
    • 使用FastText进行文本分类的同时产生词的embedding,初始化的embedding随着文本分类的训练不断更新。
      • 字符级嵌入
      • Sub-word生成
      • 训练流程
      • 论文中的直觉
    • 模型分析
      • 结果分析
    • ELMo = char-level + 多层BiLM
      • “偷窥”问题
      • 数学描述
    • 本质上就是Attention模块的不断堆叠,然后就大力出奇迹了,所以真的是 Attention is All You Need
      • GPT-1
      • GPT-2
    • 架构和GPT几乎一样,都是基于Attention机制模块的堆叠,只是BERT用的是Transformer的Encoder而不是Decoder。
      • Token Embeddings
      • Segment Embedding
      • Position Embedding
      • 任务1:Masked Language Model
      • 任务2:Next Sentence Prediction
      • Fine-tune
      • 具体使用
      • 效果
    • ELMO,GPT, BERT的对比
    • 典型PTM的对比
    • BERT的后浪们
  • 概括
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档