目录

  • The models become larger and larger …
  • Self-supervised Learning
  • ELMO (feature-based)
    • How to represent a word?
      • 1-of-N Encoding
      • Word Class
      • Word Embedding (Unsupervised Learning)
    • Contextualized Word Embedding
    • Embeddings from Language Model (ELMO)
  • GPT series (fine-tuning)
    • GPT: Generative Pre-Training
      • Introduction
      • Framework
      • Experiments
    • GPT-2: LMs are Unsupervised Multitask Learners
      • Introduction
      • Approach
      • Experiments
    • GPT-3: LMs are Few-Shot Learners
      • Introduction
      • Approach
      • Experiments
    • Beyond Text
  • BERT series (fine-tuning)
    • What is BERT?
    • WordPiece embedding: Subword-based tokenization algorithm
    • Input/Output Representations
    • Pre-training BERT
      • Masked language model (MLM)
      • Next sentence prediction (NSP)
      • Pre-training data
    • General Language Understanding Evaluation (GLUE)
    • fine-tuning
      • Case 1: Sentiment analysis
      • Case 2: POS tagging
      • Case 3: Natural Language Inference (NLI)
      • Case 4: Extraction-based Question Answering (QA)
    • Training BERT is challenging!
    • BERT Embryology (胚胎学)
    • Pre-training a seq2seq model
    • Why does BERT work?
    • Multi-lingual BERT (多语言 BERT)
    • To Learn More ……
  • Auto-encoder
    • Basic Idea of Auto-encoder
    • Feature Disentanglement
    • Discrete Latent Representation
    • More Applications
      • Generator
      • Compression
      • Anomaly Detection
  • References

Self-Supervised Learning 很多模型都是以芝麻街的人物命名

The models become larger and larger …

Self-supervised Learning


Self-supervised Learning Framework

ELMO (feature-based)

Embeddings from Language Model

  • paper: Deep contextualized word representations

How to represent a word?

  • paper: Contextual Word Representations: A Contextual Introduction

1-of-N Encoding

  • 无法从 1-of-N Encoding 中获取有关单词的任何意义

Word Class

  • 光做分类也无法充分表示单词包含的信息

Word Embedding (Unsupervised Learning)

  • Word Embedding: Machine learn the meaning of words from reading a lot of documents without supervision (A word can be understood by its context)

How to exploit the context?

  • Count based: If two words w i w_i wi and w j w_j wj frequently co-occur, V ( w i ) V(w_i) V(wi) and V ( w j ) V(w_j) V(wj) would be close to each other

    • E.g. Glove Vector: Global Vectors for Word Representation
  • Prediction based: Given word w i − 1 w_{i-1} wi1, predict the next word w i w_i wi

    • Take out the input of the neurons in the first layer. Use it to represent a word w w w
    • You shall know a word by the company it keeps

上面蓝框中的 NN 其实并不是一个 deep network;word embedding 文献中其实只是一个全连接层


Prediction-based – Sharing Parameters

  • 输入多个词汇,预测下一个词汇; The weights with the same color should be the same. Or, one word would have two word vectors. (并且还可以减少参数量)

    • The length of x i − 1 x_{i-1} xi1 and x i − 2 x_{i-2} xi2 are both ∣ V ∣ |V| V. The length of z z z is ∣ Z ∣ |Z| Z. The weight matrix W 1 W_1 W1 and W 2 W_2 W2 are both ∣ Z ∣ × ∣ V ∣ |Z|\times|V| Z×V matrices.
      z = W 1 x i − 2 + W 2 x i − 1 = W ( x i − 2 + x i − 1 ) z = W_1 x_{i-2} + W_2 x_{i-1}=W(x_{i-2} + x_{i-1}) z=W1xi2+W2xi1=W(xi2+xi1)

Prediction-based – Training

Prediction-based – Various Architectures

  • Continuous bag of word (CBOW) model
  • Skip-gram

Characteristics


Solving analogies

In typical word embedding, each word type has an embedding. But a word can have multiple senses.

Contextualized Word Embedding

  • Contextualized Word Embedding: The embeddings of word tokens also depend on its context. Each word token has its own embedding (even though it has the same word type)

    • e.g. 下图中的三个 bank 都有不同的 embedding,但 “money in the bank” 和 “own blood bank” 这两句话中的 “bank” 对应的 embedding 可能会比较接近

Embeddings from Language Model (ELMO)

  • ELMO: RNN-based language models (trained from lots of sentences); 训练 RNN 预测下一个 token,同时为了考虑前后文,还会训练一个反向 RNN 预测上一个 token,训练完毕之后把 RNN 的 hidden layer 作为 Contextualized word embedding 即可

    • e.g. given “潮水 退了 就 知道 誰 沒穿 褲子”
  • Each layer in deep LSTM can generate a latent representation. Which one should we use???ELMO: 我全都要

    • 具体来说,是作 weighted sum。注意这里的权重是在进行 downstream 任务时学得的

GPT series (fine-tuning)

timeline: Transformer (2017/06) → \rightarrow GPT (2018/06) → \rightarrow BERT (2018/10) → \rightarrow GPT-2 (2019/02) → \rightarrow GPT-3 (2020/05)

GPT 生成过一篇发现独角兽的假新闻,展示了 GPT 的超强能力,因此用独角兽代表 GPT

talk to transformer (一个小型的 GPT), GPT 3 demos

GPT: Generative Pre-Training

  • paper: Improving Language Understanding by Generative Pre-Training

