- 作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI
- 教程地址:www.showmeai.tech/tutorials/3…
- 本文地址:www.showmeai.tech/article-det…
- 声明:版权一切,转载请联系渠道与作者并注明出处
- 收藏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 不知道词的词向量运用主张
- 简略且常见的处理方案:
-
练习时:词汇表 {wordsoccurring,say,≥5times}∪{<UNK>}\{\text { words occurring, say, } \geq 5 \text { times }\} \cup\{<\text{UNK}>\}
- 将一切稀有的词 (数据会集呈现次数小于 5) 都映射为 <UNK><\text{UNK}>,为其练习一个词向量
- 运行时:运用 <UNK><\text{UNK}> 替代词汇表之外的词 OOV
-
问题:
- 没有办法区分不同 UNK words,无论是身份仍是含义
处理方案
- 运用字符级模型学习词向量
- 特别是在 QA 中,match on word identity 是很重要的,即便词向量词汇表以外的单词
- 测验这些主张 (from Dhingra, Liu, Salakhutdinov, Cohen 2017)
- 假如测验时的 <UNK><\text{UNK}> 单词不在你的词汇表中,可是呈现在你运用的无监督词嵌入中,测验时直接运用这个向量
- 此外,你能够将其视为新的单词,并为其分配一个随机向量,将它们增加到你的词汇表
- 协助很大或许或许能帮点忙
- 你能够试试另一件事
- 将它们分解为词类 (如不知道号码,大写等等),每种都对应一个 <UNK-class><\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 作为特征输入
- 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 #论文解读#
- 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 一切层都是有用的
-
task\gamma^{task} 衡量 ELMo 对使命的总体有用性,是为特定使命学习的大局比例因子
-
stask\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
- 运用 [hT,maxpool(h),meanpool(h)]\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
- 首要引荐资源
- nlp.seas.harvard.edu/2018/04/03/…
- The Annotated Transformer by Sasha Rush
- 一个运用PyTorch的Jupyter笔记本,解说了一切!
- 首要引荐资源
- 现在:咱们界说 Transformer 网络的根本构建块:榜首,新的留意力层
4.5 点乘留意力 Dot-Product Attention
- 输入:关于一个输出而言的查询 qq 和一组键-值对 (k−vk-v)
- Query,keys,values,and output 都是向量
- 输出值的加权和
- 权重的每个值是由查询和相关键的内积核算成果
- Query 和 keys 有相同维数 dkd_k,value 的维数为 dvd_v
4.6 点乘留意力矩阵表明法
- 当咱们有多个查询 qq 时,咱们将它们叠加在一个矩阵 QQ 中
4.7 缩放点乘留意力
- 问题:dkd_k 变大时,qTkq^Tk 的方差增大 → 一些 softmax 中的值的方差将会变大 → softmax 得到的是峰值 → 因此梯度变小了
- 处理方案:经过 query / key 向量的长度进行缩放
4.8 编码器中的自留意力
- 输入单词向量是 queries,keys and values
- 换句话说:这个词向量自己挑选互相
- 词向量堆栈= Q = K = V
- 咱们会经过解码器了解为什么咱们在界说中将他们分开
4.9 多头留意力
- 简略 self-attention 的问题
- 单词只要一种彼此交互的办法
- 处理方案:多头留意力
- 首要,经过矩阵 WW 将 QQ,KK,VV 映射到 h=8h = 8 的许多低维空间
- 然后,运用留意力,然后连接输出,经过线性层
4.10 完好的transformer模块
- 每个 Block 都有两个
子层
- 多头 attention
- 两层的前馈神经网络,运用 ReLU
- 这两个子层都
- 残差连接以及层归一化
- LayerNorm(x+Sublayer(x))
- 层归一化将输入转化为均值是 00,方差是 11,每一层和每一个练习点 (而且增加了两个参数)
- Layer Normalization by Ba, Kiros and Hinton,
- arxiv.org/pdf/1607.06…
4.11 编码器输入
- 实践的词表明是 byte-pair 编码
- 还增加了一个 positional encoding 方位编码,相同的词语在不同的方位有不同的全体表征
4.12 完好编码器Encoder
- encoder 中,每个 Block 都是来自前一层的 QQ,KK,VV
- 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%k \% 的输入单词,然后猜测 masked words
- 不再是传统的核算生成语句的概率的言语模型,方针是填空
- 总是运用 k=15%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 代码解析
- github.com/rsennrich/s…
- github.com/opennmt/ope…
-
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与深度学习的未来