关于自然语言处理:斯坦福NLP课程-第13讲-基于上下文的表征与NLP预训练模型ELMo-transformer

56次阅读

共计 9749 个字符,预计需要花费 25 分钟才能阅读完成。

作者:韩信子 @ShowMeAI,路遥 @ShowMeAI,奇异果 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/36
本文地址:http://www.showmeai.tech/article-detail/250
申明:版权所有,转载请分割平台与作者并注明出处
珍藏 ShowMeAI 查看更多精彩内容



ShowMeAI 为 斯坦福 CS224n《自然语言解决与深度学习 (Natural Language Processing with Deep Learning)》课程的全副课件,做了 中文翻译和正文 ,并制作成了 GIF 动图!视频和课件等材料的获取形式见 文末


引言

授课打算

  • Reflections on word representations / 词向量常识回顾
  • Pre-ELMo and ELMO / ELMo 模型
  • ULMfit and onward / ULMfit 模型
  • Transformer architectures / Transformer 构造
  • BERT / BERT

1. 词向量常识回顾

1.1 词向量表征

  • 当初咱们能够取得一个单词的示意

    • 咱们开始时学过的单词向量

      • Word2vec,GloVe,fastText

1.2 预训练的词向量

  • POS 和 NER 两种表征体系
  • 11 个词窗,100 个隐层神经元,在 12w 词上训练 7 周

  • 咱们能够随机初始化词向量,并依据咱们本人的上游工作训练它们
  • 但在绝大多数状况下,应用预训练词向量是有帮忙的,因为它们自身是自带信息的 (咱们能够在更大体量的预训练语料上训练失去它们)

1.3 未知词的词向量利用倡议

  • 简略且常见的解决方案:
  • 训练时:词汇表 \({\text { words occurring, say,} \geq 5 \text {times}} \cup{<\text{UNK}>}\)

    • 所有 常见的词 (数据集中呈现次数小于 5) 都映射为 \(<\text{UNK}>\),为其训练一个词向量
  • 运行时:应用 \(<\text{UNK}>\) 代替词汇表之外的词 OOV

  • 问题

    • 没有方法辨别不同 UNK words,无论是身份还是意义

解决方案

  1. 应用字符级模型学习词向量

    • 特地是在 QA 中,match on word identity 是很重要的,即便词向量词汇表以外的单词
  2. 尝试这些倡议 (from Dhingra, Liu, Salakhutdinov, Cohen 2017)

    • 如果测试时的 \(<\text{UNK}>\) 单词不在你的词汇表中,然而呈现在你应用的无监督词嵌入中,测试时间接应用这个向量
    • 此外,你能够将其视为新的单词,并为其调配一个随机向量,将它们增加到你的词汇表
    • 帮忙很大或者兴许能帮点忙

  • 你能够试试另一件事

    • 将它们合成为词类 (如未知号码,大写等等),每种都对应一个 \(<\text{UNK-class}>\)

1.4 单词的示意

存在两个大问题

  • 对于一个 word type 总是是用雷同的示意,不思考这个 word token 呈现的上下文

    • 咱们能够进行十分细粒度的词义消歧
  • 咱们对一个词只有一种示意,然而单词有不同的方面,包含语义,句法行为,以及表白 / 含意

1.5 咱们始终都有解决这个问题的方法吗?

  • 在 NLM 中,咱们间接将单词向量 (可能只在语料库上训练) 插入 LSTM 层
  • 那些 LSTM 层被训练来预测下一个单词
  • 但这些语言模型在每一个地位生成特定于上下文的词示意

1.6 #论文解读

  • Semi-supervised sequence tagging with bidirectional language models
  • 想法:想要取得单词在上下文的意思,但规范的 RNN 学习工作只在 task-labeled 的小数据上 (如 NER)
  • 为什么不通过半监督学习的形式在大型无标签数据集上训练 NLM,而不只是词向量