Introduction

  • NLP 领域包含了许许多多的不同任务 (e.g. textual entailment, question answering, semantic similarity assessment, and document classification),而提供给特定任务的标签数据却十分稀少,这使得训练用于特定任务的模型非常有挑战性。为此,GPT 发现让语言模型在大量无标签文本语料库上进行通用预训练,然后在下游任务上进行微调可以带来巨大的性能提升 (当时最成功的自监督模型还是词嵌入模型。从这点上看,GPT 说不定启发了后续 BERT 的诞生,是非常具有创新性的)。同时,与之前的自监督方法不同,GPT 通过在微调时构造 task-aware input,只需对模型架构进行很小的改动就能将模型成功迁移到各种各样不同的下游任务上,无需做很多 task-specific changes
  • GPT 最终在 12 个 NLP 任务中的 9 个上达到了 SOTA (这个效果不如之后的 BERT,这可能也导致了后续大量的工作都是基于 BERT 而非 GPT)

Framework

Unsupervised pre-training

  • 给定文本的 token 序列 U = { u 1 , . . . , u n } \mathcal U = \{u_1, . . . , u_n\} U={u1,...,un},GPT 训练一个标准的语言模型,也就是最大化如下的似然函数:
    其中 k k k 维上下文窗口的大小。相比 BERT 的完形填空,GPT 的预训练任务更难 (下限更低,上限更高),这也是为什么最后 GPT 系列大力才能出奇迹的原因了
  • GPT 的模型架构采用 Transformer 的 Decoder (正是因为预训练任务是语言模型,因此 GPT 选用的是带有 masked self-attention 的 Decoder 而非 Encoder),tokens 序列经过 word embedding 后加上 positional embedding 变为模型输入,在经过若干个 Transformer block 之后经过线性投影得到 logits,最终由 softmax 输出下个词的概率

Supervised fine-tuning

  • 假设下游的有监督数据集为 C \mathcal C C,其中每个样本即为 token 序列 x 1 , . . . , x m x^1,...,x^m x1,...,xm 和其对应的标签 y y y。GPT 将 x 1 , . . . , x m x^1,...,x^m x1,...,xm 输入预训练模型得到最后一个 Transformer 块的最后一个输出 h l m h_l^m hlm,经过一个新添加的线性层 W y W_y Wy 后用来预测标签 y y y
    最终用交叉熵函数计算得到损失 L 2 ( C ) L_2(\mathcal C) L2(C)
  • 除了预测标签 y y y,GPT 的作者发现,如果在微调时把语言模型当作一个辅助目标效果会更好,这有助于提高模型的泛化性能并加速模型收敛,因此最终的模型损失为:

在下游任务微调时,模型需要的额外参数仅有 W y W_y Wy 和 delimiter tokens 的 embeddings


Task-specific input transformations

上图中,蓝色的 Start, Extract, Delim 均为特殊的 delimiter tokens,它们对应的 embeddings 需要在下游任务中进行额外训练

Experiments

  • GPT 使用了一个 12-layer decoder-only transformer (768 dimensional states and 12 attention heads) 在 BooksCorpus 上进行预训练,其中 BooksCorpus 包含了 7000 本未出版的书


GPT-2: LMs are Unsupervised Multitask Learners

  • paper: Language Models are Unsupervised Multitask Learners

Introduction

  • GPT 发表仅 4 个月后就被 BERT 使用 Transformer 的 Encoder 配上更大的数据集和更大的模型所打败,为了做出回击,GPT 2 的作者就又收集了一个更大的数据集 WebText 并在此之上预训练了一个更大的模型 GPT-2,它的参数量达到了惊人的 15 亿 (相比之下,BERT base / GPT 的参数量才 1 亿,BERT large 的参数量也才 3 亿)
  • 但 GPT-2 依靠着超大的模型参数量和更多的数据集,效果较 BERT 而言却并没有太大的优势,为此,作者提出了 GPT-2 最大的卖点:GPT-2 仅靠 zero-shot learning 就可以在下游任务中表现得很好,这意味着我们无需对模型架构或参数做任何调整,也无需收集任何下游任务的标注数据就可以使用 GPT-2 取得不错的效果

Approach

  • 学习一个特定任务的概率模型可以看作是在估计一个条件概率 p ( o u t p u t ∣ i n p u t ) p(output|input) p(outputinput),但一个可以完成多个任务的通用系统应该估计条件概率 p ( o u t p u t ∣ i n p u t , t a s k ) p(output|input, task) p(outputinput,task),而语言正好就给了我们一个很好的同时表示任务、输入和输出的方法。例如对于一个翻译任务的输入可以被表示为序列 (translate to french, english text, french text),一个阅读理解任务的输入可以被表示为序列 (answer the question, document, question, answer)
  • 按照上述表示方法,原则上一个足够强大的语言模型可以学得不同的语言任务而不需要额外的监督信号 (i.e. prompt / “In-context” Learning)。也就是说,只要 GPT-2 能在无监督预训练任务 (i.e. 语言模型) 上收敛达到全局最优,理论上它就能完美地完成许多不同的语言任务

GPT-2

  • Training Dataset: 由于 GPT-2 力图训练一个完美的语言模型,自然少不了大数据集,并且这个大数据集里的文本还必须保持多样性。为此,GPT-2 的作者爬取了 Reddit 上所有得到至少 3 个 karma 的外链 (这保证了爬取网页的质量),在经过数据清洗后 (包括去除了 Wikipedia 数据集中的文件,以免破坏 zero-shot 的设定) 得到了总共 40GB 的数据集 WebText. WebText 天生就包含了各种下游任务的训练样例,例如下图种选取了数据集中包含的英语翻译为法语的例子
  • Input Representation: GPT-2 使用 Byte Pair Encoding (BPE) 进行分词。GPT-2 采用的 BPE 实现是用于处理 Unicode code points 的,因此在未添加任何特殊符号之前词汇表里就有了 130,000 个子词,但尽管如此大的词汇表增加了后续模型的参数量,这也使得 GPT-2 能对所有 Unicode string 建模,增加了 GPT-2 的通用性。另外,GPT-2 的作者发现 BPE 的词汇表里经常会包含同一个常见词的不同形式,例如 dog.dog!dog?,为此作者禁止了 BPE 合并不同种类的字符 (空格除外)
  • Model: GPT-2 在 GPT 的基础上对模型进行了一些改动:(1) 将每个子块中的 Layer normalization 移到了输入处 (类似于 pre-activation residual network);(2) 在最后一个自注意力层后增加了额外的 Layer normalization;(3) 将残差层的初始化参数乘上了 1 / N 1/\sqrt N 1/N ,其中 N N N 为残差层的数量 (防止在模型训练初期残差连接上前向/反向传播的数值过大);(4) 语言模型的 context size 由 512 个 tokens 增加到了 1024 个 tokens;(4) 使用了更大的 batchsize 512

Experiments

  • 由下图可以看出,GPT-2 做 zero-shot learning 效果不算特别好,但模型能力随着模型大小的增大而不断增加,并且作者还发现尽管 GPT-2 的参数量很大但仍然在 WebText 数据集上欠拟合,这预示着继续增大模型参数就能进一步提高模型性能,由此引出了之后的 GPT-3

GPT-3: LMs are Few-Shot Learners

  • paper: Language Models are Few-Shot Learners (GPT-3)

Introduction

  • GPT-3 在 GPT-2 的基础上更进一步,整个模型有 1750 亿个参数。同时 GPT-3 相比 GPT-2 还做了一些妥协,不再固定为 zero-shot learning,而是做 few-shot learning (no gradient updates or fine-tuning),最终在许多 NLP 数据集上都达到了非常好的效果,有时甚至能达到之前的 SOTA fine-tuning 模型性能 (当然,GPT-3 仍然在一些数据集上表现不好)。更有趣的是,GPT-3 还能生成一些足以以假乱真的文章 (不过 GPT-3 比较擅长生成短文章而不擅长生成小说之类的长文章)

Approach

Few-Shot (FS), One-Shot (1S), Zero-Shot (0S)

  • Few-shot learning 中,给定的示例个数 K K K 最大不能使得文本超过模型的 context window ( n c t x = 2048 n_{ctx}=2048 nctx=2048),通常 K K K 在 10 到 100 之间。对于分类任务,需要在文本中提供 K K K 个示例的文本及其正确答案,然后提供需要预测样本的文本和 answer text ("Answer: " / “A:”) 并比较每一种答案的 LM likelihood (一个条件联合概率,最终要根据答案的长度进行归一化)。对于二分类任务,答案设定为文本中更常见的 “True” / “False” 而非 0 / 1。对于 QA 等自由发挥的文本生成任务,GPT-3 采用 beam search (a beam width of 4 and a length penalty of α = 0.6 α = 0.6 α=0.6.)

GPT-3 这种 fet-shot learning 的方法尴尬之处在于,当你下游任务真有一个数据集的时候,GPT-3 模型太大不方便做微调,同时每次做推理时都把数据集所有样本列进文本里也很不方便


Model and Architectures

  • GPT-3 的模型架构与 GPT-2 基本相同,包括 modified initialization、pre-normalization 和 reversible tokenization,唯一的区别就是采取了 Sparse Transformer 的改动 (alternating dense and locally banded sparse attention patterns in the layers of the transformer)。

Training Dataset

  • GPT-3 的作者首先下载了 Common Crawl 数据集,这个数据集里包含了海量的网页文本但质量不高,为此作者进行了一些数据清理的工作:(1) 训练一个简单地逻辑回归二分类器,正例为 GPT-2 使用的数据集 WebText 中的样本,负例为 Common Crawl 中的样本,训练完成后再用这个分类器去过滤掉 Common Crawl 中低质量的文本内容;(2) 使用 LSH 算法在文章层面进行去查;(3) 把 BERT、GPT、GPT-2 的训练数据集都加进去
  • 由于 Common Crawl 中的文本质量还是比较低的,因此 GPT-3 在采样时使用了不同的采样率,这使得尽管 Common Crawl 数据集很大,但一个 batch 里也只有大约 60% 的样本来自 Common Crawl

Experiments

Beyond Text

e.g. 把 pixel 当作 token 训练 GPT 的话,就可以生成图片 (Ref: Image GPT)

BERT series (fine-tuning)

  • paper: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  • The code and pre-trained models are available at https://github.com/google-research/bert

What is BERT?

pre-training + fine-tuning

  • BERT 的总体思路与 GPT 类似,都是先在某个任务上对模型进行预训练,然后再到下游任务上微调,也就是 pre-training + fine-tuning
  • 通过将预训练模型加上一个额外的输出层后再在下游任务上重新进行微调,BERT 在 11 个 NLP 任务上都取得了 SOTA (e.g. question answering, language inference)

BERT 的网络架构

  • BERT: Bidirectional Encoder Representations from Transformers。从名字上可以看出,BERT 的网络架构即为 Transformer 的 Encoder
  • paper 的题目中还提到了这是一个 “deep” Transformer。设 Transformer 的 block 数为 L L Ld m o d e l d_{model} dmodelH H H,多头自注意力层的头数为 A A A,MLP 的隐层大小为 4 H 4H 4H。BERT paper 中提出了两种模型, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE ( L = 12 , H = 768 , A = 12 L=12, H=768, A=12 L=12,H=768,A=12, 参数量 = 110 M 110M 110M) 和 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE ( L = 24 , H = 1024 , A = 16 L=24, H=1024, A=16 L=24,H=1024,A=16, 参数量 = 340 M 340M 340M)。其中 BERT BASE \text{BERT}_{\text{BASE}} BERTBASE 的参数量与 GPT 类似,用于与 GPT 的性能进行比较