1.7 标签语言模型 (Tag LM)

  • 步骤 3 :在序列标记模型中同时应用单词嵌入和 LM 嵌入
  • 步骤 2 :为输出序列中的每个标记筹备单词嵌入和 LM 嵌入
  • 步骤 1 :预训练词嵌入和语言模型

  • 与上文无关的单词嵌入 + RNN model 失去的 hidden states 作为特色输出

$$
\mathbf{h}_{k, l}=\left[\overrightarrow{\mathbf{h}}_{k, 1} ; \overleftarrow{\mathbf{h}}_{k, 1} ; \mathbf{h}_{k}^{L M}\right]
$$

  • Char CNN / RNN + Token Embedding 作为 bi-LSTM 的输出
  • 失去的 hidden states 与 Pre-trained bi-LM (解冻的) 的 hidden states 连接起来输出到第二层的 bi-LSTM 中

1.8 命名实体辨认 (NER)

  • 一个十分重要的 NLP 子工作:查找 分类 文本中的实体

1.9 CoNLL 2003 命名实体辨认 (en news testb)

1.10 #论文解读

  • 语言模型在 Billion word benchmark 的 8 亿个训练单词上训练

语言模型察看后果

  • 在监督数据集上训练的语言模型并不会受害
  • 双向语言模型仅有助于 forward 过程,晋升约 0.2
  • 具备微小的语言模型设计 (困惑度 30) 比拟小的模型 (困惑度 48) 晋升约 0.3

工作特定的 BiLSTM 察看后果

  • 仅应用 LM 嵌入来预测并不是很好:88.17 F1

    • 远低于仅在标记数据上应用 BiLSTM 标记器

1.11 #论文解读

  • https://arxiv.org/pdf/1708.00…
  • 也有一种思路:应用训练好的序列模型,为其余 NLP 模型提供上下文

  • 思路:机器翻译是为了保留意思,所以这兴许是个好指标?
  • 应用 seq2seq + attention NMT system 中的 Encoder,即 2 层 bi-LSTM,作为上下文提供者
  • 所失去的 CoVe 向量在各种工作上都优于 GloVe 向量
  • 然而,后果并不像其余幻灯片中形容的更简略的 NLM 训练那么好,所以仿佛被放弃了

    • 兴许 NMT 只是比语言建模更难?
    • 或者有一天这个想法会回来?

2.ELMo 模型

2.1 #论文解读 #ELMo

  • Deep contextualized word representations. NAACL 2018.
  • word token vectors or contextual word vectors 的暴发版本
  • 应用长上下文而不是上下文窗口学习 word token 向量 (这里,整个句子可能更长)
  • 学习深度 Bi-NLM,并在预测中应用它的所有层

  • 训练一个双向语言模型 (LM)

  • 指标是成果 OK 但不要太大的语言模型 (LM)

    • 应用 2 个 biLSTM 层
    • (仅) 应用字符 CNN 构建初始单词示意

      • 2048 个 char n-gram filters 和 2 个 highway layers,512 维的 projection
    • 4096 dim hidden/cell LSTM 状态,应用 512 dim 的对下一个输出的投影
    • 应用残差连贯
    • 绑定 token 的输出和输入的参数 (softmax),并将这些参数绑定到正向和反向语言模型 (LM) 之间

  • ELMo 学习 biLM 示意的特定工作组合
  • 这是一个翻新,TagLM 中仅仅应用重叠 LSTM 的顶层,ELMo 认为 BiLSTM 所有层都是有用的

$$
\begin{aligned}
R_{k} &=\left\{\mathbf{x}_{k}^{L M}, \overrightarrow{\mathbf{h}}_{k, j}^{L M}, \overleftarrow{\mathbf{h}}_{k, j}^{L M} \mid j=1, \ldots, L\right\} \\
&=\left\{\mathbf{h}_{k, j}^{L M} \mid j=0, \ldots, L\right\}
\end{aligned}
$$