可以简单看一下如何计算 BERT 的参数量。假设词典大小为 N N N,那么 Input Embedding 的参数量即为 N × H N\times H N×H。多头注意力模块由四个线性层组成,其中 3 个负责将 Q , K , V Q,K,V Q,K,V 映射到 A A A 个低维线性空间上,1 个负责将 A A A 个头拼接得到的结果再进行一次线性变换,因此参数量为 4 × H × H 4\times H\times H 4×H×H。MLP 由两个全连接层组成,一个将 H H H 维向量映射为 4 H 4H 4H 维向量,一个将 4 H 4H 4H 维向量映射回 H H H 维向量,因此参数量为 2 × 4 H × H 2\times 4H\times H 2×4H×H。因此总的参数量即为 N H + L × 12 H 2 NH+L\times 12H^2 NH+L×12H2 (paper 中 N = 30 , 000 N=30,000 N=30,000)

BERT base 模型与 GPT 模型大小相同,就是为了方便与 GPT 进行比较


BERT 的预训练任务 - 双向

  • 同时 BERT 的名字中还重点强调了 “双向”。回忆一下,不管是 ELMo 还是 GPT,它们在预训练的任务都是 language model,也就是预测句子的下一个单词,这个预训练任务本身是单向的,限制了预训练模型架构的选择,例如 GPT 模型中,生成每一个 token 时都只能关注该 token 之前位置的输入 token;在 ELMo 中,模型只是硬生生地把正向和反向的 RNN 结合起来,并没有充分融合上下文的信息。显然,在这样的限制下预训练出的模型在用于 sentence-level tasks (e.g. 句子情感分析) 和 token-level tasks (e.g. QA) 时都不是特别适合。为此,BERT 使用了 “masked language model” (MLM)Next sentence prediction 作为其预训练目标来达到 “Bidirectional” 的效果,也就是每一个输出 token 都同时考虑了上下文的信息

联想:在 NLP 领域,使用大量无标签数据预训练出的模型比使用相对少量的有标签数据预训练出的模型效果更好。那么在 CV 领域是否也是这样的呢?

WordPiece embedding: Subword-based tokenization algorithm

Tokenization in simple words is the process of splitting a phrase, sentence, paragraph, one or multiple text documents into smaller units. Each of these smaller units is called a token.

word and character-based tokenization

  • 在处理输入文本时,首先要对文本进行分词,而最简单的分词方法就是按单词分词,但这可能会导致 (1) 词表 (vocabulary) 过大,Embedding 层参数过多,模型难以训练; (2) 在模型测试时可能出现很多 OOV tokens (Out-of-vocabulary); (3) “do”, “doing”, “done” 这些非常相似的单词也会对应不同的 Embedding。也可以按字符分词,但它也会导致 (1) 输入序列过长; (2) 单个 token 意义不明。为了避免上述情况,BERT 采用了 WordPiece embedding – 一种 Subword-based 分词算法

Subword-based tokenization

  • Subword-based tokenization 是一种分词粒度介于单词 (word-based) 和字母 (character-based) 之间的分词方法。它可以保留那些经常出现的单词,同时把不常用单词切分为更短小的、更有意义的子词 (subword)。例如将 “tokenization” 切分为 “token” 和 “ization”,这可以让模型知道 “tokenization” 虽然与 “token” 意义不同,但却有着相同的词根,可能有相近的含义。Subword-based 算法通常还是用一个特殊符号来指示哪个 token 是单词的开始,哪个 token 是单词的结束。例如将 “tokenization” 表示为 “token” 和 “##ization”,其中 “##” 表示该 token 非单词的第一个 token (这个 “##” 记号也在 BERT 中被使用)
  • 常见的 Subword-based 分词算法有 WordPiece (BERT and DistilBERT), Byte-Pair Encoding (BPE) (GPT-2 and RoBERTa), Unigram (XLNet and ALBERT) 和 SentencePiece
  • BERT 采用的是 WordPiece。WordPiece 有自底向上和自顶向下两种实现方法,BERT 采用自顶向下的实现方法。下面主要介绍原始的基于 BPE 的自底向上的实现方法

Byte-Pair Encoding (BPE)

  • BPE 原本是一种简单的数据压缩算法,最早在 A New Algorithm for Data Compression 这篇文章中提出,它的主要思想是不断将数据中最常出现的连续字节对替换为一个数据中没有的新的字节,直到达到指定的循环次数或压缩要求 (greedy algorithm)

    • 可以将一个字符看作一个 Byte,例如可以对 aaabdaaabac 运行 BPE 算法,其中最常出现的字符对为 aa,因此将 aa 替换为 Z,数据集变为 ZabdZabac。重复上述步骤,最常出现的字符对为 ab,将其替换为 Y,数据集变为 ZYdZYac。这样就实现了数据压缩
  • 由于可以将一个字符看作一个 Byte,BPE 可以很自然地用在 NLP 领域,它保证了最常用的单词被保留为单一 token,而稀有单词则被分解为多个 token。下面以一个例子来说明:
    • 假设数据集在利用空格进行预分词后统计得到各个单词的词频如下:
      { “ o l d ” : 7 , “ o l d e r ” : 3 , “ f i n e s t ” : 9 , “ l o w e s t ” : 4 } \{“old”: 7, “older”: 3, “finest”: 9, “lowest”: 4\} {old:7,older:3,finest:9,lowest:4}为了在 Subword-based 分词后标识出每个单词的 token 边界,我们在每个单词后都加上一个特殊的结束标志 “ < / w > </w> </w>”:
      { “ o l d < / w > ” : 7 , “ o l d e r < / w > ” : 3 , “ f i n e s t < / w > ” : 9 , “ l o w e s t < / w > ” : 4 } \{“old</w>”: 7, “older</w>”: 3, “finest</w>”: 9, “lowest</w>”: 4\} {old</w>:7,older</w>:3,finest</w>:9,lowest</w>:4}接下来我们将每个单词都分割为字符,并且统计出每个字符出现的频次:
    • Iteration 1: 数据集中出现最多的字符对为 “e” 和 “s” (出现在 finest 和 lowest 中),出现了 13 次。因此,我们选择合并 “e” 和 “s” 字符对,并记其频次数为 13。同时我们还需要更新 “e” 和 “s” 的频次数,将它们都减去 13:
      Iteration 2: 数据集中出现最多的字符对为 “es” 和 “t” (出现在 finest 和 lowest 中),出现了 13 次。因此,我们选择合并 “es” 和 “t” 字符对,并记其频次数为 13。同时我们还需要更新 “es” 和 “t” 的频次数,将它们都减去 13:
      Iteration 3: 数据集中出现最多的字符对为 “est” 和 “</w>” (出现在 finest 和 lowest 中),出现了 13 次。重复上述步骤,继续合并 (合并 “</w>” 符号是十分重要的,因为它可以让模型区分 “estimate” 和 “highest” 中 “est” 的区别):
      Iteration 4: 数据集中出现最多的字符对为 “o” 和 “l” (出现在 old 和 older 中),出现了 10 次。对它们进行合并:
      Iteration 5: 数据集中出现最多的字符对为 “ol” 和 “d” (出现在 old 和 older 中),出现了 10 次。对它们进行合并:
    • 现在停止合并 (实际应用中,循环停止条件可以为到达指定循环次数,也可以为压缩到指定 Token 数),去除频次为 0 的字符,得到如下的 11 个 subword:
      上面表格中的 Token 列作为 BPE 算法的结果存在一个字典中以供编码和解码时使用
  • 解码:如果给定一堆 subword 想要解码回 word,那么只需将所有 token 拼接到一起即可。例如在上述例子中,编码得到的序列为 [“the</w>”, “high”, “est</w>”, “range</w>”, “in</w>”, “Seattle</w>”],将其拼接后按 </w> 进行分词即可得到原有的单词序列 [“the”, “highest”, “range”, “in”, “Seattle”]
  • 编码:编码时计算复杂度比较高,需要对语料库中所有单词 [“the</w>”, “highest</w>”, “range</w>”, “in</w>”, “Seattle</w>”],尝试将单词中的字符序列替换为 subword,其中优先替换为更长的 subword

如果我们永远都不删除那些单个字符,就一定能表示 OOV 的单词


WordPiece (bottom-up)

  • paper: Japanese and Korean Voice Search (Schuster et al., 2012)
  • WordPiece 与 BPE 类似,唯一的区别是在合并子词时,不再是直接合并频率最高的子词对,而是选择合并后能让整个句子似然最大的子词对
  • 假设句子 S = ( t 1 , . . . , t n ) S=(t_1,...,t_n) S=(t1,...,tn)n n n 个子词组成,且子词间相互独立,那么
    log ⁡ P ( S ) = ∑ i = 1 n log ⁡ P ( t i ) \log P(S)=\sum_{i=1}^n\log P(t_i) logP(S)=i=1nlogP(ti)假设把相邻位置的 x x xy y y 两个子词进行合并,合并后产生的子词记为 z z z,此时句子 S S S 对数似然值的变化可表示为:
    log ⁡ P ( z ) − ( log ⁡ P ( x ) + log ⁡ P ( y ) ) = log ⁡ ( P ( z ) P ( x ) P ( y ) ) \log P(z)-\left(\log P(x)+\log P(y)\right)=\log\left(\frac{P(z)}{P(x)P(y)}\right) logP(z)(logP(x)+logP(y))=log(P(x)P(y)P(z))因此合并后能最大化句子似然的子词对 ( x , y ) (x,y) (x,y) 就是使得 P ( z ) P ( x ) P ( y ) \frac{P(z)}{P(x)P(y)} P(x)P(y)P(z) 最大的子词对,其中 z z z( x , y ) (x,y) (x,y) 合并后的子词。而计算 P ( z ) P ( x ) P ( y ) \frac{P(z)}{P(x)P(y)} P(x)P(y)P(z) 最方便的方法就是训练一个语言模型
  • 下面总结一下 WordPiece 算法:
    • (1) Initialize the word unit inventory with the base characters.
    • (2) Build a language model on the training data using the word inventory from 1.
    • (3) Generate a new word unit by combining two units out of the current word inventory. The word unit inventory will be incremented by 1 after adding this new word unit. The new word unit is chosen from all the possible ones so that it increases the likelihood of the training data the most when added to the model.
    • (4) Goto 2 until a pre-defined limit of word units is reached or the likelihood increase falls below a certain threshold.
  • 按照上面的算法,每一轮迭代都需要训练一个新的语言模型并且计算训练数据中所有相邻子词对的 P ( z ) P ( x ) P ( y ) \frac{P(z)}{P(x)P(y)} P(x)P(y)P(z)。为了减小时间开销,可以使用一些简单的 tricks (详见论文):(1) test only the pairs with a significant chance of being the best (the ones with high priors) (2) combine several clustering steps into a single iteration (possible for a group of pairs that don’t affect each other)

WordPiece (top-down) (used in BERT)

  • 自顶向下的实现方式是从单词开始,将它们逐步分解为更小的组成部分,直至达到迭代步数或不能再继续分解 (由于汉字不能再继续分解,中文不能直接用这种自顶向下的方法来处理,为此需要使用不同的方法)
  • 具体算法可参考 TF 官方文档中的介绍