$$
\mathbf{E} \mathbf{L} \mathbf{M} \mathbf{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}
$$

  • \(\gamma^{task}\) 掂量 ELMo 对工作的总体有用性,是为特定工作学习的全局比例因子
  • \(\mathbf{s}^{task}\) 是 softmax 归一化的混合模型权重,是 BiLSTM 的加权平均值的权重,对不同的工作是不同的,因为不同的工作对不同层的 BiLSTM 的

  • 首先运行 biLM 获取每个单词的示意

  • 而后,让 (无论什么) 最终任务模型应用它们

    • 解冻 ELMo 的权重,用于监督模型
    • 将 ELMo 权重连贯到特定于工作的模型中

      • 细节取决于工作

        • 像 TagLM 一样连贯到中间层是典型的
        • 能够在生产输入时提供更多的示意,例如在问答零碎中

2.2 ELMo 在序列标记器中的应用

2.3 CoNLL 2003 命名实体辨认 (en news testb)

2.4 ELMo 后果:实用于所有工作

2.5 ELMo:层权重

  • 这两个 biLSTM NLM 层有不同的用处 / 含意

    • 低层更适宜低级语法,例如

      • 词性标注(part-of-speech tagging)、句法依赖(syntactic dependency)、NER
    • 高层更适宜更高级别的语义

      • 情绪、语义角色标记、问答零碎、SNLI

  • 这仿佛很乏味,但它是如何通过两层以上的网络来实现的看起来更乏味

3.ULMfit 模型

3.1 ULMfit

  • Howard and Ruder (2018) Universal Language Model Fine-tuning for Text Classification.

    • 转移 NLM 常识的个别思路是一样的
    • 这里利用于文本分类

  • 在大型通用畛域的无监督语料库上应用 biLM 训练

    • 在指标工作数据上调整 LM
    • 对特定工作将分类器进行微调

  • 应用正当大小的 1 GPU 语言模型,并不是真的很大

  • 在 LM 调优中要留神很多

    • 不同的每层学习速度
    • 歪斜三角形学习率 (STLR) 打算

  • 学习分类器时逐渐分层冻结和 STLR

  • 应用 \(\left[h_{T}, \operatorname{maxpool}(\mathbf{h}), \operatorname{meanpool}(\mathbf{h})\right]\) 进行分类

  • 应用大型的预训练语言模型,是一种进步性能的十分无效的办法

3.2 ULMfit 性能

  • 文本分类器错误率

3.3 ULMfit 迁徙学习

  • 迁徙学习

3.4 让咱们扩充规模

补充阐明

  • 如果应用监督数据进行训练文本分类器,须要大量的数据能力学习好

3.5 GPT- 2 语言模型 (cherry-picked) 输入

补充阐明

  • 文本生成的样例

3.6 GPT- 2 语言模型 (cherry-picked) 输入

4.Transformer 构造

4.1 Transformer 介绍

  • 所有这些模型都是以 Transformer 为主构造的,咱们应该学习一下 Transformer 吧

补充阐明

  • Transformer 不仅很弱小,而且容许扩大到更大的尺寸

4.2 Transformers 动机

  • 咱们想要并行化,然而 RNNs 实质上是程序的

  • 只管有 GRUs 和 LSTMs,RNNs 依然须要留神机制来解决长期依赖关系——否则状态之间的 path length 门路长度 会随着序列增长
  • 但如果注意力让咱们进入任何一个状态……兴许咱们能够只用注意力而不须要 RNN?

4.3 Transformer 概览

  • Attention is all you need. 2017. Aswani, Shazeer, Parmar, Uszkoreit, Jones, Gomez, Kaiser, Polosukhin
  • 序列到序列编码解码模型,但它是非循环非串行构造
  • 工作:平行语料库的机器翻译
  • 预测每个翻译单词
  • 最终老本 / 误差函数是 softmax 分类器根底上的规范穿插熵误差

4.4 Transformer 根底

  • 自学 transformer

    • 次要举荐资源

      • http://nlp.seas.harvard.edu/2…
      • The Annotated Transformer by Sasha Rush
    • 一个应用 PyTorch 的 Jupyter 笔记本,解释了所有!

  • 当初:咱们定义 Transformer 网络的根本构建块:第一,新的注意力层