Input/Output Representations

  • BERT 使用了带有 30,000 个 token 的 WordPiece embedding。并且为了使 BERT 能更方便地用在一系列的下游任务上,BERT 的一个输入 token 序列可以是一个句子,也可以是一个句子对 (e.g. <Question, Answer>) (这里的句子不是指语义上的句子,而是指一段连续的文本)
  • 具体而言,每个序列的第一个 token 永远都是一个特殊符号 [CLS] (classification),对于分类任务来说该符号对应的最终输出被当作整个输入序列的总体特征表示 (aggregate sequence representation) (由于 BERT 是双向的结构,第一个输出也能融合整个输入序列的信息)。为了区分句子对中的两个句子,两个句子中间由一个特殊符号 [SEP] 隔开,同时 BERT 还加入了一个特殊的 Segement Embedding 层用于表示每个 token 是属于句子 A A A 还是句子 B B B (Segement Embedding 层参数由两个向量 E A , E B E_A,E_B EA,EB 组成,它们不是事先确定的,而是跟模型一起学习得到的)。因此如下图所示,一个 token 对应的输入特征是三个部分的加和:WordPiece Embedding + Segement Embedding + Position Embedding (这里的 Position Embedding 并不是和 Transformer 一样是用正余弦函数得到的,而是随模型一起学得的。由于 BERT 能够处理最长 512 个 token 的输入序列,Position Embedding 的参数量实际上为 512 × d m o d e l 512\times d_{model} 512×dmodel)

[CLS] 对应的最终输出记为 C ∈ R H C\in\R^H CRH,第 i i i 个 token 对应的最终输出记为 T i ∈ R H T_i\in\R^H TiRH

Pre-training BERT

Masked language model (MLM)

  • The masked language model randomly masks some percentage of the tokens from the input (论文中是将 15% 的输入 token (不包括 [CLS], [SEP] 这些特殊词元) 替换为一个掩码 [MASK]), and the objective is to predict those masked tokens based only on its context. (类似于完形填空)
  • 上面的 MLM 还有一个问题,就是在预训练时遮盖输入词元使用的 [MASK] 是不会出现在下游任务中的,这会导致 pre-training 和 fine-tuning 看到的数据会有不同 (a mismatch between pre-training and fine-tuning)。为了缓解该问题,BERT 并不总是将 15% 作为掩码的输入 token 都直接替换为 [MASK]。如果第 i i i 个词元被选作掩码用于给模型作预测,那么 (1) 有 80% 的几率将其替换为 [MASK];(2) 10% 的几率将其替换为一个随机 token (相当于加 noise);(3) 10% 的几率不改变该 token,但仍让模型对其进行预测 (用来缩小 pre-training 和 fine-tuning 所用数据之间的差距)

Next sentence prediction (NSP)

  • 由于 Question Answering (QA),Natural Language Inference (NLI) 这种下游任务都需要基于模型对两个句子之间关系的理解,而语言模型无法提供这种句子间关系的理解。为此,BERT 使用了另一种预训练任务:Next sentence prediction (NSP)
  • Specifically, when choosing the sentences A A A and B B B for each pre-training example, 50% of the time B B B is the actual next sentence that follows A A A (labeled as IsNext), and 50% of the time it is a random sentence from the corpus (labeled as NotNext). (在作分类任务时,[CLS] 对应的输出被用于提供整个句子的总体信息)

  • 但之后的研究证明其实 NSP 这个预训练任务并没有那么有用。这可能是因为在挑选两个不相邻句子时是随机挑选的,导致模型很容易区分两个句子是否相邻,导致任务太过简单

    • paper: RoBERTa: A Robustly Optimized BERT Pretraining Approach
  • 解决方法: SOP: Sentence order prediction Used in ALBERT

Pre-training data

  • BERT 的预训练语料库为 BooksCorpus (800M words) 和 English Wikipedia (2,500M words)。为了提取出长的连续的句子序列,选择预训练数据集时应该选用文本级别的数据集,而不是由随机打乱的句子组成的数据集 (e.g. Billion Word Benchmark)

注意到,BERT 的预训练数据集不仅使用了 GPT 的 BooksCorpus,还增加了 English Wikipedia,这也是为什么 BERT 不仅能训练出与 GPT 一样大的 BERT base,还能训练出 3 倍参数量的 BERT large。从这个角度来看,BERT 打败 GPT 也得益于更大的数据集和更大的模型