4.5 点乘注意力 Dot-Product Attention

  • 输出:对于一个输入而言的查问 \(q\) 和一组键 - 值对 (\(k-v\))
  • Query,keys,values,and output 都是向量

  • 输入值的加权和
  • 权重的每个值是由查问和相要害的内积计算结果
  • Query 和 keys 有雷同维数 \(d_k\),value 的维数为 \(d_v\)

$$
A(q, K, V)=\sum_{i} \frac{e^{q \cdot k_{i}}}{\sum_{j} e^{q \cdot k_{j}}} v_{i}
$$

4.6 点乘注意力矩阵表示法

  • 当咱们有多个查问 \(q\) 时,咱们将它们叠加在一个矩阵 \(Q\) 中

$$
A(Q, K, V)=\operatorname{softmax}\left(Q K^{T}\right) V
$$

4.7 缩放点乘注意力

  • 问题:\(d_k\) 变大时,\(q^Tk\) 的方差增大 → 一些 softmax 中的值的方差将会变大 → softmax 失去的是峰值 → 因而梯度变小了

  • 解决方案:通过 query / key 向量的长度进行缩放

$$
A(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V
$$

4.8 编码器中的自注意力

  • 输出单词向量是 queries,keys and values
  • 换句话说:这个词向量本人抉择彼此

  • 词向量堆栈 = Q = K = V
  • 咱们会通过解码器明确为什么咱们在定义中将他们离开

4.9 多头注意力

  • 简略 self-attention 的问题

    • 单词只有一种互相交互的形式

  • 解决方案 多头注意力
  • 首先,通过矩阵 \(W\) 将 \(Q\),\(K\),\(V\) 映射到 \(h = 8\) 的许多低维空间
  • 而后,利用注意力,而后连贯输入,通过线性层

$$
\text {MultiHead}(\boldsymbol{Q}, \boldsymbol{K}, \boldsymbol{V})=\text {Concat(head}_{1}, \ldots, \text {head}_{h})
$$

$$
\text {where head}_{i}=\text {Attention}\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right)
$$

4.10 残缺的 transformer 模块

  • 每个 Block 都有两个 子层

    • 多头 attention
    • 两层的前馈神经网络,应用 ReLU

  • 这两个子层都

    • 残差连贯以及层归一化
    • LayerNorm(x+Sublayer(x))
    • 层归一化将输出转化为均值是 \(0\),方差是 \(1\),每一层和每一个训练点 (并且增加了两个参数)

$$
\mu^{l}=\frac{1}{H} \sum_{i=1}^{H} a_{i}^{l} \quad \sigma^{l}=\sqrt{\frac{1}{H} \sum_{i=1}^{H}\left(a_{i}^{l}-\mu^{l}\right)^{2}} \quad h_{i}=f\left(\frac{g_{i}}{\sigma_{i}}\left(a_{i}-\mu_{i}\right)+b_{i}\right)
$$

  • Layer Normalization by Ba, Kiros and Hinton,
  • https://arxiv.org/pdf/1607.06…

4.11 编码器输出

  • 理论的词示意是 byte-pair 编码

  • 还增加了一个 positional encoding 地位编码,雷同的词语在不同的地位有不同的整体表征

$$
\begin{aligned}
\begin{cases}
PE(pos, 2i)=\sin \left(pos / 10000^{2 i / d_{model}}\right) \\
PE(\text {pos}, 2 i+1)=\cos \left(pos / 10000^{2 i / d_{model}}\right)
\end{cases}
\end{aligned}
$$

4.12 残缺编码器 Encoder

  • encoder 中,每个 Block 都是来自前一层的 \(Q\),\(K\),\(V\)
  • Blocks 被反复 6 次 (垂直方向)

  • 在每个阶段,你能够通过多头注意力看到句子中的各个中央,累积信息并将其推送到下一层。在任一方向上的序列逐渐推送信息来计算感兴趣的值
  • 十分长于学习语言构造

4.13 第 5 层的注意力可视化

  • 词语开始以正当的形式关注其余词语
  • 不同的色彩对应不同的注意力头

4.14 注意力可视化

  • Implicit anaphora resolution
  • 对于代词,注意力头学会了如何找到其指代物
  • 在第五层中,从 head 5 和 6 的单词 its 中分离出来的注意力。请留神,这个词的注意力是十分显明的。

4.15 Transformer 解码器

  • decoder 中有两个稍加扭转的子层
  • 对之前生成的输入进行 Masked decoder self-attention

  • Encoder-Decoder Attention,queries 来自于前一个 decoder 层,keys 和 values 来自于 encoder 的输入

  • Blocks 同样反复 6 次

4.16 Transformer 的技巧与倡议

细节(论文 / 之后的讲座)

  • Byte-pair encodings
  • Checkpoint averaging
  • Adam 优化器管制学习速率变动
  • 训练时,在每一层增加残差之前进行 Dropout
  • 标签平滑
  • 带有束搜寻和长度惩办的自回归解码

  • 因为 transformer 正在蔓延,但他们很难优化并且不像 LSTMs 那样开箱即用,他们还不能很好与其余工作的构件独特工作

4.17 Transformer 机器翻译试验后果

4.18 Transformer 解析工作试验后果

5.BERT 模型

5.1 #论文解读# BERT

  • BERT (Bidirectional Encoder Representations from Transformers): Pre-training of Deep Bidirectional Transformers for Language Understanding
  • BERT:用于语言了解的预训练深度双向 transformers

  • 问题:语言模型只应用左上下文或右上下文,但语言了解是双向的

  • 为什么 LMs 是单向的?

    • 起因 1 :方向性对于生成格局良好的概率分布是有必要的 [咱们不在乎这个]
    • 起因 2 :双向编码器中单词能够 看到本人

  • 单向 与 双向 上下文比照

  • 解决方案:覆盖 \(k \%\) 的输出单词,而后预测 masked words
  • 不再是传统的计算生成句子的概率的语言模型,指标是填空

    • 总是应用 \(k = 15 \%\)

  • Masking 太少:训练太低廉
  • Masking 太多:没有足够的上下文

  • GPT 是经典的单项的语言模型
  • ELMo 是双向的,然而两个模型是齐全独立训练的,只是将输入连贯在一起,并没有应用双向的 context
  • BERT 应用 mask 的形式进行整个上下文的预测,应用了双向的上下文信息

5.2 BERT 训练任务:预测下一句

  • 学习句子之间的关系,判断句子 B 是句子 A 的后一个句子还是一个随机的句子。

5.3 BERT 句对编码

  • token embeddings 是 word pieces (paly, ##ingpaly, ##ing)
  • 应用学习好的分段嵌入示意每个句子
  • 地位嵌入与其余 Transformer 体系结构相似
  • 将以上三种 embedding 相加,作为最终输出的示意

5.4 BERT 模型构造与训练

  • Transformer encoder (和之前的一样)
  • 自注意力 ⇒ 没有地位偏差

    • 长距离上下文 机会均等
  • 每层乘法 ⇒ GPU / TPU 上高效

  • 在 Wikipedia + BookCorpus 上训练
  • 训练两种模型尺寸

    • BERT-Base: 12-layer, 768-hidden, 12-head
    • BERT-Large: 24-layer, 1024-hidden, 16-head
  • Trained on 4×4 or 8×8 TPU slice for 4 days

5.5 BERT 模型微调

  • 只学习一个建设在顶层的分类器,微调的每个工作

5.6 BERT GLUE 多任务后果

  • GLUE benchmark 是由自然语言推理工作,还有句子类似度和情感

  • MultiNLI

    • Premise: Hills and mountains are especially sanctified in Jainism.
    • Hypothesis: Jainism hates nature.
    • Label: Contradiction

  • CoLa

    • Sentence: The wagon rumbled down the road. Label: Acceptable
    • Sentence: The car honked down the road. Label: Unacceptable

5.7 CoNLL 2003 命名实体辨认 (en news testb)

5.8 BERT 在 SQuAD 问答上的体现

5.9 BERT 预训练任务成果

5.10 BERT 参数量级对成果影响

  • 从 119M 到 340M 的参数量改善了很多
  • 随参数量晋升还在进步

5.11 举荐浏览

  • The Annotated Transformer 代码解析

    • https://github.com/rsennrich/…
    • https://github.com/opennmt/op…

  • jalammar 的一系列可视化简略教程

    • Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)
    • The Illustrated Transformer