General Language Understanding Evaluation (GLUE)

  • https://gluebenchmark.com/
  • GLUE also has Chinese version (https://www.cluebenchmarks.com/)

  • 在测试 Self-supervised model 时,我们需要让模型在多个任务上进行测试。GLUE 共包含下面的 9 个任务:

    • Corpus of Linguistic Acceptability (CoLA)
    • Stanford Sentiment Treebank (SST-2)
    • Microsoft Research Paraphrase Corpus (MRPC)
    • Quora Question Pairs (QQP)
    • Semantic Textual Similarity Benchmark (STS-B)
    • Multi-Genre Natural Language Inference (MNLI)
    • Question-answering NLI (QNLI)
    • Recognizing Textual Entailment (RTE)
    • Winograd NLI (WNLI)

fine-tuning

BERT 在 pre-train 阶段是 unsupervised-learning (self-supervised learning),而 fine-tune 阶段是 supervised learning;整个训练过程可以看作 semi-supervised learning

  • 在涉及 text pair 的任务 (e.g. QA) 中,传统的做法都需要用到 Encoder + Decoder,相当于分别独立地对 text pair 中的两个句子进行编码,然后再利用 bidirectional cross attention 进行融合。而 BERT 则是只使用了 self-attention 来一步到位地解决该问题。但 BERT 也为此付出了代价,BERT 不能像 Transformer 一样被直接用于机器翻译等生成类的任务
  • 李沐的视频中提到,在 fine-tuning 的时候 epoch 需要大一些,让模型多训练一会,同时优化器最好使用标准的 Adam 优化器

BERT 的论文里也做了 Ablation Studies,实验了用 Feature-based Approach 的方法使用 BERT 的效果,结果是没有 fine-tuning 好的

Case 1: Sentiment analysis

Case 2: POS tagging

Case 3: Natural Language Inference (NLI)

  • NLI: 给定一个前提和一个假设,判断是否可以从前提推出假设

Case 4: Extraction-based Question Answering (QA)

Extraction-based QA: 答案一定出现在问题里



随机初始化蓝色和橙色的向量,分别用它们与 BERT 的输出作内积 (类似于 attention) 得到答案的起始和终止位置 (如果 s > e s>e s>e 则表示问题无解)。训练时的 loss 为答案开始位置的 log-loss 和答案结束位置的 log-loss 之和

BERT 中 self-attention 计算量很大,因此不能输入太长的序列。在训练时可以每次只截取一部分的文本作为训练数据进行训练

Training BERT is challenging!

BERT Embryology (胚胎学)

  • paper: Pretrained Language Model Embryology: The Birth of ALBERT

When does BERT know POS tagging, syntactic parsing, semantics?

  • The answer is counterintuitive!

Pre-training a seq2seq model

  • 类似于 BERT 的训练过程,我们给 Encoder “corrupted input”,然后让 Decoder 尽量还原真实的输入

如何生成 “corrupted input”?MASS / BART

Text infilling: mask+delete

BART 用了上图中的所有方法,得到了比较好的效果

Why does BERT work?

  • BERT 输出的 embedding 向量代表了输入字的意思

    • The tokens with similar meaning have similar embedding. (e.g. “鸟” 和 “鱼” 的 embedding 相似 (可计算余弦相似度))
    • Contextualized word embedding: Context is considered. (e.g. “吃苹果” 和 “苹果手机” 中的 “果” 意思不同,因此它们对应的 embedding 并不相似)

  • 但 BERT 的有效性可能不止体现在它能输出 Contextualized word embedding 上… 例如可以将 BERT 用于蛋白质、DNA 以及音乐分类
  • 以 DNA 分类为例,我们将 DNA 中的脱氧核苷酸 A, C, T, G 分别用 “we”, “you”, “he”, “she” 这四个单词表示,然后将 DNA 序列转化为英文文本 (毫无意义的文本) 输入给 BERT,居然也可以得到比较好的效果

Multi-lingual BERT (多语言 BERT)

  • paper: Beto, Bentz, Becas: The Surprising Cross-Lingual Effectiveness of BERT

  • Multi-lingual BERT: Training a BERT model by many different languages.
  • Zero-shot Reading Comprehension: 在 fine-tuning 阶段让 Multi-BERT 在英文数据集上训练,然后直接在中文数据集上测试,居然也能取得不错的效果

Cross-lingual Alignment?

  • 一种解释是不同语种相应单词的 embedding 比较接近

Weird???

  • If the embedding is language independent … How to correctly reconstruct? (中文还原为中文,英文还原为英文)

    • There must be language information.

Where is Language?

  • If this is true … Unsupervised token-level translation (分别计算出中文和英文 embedding 的平均值,然后计算它们的差值,在英文 embedding 上加上这个差值就可能得到相应的中文 embedding)

To Learn More ……

  • https://youtu.be/1_gRK9EIQpc
  • https://youtu.be/Bywo7m6ySlk

Auto-encoder

Basic Idea of Auto-encoder

  • Encoder: Find pattern, and then compress

De-noising Auto-encoder

Feature Disentanglement

  • paper:

    • One-shot Voice Conversion by Separating Speaker and Content Representations with Instance Normalization
    • Multi-target Voice Conversion without Parallel Data by Adversarially Learning Disentangled Audio Representations
    • AUTOVC: Zero-Shot Voice Style Transfer with Only Autoencoder Loss

Original Seq2seq Auto-encoder

  • 我们想要用 Auto-encoder 抽取出一段语音的发音特征 (phonetic information),但 latent representation 其实不止包含了 phonetic information,还包括了 speaker information (语者信息)、环境信息等 (例如,两个人说同一个词的语音信息是不同的,这是因为虽然两段语音的发音特征类似,但语者信息不同)

Feature Disentangle

e.g. phonetic information 可以做语音识别,speaker information 可以做声纹比对

Training

  • (1) Train Speaker Encoder
  • (2) Train Phonetic Encoder: 额外训练一个 Speaker Classifier 用于判别 z i z_i ziz j z_j zj 是否来自同一个人说的语音 (其实就是 GAN)。如果 Phonetic Encoder 可以骗过 Speaker Classifier,那么说明 Phonetic Encoder 可以过滤掉所有与 Speaker 有关的信息

Result: Audio segments of two different speakers


Application: Voice Conversion

Discrete Latent Representation

  • 使用 Discrete Latent Representation 可能可以抽取出一些有用的信息。e.g. 在 MNIST 上训练 Anto-encoder,Latent Representation 为 one-hot 向量,训练完毕之后,Encoder 就变成了一个分类器,这也是一种 unsupervised classiying 的方法

Vector Quantized Variational Auto-encoder (VQVAE)

  • paper: Neural Discrete Representation Learning

For speech, the codebook represents phonetic information (paper: Unsupervised speech representation learning using WaveNet autoencoders)


Application: Unsupervised Summarization

  • paper: Learning to Encode Text as Human-Readable Summaries using Generative Adversarial Networks

  • 直接训练 Auto-encoder 不能得到 summary,因此还需要加一个 Discriminator

Only need a lot of documents to train the model

More Applications

Generator

Compression

  • paper:

    • An End-to-End Compression Framework Based on Convolutional Neural Networks
    • Lossy Image Compression with Compressive Autoencoders

Anomaly Detection

  • Given a set of training data { x 1 , x 2 , ⋯ , x N } \{x_1, x_2, ⋯ , x_N\} {x1,x2,,xN}. Detecting input x x x is similar to training data or not.

    • Fraud Detection: Training data: credit card transactions, x x x: fraud or not
    • Network Intrusion Detection: Training data: connection, x x x: attack or not
    • Cancer Detection: Training data: normal cells, x x x: cancer or not?
  • Binary Classification?We only have one class. ⇒ \Rightarrow Training auto-encoder

Auto-encoder


More about Anomaly Detection

  • Part 1: https://youtu.be/gDp2LXGnVLQ
  • Part 2: https://youtu.be/cYrNjLxkoXs
  • Part 3: https://youtu.be/ueDlm2FkCnw
  • Part 4: https://youtu.be/XwkHOUPbc0Q
  • Part 5: https://youtu.be/Fh1xFBktRLQ
  • Part 6: https://youtu.be/LmFWzmn2rFY
  • Part 7: https://youtu.be/6W8FqUGYyDo

References

  • 李宏毅 2021 ML 课程
  • BERT 论文逐段精读【论文精读】(李沐)
  • GPT,GPT-2,GPT-3 论文精读【论文精读】(李沐)
  • Word, Subword, and Character-Based Tokenization: Know the Difference
  • WordPiece: Subword-based tokenization algorithm
  • Byte-Pair Encoding: Subword-based tokenization algorithm
  • NLP 三大 Subword 模型详解:BPE、WordPiece、ULM
  • a blog by Tensorflow (WordPiece)

Self-Supervised Learning (ELMO, BERT, GPT, Auto-encoder)相关推荐

  1. 【李宏毅2020 ML/DL】P25 ELMO, BERT, GPT

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  2. Chapter7-3_BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more

    文章目录 1 How to pre-train 2 Predict next token 3 Mask Input 4 seq2seq的pre-train model 5 ELECTRA 6 Sent ...

  3. 李宏毅DLHLP.18.BERT and its family.2/2.ELMo,BERT,GPT,XLNet,MASS,BART,UniLM,ELECTRA

    文章目录 介绍 How to pre-train Context Vector (CoVe) Self-supervised Learning Predict Next Token Predict N ...

  4. 【NLP】从WE、ELMo、GPT到Bert模型—自然语言处理中的预训练技术发展史

    Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么会有这么高的评价呢?是因为它有重大的理论或者模型创新吗?其实并没有,从模型创新角 ...

  5. NLP词向量模型总结:从Elmo到GPT,再到Bert

    词向量历史概述 提到NLP,总离开不了词向量,也就是我们经常说的embedding,因为我们需要把文字符号转化为模型输入可接受的数字向量,进而输入模型,完成训练任务.这就不得不说这个转化的历史了. 起 ...

  6. NLP发展历程从Word2Vec,GloVe,ELMo,Flair,GPT,BERT

    1.2013年,Word2vec模型,Google公司 无监督模型,与语境无关 2.2014年,GloVe模型,Stanford GLoVe:Global Vectors for Word Repre ...

  7. 自然语言处理中的语言模型预训练方法(ELMo、GPT和BERT)

    自然语言处理中的语言模型预训练方法(ELMo.GPT和BERT) 最近,在自然语言处理(NLP)领域中,使用语言模型预训练方法在多项NLP任务上都获得了不错的提升,广泛受到了各界的关注.就此,我将最近 ...

  8. 快速串联 RNN / LSTM / Attention / transformer / BERT / GPT

    参考: 李宏毅2021/2022春机器学习课程 王树森 RNN & Transformer 教程 Transformer 详解 文章目录 0. 背景:序列数据及相关任务 1. 早期序列模型 1 ...

  9. Self -Supervised Learning

    Self -Supervised Learning 个人学习笔记: BART使用了MASS中的所有方法(五种),结果表现更好 实验:将DNA表示中的A.T.C和G随机赋英文单词,将每个类别组成一个文本 ...

最新文章

  1. 赛迪顾问2010-2011年度中国信息安全产品市场研究年度报告
  2. 组合模式_设计模式结构性:组合模式(CompositePattern)
  3. ssl2348-连接格点【图论,最小生成树,并查集】
  4. pm2 start 带参数_3款有海景天窗的国产SUV,最适合带女朋友看星星,首付3万拿下...
  5. 教你如何解决JS/TS里特定String进行拆分然后遍历各个元素
  6. 计算机网络技术基础(作业2)
  7. Unity2021如何设置中文模式
  8. 解决 Office 2007/2010 安装错误:1402
  9. 计算机考专硕还是学硕好呢,2021计算机考研选学硕还是专硕?
  10. 招商银行笔试题之修塔游戏
  11. Andriod8.0去除Launcher谷歌搜索框
  12. 【PTA|Python】浙大版《Python 程序设计》题目集:函数练习
  13. iOS APP 运行时防Crash工具XXShield练就
  14. SRS系列一——实现RTMP直播
  15. JavaScript--轮播图_带计时器
  16. 阿里实习生测试一面(2017.3.29)
  17. 遥感的几何校正、正射校正、辐射校正
  18. [宋史学习] 王全斌功过
  19. pmon下修改分辨率示范
  20. 是否能构成三角形java

热门文章

  1. 转载 db2 数据库常用命令
  2. Pytorch搭建LeNet5网络
  3. 游戏任务系统的设计要素
  4. 2022年北京市专精特新申报时间及条件重点介绍,补贴20-50万
  5. Monit监控软件安装
  6. [附源码]Python计算机毕业设计Django点餐系统
  7. Java、JSP信箱|邮箱系统
  8. 字节的管理模式,比阿里更先进吗?
  9. 如何用java编写一个花名随机抽取器
  10. php的getopt函数,PHP getopt操作