6. 视频教程

能够点击 B 站 查看视频的【双语字幕】版本

7. 参考资料

  • 本讲带学的 在线阅翻页本
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
  • 双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)
  • Stanford 官网 | CS224n: Natural Language Processing with Deep Learning

ShowMeAI系列教程举荐

  • 大厂技术实现 | 举荐与广告计算解决方案
  • 大厂技术实现 | 计算机视觉解决方案
  • 大厂技术实现 | 自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程 | 斯坦福 CS224n 课程 · 课程带学与全套笔记解读

NLP 系列教程文章

  • NLP 教程(1)- 词向量、SVD 合成与 Word2vec
  • NLP 教程(2)- GloVe 及词向量的训练与评估
  • NLP 教程(3)- 神经网络与反向流传
  • NLP 教程(4)- 句法分析与依存解析
  • NLP 教程(5)- 语言模型、RNN、GRU 与 LSTM
  • NLP 教程(6)- 神经机器翻译、seq2seq 与注意力机制
  • NLP 教程(7)- 问答零碎
  • NLP 教程(8)- NLP 中的卷积神经网络
  • NLP 教程(9)- 句法分析与树形递归神经网络

斯坦福 CS224n 课程带学详解

  • 斯坦福 NLP 课程 | 第 1 讲 – NLP 介绍与词向量初步
  • 斯坦福 NLP 课程 | 第 2 讲 – 词向量进阶
  • 斯坦福 NLP 课程 | 第 3 讲 – 神经网络常识回顾
  • 斯坦福 NLP 课程 | 第 4 讲 – 神经网络反向流传与计算图
  • 斯坦福 NLP 课程 | 第 5 讲 – 句法分析与依存解析
  • 斯坦福 NLP 课程 | 第 6 讲 – 循环神经网络与语言模型
  • 斯坦福 NLP 课程 | 第 7 讲 – 梯度隐没问题与 RNN 变种
  • 斯坦福 NLP 课程 | 第 8 讲 – 机器翻译、seq2seq 与注意力机制
  • 斯坦福 NLP 课程 | 第 9 讲 – cs224n 课程大我的项目实用技巧与教训
  • 斯坦福 NLP 课程 | 第 10 讲 – NLP 中的问答零碎
  • 斯坦福 NLP 课程 | 第 11 讲 – NLP 中的卷积神经网络
  • 斯坦福 NLP 课程 | 第 12 讲 – 子词模型
  • 斯坦福 NLP 课程 | 第 13 讲 – 基于上下文的表征与 NLP 预训练模型
  • 斯坦福 NLP 课程 | 第 14 讲 – Transformers 自注意力与生成模型
  • 斯坦福 NLP 课程 | 第 15 讲 – NLP 文本生成工作
  • 斯坦福 NLP 课程 | 第 16 讲 – 指代消解问题与神经网络办法
  • 斯坦福 NLP 课程 | 第 17 讲 – 多任务学习(以问答零碎为例)
  • 斯坦福 NLP 课程 | 第 18 讲 – 句法分析与树形递归神经网络
  • 斯坦福 NLP 课程 | 第 19 讲 – AI 平安偏见与偏心
  • 斯坦福 NLP 课程 | 第 20 讲 – NLP 与深度学习的将来

正文完
 0