斯坦福-CS224N-NLP-课程详解-ShowMeAI--全-
斯坦福 CS224N NLP 课程详解(ShowMeAI)(全)
斯坦福 NLP 课程 | 第 1 讲 - NLP 介绍与词向量初步

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言
CS224n 是顶级院校斯坦福出品的深度学*与自然语言处理方向专业课程。核心内容覆盖 RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、阅读理解等前沿内容。
ShowMeAI将从本节开始,依托 cs224n 课程为主框架,逐篇为大家梳理 NLP 的核心重点知识原理。

本篇内容覆盖:
第 1 课直接切入语言和词向量,讲解了自然语言处理的基本概念,文本表征的方法和演进,包括 word2vec 等核心方法,词向量的应用等。
- 自然语言与文字
- word2vec 介绍
- word2vec 目标函数与梯度
- 算法优化基础
- word2vec 构建的词向量模式

1. 自然语言与词汇含义
1.1 人类的语言与词汇含义
咱们先来看看人类的高级语言。

人类之所以比类人猿更“聪明”,是因为我们有语言,因此是一个人机网络,其中人类语言作为网络语言。人类语言具有信息功能和社会功能。
据估计,人类语言只有大约 5000 年的短暂历史。语言和写作是让人类变得强大的原因之一。它使知识能够在空间上传送到世界各地,并在时间上传送。
但是,相较于如今的互联网的传播速度而言,人类语言是一种缓慢的语言。然而,只需人类语言形式的几百位信息,就可以构建整个视觉场景。这就是自然语言如此迷人的原因。
1.2 我们如何表达一个词的意思?

我们如何表达一个词的含义呢?有如下一些方式:
- 用一个词、词组等表示的概念。
- 一个人想用语言、符号等来表达的想法。
- 表达在作品、艺术等方面的思想。
理解意义的最普遍的语言方式(linguistic way):语言符号与语言意义(想法、事情)的相互对应
- denotational semantics:语义
s i g n i f i e r ( s y m b o l ) ⇔ s i g n i f i e d ( i d e a o r t h i n g ) signifier(symbol) \Leftrightarrow signified(idea \quad or \quad thing) signifier(symbol)⇔signified(ideaorthing)
1.3 如何在计算机里表达词的意义
要使用计算机处理文本词汇,一种处理方式是WordNet:即构建一个包含同义词集和上位词(“is a”关系)的列表的辞典。
英文当中确实有这样一个 wordnet,我们在安装完 NLTK 工具库和下载数据包后可以使用,对应的 python 代码如下:
from nltk.corpus import wordnet as wn
poses = { 'n':'noun', 'v':'verb', 's':'adj (s)', 'a':'adj', 'r':'adv'}
for synset in wn.synsets("good"):
print("{}: {}".format(poses[synset.pos()], ", ".join([l.name() for l in synset.lemmas()])))
from nltk.corpus import wordnet as wn
panda = wn.synset("panda.n.01")
hyper = lambda s: s.hypernyms()
list(panda.closure(hyper))
结果如下图所示:

1.4 WordNet 的问题

WordNet 大家可以视作 1 个专家经验总结出来的词汇表,但它存在一些问题:
① 忽略了词汇的细微差别
- 例如“proficient”被列为“good”的同义词。这只在某些上下文中是正确的。
② 缺少单词的新含义
- 难以持续更新!
- 例如:wicked、badass、nifty、wizard、genius、ninja、bombast
③ 因为是小部分专家构建的,有一定的主观性
④ 构建与调整都需要很多的人力成本
⑤ 无法定量计算出单词相似度
1.5 文本(词汇)的离散表征

在传统的自然语言处理中,我们会对文本做离散表征,把词语看作离散的符号:例如 hotel、conference、motel 等。
一种文本的离散表示形式是把单词表征为独热向量(one-hot vectors)的形式
- 独热向量:只有一个 1,其余均为 0 的稀疏向量
在独热向量表示中,向量维度=词汇量(如 500,000),以下为一些独热向量编码过后的单词向量示例:
m o t e l = [ 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ] motel = [0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 \ 0] motel=[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
h o t e l = [ 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ] hotel = [0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0] hotel=[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
1.6 离散表征的问题

在上述的独热向量离散表征里,所有词向量是正交的,这是一个很大的问题。对于独热向量,没有关于相似性概念,并且向量维度过大。
对于上述问题有一些解决思路:
- ① 使用类似 WordNet 的工具中的列表,获得相似度,但会因不够完整而失败
- ② 通过大量数据学*词向量本身相似性,获得更精确的稠密词向量编码
1.7 基于上下文的词汇表征
*年来在深度学*中比较有效的方式是基于上下文的词汇表征。它的核心想法是:一个单词的意思是由经常出现在它附*的单词给出的 “You shall know a word by the company it keeps” (J. R. Firth 1957: 11)。

这是现代统计 NLP 最成功的理念之一,总体思路有点物以类聚,人以群分的感觉。
- 当一个单词 w w w 出现在文本中时,它的上下文是出现在其附*的一组单词(在一个固定大小的窗口中)
- 基于海量数据,使用 w w w 的许多上下文来构建 w w w 的表示
如图所示,banking 的含义可以根据上下文的内容表征。
2.Word2vec 介绍
2.1 词向量表示
下面我们要介绍词向量的构建方法与思想,我们希望为每个单词构建一个稠密表示的向量,使其与出现在相似上下文中的单词向量相似。

- 词向量(word vectors)有时被称为词嵌入(word embeddings)或词表示(word representations)。
- 稠密词向量是分布式表示(distributed representation)。
2.2 Word2vec 原理介绍
Word2vec (Mikolov et al. 2013)是一个学*词向量表征的框架。

核心思路如下:
- 基于海量文本语料库构建
- 词汇表中的每个单词都由一个向量表示(学*完成后会固定)
- 对应语料库文本中的每个位置 t t t,有一个中心词 c c c 和一些上下文(“外部”)单词 o o o
- 使用 c c c 和 o o o 的词向量来计算概率 P ( o ∣ c ) P(o|c) P(o∣c),即给定中心词推断上下文词汇的概率(反之亦然)
- 不断调整词向量来最大化这个概率
下图为窗口大小 j = 2 j=2 j=2 时的 P ( w t + j ∣ w t ) P\left(w_{t+j} | w_{t}\right) P(wt+j∣wt),它的中心词为 i n t o into into

下图为窗口大小 j = 2 j=2 j=2 时的 P ( w t + j ∣ w t ) P\left(w_{t+j} | w_{t}\right) P(wt+j∣wt),它的中心词为 b a n k i n g banking banking

3.Word2vec 目标函数
3.1 Word2vec 目标函数
我们来用数学表示的方式,对 word2vec 方法做一个定义和讲解。
3.1.1 似然函数
对于每个位置 t = 1 , ⋯ , T t=1, \cdots, T t=1,⋯,T,在大小为 m m m 的固定窗口内预测上下文单词,给定中心词 w j w_j wj,似然函数可以表示为:
L i k e l i h o o o d = L ( θ ) = ∏ t = 1 T ∏ − m ≤ j ≤ m j ≠ 0 P ( w t + j ∣ w t ; θ ) Likelihoood = L(\theta) = \prod^{T}{t=1} \prod P(w_{t+j} | w_{t} ; \theta) Likelihoood=L(θ)=t=1∏Tj=0−m≤j≤m∏P(wt+j∣wt;θ)
上述公式中, θ \theta θ为模型包含的所有待优化权重变量
3.1.2 目标函数
对应上述似然函数的目标函数 J ( θ ) J(\theta) J(θ)可以取作(平均)负对数似然:
J ( θ ) = − 1 T log L ( θ ) = − 1 T ∑ t = 1 T ∑ − m ≤ j ≤ m j ≠ 0 log P ( w t + j ∣ w t ; θ ) J(\theta)=-\frac{1}{T} \log L(\theta)=-\frac{1}{T} \sum_{t=1}^{T} \sum_{-m \leq j \leq m \atop j \neq 0} \log P\left(w_{t+j} | w_{t} ; \theta\right) J(θ)=−T1logL(θ)=−T1t=1∑Tj=0−m≤j≤m∑logP(wt+j∣wt;θ)

注意:
- 目标函数 J ( θ ) J(\theta) J(θ)有时也被称为“代价函数”或“损失函数”
- 最小化目标函数 ⇔ \Leftrightarrow ⇔最大化似然函数(预测概率/精度),两者等价
补充解读:
- 上述目标函数中的 log 形式是方便将连乘转化为求和,负号是希望将极大化似然率转化为极小化损失函数的等价问题
- 在连乘之前使用 log 转化为求和非常有效,特别是做优化时
log ∏ i x i = ∑ i log x i \log \prod_i x_i = \sum_i \log x_i logi∏xi=i∑logxi
得到目标函数后,我们希望最小化目标函数,那我们如何计算 P ( w t + j ∣ w t ; θ ) P(w_{t+j} | w_{t} ; \theta) P(wt+j∣wt;θ)?

对于每个词 w w w 都会用两个向量:
- 当 w w w 是中心词时,我们标记词向量为 v w v_w vw
- 当 w w w 是上下文词时,我们标记词向量为 u w u_w uw
则对于一个中心词 c c c 和一个上下文词 o o o,我们有如下概率计算方式:
P ( o ∣ c ) = exp ( u o T v c ) ∑ w ∈ V exp ( u w T v c ) P(o | c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} P(o∣c)=∑w∈Vexp(uwTvc)exp(uoTvc)

对于上述公式,ShowMeAI做一点补充解读:
- 公式中,向量 u o u_o uo和向量 v c v_c vc进行点乘
- 向量之间越相似,点乘结果越大,从而归一化后得到的概率值也越大
- 模型的训练正是为了使得具有相似上下文的单词,具有相似的向量
- 点积是计算相似性的一种简单方法,在注意力机制中常使用点积计算 Score,参见 ShowMeAI 文章[C5W3] 16.Seq2Seq 序列模型和注意力机制
3.2 从向量视角回顾 Word2vec
下图为计算 P ( w t + j ∣ w t ) P(w_{t+j} |w_{t}) P(wt+j∣wt)的示例,这里把 P ( p r o b l e m s ∣ i n t o ; u p r o b l e m s , v i n t o , θ ) P(problems|into; u_{problems},v_{into},\theta) P(problems∣into;uproblems,vinto,θ)简写为 P ( u p r o b l e m s ∣ v i n t o ) P(u_{problems} | v_{into}) P(uproblems∣vinto),例子中的上下文窗口大小 2,即“左右 2 个单词+一个中心词”。

4.Word2vec prediction function
4.1 Word2vec 预测函数
回到上面的概率计算,我们来观察一下
P ( o ∣ c ) = exp ( u o T v c ) ∑ w ∈ V exp ( u w T v c ) P(o | c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} P(o∣c)=∑w∈Vexp(uwTvc)exp(uoTvc)
- 取幂使任何数都为正
- 点积比较 o o o 和 c c c 的相似性 u T v = u . v = ∑ i = 1 n u i v i u^{T} v=u . v=\sum_{i=1}^{n} u_{i} v_{i} uTv=u.v=∑i=1nuivi,点积越大则概率越大
- 分母:对整个词汇表进行标准化,从而给出概率分布

这里有一个 softmax 的概率,softmax function R n ∈ R n \mathbb{R}^{n} \in \mathbb{R}^{n} Rn∈Rn 示例:
将任意值 x i x_i xi映射到概率分布 p i p_i pi
softmax ( x i ) = exp ( x i ) ∑ j = 1 n exp ( x j ) = p i \operatorname{softmax}\left(x_{i}\right)=\frac{\exp \left(x_{i}\right)}{\sum_{j=1}^{n} \exp \left(x_{j}\right)}=p_{i} softmax(xi)=∑j=1nexp(xj)exp(xi)=pi
其中对于名称中 soft 和 max 的解释如下(softmax 在深度学*中经常使用到):
- max:因为放大了最大的概率
- soft:因为仍然为较小的 x i x_i xi赋予了一定概率
4.2 word2vec 中的梯度下降训练细节推导
下面是对于 word2vec 的参数更新迭代,应用梯度下降法的一些推导细节,ShowMeAI写在这里做一点补充。
首先我们随机初始化 u w ∈ R d u_{w}\in\mathbb{R}^d uw∈Rd 和 v w ∈ R d v_{w}\in\mathbb{R}^d vw∈Rd,而后使用梯度下降法进行更新
∂ ∂ v c log P ( o ∣ c ) = ∂ ∂ v c log exp ( u o T v c ) ∑ w ∈ V exp ( u w T v c ) = ∂ ∂ v c ( log exp ( u o T v c ) − log ∑ w ∈ V exp ( u w T v c ) ) = ∂ ∂ v c ( u o T v c − log ∑ w ∈ V exp ( u w T v c ) ) = u o − ∑ w ∈ V exp ( u w T v c ) u w ∑ w ∈ V exp ( u w T v c ) \begin{aligned} \frac{\partial}{\partial v_c}\log P(o|c) &=\frac{\partial}{\partial v_c}\log \frac{\exp(u_o^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}\ &=\frac{\partial}{\partial v_c}\left(\log \exp(u_o^Tv_c)-\log{\sum_{w\in V}\exp(u_w^Tv_c)}\right)\ &=\frac{\partial}{\partial v_c}\left(u_o^Tv_c-\log{\sum_{w\in V}\exp(u_w^Tv_c)}\right)\ &=u_o-\frac{\sum_{w\in V}\exp(u_w^Tv_c)u_w}{\sum_{w\in V}\exp(u_w^Tv_c)} \end{aligned} ∂vc∂logP(o∣c)=∂vc∂log∑w∈Vexp(uwTvc)exp(uoTvc)=∂vc∂(logexp(uoTvc)−logw∈V∑exp(uwTvc))=∂vc∂(uoTvc−logw∈V∑exp(uwTvc))=uo−∑w∈Vexp(uwTvc)∑w∈Vexp(uwTvc)uw
偏导数可以移进求和中,对应上方公式的最后两行的推导
∂ ∂ x ∑ i y i = ∑ i ∂ ∂ x y i \frac{\partial}{\partial x}\sum_iy_i = \sum_i\frac{\partial}{\partial x}y_i ∂x∂∑iyi=∑i∂x∂yi
我们可以对上述结果重新排列如下,第一项是真正的上下文单词,第二项是预测的上下文单词。使用梯度下降法,模型的预测上下文将逐步接*真正的上下文。
∂ ∂ v c log P ( o ∣ c ) = u o − ∑ w ∈ V exp ( u w T v c ) u w ∑ w ∈ V exp ( u w T v c ) = u o − ∑ w ∈ V exp ( u w T v c ) ∑ w ∈ V exp ( u w T v c ) u w = u o − ∑ w ∈ V P ( w ∣ c ) u w \begin{aligned} \frac{\partial}{\partial v_c}\log P(o|c) &=u_o-\frac{\sum_{w\in V}\exp(u_w^Tv_c)u_w}{\sum_{w\in V}\exp(u_w^Tv_c)}\ &=u_o-\sum_{w\in V}\frac{\exp(u_w^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}u_w\ &=u_o-\sum_{w\in V}P(w|c)u_w \end{aligned} ∂vc∂logP(o∣c)=uo−∑w∈Vexp(uwTvc)∑w∈Vexp(uwTvc)uw=uo−w∈V∑∑w∈Vexp(uwTvc)exp(uwTvc)uw=uo−w∈V∑P(w∣c)uw
再对 u o u_o uo进行偏微分计算,注意这里的 u o u_o uo是 u w = o u_{w=o} uw=o的简写,故可知
∂ ∂ u o ∑ w ∈ V u w T v c = ∂ ∂ u o u o T v c = ∂ u o ∂ u o v c + ∂ v c ∂ u o u o = v c \frac{\partial}{\partial u_o}\sum_{w \in V } u_w^T v_c = \frac{\partial}{\partial u_o} u_o^T v_c = \frac{\partial u_o}{\partial u_o}v_c + \frac{\partial v_c}{\partial u_o}u_o= v_c ∂uo∂w∈V∑uwTvc=∂uo∂uoTvc=∂uo∂uovc+∂uo∂vcuo=vc
∂ ∂ u o log P ( o ∣ c ) = ∂ ∂ u o log exp ( u o T v c ) ∑ w ∈ V exp ( u w T v c ) = ∂ ∂ u o ( log exp ( u o T v c ) − log ∑ w ∈ V exp ( u w T v c ) ) = ∂ ∂ u o ( u o T v c − log ∑ w ∈ V exp ( u w T v c ) ) = v c − ∑ ∂ ∂ u o exp ( u w T v c ) ∑ w ∈ V exp ( u w T v c ) = v c − exp ( u o T v c ) v c ∑ w ∈ V exp ( u w T v c ) = v c − exp ( u o T v c ) ∑ w ∈ V exp ( u w T v c ) v c = v c − P ( o ∣ c ) v c = ( 1 − P ( o ∣ c ) ) v c \begin{aligned} \frac{\partial}{\partial u_o}\log P(o|c) &=\frac{\partial}{\partial u_o}\log \frac{\exp(u_o^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}\ &=\frac{\partial}{\partial u_o}\left(\log \exp(u_o^Tv_c)-\log{\sum_{w\in V}\exp(u_w^Tv_c)}\right)\ &=\frac{\partial}{\partial u_o}\left(u_o^Tv_c-\log{\sum_{w\in V}\exp(u_w^Tv_c)}\right)\ &=v_c-\frac{\sum\frac{\partial}{\partial u_o}\exp(u_w^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}\ &=v_c - \frac{\exp(u_o^Tv_c)v_c}{\sum_{w\in V}\exp(u_w^Tv_c)}\ &=v_c - \frac{\exp(u_o^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}v_c\ &=v_c - P(o|c)v_c\ &=(1-P(o|c))v_c \end{aligned} ∂uo∂logP(o∣c)=∂uo∂log∑w∈Vexp(uwTvc)exp(uoTvc)=∂uo∂(logexp(uoTvc)−logw∈V∑exp(uwTvc))=∂uo∂(uoTvc−logw∈V∑exp(uwTvc))=vc−∑w∈Vexp(uwTvc)∑∂uo∂exp(uwTvc)=vc−∑w∈Vexp(uwTvc)exp(uoTvc)vc=vc−∑w∈Vexp(uwTvc)exp(uoTvc)vc=vc−P(o∣c)vc=(1−P(o∣c))vc
可以理解,当 P ( o ∣ c ) → 1 P(o|c) \to 1 P(o∣c)→1,即通过中心词 c c c 我们可以正确预测上下文词 o o o,此时我们不需要调整 u o u_o uo,反之,则相应调整 u o u_o uo。
关于此处的微积分知识,可以查阅ShowMeAI的教程图解 AI 数学基础文章图解 AI 数学基础 | 微积分与最优化。

- 训练模型的过程,实际上是我们在调整参数最小化损失函数。
- 如下是一个包含 2 个参数的凸函数,我们绘制了目标函数的等高线。
4.3 训练模型:计算所有向量梯度

θ \theta θ代表所有模型参数,写在一个长的参数向量里。
在我们的场景汇总是 d d d 维向量空间的 V V V 个词汇。
5.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=1
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
6.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 2 讲 - 词向量进阶

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言
CS224n 是顶级院校斯坦福出品的深度学*与自然语言处理方向专业课程。核心内容覆盖 RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、阅读理解等前沿内容。
本篇是ShowMeAI对第 2 课的内容梳理,内容覆盖词嵌入/词向量,word vectors 和 word senses。

本篇内容覆盖
- word2vec 与词向量回顾
- 算法优化基础
- 计数与共现矩阵
- GloVe 模型
- 词向量评估
- word senses

1.word2vec 与词向量回顾
1.1 复*:word2vec 的主要思想

我们来回顾一下ShowMeAI上一篇 1.NLP 介绍与词向量初步 提到的 word2vec 模型核心知识
- 模型会遍历整个语料库中的每个单词
- 使用中心单词向量预测周围的单词(Skip-Gram)
P ( o ∣ c ) = exp ( u o T v c ) ∑ w ∈ V exp ( u w T v c ) P(o | c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} P(o∣c)=∑w∈Vexp(uwTvc)exp(uoTvc)
- 更新向量(参数)以便更好地预测上下文
1.2 Word2vec 参数和计算

我们对 word2vec 的参数和训练细节等做一个补充讲解:
- U U U 、 V V V 矩阵,每行代表一个单词的词向量,点乘后得到的分数通过 softmax 映射为概率分布。得到的概率分布是对于该中心词而言的上下文中单词的概率分布,该分布与上下文所在的具体位置无关,所以在每个位置的预测都是一样的。
- the、and、that、of 等停用词,是每个单词点乘后得到的较大概率的单词,去掉这一部分可以使词向量效果更好。
1.3 word2vec 训练得到的词向量分布体现语义相似度
经过 word2vec 最大化目标函数后,通过可视化可以发现,相似的词汇在词向量空间里是比较接*的。

1.4 优化算法:梯度下降
ShowMeAI在上一篇 1.NLP 介绍与词向量初步 讲解了需要最小化的代价函数 J ( θ ) J(\theta) J(θ) ,我们使用梯度下降算法最小化 J ( θ ) J(\theta) J(θ)

遵循梯度下降的一般思路,我们计算 J ( θ ) J(\theta) J(θ) 对于参数 θ \theta θ 的梯度,然后朝着负梯度的方向迈进一小步,并不断重复这个过程,如图所示。
注意:我们实际的目标函数可能不是下图这样的凸函数
2.算法优化基础
2.1 梯度下降算法

- 更新参数的公式(矩阵化写法)
θ n e w = θ o l d − α ∇ θ J ( θ ) \theta{new}=\theta-\alpha \nabla_{\theta} J(\theta) θnew=θold−α∇θJ(θ)
-
α \alpha α :步长,也叫学*率
-
更新参数的公式(单个参数更新)
θ j n e w = θ j o l d − α ∂ ∂ θ j o l d J ( θ ) \theta_{j}{new}=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}^{old}} J(\theta) θjnew=θjold−α∂θjold∂J(θ)
2.2 词向量随机梯度下降法
梯度下降会一次性使用所有数据样本进行参数更新,对应到我们当前的词向量建模问题,就是 J ( θ ) J(\theta) J(θ) 的计算需要基于语料库所有的样本(窗口),数据规模非常大
- 计算非常耗资源
- 计算时间太长

处理方式是把优化算法调整为「随机梯度下降算法」,即在单个样本里计算和更新参数,并遍历所有样本。
但基于单个样本更新会表现为参数震荡很厉害,收敛过程并不平稳,所以很多时候我们会改为使用mini-batch gradient descent(具体可以参考ShowMeAI的深度学*教程中文章神经网络优化算法)
- Mini-batch 具有以下优点:通过 batch 平均,减少梯度估计的噪音;在 GPU 上并行化运算,加快运算速度。
2.3 词向量建模中的随机梯度下降
-
应用随机梯度下降,在每个窗口计算和更新参数,遍历所有样本
-
在每个窗口内,我们最多只有 2 m + 1 2m+1 2m+1 个词,因此 ∇ θ J t ( θ ) \nabla_{\theta} J_t(\theta) ∇θJt(θ) 是非常稀疏的

上面提到的稀疏性问题,一种解决方式是我们只更新实际出现的向量
-
需要稀疏矩阵更新操作来只更新矩阵 U U U 和 V V V 中的特定行
-
需要保留单词向量的哈希/散列
如果有数百万个单词向量,并且进行分布式计算,我们无需再传输巨大的更新信息(数据传输有成本)

2.4 Word2vec 的更多细节

word2vec 有两个模型变体:
- 1.Skip-grams (SG):输入中心词并预测上下文中的单词
- 2.Continuous Bag of Words (CBOW):输入上下文中的单词并预测中心词
之前一直使用 naive 的 softmax(简单但代价很高的训练方法),其实可以使用负采样方法加快训练速率
2.5 负例采样的 skip-gram 模型(作业 2)
这个部分大家也可以参考ShowMeAI的深度学*教程中文章自然语言处理与词嵌入

softmax 中用于归一化的分母的计算代价太高
P ( o ∣ c ) = exp ( u o T v c ) ∑ w ∈ V exp ( u w T v c ) P(o | c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)} P(o∣c)=∑w∈Vexp(uwTvc)exp(uoTvc)
- 我们将在作业 2 中实现使用 negative sampling/负例采样方法的 skip-gram 模型。
- 使用一个 true pair (中心词及其上下文窗口中的词)与几个 noise pair (中心词与随机词搭配) 形成的样本,训练二元逻辑回归。

原文中的(最大化)目标函数是 J ( θ ) = 1 T ∑ t = 1 T J t ( θ ) J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J_{t}(\theta) J(θ)=T1∑t=1TJt(θ)
J t ( θ ) = log σ ( u o T v c ) + ∑ i = 1 k E j ∼ P ( w ) [ log σ ( − u j T v c ) ] J_{t}(\theta)=\log \sigma\left(u_{o}^{T} v_{c}\right)+\sum_{i=1}^{k} \mathbb{E}{j \sim P(w)}\left[\log \sigma\left(-u^{T} v_{c}\right)\right] Jt(θ)=logσ(uoTvc)+i=1∑kEj∼P(w)[logσ(−ujTvc)]
- 左侧为 sigmoid 函数(大家会在后续的内容里经常见到它)
- 我们要最大化 2 个词共现的概率

本课以及作业中的目标函数是
J n e g − s a m p l e ( o , v c , U ) = − log ( σ ( u o ⊤ v c ) ) − ∑ k = 1 K log ( σ ( − u k ⊤ v c ) ) J_{neg-sample}\left(\boldsymbol{o}, \boldsymbol{v}{c}, \boldsymbol{U}\right)=-\log \left(\sigma\left(\boldsymbol{u}^{\top} \boldsymbol{v}{c}\right)\right)-\sum^{K} \log \left(\sigma\left(-\boldsymbol{u}{k}^{\top} \boldsymbol{v}\right)\right) Jneg−sample(o,vc,U)=−log(σ(uo⊤vc))−k=1∑Klog(σ(−uk⊤vc))
- 我们取 k k k 个负例采样
- 最大化窗口中包围「中心词」的这些词语出现的概率,而最小化其他没有出现的随机词的概率
P ( w ) = U ( w ) 3 / 4 / Z P(w)=U(w)^{3 / 4} / Z P(w)=U(w)3/4/Z
- 我们用左侧的公式进行抽样,其中 U ( w ) U(w) U(w) 是 unigram 分布
- 通过 3/4 次方,相对减少常见单词的频率,增大稀有词的概率
- Z Z Z 用于生成概率分布
3.计数与共现矩阵
3.1 共现矩阵与词向量构建
在自然语言处理里另外一个构建词向量的思路是借助于共现矩阵(我们设其为 X X X ),我们有两种方式,可以基于窗口(window)或者全文档(full document)统计:

- Window :与 word2vec 类似,在每个单词周围都使用 Window,包括语法(POS)和语义信息
- Word-document 共现矩阵的基本假设是在同一篇文章中出现的单词更有可能相互关联。假设单词 i i i 出现在文章 j j j 中,则矩阵元素 X i j X_{ij} Xij 加一,当我们处理完数据库中的所有文章后,就得到了矩阵 X X X ,其大小为 ∣ V ∣ × M |V|\times M ∣V∣×M ,其中 ∣ V ∣ |V| ∣V∣ 为词汇量,而 M M M 为文章数。这一构建单词文章 co-occurrence matrix 的方法也是经典的 Latent Semantic Analysis 所采用的【语义分析】。
3.2 基于窗口的共现矩阵示例
利用某个定长窗口(通常取 5-10)中单词与单词同时出现的次数,来产生基于窗口的共现矩阵。

下面以窗口长度为 1 来举例,假设我们的数据包含以下几个句子:
- I like deep learning.
- I like NLP.
- I enjoy flying.
我们可以得到如下的词词共现矩阵(word-word co-occurrence matrix)

3.3 基于直接的共现矩阵构建词向量的问题
直接基于共现矩阵构建词向量,会有一些明显的问题,如下:

- 使用共现次数衡量单词的相似性,但是会随着词汇量的增加而增大矩阵的大小。
- 需要很多空间来存储这一高维矩阵。
- 后续的分类模型也会由于矩阵的稀疏性而存在稀疏性问题,使得效果不佳。
3.4 解决方案:低维向量

针对上述问题,我们的一个处理方式是降维,获得低维稠密向量。
- 通常降维到(25-1000)维,和 word2vec 类似
如何降维呢?
3.5 方法 1:对 X 进行降维(作业 1)

可以使用 SVD 方法将共现矩阵 X X X 分解为 U Σ V T U \Sigma V^T UΣVT ,其中:
- Σ \Sigma Σ 是对角线矩阵,对角线上的值是矩阵的奇异值
- U U U , V V V 是对应于行和列的正交基
为了减少尺度同时尽量保存有效信息,可保留对角矩阵的最大的 k k k 个值,并将矩阵 U U U , V V V 的相应的行列保留。
- 这是经典的线性代数算法,对于大型矩阵而言,计算代价昂贵。
3.6 词向量 SVD 分解的 python 代码示例
python 矩阵分解示例如下

降维词向量可视化

3.7 #论文讲解#
Hacks to X (several used in Rohde et al. 2005)

按比例调整 counts 会很有效
- 对高频词进行缩放(语法有太多的影响)
- 使用 log 进行缩放
- m i n ( X , t ) , t ≈ 100 min(X, t), t \approx 100 min(X,t),t≈100
- 直接全部忽视
- 在基于 window 的计数中,提高更加接*的单词的计数
- 使用 Person 相关系数
3.8 词向量分布探究

如果对词向量进行空间分布,会发现同一个词汇的附*分布着它不同时态语态的单词:
- d r i v e → d r i v e r drive \to driver drive→driver
- s w i m → s w i m m e r swim \to swimmer swim→swimmer
- t e a c h → t e a c h e r teach \to teacher teach→teacher
在向量中出现的有趣的句法模式:语义向量基本上是线性组件,虽然有一些摆动,但是基本是存在动词和动词实施者的方向。
3.9 基于计数 VS. 基于预估

我们来总结一下基于共现矩阵计数和基于预估模型两种得到词向量的方式
基于计数:使用整个矩阵的全局统计数据来直接估计
- 优点:训练快速;统计数据高效利用
- 缺点:主要用于捕捉单词相似性;对大量数据给予比例失调的重视
基于预估模型:定义概率分布并试图预测单词
- 优点:提高其他任务的性能;能捕获除了单词相似性以外的复杂的模式
- 缺点:随语料库增大会增大规模;统计数据的低效使用(采样是对统计数据的低效使用)
4.GloVe 模型
4.1 #论文讲解#
1)Encoding meaning in vector differences
将两个流派的想法结合起来,在神经网络中使用计数矩阵。关于 Glove 的理论分析需要阅读原文,也可以阅读 NLP 教程(2) | GloVe 及词向量的训练与评估。

GloVe 模型关键思想:共现概率的比值可以对 meaning component 进行编码。将两个流派的想法结合起来,在神经网络中使用计数矩阵。
补充讲解:
重点不是单一的概率大小,重点是他们之间的比值,其中蕴含着重要的信息成分。
-
例如我们想区分热力学上两种不同状态 ice 冰与蒸汽 steam,它们之间的关系可通过与不同的单词 x x x 的共现概率的比值来描述
-
例如对于 solid 固态,虽然 P ( s o l i d ∣ i c e ) P(solid \mid ice) P(solid∣ice) 与 P ( s o l i d ∣ s t e a m ) P(solid \mid steam) P(solid∣steam) 本身很小,不能透露有效的信息,但是它们的比值 P ( s o l i d ∣ i c e ) P ( s o l i d ∣ s t e a m ) \frac{P(solid \mid ice)}{P(solid \mid steam)} P(solid∣steam)P(solid∣ice) 却较大,因为 solid 更常用来描述 ice 的状态而不是 steam 的状态,所以在 ice 的上下文中出现几率较大
-
对于 gas 则恰恰相反,而对于 water 这种描述 ice 与 steam 均可或者 fashion 这种与两者都没什么联系的单词,则比值接*于 1 1 1 。所以相较于单纯的共现概率,实际上共现概率的相对比值更有意义

问题:
我们如何在词向量空间中以线性含义成分的形式捕获共现概率的比值?
解决方案:
- log-bilinear 模型:
w i ⋅ w j = log P ( i ∣ j ) w_{i} \cdot w_{j}=\log P(i \mid j) wi⋅wj=logP(i∣j)
- 向量差异:
w x ⋅ ( w a − w b ) = log P ( x ∣ a ) P ( x ∣ b ) w_{x} \cdot (w_a-w_b)=\log \frac{P(x \mid a)}{P(x \mid b)} wx⋅(wa−wb)=logP(x∣b)P(x∣a)
2)Combining the best of both worlds GloVe [Pennington et al., EMNLP 2014]
w i ⋅ w j = log P ( i ∣ j ) w_{i} \cdot w_{j}=\log P(i \mid j) wi⋅wj=logP(i∣j)
J = ∑ i , j = 1 V f ( X i j ) ( w i T w ~ j + b i + b ~ j − log X i j ) 2 J=\sum_{i, j=1}^{V} f(X_{ij})(w_{i}^{T} \tilde{w}{j}+b+\tilde{b}{j}-\log X)^{2} J=i,j=1∑Vf(Xij)(wiTwj+bi+bj−logXij)2
![#论文讲解# Combining the best of both worlds GloVe [Pennington et al., EMNLP 2014]](../Images/93a56a1f6c027d5a7f978f941e8b714f.png)
补充讲解
- 如果使向量点积等于共现概率的对数,那么向量差异变成了共现概率的比率
- 使用平方误差促使点积尽可能得接*共现概率的对数
- 使用 f ( x ) f(x) f(x) 对常见单词进行限制
优点
- 训练快速
- 可以扩展到大型语料库
- 即使是小语料库和小向量,性能也很好
4.2 GloVe 的一些结果展示

上图是一个 GloVe 词向量示例,我们通过 GloVe 得到的词向量,我们可以找到 frog(青蛙)最接*的一些词汇,可以看出它们本身是很类似的动物。
5.词向量评估
5.1 如何评估词向量?

我们如何评估词向量呢,有内在和外在两种方式:
-
内在评估方式
- 对特定/中间子任务进行评估
- 计算速度快
- 有助于理解这个系统
- 不清楚是否真的有用,除非与实际任务建立了相关性
-
外部任务方式
- 对真实任务(如下游 NLP 任务)的评估
- 计算精确度可能需要很长时间
- 不清楚子系统问题所在,是交互还是其他子系统问题
- 如果用另一个子系统替换一个子系统可以提高精确度
5.2 内在词向量评估

一种内在词向量评估方式是「词向量类比」:对于具备某种关系的词对 a,b,在给定词 c 的情况下,找到具备类似关系的词 d
a : b : : c : ? → d = arg max i ( x b − x a + x c ) T x i ∥ x b − x a + x c ∥ a: b::c:? \to d=\arg \max _{i} \frac{(x_b-x_a+x_c)^{T} x_i}{\left | x_b-x_a+x_c \right | } a🅱️:c:?→d=argimax∥xb−xa+xc∥(xb−xa+xc)Txi
- 通过加法后的余弦距离是否能很好地捕捉到直观的语义和句法类比问题来评估单词向量
- 从搜索中丢弃输入的单词
- 问题:如果有信息但不是线性的怎么办?
5.3 Glove 可视化效果

上述为 GloVe 得到的词向量空间分布,我们对词向量进行减法计算,可以发现类比的词对有相似的距离。
brother – sister, man – woman, king - queen
下图为“公司与 CEO 词汇”分布

下图为“词汇比较级与最高级”分布

5.4 内在词向量评估的细节


5.5 类比任务评估与超参数

下图是对于类比评估和超参数的一些实验和经验
- 300 是一个很好的词向量维度
- 不对称上下文(只使用单侧的单词)不是很好,不过这点在下游任务中不一定完全正确
- window size 设为 8 对 Glove 向量来说比较好

补充分析
- window size 设为 2 的时候实际上有效的,并且对于句法分析是更好的,因为句法效果非常局部
5.6 #论文讲解#
1)On the Dimensionality of Word Embedding

利用矩阵摄动理论,揭示了词嵌入维数选择的基本的偏差与方法的权衡
补充说明:当持续增大词向量维度的时候,词向量的效果不会一直变差并且会保持平稳。
5.7 类比任务评估与超参数

- 训练时间长一些会对结果有帮助

- 数据集越大越好,并且维基百科数据集比新闻文本数据集要好
补充分析
- 因为维基百科就是在解释概念以及他们之间的相互关联,更多的说明性文本显示了事物之间的所有联系
- 而新闻并不去解释,而只是去阐述一些事件
5.8 另一个内在词向量评估

- 使用 cosine similarity 衡量词向量之间的相似程度
- 并与人类评估比照
5.9 最接* Sweden 的一些单词

5.10 相关性评估

- 使用 cosine similarity 衡量词向量之间的相似程度
- 并与人类评估比照
6.word senses
6.1 词义与词义歧义

大多数单词都是多义的
- 特别是常见单词
- 特别是存在已久的单词
例如:pike
那么,词向量是总体捕捉了所有这些信息,还是杂乱在一起了呢?
6.2 pike 的不同含义示例

补充说明:可以想一想“苹果”的例子,既可以是水果,也可以是电子设备品牌。
6.3 #论文讲解#
1)Improving Word Representations Via Global Context And Multiple Word Prototypes (Huang et al. 2012)

将常用词的所有上下文进行聚类,通过该词得到一些清晰的簇,从而将这个常用词分解为多个单词,例如 b a n k 1 bank_1 bank1 、 b a n k 2 bank_2 bank2 、 b a n k 3 bank_3 bank3 。
补充说明:虽然这很粗糙,并且有时 sensors 之间的划分也不是很明确,甚至相互重叠。
2)Linear Algebraic Structure of Word Senses, with Applications to Polysemy
- 单词在标准单词嵌入(如 word2vec)中的不同含义以线性叠加(加权和)的形式存在
v p i k e = α 1 v p i k e 1 + α 2 v p i k e 2 + α 3 v p i k e 3 v_{{pike }}=\alpha_1 v_{{pike}1}+\alpha_2 v2}+\alpha_3 v_3} vpike=α1vpike1+α2vpike2+α3vpike3
- 其中, α 1 = f 1 f 1 + f 2 + f 3 \alpha_1=\frac{f_1}{f_1+f_2+f_3} α1=f1+f2+f3f1

令人惊讶的结果:
- 只是加权平均值就已经可以获得很好的效果
- 由于从稀疏编码中得到的概念,你实际上可以将感官分离出来(前提是它们相对比较常见)
补充讲解:可以理解为由于单词存在于高维的向量空间之中,不同的纬度所包含的含义是不同的,所以加权平均值并不会损害单词在不同含义所属的纬度上存储的信息。
6.4 外向词向量评估

- 单词向量的外部评估:词向量可以应用于 NLP 的很多下游任务
- 一个例子是在命名实体识别任务中,寻找人名、机构名、地理位置名,词向量非常有帮助
7.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=2
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
8.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 3 讲 - 神经网络知识回顾

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言
CS224n 是顶级院校斯坦福出品的深度学*与自然语言处理方向专业课程。核心内容覆盖 RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、阅读理解等前沿内容。
本篇是ShowMeAI对第 3 课的内容梳理,内容主要是对神经网络知识回顾,会基于 NLP 的场景做一点结合讲解。

本篇内容覆盖
- 神经网络基础
- 命名实体识别
- 基于窗口数据的预测
- 基于 pytorch 实现的分类器

1. 神经网络基础
1.1 分类问题基础

对于分类问题,我们有训练数据集:它由一些样本组成 { x i , y i } i = 1 N {x_i, y_i}_{i=1}^{N} {xi,yi}i=1N
-
x i x_i xi 是输入,例如单词(索引或是向量),句子,文档等等(维度为 d d d )
-
y i y_i yi 是我们尝试预测的标签( C C C 个类别中的一个),例如:
-
类别:感情,命名实体,购买/售出的决定
-
其他单词
-
多词序列( 之后会提到)
1.2 分类问题直观理解

训练数据 { x i , y i } i = 1 N {x_i, y_i}_{i=1}^{N} {xi,yi}i=1N ,用一个最简单的 2 维词向量分类问题作为案例,使用 softmax / logistic 回归,构建线性决策边界
- 传统的机器学*/统计学方法:
假设 x i x_i xi 是固定的,训练 softmax/logistic 回归的权重 W ∈ R C × d W \in R^{C \times d} W∈RC×d 来决定决定边界(超平面)
预测阶段,对每个 x x x ,预测:
p ( y ∣ x ) = exp ( W y ⋅ x ) ∑ c = 1 C exp ( W c ⋅ x ) p(y \mid x)=\frac{\exp (W_y \cdot x)}{\sum_{c=1}^{C} \exp (W_c \cdot x)} p(y∣x)=∑c=1Cexp(Wc⋅x)exp(Wy⋅x)
1.3 softmax 分类器的细节

我们可以将预测函数分为两个步骤:
- 将 W W W 的 y t h y^{th} yth 行和 x x x 中的对应行相乘得到分数:
W y ⋅ x = ∑ i = 1 d W y i x i = f y W_{y} \cdot x=\sum_{i=1}^{d} W_{y i} x_{i}=f_{y} Wy⋅x=i=1∑dWyixi=fy
-
对 c = 1 , ⋯ , C c=1, \cdots ,C c=1,⋯,C ,计算 f c f_c fc
-
使用 softmax 函数获得归一化的概率:
p ( y ∣ x ) = exp ( f y ) ∑ c = 1 C exp ( f c ) = s o f t m a x ( f y ) p(y \mid x)=\frac{\exp (f_y)}{\sum_{c=1}^{C} \exp (f_c)}=softmax(f_y) p(y∣x)=∑c=1Cexp(fc)exp(fy)=softmax(fy)
1.4 softmax 和交叉熵损失

在 softmax 分类器中最常用到交叉熵损失,也是负对数概率形态。
对于每个训练样本 ( x , y ) (x,y) (x,y) ,我们的目标是最大化正确类 y y y 的概率,或者我们可以最小化该类的负对数概率
− log p ( y ∣ x ) = − log ( exp ( f y ) ∑ c = 1 C exp ( f c ) ) -\log p(y \mid x)=-\log (\frac{\exp(f_y)}{\sum_{c=1}^{C} \exp (f_c)}) −logp(y∣x)=−log(∑c=1Cexp(fc)exp(fy))
使用对数概率将我们的目标函数转换为求和形态,这更容易在推导和应用中使用。
1.5 交叉熵损失理解

交叉熵的概念来源于信息论,衡量两个分布之间的差异
- 令真实概率分布为 p p p ,我们计算的模型概率分布为 q q q
- 交叉熵为
H ( p , q ) = − ∑ c = 1 C p ( c ) log q ( c ) H(p, q)=-\sum_{c=1}^{C} p(c) \log q(c) H(p,q)=−c=1∑Cp(c)logq(c)
假设标准答案的概率分布是,在正确的类上为 1 1 1 ,在其他类别上为 0 0 0 :
p = [ 0 , ⋯ , 0 , 1 , 0 , ⋯ , 0 ] p=[0, \cdots ,0,1,0, \cdots ,0] p=[0,⋯,0,1,0,⋯,0]
因为 p p p 是独热向量,所以唯一剩下的项是真实类的负对数概率。
1.6 完整数据集上的分类

在整个数据集 { x i , y i } ( i = 1 ) N {x_i , y_i }_{(i=1)}^N {xi,yi}(i=1)N 上的交叉熵损失函数,是所有样本的交叉熵的均值
J ( θ ) = 1 N ∑ i = 1 N − log ( e f y i ∑ c = 1 C e f c ) J(\theta)=\frac{1}{N} \sum_{i=1}^{N}-\log \left(\frac{e{f_{y_{i}}}}{\sum_{c=1} e^{f_{c}}}\right) J(θ)=N1i=1∑N−log(∑c=1Cefcefyi)
不使用 f y = f y ( x ) = W y ⋅ x = ∑ j = 1 d W y j x j f_y=f_y(x)=W_y \cdot x=\sum_{j=1}^{d} W_{yj} x_j fy=fy(x)=Wy⋅x=∑j=1dWyjxj ,而是使用向量化的形态,基于矩阵来表示 f : f = W x f:f=Wx f:f=Wx 。
1.7 传统的机器学*优化算法

对于传统的机器学*算法(如逻辑回归)来说,一般机器学*的参数 θ \theta θ 通常只由 W W W 的列组成
θ = [ W ⋅ 1 ⋮ W ⋅ d ] = W ( : ) ∈ R C d \theta=\left[\begin{array}{c}{W_{\cdot 1}} \ {\vdots} \ {W_{\cdot d}}\end{array}\right]=W( 😃 \in \mathbb{R}^{C d} θ=⎣⎢⎡W⋅1⋮W⋅d⎦⎥⎤=W(:)∈RCd
因此,我们只通过以下方式更新决策边界
∇ θ J ( θ ) = [ ∇ W 1 ⋮ ∇ W d ] ∈ R C d \nabla_{\theta} J(\theta)=\left[\begin{array}{c}{\nabla_{W_{1}}} \ {\vdots} \ {\nabla_{W_{d}}}\end{array}\right] \in \mathbb{R}^{C d} ∇θJ(θ)=⎣⎢⎡∇W1⋮∇Wd⎦⎥⎤∈RCd
1.8 神经网络分类器

-
单独使用线性分类器 Softmax( ≈ logistic 回归)并不十分强大
-
如上图所示,Softmax 得到的是线性决策边界
- 对于复杂问题来说,它的表达能力是有限的
- 有一些分错的点,需要更强的非线性表达能力来区分
1.9 神经网络非线性切分

-
神经网络可以学*更复杂的函数和非线性决策边界
-
tip :更高级的分类需要
- 词向量
- 更深层次的深层神经网络
1.10 基于词向量的分类差异

-
一般在 NLP 深度学*中:
- 我们学*了矩阵 W W W 和词向量 x x x 。
- 我们学*传统参数和表示。
- 词向量是对独热向量的重新表示——在中间层向量空间中移动它们——以便 (线性)softmax 分类器可以更好地分类。
-
即将词向量理解为一层神经网络,输入单词的独热向量并获得单词的词向量表示,并且我们需要对其进行更新。
∇ θ J ( θ ) = [ ∇ W 1 ⋮ ∇ W d a r d v a r k ⋮ ∇ x z e b r a ] ∈ R C d + V d \nabla_{\theta} J(\theta)=\left[\begin{array}{c}{\nabla_{W_{1}}} \ {\vdots} \ {\nabla_{W_{d a r d v a r k}}} \ {\vdots} \ {\nabla_{x_{z e b r a}}}\end{array}\right] \in \mathbb{R}^{C d + V d} ∇θJ(θ)=⎣⎢⎢⎢⎢⎢⎢⎡∇W1⋮∇Wdardvark⋮∇xzebra⎦⎥⎥⎥⎥⎥⎥⎤∈RCd+Vd
- 其中, V d Vd Vd 是数量很大的参数。
1.11 神经计算

-
An artificial neuron
- 神经网络有自己的术语包
- 但如果你了解 softmax 模型是如何工作的,那么你就可以很容易地理解神经元的操作
-
Neural computation:神经计算
-
Neural selectivity:神经选择性
-
Hierarchy of neural processing:神经处理层次
1.12 单个神经元:可视作二元逻辑回归单元

h w , b ( x ) = f ( w T x + b ) h_{w, b}(x)=f(w^{T}x+b) hw,b(x)=f(wTx+b)
f ( z ) = 1 1 + e − z f(z)=\frac{1}{1+e^{-z}} f(z)=1+e−z1
- b b b :我们可以有一个“总是打开”的特性,它给出一个先验类,或者将它作为一个偏向项分离出来。
- w w w , b b b 是神经元的参数。
1.13 一个神经网络:多个逻辑回归组合

- 如果我们输入一个向量通过一系列逻辑回归函数,那么我们得到一个输出向量。
- 但是我们不需要提前决定这些逻辑回归试图预测的变量是什么。

- 我们可以输入另一个 logistic 回归函数。
- 损失函数将指导中间隐藏变量应该是什么,以便更好地预测下一层的目标。

我们添加更多层的神经网络,就得到了多层感知器。
1.14 单层神经网络的矩阵形态表示

a 1 = f ( W 11 x 1 + W 12 x 2 + W 13 x 3 + b 1 ) a_{1}=f(W_{11} x_{1}+W_{12} x_{2}+W_{13} x_{3}+b_{1}) a1=f(W11x1+W12x2+W13x3+b1)
a 2 = f ( W 21 x 1 + W 22 x 2 + W 23 x 3 + b 2 ) a_{2}=f(W_{21} x_{1}+W_{22} x_{2}+W_{23} x_{3}+b_{2}) a2=f(W21x1+W22x2+W23x3+b2)
z = W x + b z=Wx+b z=Wx+b
a = f ( z ) a=f(z) a=f(z)
f ( [ z 1 , z 2 , z 3 ] ) = [ f ( z 1 ) , f ( z 2 ) , f ( z 3 ) ] f([z_{1}, z_{2}, z_{3}])=[f(z_{1}), f(z_{2}), f(z_{3})] f([z1,z2,z3])=[f(z1),f(z2),f(z3)]
- f ( x ) f(x) f(x) 在运算时是 element-wise 逐元素的
1.15 非线性变换的必要性

-
例如:函数*似,如回归或分类
- 没有非线性,深度神经网络只能做线性变换
- 多个线性变换,也还是组成一个线性变换 W 1 W 2 x = W x W_1 W_2 x=Wx W1W2x=Wx
-
因为线性变换是以某种方式旋转和拉伸空间,多次的旋转和拉伸可以融合为一次线性变换
-
对于非线性函数而言,使用更多的层,他们可以*似更复杂的函数
2.命名实体识别
2.1 命名实体识别(NER)

-
可能的用途
- 跟踪文档中提到的特定实体(组织、个人、地点、歌曲名、电影名等)
- 对于问题回答,答案通常是命名实体
- 许多需要的信息实际上是命名实体之间的关联
- 同样的技术可以扩展到其他 slot-filling 槽填充分类
-
通常后面是命名实体链接/规范化到知识库
2.2 句子中的命名实体识别

我们通过在上下文中对单词进行分类,然后将实体提取为单词子序列来预测实体。
2.3 NER 的难点

-
很难计算出实体的边界
- 第一个实体是 “First National Bank” 还是 “National Bank”
-
很难知道某物是否是一个实体
- 是一所名为“Future School” 的学校,还是这是一所未来的学校?
-
很难知道未知/新奇实体的类别
- “Zig Ziglar” ? 一个人
-
实体类是模糊的,依赖于上下文
- 这里的“Charles Schwab” 是 PER 不是 ORG
3.基于窗口数据的分类预测
3.1. 词-窗分类

-
思路:为在上下文中的语言构建分类器
- 一般来说,很少对单个单词进行分类
-
例如,上下文中一个单词的命名实体分类
- 人、地点、组织、没有
-
在上下文中对单词进行分类的一个简单方法,可能是对窗口中的单词向量进行平均,并对平均向量进行分类
- 问题:这会丢失位置信息
3.2 窗口分类器:softmax

-
训练 softmax 分类器对中心词进行分类,方法是在一个窗口内将中心词周围的词向量串联起来
-
例子:在这句话的上下文中对“Paris”进行分类,窗口长度为 2
-
结果向量 x w i n d o w = x ∈ R 5 d x_{window}=x \in R^{5d} xwindow=x∈R5d 是一个列向量
3.3 最简单的窗口分类器:Softmax

对于 x = x w i n d o w x=x_{window} x=xwindow ,我们可以使用与之前相同的 softmax 分类器
如何更新向量?
- 简而言之:就像之前讲的那样,求导和优化
3.4 稍微复杂一点:多层感知器

-
假设我们要对中心词是否为一个地点,进行分类
-
与 word2vec 类似,我们将遍历语料库中的所有位置。但这一次,它将受到监督,只有一些位置能够得到高分。
- 例如,在他们的中心有一个实际的 NER Location 的位置是“真实的”位置会获得高分
3.5 神经网络前馈计算

使用神经激活 a a a 简单地给出一个非标准化的分数
s c o r e ( x ) = U T a ∈ R score(x)=U^{T} a \in \mathbb{R} score(x)=UTa∈R
我们用一个三层神经网络计算一个窗口的得分
s = s c o r e ( " m u s e u m s i n P a r i s a r e a m a z i n g ” ) s = score("museums \ in \ Paris \ are \ amazing”) s=score("museums in Paris are amazing”)
s = U T f ( W x + b ) s=U^{T} f(W x+b) s=UTf(Wx+b)
- x ∈ R 20 × 1 x \in \mathbb{R}^{20 \times 1} x∈R20×1
- W ∈ R 8 × 20 W \in \mathbb{R}^{8 \times 20} W∈R8×20
- U ∈ R 8 × 1 U \in \mathbb{R}^{8 \times 1} U∈R8×1
之前的例子
X w i n d o w = [ X m u s e u m s X i n X p a r i s X a r e X a m a z i n g ] X_{window} = [X_{museums} \quad X_{in} \quad X_{paris} \quad X_{are} \quad X_{amazing}] Xwindow=[XmuseumsXinXparisXareXamazing]
3.6 附加层

中间层学*输入词向量之间的非线性交互
X w i n d o w = [ X m u s e u m s X i n X p a r i s X a r e X a m a z i n g ] X_{window} = [X_{museums} \quad X_{in} \quad X_{paris} \quad X_{are} \quad X_{amazing}] Xwindow=[XmuseumsXinXparisXareXamazing]
例如:只有当“museum”是第一个向量时,“in”放在第二个位置才重要
4.基于 pytorch 实现的分类器
4.1 使用合页损失替换


关于训练目标的想法:让真实窗口的得分更高,而其他窗口的得分更低(直到足够好为止)
s = s c o r e ( m u s e u m s i n P a r i s a r e a m a z i n g ) s = score(museums \quad in \quad Paris \quad are \quad amazing) s=score(museumsinParisareamazing)
s c = s c o r e ( N o t a l l m u s e u m s i n P a r i s ) s_c = score(Not \quad all \quad museums \quad in \quad Paris) sc=score(NotallmuseumsinParis)
最小化: J = m a x ( 0 , 1 − s + s c ) J=max(0,1-s+s_c) J=max(0,1−s+sc)
这是不可微的,但它是连续的 → 我们可以用 SGD
补充解析
- 单窗口的目标函数为 J = m a x ( 0 , 1 − s + s c ) J=max(0,1-s+s_c) J=max(0,1−s+sc)
- 每个中心有 NER 位置的窗口的得分应该比中心没有位置的窗口高 1 分
- 要获得完整的目标函数:为每个真窗口采样几个损坏的窗口。对所有训练样本窗口求和
- 类似于 word2vec 中的负抽样
4.2 随机梯度下降
使用 SGD 更新参数
θ n e w = θ o l d − α ∇ θ J ( θ ) \theta ^{new}= \theta ^{old}-\alpha \nabla_{\theta} J(\theta) θnew=θold−α∇θJ(θ)
- α \alpha α 是 步长或是学*率
4.3 课堂手推







5.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=3
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
6.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 4 讲 - 神经网络反向传播与计算图

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言

内容覆盖

- ① 简单神经网络的梯度矩阵与建议
- ② 计算图与反向传播
- ③ 神经网络训练实用知识技能
- 正则化(用于环节过拟合)
- 向量化
- 非线性表达能力
- 参数初始化
- 优化算法
- 学*率策略
1.简单神经网络的梯度矩阵与建议
1.1 权重矩阵的导数

-
让我们仔细看看计算 ∂ s ∂ W \frac{\partial s}{\partial W} ∂W∂s
- 再次使用链式法则
∂ s ∂ W = ∂ s ∂ h ∂ h ∂ z ∂ z ∂ W \frac{\partial s}{\partial W}=\frac{\partial s}{\partial h} \frac{\partial h}{\partial z} \frac{\partial z}{\partial W} ∂W∂s=∂h∂s∂z∂h∂W∂z
s = u T h h = f ( z ) z = W x + b \begin{aligned} s &= u^T h \ h &= f(z) \ z &= Wx+b \end{aligned} shz=uTh=f(z)=Wx+b
1.2 反向传播梯度求导

- 这个函数(从上次开始)
∂ s ∂ W = δ ∂ z ∂ W = δ ∂ ∂ W W x + b \frac{\partial s}{\partial W}=\delta \frac{\partial z}{\partial W}=\delta \frac{\partial}{\partial W} Wx+b ∂W∂s=δ∂W∂z=δ∂W∂Wx+b
-
考虑单个权重 W i j W_{ij} Wij 的导数
-
W i j W_{ij} Wij 只对 z i z_i zi 有贡献
- 例如 W 23 W_{23} W23 只对 z 2 z_2 z2 有贡献,对 z 1 z_1 z1 没有贡献
∂ z i ∂ W i j = ∂ ∂ W i j W i ⋅ x + b i = ∂ ∂ W i j ∑ k = 1 d W i k x k = x j \begin{aligned} \frac{\partial z_{i}}{\partial W_{i j}} &=\frac{\partial}{\partial W_{i j}} W_{i \cdot} x+b_{i} \ &=\frac{\partial}{\partial W_{i j}} \sum_{k=1}^{d} W_{i k} x_{k}=x_{j} \end{aligned} ∂Wij∂zi=∂Wij∂Wi⋅x+bi=∂Wij∂k=1∑dWikxk=xj

- 对于单个 W i j W_{ij} Wij 的导数:
∂ s ∂ W i j = δ i x j \frac{\partial s}{\partial W_{i j}} = \delta_i x_j ∂Wij∂s=δixj
- 我们想要整个 W W W 的梯度,但是每种情况都是一样的
- 解决方案:外积
∂ s ∂ W = δ T x T [ n × m ] = [ n × 1 ] [ 1 × m ] \begin{aligned} \frac{\partial s}{\partial {W}}&=\delta ^{T} x^{T}\ [n \times m] &= [n \times 1][1 \times m] \end{aligned} ∂W∂s[n×m]=δTxT=[n×1][1×m]
1.3 梯度求导:技巧与建议

-
技巧 1:仔细定义变量并关注它们的维度!
-
技巧 2:链式法则!如果 y = f ( u ) y = f(u) y=f(u) , u = g ( x ) u = g(x) u=g(x),即 y = f ( g ( x ) ) y = f(g(x)) y=f(g(x)) 则
∂ y ∂ x = ∂ y ∂ u ∂ u ∂ x \frac{\partial {y}}{\partial {x}}=\frac{\partial {y}}{\partial {u}} \frac{\partial {u}}{\partial {x}} ∂x∂y=∂u∂y∂x∂u
-
提示 3:模型的最上面的 softmax 部分:首先考虑当 c = y c = y c=y (正确的类)的导数 f c f_c fc,然后再考虑当 c ≠ y c \neq y c=y (所有不正确的类)的导数 f c f_c fc
-
技巧 4:如果你被矩阵微积分搞糊涂了,请计算逐个元素的偏导数!
-
技巧 5:使用形状约定。注意:到达隐藏层的错误消息 δ \delta δ 具有与该隐藏层相同的维度
1.4 为窗口模型推导梯度

-
到达并更新单词向量的梯度可以简单地分解为每个单词向量的梯度
-
令 ∇ x J = W T δ = δ x w i n d o w \nabla_{x} J=W^{T} \delta=\delta_{x_{w i n d o w}} ∇xJ=WTδ=δxwindow
-
X w i n d o w = [ X m u s e u m s X i n X P a r i s X a r e X a m a z i n g ] X_{window}=[X_{museums} \quad X_{in} \quad X_{Paris} \quad X_{are} \quad X_{ amazing}] Xwindow=[XmuseumsXinXParisXareXamazing]
-
则得到
δ w i n d o w = [ ∇ x museums ∇ x i n ∇ x Pare ∇ x are ∇ x amazing ] ∈ R 5 d \begin{aligned} \delta_{window}=\left[\begin{array}{c}{\nabla_{x_{\text {museums}}}} \ {\nabla_{x_{i n}}} \ {\nabla_{x_{\text {Pare}}}} \ {\nabla_{x_{\text {are}}}} \ {\nabla_{x_{\text {amazing}}}}\end{array}\right] \in \mathbb{R}^{5 d} \end{aligned} δwindow=⎣⎢⎢⎢⎢⎡∇xmuseums∇xin∇xPare∇xare∇xamazing⎦⎥⎥⎥⎥⎤∈R5d
- 我们将根据梯度逐个更新对应的词向量矩阵中的词向量,所以实际上是对词向量矩阵的更新是非常稀疏的
1.5 在窗口模型中更新单词梯度

- 当我们将梯度更新到词向量中时,这将更新单词向量,使它们(理论上)在确定命名实体时更有帮助。
- 例如,模型可以了解到,当看到 x i n x_{in} xin 是中心词之前的单词时,指示中心词是一个 Location
1.6 重新训练词向量时的陷阱

背景:我们正在训练一个单词电影评论情绪的逻辑回归分类模型。
- 在训练数据中,我们有“TV”和“telly”
- 在测试数据中我们有“television””
- 预训练的单词向量有三个相似之处:

-
问题:当我们更新向量时会发生什么
-
回答:
- 那些在训练数据中出现的单词会四处移动
- “TV”和“telly”
- 没有包含在训练数据中的词汇保持原样
- “television”
- 那些在训练数据中出现的单词会四处移动
1.7 关于再训练的建议

-
问题:应该使用可用的“预训练”词向量吗?
-
回答:
- 几乎总是「应该用」
- 他们接受了大量的数据训练,所以他们会知道训练数据中没有的单词,也会知道更多关于训练数据中的单词
- 拥有上亿的数据语料吗?那可以随机初始化开始训练
-
问题:我应该更新(“fine tune”)我自己的单词向量吗?
-
回答:
- 如果你只有一个小的训练数据集,不要对预训练词向量做再训练
- 如果您有一个大型数据集,那么基于任务训练更新词向量( train = update = fine-tune )效果会更好
2.计算图与反向传播
2.1 反向传播

-
我们几乎已经向你们展示了反向传播
- 求导并使用(广义)链式法则
-
另一个技巧:在计算较低层的导数时,我们重用对较深层计算的导数,以减小计算量
2.2 计算图和反向传播

- 我们把神经网络方程表示成一个图
- 源节点:输入
- 内部节点:操作
- 边传递操作的结果
s = u T h h = f ( z ) z = W x + b x ( i n p u t ) \begin{aligned} s &= u^Th \ h &= f(z) \ z &= Wx+b \ x & \quad (input) \end{aligned} shzx=uTh=f(z)=Wx+b(input)
Forward Propagation:前向传播
Back Propagation:沿着边回传梯度
2.3 反向传播:单神经元视角

-
节点接收“上游梯度”
- 目标是传递正确的“下游梯度”
-
每个节点都有局部梯度 local gradient
- 它输出的梯度是与它的输入有关
-
每个节点都有局部梯度 local gradient
- n 它输出的梯度是与它的输入有关
-
每个节点都有局部梯度 local gradient
- 它输出的梯度是与它的输入有关

- 有多个输入的节点呢? z = W x z=Wx z=Wx
- 多个输入 → 多个局部梯度
2.4 反向传播计算图示例

2.5 求和形态的梯度计算
上图中的 ∂ f ∂ y \frac{\partial f}{\partial y} ∂y∂f 的梯度的计算
a = x + y b = m a x ( y , z ) f = a b \begin{aligned} a &= x + y \ b &= max(y,z)\ f &= ab \end{aligned} abf=x+y=max(y,z)=ab
∂ f ∂ y = ∂ f ∂ a ∂ a ∂ y + ∂ f ∂ b ∂ b ∂ y \frac{\partial f}{\partial y} = \frac{\partial f}{\partial a}\frac{\partial a}{\partial y} + \frac{\partial f}{\partial b}\frac{\partial b}{\partial y} ∂y∂f=∂a∂f∂y∂a+∂b∂f∂y∂b
2.6 直挂理解神经元的梯度传递

-
-
-
- “分发” 上游梯度
-
-
- m a x max max “路由” 上游梯度,将梯度发送到最大的方向
- ∗ \ast ∗ “切换”上游梯度
2.7 同步计算所有梯度以提速

-
错误的反向传播计算方式
- 先计算 b b b 的偏导
- 接着计算 W W W 的偏导
- 重复计算!
-
正确的反向传播计算方式
- 一次性计算所有偏导
- 类似手动计算梯度时的方式
2.8 一般计算图中的反向传播

-
Fprop:按拓扑排序顺序访问节点
- 计算给定父节点的节点的值
-
Bprop:
- 初始化输出梯度为 1
- 以相反的顺序方位节点,使用节点的后继的梯度来计算每个节点的梯度
- { y 1 , y 2 , ⋯ , y n } {y_1,y_2,\cdots,y_n} {y1,y2,⋯,yn} 是 x x x 的后继
∂ z ∂ x = ∑ i = 1 n ∂ z ∂ y i ∂ y i ∂ x \frac{\partial z}{\partial x} = \sum_{i=1}^n \frac{\partial z}{\partial y_i}\frac{\partial y_i}{\partial x} ∂x∂z=i=1∑n∂yi∂z∂x∂yi
- 正确地说,Fprop 和 Bprop 的计算复杂度是一样的
- 一般来说,我们的网络有固定的层结构,所以我们可以使用矩阵和雅可比矩阵
2.9 自动微分

- 梯度计算可以从 Fprop 的符号表达式中自动推断
- 每个节点类型需要知道如何计算其输出,以及如何在给定其输出的梯度后计算其输入的梯度
- 现代 DL 框架(Tensorflow, Pytoch)为您做反向传播,但主要是令作者手工计算层/节点的局部导数
2.10 反向传播的实现

为了计算反向传播,我们需要在前向传播时存储一些变量的值
2.11 实现:前向/反向 API

为了计算反向传播,我们需要在前向传播时存储一些变量的值
2.12 梯度检查:数值梯度

-
对于 h ≈ 1 e − 4 h \approx 1e^{-4} h≈1e−4 , f ′ ( x ) ≈ f ( x + h ) − f ( x − h ) 2 h f^{\prime}(x) \approx \frac{f(x+h)-f(x-h)}{2 h} f′(x)≈2hf(x+h)−f(x−h)
-
易于正确实现
-
但*似且非常缓慢
- 必须对模型的每个参数重新计算 f f f
-
用于检查您的实现
- 在过去我们手写所有东西的时候,在任何地方都这样做是关键。
- 现在,当把图层放在一起时,就不需要那么多了
2.13 总结

- 我们已经掌握了神经网络的核心技术
- 反向传播:沿计算图递归应用链式法则
- [downstream gradient] = [upstream gradient] x [local gradient]
- 前向传递:计算操作结果并保存中间值
- 反向传递:应用链式法则计算梯度
2.14 为什么要学*梯度的所有细节?

-
现代深度学*框架为您计算梯度
-
但是,当编译器或系统为您实现时,为什么要学*它们呢?
- 了解底层原理是有帮助的
-
反向传播并不总是完美地工作
- 理解为什么对调试和改进模型至关重要
- 参见 Karpathy 文章
-
未来课程的例子:爆炸和消失的梯度
3.神经网络训练实用知识技能
3.1 模型正则化防止过拟合

- 实际上一个完整的损失函数包含了所有参数 θ \theta θ的正则化(下式中最后一项),例如 L2 正则化:
J ( θ ) = 1 N ∑ i = 1 N − log ( e f y i ∑ c = 1 C e f c ) + λ ∑ k θ k 2 J(\theta)=\frac{1}{N} \sum_{i=1}^{N}-\log (\frac{e{f_{y_{i}}}}{\sum_{c=1} e^{f_{c}}})+\lambda \sum_{k} \theta_{k}^{2} J(θ)=N1i=1∑N−log(∑c=1Cefcefyi)+λk∑θk2
- 正则化(在很大程度上)可以防止在我们有很多特征时过拟合(或者是一个非常强大/深层的模型等等)
3.2 向量化形态

-
例如,对单词向量进行循环,而不是将它们全部连接到一个大矩阵中,然后将 softmax 权值与该矩阵相乘
- 1000 loops, best of 3: 639 μs per loop
- 10000 loops, best of 3: 53.8 μs per loop
-
(10x)更快的方法是使用 C × N C \times N C×N 矩阵
-
总是尝试使用向量和矩阵,而不是循环
-
你也应该快速测试你的代码
-
简单来说:矩阵向量化的方式太棒了
3.3 非线性:常规激活函数

tanh 只是一个重新放缩和移动的 sigmoid (两倍陡峭,[-1,1])
tanh ( z ) = 2 l o g i s t i c ( 2 z ) − 1 \tanh (z)=2 logistic(2 z)-1 tanh(z)=2logistic(2z)−1
logistic 和 tanh 仍然被用于特定的用途,但不再是构建深度网络的默认值。
tip:logistic 和 tanh
设计复杂的数学运算,指数计算会减慢速度。所以人们提出了 hard tanh,并且效果很不错。于是才有了 ReLU
3.4 非线性:新的激活函数

- 为了建立一个前馈深度网络,你应该做的第一件事是 ReLU——由于良好的梯度回流,训练速度快,性能好
tip:ReLU
- 每个单元要么已经死了,要么在传递信息。
- 非零范围内只有一个斜率,这一位置梯度十分有效的传递给了输入,所以模型非常有效的训练
3.5 参数初始化

- 通常 必须将权重初始化为小的随机值 (这样才能在激活函数的有效范围内, 即存在梯度可以使其更新)
- 避免对称性妨碍学*/特殊化的
- 初始化隐含层偏差为 0,如果权重为 0,则输出(或重构)偏差为最优值(例如,均值目标或均值目标的反 s 形)
- 初始化 所有其他权重为 Uniform(–r, r),选择使数字既不会太大也不会太小的 r r r
- Xavier 初始化中,方差与 fan-in n i n n_{in} nin (前一层尺寸)和 fan-out n o u t n_{out} nout(下一层尺寸)成反比
V a r ( W i ) = 2 n i n + n o u t Var(W_i)=\frac{2}{n_{in}+n_{out}} Var(Wi)=nin+nout2
3.6 优化算法

通常,简单的 SGD 就可以了
- 然而,要得到好的结果通常需要手动调整学*速度(下一张幻灯片)
- 对于更复杂的网络和情况,或者只是为了避免担心,更有经验的复杂的 “自适应”优化器通常会令你做得更好,通过累积梯度缩放参数调整。
- 这些模型给每个参数调整学*速度
- Adagrad
- RMSprop
- Adam 相当好,在许多情况下是安全的选择
- SparseAdam
- …
3.7 学*率策略

-
你可以用一个固定的学*速度。从 l r = 0.001 lr = 0.001 lr=0.001 开始?
- 它必须是数量级的——尝试 10 的幂
- 太大:模型可能会发散或不收敛
- 太小:你的模型可能训练不出很好的效果
-
如果你在训练时降低学*速度,通常可以获得更好的效果
-
手工:每隔 k k k 个阶段(epoch)将学*速度减半
- epoch = 遍历一次数据 (打乱或采样的)
-
通过一个公式: l r = l r 0 e − k t l r=l r_{0} e^{-k t} lr=lr0e−kt, {for epoch }t
-
还有更新奇的方法,比如循环学*率(q.v.)
-
-
更高级的优化器仍然使用学*率,但它可能是优化器缩小的初始速度——因此可能可以从较高的速度开始
4.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=4
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
5.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 5 讲 - 句法分析与依存解析

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言

授课计划

1.句法结构:成分与依赖
1.1 语言结构的两种观点:无上下文语法

-
句子是使用逐步嵌套的单元构建的
-
短语结构将单词组织成嵌套的成分
-
起步单元:单词被赋予一个类别
- part of speech = pos 词性
-
单词组合成不同类别的短语
-
短语可以递归地组合成更大的短语
-
Det 指的是
Determiner,在语言学中的含义为 限定词 -
NP 指的是
Noun Phrase,在语言学中的含义为 名词短语 -
VP ****指的是
Verb Phrase,在语言学中的含义为 动词短语 -
P 指的是
Preposition,在语言学中的含义为 介词 -
PP 指的是
Prepositional Phrase,在语言学中的含义为 介词短语
1.2 语言结构的两种观点:无上下文语法

1.3 语言结构的两种观点:依赖结构

- 不是使用各种类型的短语,而是直接通过单词与其他的单词关系表示句子的结构,显示哪些单词依赖于(修饰或是其参数)哪些其他单词
补充讲解
look是整个句子的根源,look依赖于crate(或者说crate是look的依赖)in,the,large都是crate的依赖in the kitchen是crate的修饰in,the都是kitchen的依赖by the door是crate的依赖
1.4 为什么我们需要句子结构?

- 为了能够正确地解释语言,我们需要理解句子结构
- 人类通过将单词组合成更大的单元来传达复杂的意思,从而交流复杂的思想
- 我们需要知道什么与什么相关联
- 除非我们知道哪些词是其他词的参数或修饰词,否则我们无法弄清楚句子是什么意思
1.5 介词短语依附歧义

San Jose cops kill man with knife
-
警察用刀杀了那个男子
cops是kill的subject(subject 指 主语)man是kill的object(object 指 宾语)knife是kill的modifier(modifier 指 修饰符)
-
警察杀了那个有刀的男子
knife是man的modifier(名词修饰符,简称为nmod)
1.6 介词短语依附歧义

补充讲解
from space这一介词短语修饰的是前面的动词count还是名词whales?- 这就是人类语言和编程语言中不同的地方
1.7 介词短语附加歧义成倍增加

- 关键的解析决策是我们如何“依存”各种成分
- 介词短语、状语或分词短语、不定式、协调等。
补充讲解:
上述句子中有四个介词短语
board是approved的主语,acquisition是approved的谓语by Royal Trustco Ltd.是修饰acquisition的,即董事会批准了这家公司的收购of Toronto可以修饰approved,acquisition,Royal Trustco Ltd.之一,经过分析可以得知是修饰Royal Trustco Ltd.,即表示这家公司的位置for $$27 a share修饰acquisitionat its monthly meeting修饰approved,即表示批准的时间地点
补充讲解:
面对这样复杂的句子结构,我们需要考虑 指数级 的可能结构,这个序列被称为 卡特兰数/Catalan numbers
Catalan numbers
C n = ( 2 n ) ! / [ ( n + 1 ) ! n ! ] C_{n}=(2 n) ! /[(n+1) ! n !] Cn=(2n)!/[(n+1)!n!]
1.8 协调范围模糊

补充讲解
Shuttle veteran and longtime NASA executive Fred Gregory appointed to board
-
一个人:
[[Shuttle veteran and longtime NASA executive] Fred Gregory] appointed to board -
两个人:
[Shuttle veteran] and [longtime NASA executive Fred Gregory] appointed to board
1.9 协调范围模糊

- 例句:Doctor: No heart,cognitive issues
1.10 形容词修饰语歧义

补充讲解
Students get first hand job experience
first hand表示 第一手的,直接的,即学生获得了直接的工作经验first是hand的形容词修饰语(amod)
first修饰experience,hand修饰job
1.11 动词短语(VP)依存歧义

补充讲解
Mutilated body washes up on Rio beach to be used for Olympic beach volleyball
to be used for Olympic beach volleyball是 动词短语 (VP)- 修饰的是
body还是beach
2.依赖语法与树库
2.1 #论文解读# 依赖路径识别语义关系

2.2 依存文法和依存结构

- 关联语法假设句法结构包括词汇项之间的关系,通常是二元不对称关系(“箭头”),称为依赖关系
Dependency Structure 有两种表现形式
1.一种是直接在句子上标出依存关系箭头及语法关系
2.另一种是将其做成树状机构(Dependency Tree Graph)
- 箭头通常标记(type)为语法关系的名称(主题、介词对象、apposition 等)
- 箭头连接头部(head)(调速器,上级,regent)和一个依赖(修饰词,下级,下属)
- A → A \to A→ 的事情
- 通常,依赖关系形成一棵树(单头,无环,连接图)
2.3 依存语法/解析历史

2.4 依存语法/解析历史

-
依赖结构的概念可以追溯到很久以前
- Paṇini 的语法(公元前 5 世纪)
- 一千年,阿拉伯语的语法的基本方法
-
选区/上下文无关文法是一个新奇的发明
- 20 世纪发明(R.S.Wells,1947; then Chomsky)
-
现代依赖工作经常源于 L. Tesnière(1959)
- 是 20 世纪“东方”的主导方法(俄罗斯,中国,…)
- 有利于更自由的语序语言
- 是 20 世纪“东方”的主导方法(俄罗斯,中国,…)
-
NLP 中最早类型的解析器在美国
- David Hays 是美国计算语言学的创始人之一,他很早就(第一个?)构建了依赖解析器(Hays 1962)
2.5 依存语法和依赖结构

- 人们对箭头指向的方式不一致:有些人把箭头朝一个方向画;有人是反过来的
- Tesnière 从头开始指向依赖,本课使用此种方式
- 通常添加一个伪根指向整个句子的头部,这样每个单词都精确地依赖于另一个节点
2.6 带注释数据的兴起:通用依存句法树库

补充讲解
Universal Dependencies:我们想要拥有一个统一的、并行的依赖描述,可用于任何人类语言
- 从前手工编写语法然后训练得到可以解析句子的解析器
- 用一条规则捕捉很多东西真的很有效率,但是事实证明这在实践中不是一个好主意
- 语法规则符号越来越复杂,并且没有共享和重用人类所做的工作
- 句子结构上的 treebanks 支持结构更有效
2.7 带注释数据的兴起

从一开始,构建 treebank 似乎比构建语法慢得多,也没有那么有用
但是 treebank 给我们提供了许多东西
- 可重用性
- 许多解析器、词性标记器等可以构建在它之上
- 语言学的宝贵资源
- 广泛的覆盖面,而不仅仅是一些直觉
- 频率和分布信息
- 一种评估系统的方法
2.8 依赖条件首选项

依赖项解析的信息来源是什么?
- 1.Bilexical affinities (两个单词间的密切关系)
- [discussion → issues] 是看上去有道理的
- 2.Dependency distance 依赖距离
- 主要是与相邻词
- 3.Intervening material 介于中间的物质
- 依赖很少跨越介于中间的动词或标点符号
- 4.Valency of heads
- How many dependents on which side are usual for a head?
2.9 依赖关系分析

-
通过为每个单词选择它所依赖的其他单词(包括根)来解析一个句子
-
通常有一些限制
- 只有一个单词是依赖于根的
- 不存在循环 A→B,B→A
-
这使得依赖项成为树
-
最后一个问题是箭头是否可以交叉(非投影的 non-projective)
- 没有交叉的就是 non-projectice
2.10 射影性

-
定义:当单词按线性顺序排列时,没有交叉的依赖弧,所有的弧都在单词的上方
-
与 CFG 树并行的依赖关系必须是投影的
- 通过将每个类别的一个子类别作为头来形成依赖关系
-
但是依赖理论通常允许非投射结构来解释移位的成分
- 如果没有这些非投射依赖关系,就不可能很容易获得某些结构的语义
2.11 依存分析方法

1.Dynamic programming
- Eisner(1996)提出了一种复杂度为 O(n3) 的聪明算法,它生成头部位于末尾而不是中间的解析项
2.Graph algorithms
- 为一个句子创建一个最小生成树
- McDonald et al.’s (2005) MSTParser 使用 ML 分类器独立地对依赖项进行评分(他使用 MIRA 进行在线学*,但它也可以是其他东西)
3.Constraint Satisfaction
- 去掉不满足硬约束的边 Karlsson(1990), etc.
4.“Transition-based parsing” or “deterministic dependency parsing”
- 良好的机器学*分类器 MaltParser(Nivreet al. 2008) 指导下的依存贪婪选择。已证明非常有效。
3.基于转换的依存分析模型
3.1 #论文解读# Greedy transition-based parsing [Nivre 2003]
![#论文解读# Greedy transition-based parsing [Nivre 2003]](../Images/07e8685e320330897c2cb0bf25dc1f2d.png)
-
贪婪判别依赖解析器一种简单形式
-
解析器执行一系列自底向上的操作
- 大致类似于 shift-reduce 解析器中的“shift”或“reduce”,但“reduce”操作专门用于创建头在左或右的依赖项
-
解析器如下:
- 栈 σ \sigma σ 以 ROOT 符号开始,由若干 w i w_i wi 组成
- 缓存 β \beta β 以输入序列开始,由若干 w i w_i wi 组成
- 一个依存弧的集合 A A A ,一开始为空。每条边的形式是 ( w i , r , w j ) (w_i,r,w_j) (wi,r,wj),其中 r r r 描述了节点的依存关系
- 一组操作
3.2 基本的基于转换的依存关系解析器

- 最终目标是 σ = [ R O O T ] \sigma = [ROOT] σ=[ROOT], β = ϕ \beta = \phi β=ϕ, A A A 包含了所有的依存弧
补充讲解
state 之间的 transition 有三类:
- 1.SHIFT:将 buffer 中的第一个词移出并放到 stack 上。
- 2.LEFT-ARC:将 ( w j , r , w i ) (w_j,r,w_i) (wj,r,wi) 加入边的集合 A A A,其中 w i w_i wi 是 stack 上的次顶层的词, w j w_j wj 是 stack 上的最顶层的词。
- 3.RIGHT-ARC:将 ( w i , r , w j ) (w_i,r,w_j) (wi,r,wj) 加入边的集合 A A A,其中 w i w_i wi 是 stack 上的次顶层的词, w j w_j wj 是 stack 上的最顶层的词。
我们不断的进行上述三类操作,直到从初始态达到最终态。
- 在每个状态下如何选择哪种操作呢?
- 当我们考虑到 LEFT-ARC 与 RIGHT-ARC 各有 ∣ R ∣ \left|R\right| ∣R∣( ∣ R ∣ \left|R\right| ∣R∣为 r r r 的类的个数)种类,我们可以将其看做是 class 数为 2 ∣ R ∣ + 1 2\left|R\right|+1 2∣R∣+1 的分类问题,可以用 SVM 等传统机器学*方法解决。
3.3 基于 Arc 标准转换的解析器

- 还有其他的 transition 方案
- Analysis of
I ate fish
3.4 #论文解读# MaltParser [Nivre and Hall 2005]
![#论文解读# MaltParser [Nivre and Hall 2005]](../Images/35caf186a76f469c872b90223eafe057.png)
-
我们需要解释如何选择下一步行动
- Answer:机器学*
-
每个动作都由一个有区别分类器(例如 softmax classifier)对每个合法的移动进行预测
-
最多三种无类型的选择,当带有类型时,最多 ∣ R ∣ × 2 + 1 \left|R\right|×2+1 ∣R∣×2+1 种
-
Features:栈顶单词,POS;buffer 中的第一个单词,POS;等等
-
在最简单的形式中是没有搜索的
- 但是,如果你愿意,你可以有效地执行一个 Beam search 束搜索(虽然速度较慢,但效果更好):你可以在每个时间步骤中保留 k k k 个好的解析前缀
-
该模型的精度略低于依赖解析的最高水平,但它提供了非常快的线性时间解析,性能非常好
3.5 传统特征表示

- 传统的特征表示使用二元的稀疏向量 1 0 6 ∼ 1 0 7 10⁶ \sim 10⁷ 106∼107
- 特征模板:通常由配置中的 1 ∼ 3 1 \sim 3 1∼3 个元素组成
- Indicator features
3.6 依赖分析的评估:(标记)依赖准确性

- UAS (unlabeled attachment score) 指无标记依存正确率
- LAS (labeled attachment score) 指有标记依存正确率
3.7 处理非投影性

- 我们提出的弧标准算法只构建投影依赖树
头部可能的方向:
- 1.在非投影弧上宣布失败
- 2.只具有投影表示时使用依赖形式[CFG 只允许投影结构]
- 3.使用投影依赖项解析算法的后处理器来识别和解析非投影链接
- 4.添加额外的转换,至少可以对大多数非投影结构建模(添加一个额外的交换转换,冒泡排序)
- 5.转移到不使用或不需要对投射性进行任何约束的解析机制(例如,基于图的 MSTParser)
3.8 为什么要训练神经依赖解析器?重新审视指标特征

-
Indicator Features 的问题
- 问题 1:稀疏
- 问题 2:不完整
- 问题 3:计算复杂
-
超过 95%的解析时间都用于特征计算
4.神经网络依存分析器
4.1 #论文解读# A neural dependency parser [Chen and Manning 2014]
![#论文解读# A neural dependency parser [Chen and Manning 2014]](../Images/d36f6e2e9e131d6e8fd3db8cf71ef303.png)
-
斯坦福依存关系的英语解析
- Unlabeled attachment score (UAS) = head
- Labeled attachment score (LAS) = head and label
-
效果好,速度快
4.2 分布式表示

-
我们将每个单词表示为一个 d 维稠密向量(如词向量)
- 相似的单词应该有相*的向量
-
同时,part-of-speech tags 词性标签(POS)和 dependency labels 依赖标签也表示为 d 维向量
- 较小的离散集也表现出许多语义上的相似性。
-
NNS(复数名词)应该接* NN(单数名词)
- num(数值修饰语)应该接* amod(形容词修饰语)
4.3 从配置中提取令牌和向量表示

补充讲解
- 对于 Neural Dependency Parser,其输入特征通常包含三种
- stack 和 buffer 中的单词及其 dependent word
- 单词的 part-of-speech tag
- 描述语法关系的 arc label
4.4 模型体系结构

4.5 句子结构的依存分析

-
神经网络可以准确地确定句子的结构,支持解释
-
Chen and Manning(2014)是第一个简单,成功的神经依赖解析器
-
密集的表示使得它在精度和速度上都优于其他贪婪的解析器
4.6 基于转换的神经依存分析的新进展

-
这项工作由其他人进一步开发和改进,特别是在谷歌
- 更大、更深的网络中,具有更好调优的超参数
- Beam Search 更多的探索动作序列的可能性,而不是只考虑当前的最优
- 全局、条件随机场(CRF)的推理出决策序列
-
这就引出了 SyntaxNet 和 Parsey McParseFace 模型
4.7 基于图形的依存关系分析器

4.8 #论文解读# A Neural graph-based dependency parser [Dozat and Manning 2017; Dozat, Qi, and Manning 2017]
![#论文解读# A Neural graph-based dependency parser [Dozat and Manning 2017; Dozat,** **Qi** **, and Manning 2017]](../Images/091b0e4dc0ab7463daee8fae38feb212.png)
-
为每条边的每一个可能的依赖关系计算一个分数
-
为每条边的每一个可能的依赖关系计算一个分数
- 然后将每个单词的边缘添加到其得分最高的候选头部
- 并对每个单词重复相同的操作
-
在神经模型中为基于图的依赖分析注入活力
- 为神经依赖分析设计一个双仿射评分模型
- 也使用神经序列模型,我们将在下周讨论
-
非常棒的结果
- 但是比简单的基于神经传递的解析器要慢
- 在一个长度为 n n n 的句子中可能有 n 2 n² n2 个依赖项
5.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=5
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
6.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 6 讲 - 循环神经网络与语言模型

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言

(本篇内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章深度学*教程 | 序列模型与 RNN 网络)
概述

- 介绍一个新的 NLP 任务
- Language Modeling 语言模型
- 介绍一个新的神经网络家族
- Recurrent Neural Networks (RNNs)
1.语言模型
1.1 语言模型

语言建模的任务是预测下一个单词是什么
更正式的说法是:给定一个单词序列 x ( 1 ) , x ( 2 ) , … , x ( t ) \boldsymbol{x}^{(1)}, \boldsymbol{x}^{(2)}, \ldots, \boldsymbol{x}^{(t)} x(1),x(2),…,x(t),计算下一个单词 x ( t + 1 ) x^{(t+1)} x(t+1) 的概率分布:
P ( x ( t + 1 ) ∣ x ( t ) , … , x ( 1 ) ) P\left(\boldsymbol{x}^{(t+1)} \mid \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(1)}\right) P(x(t+1)∣x(t),…,x(1))
- 其中, x ( t + 1 ) x^{(t+1)} x(t+1) 可以是词表中的任意单词 V = { w 1 , … , w ∣ V ∣ } V=\left{\boldsymbol{w}{1}, \ldots, \boldsymbol{w}\right} V=
- 这样做的系统称为 Language Model 语言模型
1.2 语言模型

-
还可以将语言模型看作评估一段文本是自然句子(通顺度)的概率
-
例如,如果我们有一段文本 x ( 1 ) , … , x ( T ) x{(1)},\dots,x x(1),…,x(T),则这段文本的概率(根据语言模型)为
P ( x ( 1 ) , … , x ( T ) ) = P ( x ( 1 ) ) × P ( x ( 2 ) ∣ x ( 1 ) ) × ⋯ × P ( x ( T ) ∣ x ( T − 1 ) , … , x ( 1 ) ) = ∏ t = 1 T P ( x ( t ) ∣ x ( t − 1 ) , … , x ( 1 ) ) \begin{aligned} P\left(\boldsymbol{x}^{(1)}, \ldots, \boldsymbol{x}^{(T)}\right) &=P\left(\boldsymbol{x}^{(1)}\right) \times P\left(\boldsymbol{x}^{(2)} \mid \boldsymbol{x}^{(1)}\right) \times \cdots \times P\left(\boldsymbol{x}^{(T)} \mid \boldsymbol{x}^{(T-1)}, \ldots, \boldsymbol{x}^{(1)}\right) \ &=\prod_{t=1}^{T} P\left(\boldsymbol{x}^{(t)} \mid \boldsymbol{x}^{(t-1)}, \ldots, \boldsymbol{x}^{(1)}\right) \end{aligned} P(x(1),…,x(T))=P(x(1))×P(x(2)∣x(1))×⋯×P(x(T)∣x(T−1),…,x(1))=t=1∏TP(x(t)∣x(t−1),…,x(1))
- 语言模型提供的是 ∏ t = 1 T P ( x ( t ) ∣ x ( t − 1 ) , … , x ( 1 ) ) \prod_{t=1}^{T} P\left(\boldsymbol{x}^{(t)} \mid \boldsymbol{x}^{(t-1)}, \ldots, \boldsymbol{x}^{(1)}\right) ∏t=1TP(x(t)∣x(t−1),…,x(1))
1.3 随处可见的语言模型

1.4 随处可见的语言模型

1.5 n-gram 语言模型

the students opened their __
-
问题:如何学*一个语言模型?
-
回答(深度学*之前的时期):学*一个 n-gram 语言模型
-
定义:n-gram 是一个由 n n n 个连续单词组成的块
- unigrams:
the,students,opened,their - bigrams:
the students,students opened,opened their - trigrams:
the students opened,students opened their - 4-grams:
the students opened their
- unigrams:
-
想法:收集关于不同 n-gram 出现频率的统计数据,并使用这些数据预测下一个单词
1.6 n-gram 语言模型

- 首先,我们做一个简化假设: x ( t + 1 ) x^{(t+1)} x(t+1) 只依赖于前面的 n − 1 n-1 n−1 个单词
P ( x ( t + 1 ) ∣ x ( t ) , … , x ( 1 ) ) = P ( x ( t + 1 ) ∣ x ( t ) , … , x ( t − n + 2 ) ) = P ( x ( t + 1 ) , x ( t ) , … , x ( t − n + 2 ) ) P ( x ( t ) , … , x ( t − n + 2 ) ) \begin{aligned} P\left(\boldsymbol{x}^{(t+1)} \mid \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(1)}\right) & =P\left(\boldsymbol{x}^{(t+1)} \mid \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)\ &=\frac{P\left(\boldsymbol{x}^{(t+1)}, \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}{(t-n+2)}\right)}{P\left(\boldsymbol{x}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)} \end{aligned} P(x(t+1)∣x(t),…,x(1))=P(x(t+1)∣x(t),…,x(t−n+2))=P(x(t),…,x(t−n+2))P(x(t+1),x(t),…,x(t−n+2))
- 问题:如何得到 n-gram 和(n-1)-gram 的概率?
- 回答:通过在一些大型文本语料库中计算它们(统计*似)
≈ count ( x ( t + 1 ) , x ( t ) , … , x ( t − n + 2 ) ) count ( x ( t ) , … , x ( t − n + 2 ) ) \approx \frac{\operatorname{count}\left(\boldsymbol{x}^{(t+1)}, \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}{(t-n+2)}\right)}{\operatorname{count}\left(\boldsymbol{x}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)} ≈count(x(t),…,x(t−n+2))count(x(t+1),x(t),…,x(t−n+2))
1.7 n-gram 语言模型:示例

假设我们正在学*一个 4-gram 的语言模型
- 例如,假设在语料库中:
students opened their出现了 1000 1000 1000 次students opened their books出现了 400 400 400 次
P ( books ∣ students opened their ) = 0.4 P(\text{books} \mid \text{students opened their})=0.4 P(books∣students opened their)=0.4
students opened their exams出现了 100 100 100 次
P ( exams ∣ students opened their ) = 0.1 P( \text{exams} \mid \text{students opened their})=0.1 P(exams∣students opened their)=0.1
- 我们应该忽视上下文中的
proctor吗?- 在本例中,上下文里出现了
proctor,所以exams在这里的上下文中应该是比books概率更大的。
- 在本例中,上下文里出现了
1.8 n-gram 语言模型的稀疏性问题

-
问题 1:如果
students open their ww从未出现在数据中,那么概率值为 0 0 0 -
(Partial)解决方案:为每个 w ∈ V w \in V w∈V 添加极小数 δ \delta δ ,这叫做平滑。这使得词表中的每个单词都至少有很小的概率。
-
问题 2:如果
students open their从未出现在数据中,那么我们将无法计算任何单词 w w w 的概率值 -
(Partial)解决方案:将条件改为
open their,也叫做后退处理。 -
Note/注意: n n n 的增加使稀疏性问题变得更糟。一般情况下 n n n 不能大于 5 5 5。
1.9 n-gram 语言模型的存储问题

问题:需要存储你在语料库中看到的所有 n-grams 的计数
增加 n n n 或增加语料库都会增加模型大小
1.10 n-gram 语言模型在实践中的应用
Try for yourself: https://nlpforhackers.io/language-models/

- 你可以在你的笔记本电脑上,在几秒钟内建立一个超过 170 万个单词库(Reuters)的简单的三元组语言模型
- Reuters 是 商业和金融新闻的数据集
稀疏性问题:
- 概率分布的粒度不大。
today the company和today he bank都是 4/26,都只出现过四次
1.11 n-gram 语言模型的生成文本

-
可以使用语言模型来生成文本
-
使用 trigram 运行以上生成过程时,会得到上图左侧的文本
-
令人惊讶的是其具有语法但是是不连贯的。如果我们想要很好地模拟语言,我们需要同时考虑三个以上的单词。但增加 n n n 使模型的稀疏性问题恶化,模型尺寸增大
1.12 如何搭建一个神经语言模型?

-
回忆一下语言模型任务
- 输入:单词序列 x ( 1 ) , x ( 2 ) , … , x ( t ) \boldsymbol{x}^{(1)}, \boldsymbol{x}^{(2)}, \ldots, \boldsymbol{x}^{(t)} x(1),x(2),…,x(t)
- 输出:下一个单词的概 P ( x ( t + 1 ) ∣ x ( t ) , … , x ( 1 ) ) P\left(\boldsymbol{x}^{(t+1)} \mid \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(1)}\right) P(x(t+1)∣x(t),…,x(1))率分布
-
window-based neural model 在第三讲中被用于 NER 问题
1.13 固定窗口的神经语言模型

- 使用和 NER 问题中同样网络结构
1.14 固定窗口的神经语言模型

1.15 固定窗口的神经语言模型

超越 n-gram 语言模型的改进
- 没有稀疏性问题
- 不需要观察到所有的 n-grams
NNLM 存在的问题
- 固定窗口太小
- 扩大窗口就需要扩大权重矩阵 W W W
- 窗口再大也不够用
- x ( 1 ) x^{(1)} x(1)和 x ( 2 ) x^{(2)} x(2) 乘以完全不同的权重。输入的处理不对称
我们需要一个神经结构,可以处理任何长度的输入
2.循环神经网络(RNN)
2.1 循环神经网络(RNN)

- 核心想法:重复使用相同的权重矩阵 W W W
2.2 RNN 语言模型

2.3 RNN 语言模型

-
RNN 的优点
- 可以处理任意长度的输入
- 步骤 t t t 的计算(理论上)可以使用许多步骤前的信息
- 模型大小不会随着输入的增加而增加
- 在每个时间步上应用相同的权重,因此在处理输入时具有对称性
-
RNN 的缺点
- 循环串行计算速度慢
- 在实践中,很难从许多步骤前返回信息
2.4 训练一个 RNN 语言模型

-
获取一个较大的文本语料库,该语料库是一个单词序列
-
输入 RNN-LM;计算每个步骤 t t t 的输出分布
- 即预测到目前为止给定的每个单词的概率分布
-
步骤 t t t 上的损失函数为预测概率分布 y ^ ( t ) \hat{\boldsymbol{y}}^{(t)} y^(t) 与真实下一个单词 y ( t ) {\boldsymbol{y}}^{(t)} y(t) ( x ( t + 1 ) x^{(t+1)} x(t+1)的独热向量)之间的交叉熵
J ( t ) ( θ ) = C E ( y ( t ) , y ^ ( t ) ) = − ∑ w ∈ V y w ( t ) log y ^ w ( t ) = − log y ^ x t + 1 ( t ) J^{(t)}(\theta)=C E\left(\boldsymbol{y}^{(t)}, \hat{\boldsymbol{y}}^{(t)}\right)=-\sum_{w \in V} \boldsymbol{y}{w}^{(t)} \log \hat{\boldsymbol{y}}^{(t)}=-\log \hat{\boldsymbol{y}}{\boldsymbol{x}{t+1}}^{(t)} J(t)(θ)=CE(y(t),y(t))=−w∈V∑yw(t)logyw(t)=−logy^xt+1(t)
- 将其平均,得到整个训练集的总体损失
J ( θ ) = 1 T ∑ t = 1 T J ( t ) ( θ ) = 1 T ∑ t = 1 T − log y ^ x t + 1 ( t ) J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J^{(t)}(\theta)=\frac{1}{T} \sum_{t=1}^{T}-\log \hat{\boldsymbol{y}}{\boldsymbol{x}{t+1}}^{(t)} J(θ)=T1t=1∑TJ(t)(θ)=T1t=1∑T−logy^xt+1(t)
2.5 训练一个 RNN 语言模型

J ( 1 ) ( θ ) + J ( 2 ) ( θ ) + J ( 3 ) ( θ ) + J ( 4 ) ( θ ) + ⋯ = J ( θ ) = 1 T ∑ t = 1 T J ( t ) ( θ ) J{(1)}(\theta)+J(\theta)+J{(3)}(\theta)+J(\theta)+\cdots=J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J^{(t)}(\theta) J(1)(θ)+J(2)(θ)+J(3)(θ)+J(4)(θ)+⋯=J(θ)=T1t=1∑TJ(t)(θ)
2.6 训练一个 RNN 语言模型

- 然而:计算整个语料库 x ( 1 ) , … , x ( T ) \boldsymbol{x}^{(1)}, \ldots, \boldsymbol{x}^{(T)} x(1),…,x(T) 的损失和梯度太昂贵了
J ( θ ) = 1 T ∑ t = 1 T J ( t ) ( θ ) J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J^{(t)}(\theta) J(θ)=T1t=1∑TJ(t)(θ)
- 在实践中,我们通常将 x ( 1 ) , … , x ( T ) \boldsymbol{x}^{(1)}, \ldots, \boldsymbol{x}^{(T)} x(1),…,x(T) 看做一个句子或是文档
- 回忆:随机梯度下降允许我们计算小块数据的损失和梯度,并进行更新
- 计算一个句子的损失 J ( θ ) J(\theta) J(θ) (实际上是一批句子),计算梯度和更新权重。重复上述操作。
2.7 RNN 的反向传播

- 问题:关于 重复的 权重矩阵 W h W_h Wh 的偏导数 J ( t ) ( θ ) J^{(t)}(\theta) J(t)(θ)
- 回答:重复权重的梯度是每次其出现时的梯度的总和
∂ J ( t ) ∂ W h = ∑ i = 1 t ∂ J ( t ) ∂ W h ∣ ( i ) \frac{\partial J^{(t)}}{\partial \boldsymbol{W}{\boldsymbol{h}}}=\sum^{t}\left.\frac{\partial J^{(t)}}{\partial \boldsymbol{W}{\boldsymbol{h}}}\right| ∂Wh∂J(t)=i=1∑t∂Wh∂J(t)∣∣∣∣(i)
2.8 多变量链式法则

- 对于一个多变量函数 f ( x , y ) f(x,y) f(x,y) 和两个单变量函数 x ( t ) x(t) x(t) 和 y ( t ) y(t) y(t),其链式法则如下:
d d t f ( x ( t ) , y ( t ) ) = ∂ f ∂ x d x d t + ∂ f ∂ y d y d t \frac{d}{d t} f(x(t), y(t))=\frac{\partial f}{\partial x} \frac{d x}{d t}+\frac{\partial f}{\partial y} \frac{d y}{d t} dtdf(x(t),y(t))=∂x∂fdtdx+∂y∂fdtdy
2.9 RNN 的反向传播:简单证明

- 对于一个多变量函数 f ( x , y ) f(x,y) f(x,y) 和两个单变量函数 x ( t ) x(t) x(t) 和 y ( t ) y(t) y(t),其链式法则如下:
d d t f ( x ( t ) , y ( t ) ) = ∂ f ∂ x d x d t + ∂ f ∂ y d y d t \frac{d}{d t} f(x(t), y(t))=\frac{\partial f}{\partial x} \frac{d x}{d t}+\frac{\partial f}{\partial y} \frac{d y}{d t} dtdf(x(t),y(t))=∂x∂fdtdx+∂y∂fdtdy
2.10 RNN 的反向传播

- 问题:如何计算?
- 回答:反向传播的时间步长 i = t , … , 0 i=t,\dots,0 i=t,…,0。累加梯度。这个算法叫做 “backpropagation through time”
2.11 RNN 语言模型的生成文本

- 就像 n-gram 语言模型一样,你可以使用 RNN 语言模型通过重复采样来生成文本。采样输出是下一步的输入。
2.12 RNN 语言模型的生成文本
Source: https://medium.com/@samim/obama-rnn-machine-generated-political-speeches-c8abd18a2ea0
Source: https://medium.com/deep-writing/harry-potter-written-by-artificial-intelligence-8a9431803da6

Source: http://aiweirdness.com/post/160776374467/new-paint-colors-invented-by-neural-network

补充讲解
-
相比 n-gram 更流畅,语法正确,但总体上仍然很不连贯
-
食谱的例子中,生成的文本并没有记住文本的主题是什么
-
哈利波特的例子中,甚至有体现出了人物的特点,并且引号的开闭也没有出现问题
- 也许某些神经元或者隐藏状态在跟踪模型的输出是否在引号中
-
RNN 是否可以和手工规则结合?
- 例如 Beam Serach,但是可能很难做到
3.评估语言模型
3.1 评估语言模型

- 标准语言模型评估指标是 perplexity 困惑度
- 这等于交叉熵损失 J ( θ ) J(\theta) J(θ) 的指数
= ∏ t = 1 T ( 1 y ^ x t + 1 ( t ) ) 1 / T = exp ( 1 T ∑ t = 1 T − log y ^ x t + 1 ( t ) ) = exp ( J ( θ ) ) =\prod_{t=1}{T}\left(\frac{1}{\hat{y}_{x_{t+1}}{(t)}}\right)^{1 / T}=\exp \left(\frac{1}{T} \sum_{t=1}^{T}-\log \hat{\boldsymbol{y}}{\boldsymbol{x}{t+1}}^{(t)}\right)=\exp (J(\theta)) =t=1∏T(yxt+1(t)1)1/T=exp(T1t=1∑T−logyxt+1(t))=exp(J(θ))
- 困惑度越低效果越好
3.2 RNN 极大地改善了困惑度
Source: https://research.fb.com/building-an-efficient-neural-language-model-over-a-billion-words/

3.3 为什么我们要关心语言模型?

-
语言模型是一项基准测试任务,它帮助我们衡量我们在理解语言方面的 进展
- 生成下一个单词,需要语法,句法,逻辑,推理,现实世界的知识等
-
语言建模是许多 NLP 任务的子组件,尤其是那些涉及生成文本或估计文本概率的任务
- 预测性打字、语音识别、手写识别、拼写/语法纠正、作者识别、机器翻译、摘要、对话等等
3.4 要点回顾

- 语言模型:预测下一个单词的系统
- 循环神经网络:一系列神经网络
- 采用任意长度的顺序输入
- 在每一步上应用相同的权重
- 可以选择在每一步上生成输出
- 循环神经网络 ≠ \ne = 语言模型
- 我们已经证明,RNNs 是构建 LM 的一个很好的方法。
- 但 RNNs 的用处要大得多!
3.5 RNN 可用于句子分类

- 如何计算句子编码
- 基础方式:使用最终隐层状态
- 通常更好的方式:使用所有隐层状态的逐元素最值或均值
- Encoder 的结构在 NLP 中非常常见
3.6 RNN 语言模型可用于生成文本

- 这是一个条件语言模型的示例。我们使用语言模型组件,并且最关键的是,我们根据条件来调整它
4.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=6
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
5.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 7 讲 - 梯度消失问题与 RNN 变种

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言

(梯度消失和梯度爆炸部分内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章深度学*教程 | 深度学*的实用层面)
概述

上节课我们学了
- 递归神经网络(RNNs)以及为什么它们对于语言建模(LM)很有用
今天我们将学*
- RNNs 的问题以及如何修复它们
- 更复杂的RNN 变体
下一节课我们将学*
- 如何使用基于 RNN-based 的体系结构,即 sequence-to-sequence with attention 来实现
- 神经机器翻译(NMT)
今日课程要点

- 梯度消失问题
- 两种新类型 RNN:LSTM 和 GRU
- 其他梯度消失(爆炸)的解决方案
- 梯度裁剪
- 跳接
- 更多 RNN 变体
- 双向 RNN
- 多层 RNN
1.梯度消失
1.1 梯度消失问题

- 梯度消失问题:当这些梯度很小的时候,反向传播的越深入,梯度信号就会变得越来越小
1.2 梯度消失证明简述
Source: “On the difficulty of training recurrent neural networks”, Pascanu et al, 2013. http://proceedings.mlr.press/v28/pascanu13.pdf

h ( t ) = σ ( W h h ( t − 1 ) + W x x ( t ) + b 1 ) \boldsymbol{h}^{(t)}=\sigma\left(\boldsymbol{W}{h} \boldsymbol{h}^{(t-1)}+\boldsymbol{W} \boldsymbol{x}^{(t)}+\boldsymbol{b}_{1}\right) h(t)=σ(Whh(t−1)+Wxx(t)+b1)
- 因此通过链式法则得到:
∂ h ( t ) ∂ h ( t − 1 ) = diag ( σ ′ ( W h h ( t − 1 ) + W x x ( t ) + b 1 ) ) W h \frac{\partial \boldsymbol{h}^{(t)}}{\partial \boldsymbol{h}{(t-1)}}=\operatorname{diag}\left(\sigma\left(\boldsymbol{W}{h} \boldsymbol{h}^{(t-1)}+\boldsymbol{W} \boldsymbol{x}^{(t)}+\boldsymbol{b}{1}\right)\right) \boldsymbol{W} ∂h(t−1)∂h(t)=diag(σ′(Whh(t−1)+Wxx(t)+b1))Wh
-
考虑第 i i i 步上的损失梯度 J ( i ) ( θ ) J^{(i)}(θ) J(i)(θ),相对于第 j j j 步上的隐藏状态 h ( j ) h^{(j)} h(j)
-
如果权重矩阵 W h W_h Wh 很小,那么这一项也会随着 i i i 和 j j j 的距离越来越远而变得越来越小
1.3 梯度消失证明简述

- 考虑矩阵的 L2 范数
∥ ∂ J ( i ) ( θ ) ∂ h ( j ) ∥ ≤ ∥ ∂ J ( i ) ( θ ) ∂ h ( i ) ∥ ∥ W h ∥ ( i − j ) ∏ j < t ≤ i ∥ diag ( σ ′ ( W h h ( t − 1 ) + W x x ( t ) + b 1 ) ) ∥ \left|\frac{\partial J^{(i)}(\theta)}{\partial \boldsymbol{h}^{(j)}}\right| \leq\left|\frac{\partial J^{(i)}(\theta)}{\partial \boldsymbol{h}{(i)}}\right|\left|\boldsymbol{W}_{h}\right| \prod_{j<t \leq i}\left|\operatorname{diag}\left(\sigma^{\prime}\left(\boldsymbol{W}{h} \boldsymbol{h}^{(t-1)}+\boldsymbol{W} \boldsymbol{x}^{(t)}+\boldsymbol{b}_{1}\right)\right)\right| ∥∥∥∥∂h(j)∂J(i)(θ)∥∥∥∥≤∥∥∥∥∂h(i)∂J(i)(θ)∥∥∥∥∥Wh∥(i−j)j<t≤i∏∥∥∥diag(σ′(Whh(t−1)+Wxx(t)+b1))∥∥∥
-
Pascanu et al 表明,如果 W h W_h Wh 的最大特征值<1,梯度 ∥ ∂ J ( i ) ( θ ) ∂ h ( j ) ∥ |\frac{\partial J^{(i)}(\theta)}{\partial \boldsymbol{h}^{(j)}}| ∥∂h(j)∂J(i)(θ)∥ 将呈指数衰减
- 这里的界限是 1 1 1 因为我们使用的非线性函数是 sigmoid
-
有一个类似的证明将一个最大的特征值 > 1 与梯度爆炸联系起来
1.4 为什么梯度消失是个问题?

- 来自远处的梯度信号会丢失,因为它比来自*处的梯度信号小得多。
- 因此,模型权重只会根据*期效应而不是长期效应进行更新。
1.5 为什么梯度消失是个问题?

-
另一种解释:梯度可以被看作是过去对未来的影响的衡量标准
-
如果梯度在较长一段距离内(从时间步 t t t 到 t + n t+n t+n)变得越来越小,那么我们就不能判断:
- 在数据中,步骤 t t t 和 t + n t+n t+n 之间没有依赖关系
- 我们用错误的参数来捕获 t t t 和 t + n t+n t+n 之间的真正依赖关系
1.6 梯度消失对 RNN 语言模型的影响

-
为了从这个训练示例中学*,RNN-LM 需要对第 7 步的
tickets和最后的目标单词tickets之间的依赖关系建模 -
但是如果梯度很小,模型就不能学*这种依赖关系
- 因此模型无法在测试时预测类似的长距离依赖关系
1.7 梯度消失对 RNN 语言模型的影响
“Assessing the Ability of LSTMs to Learn Syntax-Sensitive Dependencies”, Linzen et al, 2016. https://arxiv.org/pdf/1611.01368.pdf

-
Correct answer:
- The writer of the books is planning a sequel
-
语法*因
-
顺序*因
-
由于梯度的消失,RNN-LMs 更善于从顺序*因学*而不是语法*因,所以他们犯这种错误的频率比我们希望的要高[Linzen et al . 2016]
2.梯度爆炸
2.1 为什么梯度爆炸是个问题?

-
如果梯度过大,则 SGD 更新步骤过大
-
这可能导致错误的更新:我们更新的太多,导致错误的参数配置(损失很大)
-
在最坏的情况下,这将导致网络中的 Inf 或 NaN(然后你必须从较早的检查点重新启动训练)
2.2 梯度剪裁:梯度爆炸的解决方案
Source: “On the difficulty of training recurrent neural networks”, Pascanu et al, 2013. http://proceedings.mlr.press/v28/pascanu13.pdf

-
梯度裁剪:如果梯度的范数大于某个阈值,在应用 SGD 更新之前将其缩小
-
直觉:朝着同样的方向迈出一步,但要小一点
2.3 梯度剪裁:梯度爆炸的解决方案
Source: “Deep Learning”, Goodfellow, Bengio and Courville, 2016. Chapter 10.11.1. https://www.deeplearningbook.org/contents/rnn.html

-
这显示了一个简单 RNN 的损失面(隐藏层状态是一个标量不是一个向量)
-
在左边,由于陡坡,梯度下降有两个非常大的步骤,导致攀登悬崖然后向右射击(都是坏的更新)
-
在右边,梯度剪裁减少了这些步骤的大小,所以参数调整不会有剧烈的波动
2.4 如何解决梯度消失问题?

- 主要问题是 RNN 很难学*在多个时间步长的情况下保存信息
- 在普通的 RNN 中,隐藏状态不断被重写
h ( t ) = σ ( W h h ( t − 1 ) + W x x ( t ) + b ) \boldsymbol{h}^{(t)}=\sigma\left(\boldsymbol{W}{h} \boldsymbol{h}^{(t-1)}+\boldsymbol{W} \boldsymbol{x}^{(t)}+\boldsymbol{b}\right) h(t)=σ(Whh(t−1)+Wxx(t)+b)
- 有没有更好结构的 RNN
3.长短时记忆网络(LSTM)
3.1 长短时记忆(LSTM)
“Long short-term memory”, Hochreiter and Schmidhuber, 1997. https://www.bioinf.jku.at/publications/older/2604.pdf

-
Hochreiter 和 Schmidhuber 在 1997 年提出了一种 RNN,用于解决梯度消失问题。
-
在第 t t t 步,有一个隐藏状态 h ( t ) h^{(t)} h(t) 和一个单元状态 c ( t ) c^{(t)} c(t)
- 都是长度为 n n n 的向量
- 单元存储长期信息
- LSTM 可以从单元中擦除、写入和读取信息
-
信息被 擦除 / 写入 / 读取 的选择由三个对应的门控制
- 门也是长度为 n n n 的向量
- 在每个时间步长上,门的每个元素可以打开(1)、关闭(0)或介于两者之间
- 门是动态的:它们的值是基于当前上下文计算的
3.2 长短时记忆(LSTM)

我们有一个输入序列 x ( t ) x^{(t)} x(t),我们将计算一个隐藏状态 h ( t ) h^{(t)} h(t) 和单元状态 c ( t ) c^{(t)} c(t) 的序列。在时间步 t t t 时
-
遗忘门:控制上一个单元状态的保存与遗忘
-
输入门:控制写入单元格的新单元内容的哪些部分
-
输出门:控制单元的哪些内容输出到隐藏状态
-
新单元内容:这是要写入单元的新内容
-
单元状态:删除(“忘记”)上次单元状态中的一些内容,并写入(“输入”)一些新的单元内容
-
隐藏状态:从单元中读取(“output”)一些内容
-
Sigmoid 函数:所有的门的值都在 0 到 1 之间
-
通过逐元素的乘积来应用门
-
这些是长度相同( n n n)的向量
3.3 长短时记忆(LSTM)
Source: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

3.4 长短时记忆(LSTM)
Source: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

3.5 LSTM 如何解决梯度消失

-
RNN 的 LSTM 架构更容易保存许多时间步上的信息
- 如果忘记门设置为记得每一时间步上的所有信息,那么单元中的信息被无限地保存
- 相比之下,普通 RNN 更难学*重复使用并且在隐藏状态中保存信息的矩阵 W h W_h Wh
-
LSTM 并不保证没有梯度消失/爆炸,但它确实为模型提供了一种更容易的方法来学*远程依赖关系
3.6 LSTMs:现实世界的成功
Source: “Findings of the 2016 Conference on Machine Translation (WMT16)”, Bojar et al. 2016, http://www.statmt.org/wmt16/pdf/W16-2301.pdf Source: "Findings of the 2018
Conference on Machine Translation (WMT18)", Bojar et al. 2018, http://www.statmt.org/wmt18/pdf/WMT028.pdf

-
2013-2015 年,LSTM 开始实现最先进的结果
- 成功的任务包括:手写识别、语音识别、机器翻译、解析、图像字幕
- LSTM 成为主导方法
-
现在(2019 年),其他方法(如 Transformers)在某些任务上变得更加主导
- 例如在 WMT(a MT conference + competition)中
- 在 2016 年 WMT 中,总结报告包含“RNN”44 次
- 在 2018 年 WMT 中,总结报告包含“RNN”9 次,“Transformers” 63 次
4.GRU 网络
4.1 Gated Recurrent Units(GRU)
“Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation”, Cho et al. 2014, https://arxiv.org/pdf/1406.1078v3.pdf

-
Cho 等人在 2014 年提出了 LSTM 的一个更简单的替代方案
-
在每个时间步 t t t 上,我们都有输入 x ( t ) x^{(t)} x(t) 和隐藏状态 h ( t ) h^{(t)} h(t) (没有单元状态)
-
更新门:控制隐藏状态的哪些部分被更新,或者被保留
-
重置门:控制之前隐藏状态的哪些部分被用于计算新内容
-
新的隐藏状态内容:重置门选择之前隐藏状态的有用部分。使用这一部分和当前输入来计算新的隐藏状态内容
-
隐藏状态:更新门同时控制从以前的隐藏状态保留的内容,以及更新到新的隐藏状态内容的内容
-
这如何解决消失梯度?
- 与 LSTM 类似,GRU 使长期保存信息变得更容易(例如,将 update gate 设置为 0)
4.2 LSTM vs GRU

-
研究人员提出了许多门控 RNN 变体,其中 LSTM 和 GRU 的应用最为广泛
-
最大的区别是GRU 计算速度更快,参数更少
-
没有确凿的证据表明其中一个总是比另一个表现得更好
-
LSTM 是一个很好的默认选择(特别是当你的数据具有非常长的依赖关系,或者你有很多训练数据时)
-
经验法则:从 LSTM 开始,但是如果你想要更有效率,就切换到 GRU
4.3 梯度消失/爆炸只是 RNN 问题吗?
“Deep Residual Learning for Image Recognition”, He et al, 2015. https://arxiv.org/pdf/1512.03385.pdf
“Densely Connected Convolutional Networks”, Huang et al, 2017. https://arxiv.org/pdf/1608.06993.pdf
“Highway Networks”, Srivastava et al, 2015. https://arxiv.org/pdf/1505.00387.pdf
“Learning Long-Term Dependencies with Gradient Descent is Difficult”, Bengio et al. 1994, http://ai.dinfo.unifi.it/paolo//ps/tnn-94-gradient.pdf

梯度消失/爆炸只是 RNN 问题吗?
- 并不是,这对于所有的神经结构(包括前馈和卷积网络)都是一个问题,尤其是对于深度结构
- 由于链式法则/选择非线性函数,反向传播时梯度可以变得很小很小
- 因此,较低层次的学*非常缓慢(难以训练)
- 解决方案:大量新的深层前馈 / 卷积架构,添加更多的直接连接(从而使梯度可以流动)
例如:
- 残差连接又名“ResNet”,也称为跳转连接
- 默认情况下,标识连接保存信息
- 这使得深层网络更容易训练
例如:
- 密集连接又名“DenseNet”
- 直接将所有内容连接到所有内容
例如:
- Highway 连接又称“高速网络”
- 类似于残差连接,但标识连接与转换层由动态门控制
- 灵感来自 LSTMs,但适用于深度前馈/卷积网络
结论:虽然梯度消失/爆炸是一个普遍的问题,但由于重复乘以相同的权矩阵,RNN 尤其不稳定[Bengio et al, 1994]
4.4 要点回顾

4.5 双向 RNN:动机

-
我们可以把这种隐藏状态看作是这个句子中单词“terribly”的一种表示。我们称之为上下文表示。
-
这些上下文表示只包含关于左上下文的信息(例如“the movie was”)。
-
那么正确的上下文呢?
- 在这个例子中,“exciting”在右上下文中,它修饰了“terribly”的意思(从否定变为肯定)
4.6 双向 RNN

- “terribly”的上下文表示同时具有左上下文和右上下文
4.7 双向 RNN

- 这是一个表示“计算 RNN 的一个向前步骤”的通用符号——它可以是普通的、LSTM 或 GRU 计算
- 我们认为这是一个双向 RNN 的“隐藏状态”。这就是我们传递给网络下一部分的东西
- 一般来说,这两个 RNNs 有各自的权重
4.8 双向 RNN:简图

- 双向箭头表示双向性,所描述的隐藏状态是正向+反向状态的连接
4.9 双向 RNN

-
注意:双向 RNNs 只适用于访问整个输入序列的情况
- 它们不适用于语言建模,因为在 LM 中,你只有左侧的上下文可用
-
如果你有完整的输入序列(例如任何一种编码),双向性是强大的(默认情况下你应该使用它)
-
例如,BERT(来自 transformer 的双向编码器表示)是一个基于双向性的强大的预训练的上下文表示系统
- 你会在课程的后面学到更多关于 BERT 的知识!
4.10 深层 RNN

- RNNs 在一个维度上已经是“deep”(它们展开到许多时间步长)
- 我们还可以通过应用多个 RNN使它们“深入”到另一个维度:这是一个多层 RNN
- 较低的 RNN应该计算较低级别的特性,而较高的 RNN应该计算较高级别的特性
- 多层 RNN 也称为堆叠 RNN
4.11 深层 RNN

- RNN 层 i i i 的隐藏状态是 RNN 层 i + 1 i+1 i+1 的输入
4.12 深层 RNN 在实践中的应用
“Massive Exploration of Neural Machine Translation Architecutres”, Britz et al, 2017. https://arxiv.org/pdf/1703.03906.pdf

-
高性能的 RNNs 通常是多层的(但没有卷积或前馈网络那么深)
-
例如:在 2017 年的一篇论文,Britz et al 发现在神经机器翻译中,2 到 4 层 RNN 编码器是最好的,和 4 层 RNN 解码器
- 但是,skip-connections / dense-connections 需要训练更深 RNNs(例如 8 层)
- RNN 无法并行化,计算代价过大,所以不会过深
-
Transformer-based 的网络(如 BERT)可以多达 24 层
- BERT 有很多 skipping-like 的连接
4.13 总结

- LSTM 功能强大,但 GRU 速度更快
- 剪裁你的梯度
- 尽可能使用双向性
- 多层 RNN 功能强大,但如果很深可能需要跳接/密集连接
5.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=7
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
6.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 8 讲 - 机器翻译、seq2seq 与注意力机制

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言

概述

- 引入新任务:机器翻译
- 引入一种新的神经结构:sequence-to-sequence
- 机器翻译是 sequence-to-sequence 的一个主要用例
- 引入一种新的神经技术:注意力
- sequence-to-sequence 通过 attention 得到提升
1.机器翻译与 SMT(统计机器翻译)
1.1 Pre-neural Machine Translation

1.2 机器翻译

机器翻译(MT)是将一个句子 x x x 从一种语言(源语言)转换为另一种语言(目标语言)的句子 y y y 的任务。
1.3 1950s:早期机器翻译

机器翻译研究始于 20 世纪 50 年代初。
- 俄语 → 英语(冷战的推动)
- 系统主要是基于规则的,使用双语词典来讲俄语单词映射为对应的英语部分
1.4 1990s-2010s:统计机器翻译

-
核心想法:从数据中学*概率模型
-
假设我们正在翻译法语 → 英语
-
对于给定法语句子 x x x,我们想要找到最好的英语句子 y y y
a r g m a x y P ( y ∣ x ) argmax_yP(y \mid x) argmaxyP(y∣x)
- 使用 Bayes 规则将其分解为两个组件从而分别学*
a r g m a x y P ( x ∣ y ) P ( y ) argmax_yP(x \mid y) P(y) argmaxyP(x∣y)P(y)
-
P ( x ∣ y ) P(x \mid y) P(x∣y):Translation Model / 翻译模型
- 分析单词和短语应该如何翻译(逼真)
- 从并行数据中学*
-
P ( y ) P(y) P(y):Language Model / 语言模型
- 模型如何写出好英语(流利)
- 从单语数据中学*
1.5 1990s-2010s:统计机器翻译

-
问题:如何学*翻译模型 P(x \mid y)?
-
首先,需要大量的并行数据(例如成对的人工翻译的法语/英语句子)
1.6 SMT 的学*对齐

- 问题:如何从并行语料库中学*翻译模型 P ( x ∣ y ) P(x \mid y) P(x∣y)?
- 进一步分解:我们实际上想要考虑
P ( x , a ∣ y ) P(x,a \mid y) P(x,a∣y)
- a a a 是对齐
- 即法语句子 x x x 和英语句子 y y y 之间的单词级对应
1.7 对齐
Examples from: “The Mathematics of Statistical Machine Translation: Parameter Estimation", Brown et al, 1993. http://www.aclweb.org/anthology/J93-2003

- 对齐是翻译句子中特定词语之间的对应关系
- 注意:有些词没有对应词
1.8 对齐是复杂的

- 对齐可以是多对一的
1.9 对齐是复杂的

- 对齐可以是一对多的
1.10 对齐是复杂的

-
有些词很丰富
-
对齐可以是多对多(短语级)
-
我们学*很多因素的组合,包括
- 特定单词对齐的概率(也取决于发送位置)
- 特定单词具有特定多词对应的概率(对应单词的数量)
1.11 SMT 的学*对齐

-
问题:如何计算 argmax
- 我们可以列举所有可能的 y y y 并计算概率?→ 计算成本太高
-
回答:使用启发式搜索算法搜索最佳翻译,丢弃概率过低的假设
- 这个过程称为解码
1.12 SMT 解码
Source: ”Statistical Machine Translation", Chapter 6, Koehn, 2009. https://www.cambridge.org/core/books/statistical-machine-translation/94EADF9F680558E13BE759997553CDE5

1.13 SMT 解码

1.14 1990s-2010s:统计机器翻译

-
SMT 是一个巨大的研究领域
-
最好的系统非常复杂
- 数以百计的重要细节我们还没有提到
- 系统有许多独立设计子组件工程
- 大量特征工程
- 很多功能需要设计特性来获取特定的语言现象
- 需要编译和维护额外的资源
- 比如双语短语对应表
- 需要大量的人力来维护
- 对于每一对语言都需要重复操作
2.神经网络机器翻译
2.1 Neural Machine Translation

2.2 神经机器翻译(NMT)

2.3 神经机器翻译(NMT)

-
神经机器翻译(NMT)是利用单个神经网络进行机器翻译的一种方法
-
神经网络架构称为 sequence-to-sequence (又名 seq2seq),它包含两个 RNNs
2.4 神经机器翻译(NMT)

-
编码器 RNN 生成源语句的编码
-
源语句的编码为解码器 RNN 提供初始隐藏状态
-
解码器 RNN 是一种以编码为条件生成目标句的语言模型
-
注意:此图显示了测试时行为 → 解码器输出作为下一步的输入
2.5 Sequence-to-sequence 是多功能的!

-
序列到序列不仅仅对机器翻译有用
-
许多 NLP 任务可以按照顺序进行表达
- 摘要(长文本 → 短文本)
- 对话(前一句话 → 下一句话)
- 解析(输入文本 → 输出解析为序列)
- 代码生成(自然语言 → Python 代码)
2.6 神经机器翻译(NMT)

-
sequence-to-sequence 模型是条件语言模型的一个例子
- 语言模型(Language Model),因为解码器正在预测目标句的下一个单词 y y y
- 条件约束的(Conditional),因为预测也取决于源句 x x x
-
NMT 直接计算 P ( y ∣ x ) P(y \mid x) P(y∣x)
P ( y ∣ x ) = P ( y 1 ∣ x ) P ( y 2 ∣ y 1 , x ) P ( y 3 ∣ y 1 , y 2 , x ) … P ( y T ∣ y 1 , … , y T − 1 , x ) P(y | x)=P\left(y_{1} | x\right) P\left(y_{2} | y_{1}, x\right) P\left(y_{3} | y_{1}, y_{2}, x\right) \ldots P\left(y_{T} | y_{1}, \ldots, y_{T-1}, x\right) P(y∣x)=P(y1∣x)P(y2∣y1,x)P(y3∣y1,y2,x)…P(yT∣y1,…,yT−1,x)
-
上式中最后一项为,给定到目前为止的目标词和源句 x x x,下一个目标词的概率
-
问题:如何训练 NMT 系统?
-
回答:找一个大的平行语料库
2.7 训练一个机器翻译系统

- Seq2seq 被优化为一个单一的系统。反向传播运行在“端到端”中
3.机器翻译解码
3.1 贪婪解码

-
我们了解了如何生成(或“解码”)目标句,通过对解码器的每个步骤使用 argmax
-
这是贪婪解码(每一步都取最可能的单词)
-
这种方法有问题吗?
3.2 贪婪解码的问题

-
贪婪解码没有办法撤销决定
-
如何修复?
3.3 穷举搜索解码

-
理想情况下,我们想要找到一个(长度为 T T T )的翻译 y y y 使其最大化
-
我们可以尝试计算所有可能的序列 y y y
- 这意味着在解码器的每一步 t t t ,我们跟踪 V t V^t Vt 个可能的部分翻译,其中 V V V 是 vocab 大小
- 这种 O ( V T ) O(V^T) O(VT) 的复杂性太昂贵了!
3.4 集束搜索解码

-
核心思想:在解码器的每一步,跟踪 k k k 个最可能的部分翻译(我们称之为假设[hypotheses ] )
- k k k 是 Beam 的大小(实际中大约是 5 到 10)
-
假设 y 1 , … , y t y_1, \ldots,y_t y1,…,yt 有一个分数,即它的对数概率
score ( y 1 , … , y t ) = log P L M ( y 1 , … , y t ∣ x ) = ∑ i = 1 t log P LM ( y i ∣ y 1 , … , y i − 1 , x ) \operatorname{score}\left(y_{1}, \ldots, y_{t}\right)=\log P_{\mathrm{LM}}\left(y_{1}, \ldots, y_{t} | x\right)=\sum_{i=1}^{t} \log P_{\operatorname{LM}}\left(y_{i} | y_{1}, \ldots, y_{i-1}, x\right) score(y1,…,yt)=logPLM(y1,…,yt∣x)=i=1∑tlogPLM(yi∣y1,…,yi−1,x)
-
分数都是负数,分数越高越好
-
我们寻找得分较高的假设,跟踪每一步的 top k 个部分翻译
-
波束搜索 不一定能 找到最优解
-
但比穷举搜索效率高得多
3.5 集束搜索解码:示例

- Beam size = k = 2
- 蓝色的数字是
score ( y 1 , … , y t ) = ∑ i = 1 t log P LM ( y i ∣ y 1 , … , y i − 1 , x ) \operatorname{score}\left(y_{1}, \ldots, y_{t}\right)=\sum_{i=1}^{t} \log P_{\operatorname{LM}}\left(y_{i} | y_{1}, \ldots, y_{i-1}, x\right) score(y1,…,yt)=i=1∑tlogPLM(yi∣y1,…,yi−1,x)
-
计算下一个单词的概率分布
-
取前 k k k 个单词并计算分数
-
对于每一次的 k k k 个假设,找出最前面的 k k k 个单词并计算分数
-
在 k 2 k² k2 的假设中,保留 k k k 个最高的分值
- t = 2 t = 2 t=2 时,保留分数最高的
hit和was - t = 3 t = 3 t=3 时,保留分数最高的
a和me - t = 4 t = 4 t=4 时,保留分数最高的
pie和with - t = 5 t = 5 t=5 时,保留分数最高的
a和one - t = 6 t = 6 t=6 时,保留分数最高的
pie
- t = 2 t = 2 t=2 时,保留分数最高的
-
-
这是最高得分的假设
-
回溯以获得完整的假设
3.6 集束搜索解码:停止判据

-
在贪心解码中,我们通常解码到模型产生一个 令牌
- 例如: he hit me with a pie
-
在集束搜索解码中,不同的假设可能在不同的时间步长上产生 令牌
- 当一个假设生成了 令牌,该假设完成
- 把它放在一边,通过 Beam Search 继续探索其他假设
-
通常我们继续进行 Beam Search ,直到
- 我们到达时间步长 T T T (其中 T T T 是预定义截止点)
- 我们至少有 n n n 个已完成的假设(其中 n n n 是预定义截止点)
3.7 集束搜索解码:完成

-
我们有完整的假设列表
-
如何选择得分最高的?
-
我们清单上的每个假设 y 1 , … , y t y_1, \ldots ,y_t y1,…,yt 都有一个分数
score ( y 1 , … , y t ) = log P L M ( y 1 , … , y t ∣ x ) = ∑ i = 1 t log P LM ( y i ∣ y 1 , … , y i − 1 , x ) \operatorname{score}\left(y_{1}, \ldots, y_{t}\right)=\log P_{\mathrm{LM}}\left(y_{1}, \ldots, y_{t} \mid x\right)=\sum_{i=1}^{t} \log P_{\operatorname{LM}}\left(y_{i} \mid y_{1}, \ldots, y_{i-1}, x\right) score(y1,…,yt)=logPLM(y1,…,yt∣x)=i=1∑tlogPLM(yi∣y1,…,yi−1,x)
-
问题在于 :较长的假设得分较低
-
修正:按长度标准化。用下式来选择 top one
1 t ∑ i = 1 t log P L M ( y i ∣ y 1 , … , y i − 1 , x ) \frac{1}{t} \sum_{i=1}^{t} \log P_{\mathrm{LM}}\left(y_{i} \mid y_{1}, \ldots, y_{i-1}, x\right) t1i=1∑tlogPLM(yi∣y1,…,yi−1,x)
3.8 神经机器翻译(NMT)的优点

与 SMT 相比,NMT 有很多优点
-
更好的性能
- 更流利
- 更好地使用上下文
- 更好地使用短语相似性
-
单个神经网络端到端优化
- 没有子组件需要单独优化
-
需要更少的人类工程付出
- 无特征工程
- 所有语言对的方法相同
3.9 神经机器翻译(NMT)的缺点

SMT 相比,NMT 的缺点
-
NMT 的可解释性较差
- 难以调试
-
NMT 很难控制
- 例如,不能轻松指定翻译规则或指南
- 安全问题
4.机器翻译评估
4.1 如何评估机器翻译质量

-
BLEU (Bilingual Evaluation Understudy)
- 你将会在 Assignment 4 中看到 BLEU 的细节
-
BLEU 将机器翻译和人工翻译(一个或多个),并计算一个相似的分数
- n-gram 精度 (n 通常为 1-4)
- 对过于短的机器翻译的加上惩罚
-
BLEU 很有用,但不完美
- 有很多有效的方法来翻译一个句子
- 所以一个好的翻译可以得到一个糟糕的 BLEU score,因为它与人工翻译的 n-gram 重叠较低
4.2 MT 随时间推移的进步
Source: http://www.meta-net.eu/events/meta-forum-2016/slides/09_sennrich.pdf

4.3 NMT:NLP 深度学*的最大成功案例

神经机器翻译于 2014 年从边缘研究活动到 2016 年成为领先标准方法
-
2014:第一篇 seq2seq 的文章发布
-
2016:谷歌翻译从 SMT 换成了 NMT
-
这是惊人的
- 由数百名工程师历经多年打造的 SMT 系统,在短短几个月内就被少数工程师训练过的 NMT 系统超越
4.4 机器翻译问题完美解决了吗?
Further reading: “Has AI surpassed humans at translation? Not even close!” https://www.skynettoday.com/editorials/state_of_nmt
Source: https://hackernoon.com/bias-sexist-or-this-is-the-way-it-should-be-ce1f7c8c683c
Picture source: https://www.vice.com/en_uk/article/j5npeg/why-is-google-translate-spitting-out-sinister-religious-prophecies
Explanation: https://www.skynettoday.com/briefs/google-nmt-prophecies

-
没有!
-
许多困难仍然存在
- 词表外的单词处理
- 训练和测试数据之间的领域不匹配
- 在较长文本上维护上下文
- 资源较低的语言对
-
使用常识仍然很难
-
NMT 在训练数据中发现偏差
-
无法解释的系统会做一些奇怪的事情
4.5 NMT 研究仍在继续

-
NMT 是 NLP 深度学*的核心任务
-
NMT 研究引领了 NLP 深度学*的许多最新创新
-
2019 年:NMT 研究将继续蓬勃发展
- 研究人员发现,对于我们今天介绍的普通 seq2seq NMT 系统,有很多、很多的改进。
- 但有一个改进是如此不可或缺
5.注意力机制
5.1 Attention

5.2 Sequence-to-sequence:瓶颈问题

- 源语句的编码
- 需要捕获关于源语句的所有信息
- 信息瓶颈!
5.3 注意力

-
注意力为瓶颈问题提供了一个解决方案
-
核心理念:在解码器的每一步,使用与编码器的直接连接来专注于源序列的特定部分
-
首先我们将通过图表展示(没有方程),然后我们将用方程展示
5.4 带注意力机制的序列到序列模型

-
将解码器部分的第一个 token 与源语句中的每一个时间步的隐藏状态进行 Dot Product 得到每一时间步的分数
-
通过 softmax 将分数转化为概率分布
-
在这个解码器时间步长上,我们主要关注第一个编码器隐藏状态(“he”)
-
利用注意力分布对编码器的隐藏状态进行加权求和
-
注意力输出主要包含来自于受到高度关注的隐藏状态的信息
-
连接的注意力输出与解码器隐藏状态 ,然后用来计算 y ^ 1 \hat y_1 y^1
-
有时,我们从前面的步骤中提取注意力输出,并将其输入解码器(连同通常的解码器输入)。我们在作业 4 中做这个。
5.5 注意力:公式

- 我们有编码器隐藏状态 h 1 , … , h N ∈ R h h_{1}, \ldots, h_{N} \in \mathbb{R}^{h} h1,…,hN∈Rh
- 在时间步 t t t 上,我们有解码器隐藏状态 s t ∈ R h s_{t} \in \mathbb{R}^{h} st∈Rh
- 我们得到这一步的注意分数
e t = [ s t T h 1 , … , s t T h N ] ∈ R N e{t}=\left[s_{t} \boldsymbol{h}{1}, \ldots, \boldsymbol{s}^{T} \boldsymbol{h}_{N}\right] \in \mathbb{R}^{N} et=[stTh1,…,stThN]∈RN
- 我们使用 softmax 得到这一步的注意分布 α t \alpha^{t} αt (这是一个概率分布,和为 1)
α t = softmax ( e t ) ∈ R N \alpha{t}=\operatorname{softmax}\left(e\right) \in \mathbb{R}^{N} αt=softmax(et)∈RN
- 我们使用 α t \alpha^{t} αt 来获得编码器隐藏状态的加权和,得到注意力输出 α t \alpha^{t} αt
a t = ∑ i = 1 N α i t h i ∈ R h \boldsymbol{a}{t}=\sum^{N} \alpha_{i}^{t} \boldsymbol{h}_{i} \in \mathbb{R}^{h} at=i=1∑Nαithi∈Rh
- 最后,我们将注意输出 α t \alpha^{t} αt 与解码器隐藏状态连接起来,并按照非注意 seq2seq 模型继续进行
[ a t ; s t ] ∈ R 2 h \left[\boldsymbol{a}{t} ; \boldsymbol{s}\right] \in \mathbb{R}^{2 h} [at;st]∈R2h
5.6 注意力很棒!

-
注意力显著提高了NMT 性能
- 这是非常有用的,让解码器专注于某些部分的源语句
-
注意力解决瓶颈问题
- 注意力允许解码器直接查看源语句;绕过瓶颈
-
注意力帮助消失梯度问题
- 提供了通往遥远状态的捷径
-
注意力提供了一些可解释性
- 通过检查注意力的分布,我们可以看到解码器在关注什么
- 我们可以免费得到(软)对齐
- 这很酷,因为我们从来没有明确训练过对齐系统
- 网络只是自主学*了对齐
5.7 注意力是一种普遍的深度学*技巧

-
我们已经看到,注意力是改进机器翻译的序列到序列模型的一个很好的方法
-
然而:你可以在许多结构(不仅仅是 seq2seq)和许多任务(不仅仅是 MT)中使用注意力
-
我们有时说 query attends to the values
-
例如,在 seq2seq + attention 模型中,每个解码器的隐藏状态(查询)关注所有编码器的隐藏状态(值)
5.8 注意力是一种普遍的深度学*技巧

-
注意力的更一般定义
- 给定一组向量值和一个向量查询,注意力是一种根据查询,计算值的加权和的技术
-
直觉
- 加权和是值中包含的信息的选择性汇总,查询在其中确定要关注哪些值
- 注意是一种获取任意一组表示(值)的固定大小表示的方法,依赖于其他一些表示(查询)。
5.9 有几种注意力的变体

-
候选值 h 1 , … , h N ∈ R d 1 \boldsymbol{h}{1}, \ldots, \boldsymbol{h} \in \mathbb{R}^{d_{1}} h1,…,hN∈Rd1,查询 s ∈ R d 2 s \in \mathbb{R}^{d_{2}} s∈Rd2
-
注意力总是包括:
- 计算注意力得分 e ∈ R N e \in \mathbb{R}^{N} e∈RN (很多种计算方式)
- 采取 softmax 来获得注意力分布 α \alpha α
α = softmax ( e ) ∈ R N \alpha=\operatorname{softmax}(\boldsymbol{e}) \in \mathbb{R}^{N} α=softmax(e)∈RN
- 使用注意力分布对值进行加权求和:从而得到注意力输出 α \alpha α (有时称为上下文向量)
a = ∑ i = 1 N α i h i ∈ R d 1 \boldsymbol{a}=\sum_{i=1}^{N} \alpha_{i} \boldsymbol{h}{i} \in \mathbb{R}^{d{1}} a=i=1∑Nαihi∈Rd1
5.10 注意力的变体
More information: “Deep Learning for NLP Best Practices”, Ruder, 2017. http://ruder.io/deep-learning-nlp-best-practices/index.html#attention
“Massive Exploration of Neural Machine Translation Architectures”, Britz et al, 2017, https://arxiv.org/pdf/1703.03906.pdf

-
有几种方法可以从 h 1 , … , h N ∈ R d 1 \boldsymbol{h}{1}, \ldots, \boldsymbol{h} \in \mathbb{R}^{d_{1}} h1,…,hN∈Rd1 计算 e ∈ R N e \in \mathbb{R}^{N} e∈RN 和 s ∈ R d 2 s \in \mathbb{R}^{d_{2}} s∈Rd2
-
基本的点乘注意力 e i = s T h i ∈ R \boldsymbol{e}{i}=\boldsymbol{s}^{T} \boldsymbol{h} \in \mathbb{R} ei=sThi∈R
- 注意:这里假设 d 1 = d 2 d_1 = d_2 d1=d2 [这是我们之前看到的版本]
-
乘法注意力 e i = s T W h i ∈ R e_{i}=s^{T} \boldsymbol{W} \boldsymbol{h}_{i} \in \mathbb{R} ei=sTWhi∈R
- W ∈ R d 2 × d 1 \boldsymbol{W} \in \mathbb{R}^{d_{2} \times d_{1}} W∈Rd2×d1 是权重矩阵
-
加法注意力 e i = v T tanh ( W 1 h i + W 2 s ) ∈ R e_{i}=\boldsymbol{v}^{T} \tanh \left(\boldsymbol{W}{1} \boldsymbol{h}+\boldsymbol{W}_{2} \boldsymbol{s}\right) \in \mathbb{R} ei=vTtanh(W1hi+W2s)∈R
- 其中 W 1 ∈ R d 3 × d 1 , W 2 ∈ R d 3 × d 2 \boldsymbol{W}{1} \in \mathbb{R}^{d \times d_{1}}, \boldsymbol{W}{2} \in \mathbb{R}^{d \times d_{2}} W1∈Rd3×d1,W2∈Rd3×d2 是权重矩阵, v ∈ R d 3 \boldsymbol{v} \in \mathbb{R}^{d_{3}} v∈Rd3 是权重向量 , d 3 d_3 d3 (注意力维度)是一个超参数
5.11 课程总结

-
我们学*了一些机器翻译的历史
-
自 2014 年以来,神经机器翻译迅速取代了复杂的统计机器翻译
-
Sequence-to-sequence 是 NMT 的体系结构(使用 2 个 RNN)
-
注意力是一种集中注意力的方法
- 从序列到序列改进了很多
6.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=8
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
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 与深度学*的未来

斯坦福 NLP 课程 | 第 9 讲 - cs224n 课程大项目实用技巧与经验

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!视频和课件等资料的获取方式见文末。
引言

授课计划

- Final project types and details; assessment revisited / 大项目细节
- Finding research topics; a couple of examples / 寻找研究主题
- Finding data / 项目数据
- Review of gated neural sequence models / 门控神经序列模型回顾
- A couple of MT topics / 机器翻译主题
- Doing your research / 研究方式
- Presenting your results and evaluation / 结果呈现和评估
1.大项目细节
1.1 Course work and grading policy

1.2 Mid-quarter feedback survey

1.3 最终项目

1.4 默认最终项目:基于 SQuAD 的问答系统

1.5 什么情况下选择默认项目

1.6 本节内容是相关的

- At a lofty level
- 了解一些关于做研究的知识是有好处的
- At a prosaic level
- 我们将接触到:
- 基线
- 基准
- 评估
- 错误分析
- 论文写作
- 这也是默认最终项目的一大特点
- 我们将接触到:
1.7 什么情况下选择 Custom Final Project

1.8 项目提议与候选

1.9 项目进度

2.寻找研究主题
2.1 寻找研究主题

所有科学的两个基本出发点
- [钉子]从一个(领域)感兴趣的问题开始,并试图找到比目前已知的/使用的更好的方法来解决它。
- [锤子]从一个感兴趣的技术方法开始,找出扩展或改进它或应用它的好方法
2.2 项目类型

这不是一个详尽的列表,但大多数项目都是其中之一
-
1.找到感兴趣的应用程序/任务,探索如何有效地接*/解决它,通常应用现有的神经网络模型
-
2.实现了一个复杂的神经结构,并在一些数据上展示了它的性能
-
3.提出一种新的或变异的神经网络模型,并探讨其经验上的成功
-
4.分析项目。分析一个模型的行为:它如何表示语言知识,或者它能处理什么样的现象,或者它犯了什么样的错误
-
5.稀有的理论项目:显示模型类型、数据或数据表示的一些有趣的、重要的属性
2.3 示例项目:Deep Poetry-诗歌生成

2.4 项目示例:Implementation and Optimization of Differentiable Neural Computers

2.5 项目示例:Improved Learning through Augmenting the Loss

2.6 项目示例:Word2bits - Quantized Word Vectors

2.7 如何寻找有趣的项目应用点


2.8 如何能够对算法优化突破

2.9 寻找一个主题

2.10 项目注意点

- 合适的数据
- 通常目标:10000 +标记的例子里程碑
- 可行的任务
- 自动评估指标
- NLP 是项目的核心
3.项目数据
3.1 寻找合适的数据

-
有些人会为一个项目收集他们自己的数据
- 你可能有一个使用“无监督”数据的项目
- 你可以注释少量的数据
- 你可以找到一个网站,有效地提供注释,如喜欢,明星,评级等
-
有些人使用现有的研究项目或公司的数据
- 如果你可以提供提交、报告等数据样本
-
大多数人使用现有的,由以前的研究人员建立的数据集
- 你有一个快速的开始,有明显的前期工作和基线
3.2 数据:Linguistic Data Consortium

3.3 机器翻译

- http://statmt.org
- 特别要注意各种 WMT 共享任务
3.4 依存解析

3.5 其他

现在网上有很多其他的数据集可以用于各种各样的目的
- 看 Kaggle
- 看研究论文
- 看数据集列表
4.门控神经序列模型回顾
4.1 再回顾一下 GRU 和机器翻译

4.2 BPTT 反向传播

-
梯度消失问题十分严重
-
当梯度趋*于 0 0 0 时,我们无法判断
- 数据中 t t t 和 t + n t+n t+n 之间不再存在依赖关系
- 参数设置错误(梯度消失条件)
-
这是原始转换函数的问题吗?
f ( h t − 1 , x t ) = tanh ( W [ x t ] + U h t − 1 + b ) f(h_{t-1}, x_t) = \tanh(W[x_t] + U h_{t-1} + b) f(ht−1,xt)=tanh(W[xt]+Uht−1+b)
- 有了它,时间导数就会消失
∂ h t + 1 ∂ h t = U ⊤ ∂ tanh ( a ) ∂ a \frac{\partial h_{t+1}}{\partial h_{t}}=U^{\top} \frac{\partial \tanh (a)}{\partial a} ∂ht∂ht+1=U⊤∂a∂tanh(a)
4.3 GRU 模型

- 这意味着错误必须通过所有中间节点反向传播
- 或许我们可以创建快捷连接

我们可以创建自适应的快捷连接
f ( h t − 1 , x t ) = u t ⊙ h ~ t + ( 1 − u t ) ⊙ h t − 1 f\left(h_{t-1}, x_{t}\right)=u_{t} \odot \tilde{h}{t}+\left(1-u\right) \odot h_{t-1} f(ht−1,xt)=ut⊙h~t+(1−ut)⊙ht−1
- 候选更新 h ~ t = tanh ( W [ x t ] + U h t − 1 + b ) \tilde{h}{t}=\tanh \left(W\left[x\right]+U h_{t-1}+b\right) h~t=tanh(W[xt]+Uht−1+b)
- 更新门 u t = σ ( W u [ x t ] + U u h t − 1 + b u ) u_{t}=\sigma\left(W_{u}\left[x_{t}\right]+U_{u} h_{t-1}+b_{u}\right) ut=σ(Wu[xt]+Uuht−1+bu)
- ⊙ \odot ⊙ 表示逐元素的乘法

让网络自适应地修剪不必要的连接
f ( h t − 1 , x t ) = u t ⊙ h ~ t + ( 1 − u t ) ⊙ h t − 1 f\left(h_{t-1}, x_{t}\right)=u_{t} \odot \tilde{h}{t}+\left(1-u\right) \odot h_{t-1} f(ht−1,xt)=ut⊙h~t+(1−ut)⊙ht−1
- 候选更新 h ~ t = tanh ( W [ x t ] + U ( r t ⊙ h t − 1 ) + b ) \tilde{h}{t}=\tanh \left(W\left[x\right]+U\left(r_{t} \odot h_{t-1}\right)+b\right) h~t=tanh(W[xt]+U(rt⊙ht−1)+b)
- 重置门 r t = σ ( W r [ x t ] + U r h t − 1 + b r ) r_{t}=\sigma\left(W_{r}\left[x_{t}\right]+U_{r} h_{t-1}+b_{r}\right) rt=σ(Wr[xt]+Urht−1+br)
- 更新门 u t = σ ( W u [ x t ] + U u h t − 1 + b u ) u_{t}=\sigma\left(W_{u}\left[x_{t}\right]+U_{u} h_{t-1}+b_{u}\right) ut=σ(Wu[xt]+Uuht−1+bu)


- 门控循环单位更现实
- 注意,在思想和注意力上有一些重叠

- 两个最广泛使用的门控循环单位:GRU 和 LSTM
4.4 LSTM 模型

- (绿色)LSTM 门的所有操作都可以被遗忘/忽略,而不是把所有的东西都塞到其他所有东西上面
- (橙色)下一步的非线性更新就像一个 RNN
- (紫色)这部分是核心(ResNets 也是如此)不是乘,而是将非线性的东西和 c t − 1 c_{t−1} ct−1 相加得到 c t c_t ct。 c t c_t ct, c t − 1 c_{t−1} ct−1之间存在线性联络
5.机器翻译主题
5.1 神经翻译系统的词汇问题

- Softmax 计算代价昂贵
5.2 文本生成问题

- 词汇生成问题
- 词汇量通常适中:50K
5.3 解决方法

-
Hierarchical softmax : tree-structured vocabulary
-
Noise-contrastive estimation : binary classification
-
Train on a subset of the vocabulary at a time; test on a smart on the set of possible translations
- 每次在词汇表的子集上进行训练,测试时自适应的选择词汇表的子集
- Jean, Cho, Memisevic, Bengio. ACL2015
-
Use attention to work out what you are translating
- You can do something simple like dictionary lookup
- 直接复制原句中的生词: “复制”模型
-
More ideas we will get to : Word pieces; char. Models
5.4 机器翻译评估

-
人工(最好的!?)
- Adequacy and Fluency 充分性和流畅性(5 或 7 尺度)
- 错误分类
- 翻译排名比较(例如人工判断两个翻译哪一个更好)
-
在使用 MT 作为子组件的应用程序中进行测试
- 如问答从外语文件
- 无法测试翻译的很多方面(例如,跨语言 IR)
-
自动度量
- BLEU (双语评价替手)
- Others like TER, METEOR, ……
5.5 BLEU 评估标准

-
N-gram 精度(得分在 0 和 1 之间)
- 参考译文中机器译文的 N-gram 的百分比是多少?
- 一个 n-gram 是由 n 个单词组成的序列
- 在一定的 n-gram 水平上不允许两次匹配相同的参考译文部分(两个 MT 单词 airport 只有在两个参考单词 airport 时才正确;不能通过输入“the the the the the”来作弊)
- 也要用 unigrams 来计算单位的精度,等等
-
简洁惩罚 BP
- 不能只输入一个单词“the”(精确度 1.0!)
-
人们认为要“玩弄”这个系统是相当困难的。例如找到一种方法来改变机器的输出,使 BLEU 上升,但质量不会下降。
-
BLEU 是一个加权的几何平均值,加上一个简洁的惩罚因子
- 注意:只在语料库级起作用(0 会杀死它);句子级有一个平滑的变体
-
下图是 n-grams 1-4 的 BLEU 计算公式
5.6 BLEU 实战

5.7 多参考翻译-Multiple Reference Translations

5.8 BLEU 预估还不错

5.9 机器翻译自动评估

-
人们开始优化系统最大化 BLEU 分数
- BLEU 分数迅速提高
- BLEU 和人类判断质量之间的关系一直下降
- MT BLEU 分数接*人类翻译但是他们的真实质量仍然远低于人类翻译
-
想出自动 MT 评估已经成为自己的研究领域
- 有许多建议:TER, METEOR, MaxSim, SEPIA,我们自己的 RTE-MT
- TERpA 是一个具有代表性的,好处理一些词的选择变化的度量
-
MT 研究需要一些自动的度量,以允许快速的开发和评估
6.研究方式
6.1 项目研究示例

-
1.定义任务
- 示例:总结
-
2.定义数据集
- a) 搜索学术数据集
- 他们已经有基线
- 例如 Newsroom Summarization Dataset https://summari.es
- a) 搜索学术数据集
-
b) 定义你自己的数据(更难,需要新的基线)
- 允许连接到你的研究
- 新问题提供了新的机会
- 有创意:Twitter、博客、新闻等等。有许多整洁的网站为新任务提供了创造性的机会

-
3.数据集卫生
- 开始的时候,分离 devtest and test
- 接下来讨论更多
-
- 定义你的度量(s)
- 在线搜索此任务的已建立的度量
- 摘要: Rouge (Recall-Oriented Understudy for GistingEvaluation) ,它定义了人工摘要的 n-gram 重叠
- 人工评价仍然更适合于摘要;你可以做一个小规模的人类计算

-
5.建立基线
- 首先实现最简单的模型(通常对 unigrams、bigrams 或平均字向量进行逻辑回归)
- 在训练和开发中计算指标
- 如果度量令人惊讶且没有错误,那么
- 完成!问题太简单了。需要重启
-
6.实现现有的神经网络模型
- 在训练和开发中计算指标
- 分析输出和错误
- 这门课的最低标准

-
7.永远要接*你的数据(除了最后的测试集)
- 可视化数据集
- 收集汇总统计信息
- 查看错误
- 分析不同的超参数如何影响性能
-
8.通过良好的实验设置,尝试不同的模型和模型变体,达到快速迭代的目的
- Fixed window neural model
- Recurrent neural network
- Recursive neural network
- Convolutional neural network
- Attention-basedmodel
7.结果呈现和评估
7.1 数据集

-
许多公开可用的数据集都是使用 train/dev/test 结构发布的。我们都在荣誉系统上,只在开发完成时才运行测试集
-
这样的分割假设有一个相当大的数据集
-
如果没有开发集或者你想要一个单独的调优集,那么你可以通过分割训练数据来创建一个调优集,尽管你必须权衡它的大小/有用性与训练集大小的减少
-
拥有一个固定的测试集,确保所有系统都使用相同的黄金数据进行评估。这通常是好的,但是如果测试集具有不寻常的属性,从而扭曲了任务的进度,那么就会出现问题。
7.2 训练模型与训练集

-
训练时,模型过拟合
- 该模型正确地描述了你所训练的特定数据中发生的情况,但是模式还不够通用,不适合应用于新数据
-
监控和避免问题过度拟合的方法是使用独立的验证和测试集…

-
你在一个训练集上构建(评价/训练)一个模型。
-
通常,然后在另一个独立的数据集上设置进一步的超参数,即调优集
- 调优集是用来调整超参数的训练集
-
在开发集(开发测试集或验证集)上度量进度
- 如果你经常这样做,就会过度适应开发集,所以最好有第二个开发集,即 dev2set
-
只有最后,你评估和最终数据在一个测试集
- 非常少地使用最终测试集……理想情况下只使用一次

-
训练、调优、开发和测试集需要完全不同
-
在训练所使用的数据集上进行测试是无效的
- 你将得到一个错误的良好性能。我们通常训练时会过拟合
-
你需要一个独立的调优
- 如果调优与 train 相同,则无法正确设置超参数
-
如果你一直运行在相同的评价集,你开始在评价集上过拟合
- 实际上,你是在对评估集进行“训练”……你在学*那些对特定的评估集有用和没用的东西,并利用这些信息
-
要获得系统性能的有效度量,你需要另一个未经训练的独立测试集,即 dev2 和最终测试
7.3 训练细节与建议

-
从积极的态度开始
- 神经网络想要学*
- 如果网络没有学*,你就是在做一些事情来阻止它成功地学*
-
认清残酷的现实
- 有很多事情会导致神经网络完全不学*或者学*不好
- 找到并修复它们(“调试和调优”)通常需要更多的时间,而不是实现你的模型
-
很难算出这些东西是什么
- 但是经验、实验和经验法则会有所帮助!
7.4 关于学*率

7.5 关于参数初始化

7.6 训练一个 RNN

-
1.使用 LSTM 或 GRU:它使你的生活变得更加简单!
-
2.初始化递归矩阵为正交矩阵
-
3.用一个可感知的(小的)比例初始化其他矩阵
-
4.初始化忘记门偏差为 1:默认记住
-
5.使用自适应学*速率算法:Adam, AdaDelta,…
-
6.梯度范数的裁剪:1-5 似乎是一个合理的阈值,当与 Adam 或 AdaDelta 一起使用
-
7.要么只使用 dropout vertically,要么研究使用 Bayesian dropout(Gal 和 gahramani -不在 PyTorch 中原生支持)
-
8.要有耐心!优化需要时间
7.7 实验策略

-
增量地工作!
-
从一个非常简单的模型开始
-
让它开始工作一个接一个地添加修饰物,让模型使用它们中的每一个(或者放弃它们)
-
最初运行在少量数据上
-
你会更容易在一个小的数据集中看到 bug
- 像 8 个例子这样的东西很好
- 通常合成数据对这很有用
- 确保你能得到 100%的数据
- 否则你的模型肯定要么不够强大,要么是破碎的

-
在大型数据集中运行
- 模型优化后的训练数据仍应接* 100%
- 否则,你可能想要考虑一种更强大的模式来过拟合训练数据
- 对训练数据的过拟合在进行深度学*时并不可怕
- 这些模型通常善于一般化,因为分布式表示共享统计强度,和对训练数据的过度拟合无关
- 模型优化后的训练数据仍应接* 100%
-
但是,现在仍然需要良好的泛化性能
- 对模型进行正则化,直到它不与 dev 数据过拟合为止
- 像 L2 正则化这样的策略是有用的
- 但通常 Dropout 是成功的秘诀
- 对模型进行正则化,直到它不与 dev 数据过拟合为止
7.8 模型细节

- 查看你的数据,收集汇总统计信息
- 查看你的模型的输出,进行错误分析
- 调优超参数对于神经网络几乎所有的成功都非常重要
7.9 项目总结

7.10 祝你项目顺利

8.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=9
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
9.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 10 讲 - NLP 中的问答系统

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言

授课计划

- Final final project notes, etc. / 最终大项目要点
- Motivation/History / 问答系统动机与历史
- The SQuADdataset / SQuAD 问答数据集
- The Stanford Attentive Reader model / 斯坦福注意力阅读模型
- BiDAF / BiDAF 模型
- Recent, more advanced architectures / *期前沿模型
- ELMo and BERT preview / ELMo 与 BERT 预*与简单介绍
1.最终大项目要点
1.1 自定义 Final Project

1.2 默认 Project

1.3 Project 提交

1.4 项目顺利

1.5 谁是澳大利亚第三任总理

-
在谷歌中检索谁是澳大利亚第三任总理,可以获得答案。
-
技术说明:这是从 web 页面中提取的
特性片段回答,而不是使用 (结构化的) 谷歌知识图 (以前称为 Freebase) 回答的问题。 -
我们今天要谈论的就是这样的问题,而不是基于结构化数据存储的问答。
2.问答系统动机与历史
2.1 动机:问答

- 拥有大量的全文文档集合,例如网络,简单地返回相关文档的作用是有限的
- 相反,我们经常想要得到问题的答案
- 尤其是在移动设备上
- 或使用像 Alexa、Google assistant 这样的数字助理设备
我们可以把它分解成两部分:
- 1.查找 (可能) 包含答案的文档
- 可以通过传统的信息检索/web 搜索处理
- (下个季度我将讲授 cs276,它将处理这个问题)
- 2.在一段或一份文件中找到答案
- 这个问题通常被称为阅读理解
- 这就是我们今天要关注的
2.2 阅读理解简史

-
许多早期的 NLP 工作尝试阅读理解
- Schank, Abelson, Lehnert et al. c. 1977 – Yale A.I. Project
-
由 Lynette Hirschman 在 1999 年重提
- NLP 系统能回答三至六年级学生的人类阅读理解问题吗?简单的方法尝试
-
Chris Burges 于 2013 年通过 MCTest 又重新复活 RC
- 再次通过简单的故事文本回答问题
-
2015/16 年,随着大型数据集的产生,闸门开启,可以建立监督神经系统
- Hermann et al. (NIPS 2015) DeepMind CNN/DM dataset
- Rajpurkaret al. (EMNLP 2016) SQuAD
- MS MARCO, TriviaQA, RACE, NewsQA, NarrativeQA, …
2.3 机器理解(Burges 2013)

一台机器能够理解文本的段落,对于大多数母语使用者能够正确回答的关于文本的任何问题,该机器都能提供一个字符串,这些说话者既能回答该问题,又不会包含与该问题无关的信息。
2.4 MCTest 阅读理解

- P:Passage,文章
- Q:Question,问题
- A:Answer,答案
2.5 开放领域问答的简史

- Simmons et al. (1964) 首先探索了如何基于匹配问题和答案的依赖关系解析,从说明性文本中回答问题
- Murax (Kupiec1993) 旨在使用 IR 和浅层语言处理在在线百科全书上回答问题
- NIST TREC QA track 始于 1999 年,首次严格调查了对大量文档的事实问题的回答
- IBM 的冒险!System (DeepQA, 2011)提出了一个版本的问题;它使用了许多方法的集合
- DrQA (Chen et al. 2016) 采用 IR 结合神经阅读理解,将深度学*引入开放领域的 QA
2.6 千年之交的完整 NLP 问答

- 复杂的系统,但他们在
事实问题上做得相当好
补充讲解
- 非常复杂的多模块多组件的系统
- 首先对问题进行解析,使用手写的语义规范化规则,将其转化为更好的语义形式
- 在通过问题类型分类器,找出问题在寻找的语义类型
- 信息检索系统找到可能包含答案的段落,排序后进行选择
- NER 识别候选实体再进行判断
- 这样的 QA 系统在特定领域很有效:Factoid Question Answering 针对实体的问答
3.SQuAD 问答数据集
3.1 斯坦福问答数据集 (SQuAD)

-
Passage 是来自维基百科的一段文本,系统需要回答问题,在文章中找出答案
-
1000 k 1000k 1000k 个样本
-
答案必须是文章中的一系列单词序列
-
也就是提取式问答

3.2 SQuAD 评估,v1.1

- 作者收集了 3 个参考答案
- 系统在两个指标上计算得分
- 精确匹配:1/0 的准确度,你是否匹配三个答案中的一个
- F1:将系统和每个答案都视为词袋,并评估
Precision = T P T P + F P \text{Precision} =\frac{TP}{TP+FP} Precision=TP+FPTP
Recall = T P T P + F N \text { Recall }=\frac{TP}{TP+FN} Recall =TP+FNTP
harmonic mean F 1 = 2 P R P + R \text { harmonic mean } \mathrm{F} 1=\frac{2 PR}{P+R} harmonic mean F1=P+R2PR
-
Precision 和 Recall 的调和平均值
-
分数是 (宏观) 平均每题 F1 分数
-
F1 测量被视为更可靠的指标,作为主要指标使用
- 它不是基于选择是否和人类选择的跨度完全相同,人类选择的跨度容易受到各种影响,包括换行
- 在单次级别匹配不同的答案
-
这两个指标忽视标点符号和冠词 (a, an, the only)

3.3 SQuAD 2.0

-
SQuAD1.0 的一个缺陷是,段落中所有问题都有答案
-
系统 (隐式地) 排名候选答案并选择最好的一个,这就变成了一种排名任务
-
你不必判断一个段落区间是否回答了这个问题
-
SQuAD2.0 中 1 / 3 1/3 1/3 的训练问题没有回答,大约 1 / 2 1/2 1/2 的开发/测试问题没有回答
- 对于 No Answer examples,no answer 获得的得分为 1 1 1,对于精确匹配和 F1,任何其他响应的得分都为 0 0 0
-
SQuAD2.0 最简单的系统方法
- 对于一个 span 是否回答了一个问题有一个阈值评分
-
或者你可以有第二个确认回答的组件
- 类似 自然语言推理 或者 答案验证


3.4 得分高的系统并不能真正理解人类语言

- 系统没有真正了解一切,仍然在做一种匹配问题
3.5 SQuAD 局限

-
SQuAD 也有其他一些关键限制
- 只有 span-based 答案 (没有 yes / no,计数,隐式的为什么)
- 问题是看着段落构造的
- 通常不是真正的信息需求
- 一般来说,问题和答案之间的词汇和句法匹配比 IRL 更大
- 问题与文章高度重叠,无论是单词还是句法结构
- 除了共同参照,几乎没有任何多事实/句子推理
-
不过这是一个目标明确,结构良好的干净的数据集
- 它一直是 QA dataset 上最常用和最具竞争力的数据集
- 它也是构建行业系统的一个有用的起点 (尽管域内数据总是很有帮助!)
- 并且我们正在使用它
3.6 Stanford Attentive Reader

- 展示了一个最小的,非常成功的阅读理解和问题回答架构
- 后来被称为 the Stanford Attentive Reader

- 首先将问题用向量表示
- 对问题中的每个单词,查找其词嵌入
- 输入到双向 LSTM 中并将最终的 hidden state 拼接

-
再处理文章
- 查找每个单词的词嵌入并输入到双向 LSTM 中
-
使用双线性注意力,将每个 LSTM 的表示 (LSTM 的两个隐藏状态的连接) 与问题表示做运算,获得了不同位置的注意力,从而获得答案的开始位置,再以同样方式获得答案的结束位置
-
为了在文章中找到答案,使用问题的向量表示,来解决答案在什么位置使用注意力
3.7 SQuAD v1.1 结果

4.斯坦福注意力阅读模型
4.1 Stanford Attentive Reader++

- 整个模型的所有参数都是端到端训练的,训练的目标是开始位置与结束为止的准确度,优化有两种方式

- 问题部分
- 不止是利用最终的隐藏层状态,而是使用所有隐层状态的加权和
- 使用一个可学*的向量 w w w 与每个时间步的隐层状态相乘
- 深层 LSTM

- 文章中每个 token 的向量表示 p i p_i pi 由一下部分连接而成
- 词嵌入 (GloVe 300 维)
- 词的语言特点:POS &NER 标签,one-hot 向量
- 词频率 (unigram 概率)
- 精确匹配:这个词是否出现在问题
- 三个二进制的特征: exact, uncased, lemma
- 对齐问题嵌入 (
车与汽车)
f align ( p i ) = ∑ j a i , j E ( q j ) q i , j = exp ( α ( E ( p i ) ) ⋅ α ( E ( q j ) ) ) ∑ j ′ exp ( α ( E ( p i ) ) ⋅ α ( E ( q j ′ ) ) ) f_{\text {align}}\left(p_{i}\right)=\sum_{j} a_{i, j} \mathbf{E}\left(q_{j}\right) \quad q_{i, j}=\frac{\exp \left(\alpha\left(\mathbf{E}\left(p_{i}\right)\right) \cdot \alpha\left(\mathbf{E}\left(q_{j}\right)\right)\right)}{\sum_{j^{\prime}} \exp \left(\alpha\left(\mathbf{E}\left(p_{i}\right)\right) \cdot \alpha\left(\mathbf{E}\left(q_{j}^{\prime}\right)\right)\right)} falign(pi)=j∑ai,jE(qj)qi,j=∑j′exp(α(E(pi))⋅α(E(qj′)))exp(α(E(pi))⋅α(E(qj)))
4.2 神经模型的突出效果

4.3 这些神经模型做什么?

5.BiDAF 模型
5.1 #论文解读# BiDAF

5.2 BiDAF

-
多年来,BiDAF architecture 有许多变体和改进,但其核心思想是 the Attention Flow layer
-
思路:attention 应该双向流动——从上下文到问题,从问题到上下文
-
令相似矩阵 ( w w w 的维数为 6 d 6d 6d)
S i j = w s i m T [ c i ; q i ; c i ∘ q j ] ∈ R \boldsymbol{S}{i j}=\boldsymbol{w}{\mathrm{sim}}^{T}\left[\boldsymbol{c}{i} ; \boldsymbol{q} ; \boldsymbol{c}{i} \circ \boldsymbol{q}\right] \in \mathbb{R} Sij=wsimT[ci;qi;ci∘qj]∈R
- Context-to-Question (C2Q) 注意力 (哪些查询词与每个上下文词最相关)
α i = softmax ( S i , : ) ∈ R M ∀ i ∈ { 1 , … , N } a i = ∑ j = 1 M α j i q j ∈ R 2 h ∀ i ∈ { 1 , … , N } \begin{aligned} \alpha^{i} &=\operatorname{softmax}\left(\boldsymbol{S}{i, :}\right) \in \mathbb{R}^{M} \quad \forall i \in{1, \ldots, N} \ \boldsymbol{a} &=\sum_{j=1}^{M} \alpha_{j}^{i} \boldsymbol{q}_{j} \in \mathbb{R}^{2 h} \quad \forall i \in{1, \ldots, N} \end{aligned} αiai=softmax(Si,:)∈RM∀i∈{1,…,N}=j=1∑Mαjiqj∈R2h∀i∈{1,…,N}

-
Question-to-Context (Q2C) 注意力 (上下文中最重要的单词相对于查询的加权和——通过 max 略有不对称)
-
通过 max 取得上下文中的每个单词对于问题的相关度
m i = max j S i j ∈ R ∀ i ∈ { 1 , … , N } β = softmax ( m ) ∈ R N c ′ = ∑ i = 1 N β i c i ∈ R 2 h \begin{aligned} \boldsymbol{m}{i} &=\max {j} \boldsymbol{S} \in \mathbb{R} \quad \forall i \in{1, \ldots, N} \ \beta &=\operatorname{softmax}(\boldsymbol{m}) \in \mathbb{R}^{N} \ \boldsymbol{c}^{\prime} &=\sum^{N} \beta_{i} \boldsymbol{c}_{i} \in \mathbb{R}^{2 h} \end{aligned} miβc′=jmaxSij∈R∀i∈{1,…,N}=softmax(m)∈RN=i=1∑Nβici∈R2h
- 对于文章中的每个位置,BiDAF layer 的输出为
b i = [ c i ; a i ; c i ∘ a i ; c i ∘ c ′ ] ∈ R 8 h ∀ i ∈ { 1 , … , N } \boldsymbol{b}{i}=\left[\boldsymbol{c} ; \boldsymbol{a}{i} ; \boldsymbol{c} \circ \boldsymbol{a}{i} ; \boldsymbol{c} \circ \boldsymbol{c}^{\prime}\right] \in \mathbb{R}^{8 h} \quad \forall i \in{1, \ldots, N} bi=[ci;ai;ci∘ai;ci∘c′]∈R8h∀i∈{1,…,N}

-
然后有
modelling层- 文章通过另一个深 (双层) BiLSTM
-
然后回答跨度选择更为复杂
- Start:通过 BiDAF 和 modelling 的输出层连接到一个密集的全连接层然后 softmax
- End:把 modelling 的输出 M M M 通过另一个 BiLSTM 得到 M 2 M_2 M2,然后再与 BiDAF layer 连接,并通过密集的全连接层和 softmax
6.*期前沿模型
6.1 最新的、更高级的体系结构

- 2016 年、2017 年和 2018 年的大部分工作都采用了越来越复杂的架构,其中包含了多种注意力变体——通常可以获得很好的任务收益
- 人们一直在尝试不同的 Attention
6.2 #论文解读# Dynamic CoattentionNetworks for Question Answering

(本网络频繁使用到 LSTM/GRU 结构,具体的 RNN 细节讲解可以查看ShowMeAI的对吴恩达老师课程的总结文章深度学*教程 | 序列模型与 RNN 网络,也可以查看本系列的前序文章NLP 教程(5) - 语言模型、RNN、GRU 与 LSTM)
- 缺陷:问题具有独立于输入的表示形式
- 一个全面的 QA 模型需要相互依赖
6.3 Coattention Encoder

6.4 Coattention layer

-
Coattention layer 再次提供了一个上下文之间的双向关注问题
-
然而,coattention 包括两级注意力计算:
- 关注那些本身就是注意力输出的表象
-
我们使用 C2Q 注意力分布 α i \alpha _i αi,求得 Q2C 注意力输出 b j \boldsymbol{b}j bj 的加权和。这给了我们第二级注意力输出 s i \boldsymbol{s} si
s i = ∑ j = 1 M + 1 α j i b j ∈ R l ∀ i ∈ { 1 , … , N } \boldsymbol{s}{i}=\sum^{M+1} \alpha_{j}^{i} \boldsymbol{b}_{j} \in \mathbb{R}^{l} \quad \forall i \in{1, \ldots, N} si=j=1∑M+1αjibj∈Rl∀i∈{1,…,N}
6.5 Co-attention : SQUAD 比赛结果

6.6 #论文解读# FusionNet

注意力机制
- MLP (Additive) 形式
S i j = s T tanh ( W 1 c i + W 2 q j ) S_{i j}=s^{T} \tanh \left(W_{1} c_{i}+W_{2} q_{j}\right) Sij=sTtanh(W1ci+W2qj)
-
空间复杂度: O ( m n k ) O(mnk) O(mnk), W is kxd
-
Bilinear (Product) form
S i j = c i T W q j S_{i j}=c_{i}^{T} W q_{j} Sij=ciTWqj
S i j = c i T U T V q j S_{i j}=c_{i}^{T} U^{T} V q_{j} Sij=ciTUTVqj
S i j = c i T W T D W q j S_{i j}=c_{i}^{T} W^{T} D W q_{j} Sij=ciTWTDWqj
S i j = Relu ( c i T W T ) DRelu ( W q j ) S_{i j}=\operatorname{Relu}\left(c_{i}^{T} W^{T}\right) \operatorname{DRelu}\left(W q_{j}\right) Sij=Relu(ciTWT)DRelu(Wqj)
- 空间复杂度: O ( ( m + n ) k ) O((m+n)k) O((m+n)k)
- 更小的空间消耗
- 非线性表达能力
6.7 FusionNet 试图将多种形式的注意力结合起来

6.8 多层次的 inter-attention

- 经过多层次的 inter-attention,使用 RNN、self-attention 和另一个 RNN 得到上下文的最终表示 { u i C } \left{\boldsymbol{u}_{i}^{C}\right}
6.9 最*、更先进的结构

- 2016 年、2017 年和 2018 年的大部分工作都采用了越来越复杂的体系结构,这些体系结构具有多种不同的关注方式,通常可以获得很好的任务收益
7.ELMo 与 BERT 预*与简单介绍
7.1 ELMO and BERT 预*

7.2 SQUAD 2.0 排行榜,2019-02-07

7.3 #论文解读#

7.4 #论文解读# Documen Retriever

7.5 #论文解读# DrQA Demo

7.6 #论文解读# 一般性问题

8.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=10
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
9.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来
![]()
斯坦福 NLP 课程 | 第 11 讲 - NLP 中的卷积神经网络

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言

授课计划

- Announcements
- Intro to CNNs / 卷积神经网络介绍
- Simple CNN for Sentence Classification: Yoon (2014) / 应用 CNN 做文本分类
- CNN potpourri / CNN 细节
- Deep CNN for Sentence Classification: Conneauet al. (2017) / 深度 CNN 用于文本分类
- Quasi-recurrent Neural Networks / Q-RNN 模型
欢迎来到课程的下半部分!

-
现在,我们正在为你准备成为 DL+NLP 研究人员/实践者
-
课程不会总是有所有的细节
- 这取决于你在网上搜索/阅读来了解更多
- 这是一个活跃的研究领域,有时候没有明确的答案
- Staff 很乐意与你讨论,但你需要自己思考
-
作业的设计是为了应付项目的真正困难
- 每个任务都故意比上一个任务有更少的帮助材料
- 在项目中,没有提供 autograder 或合理性检查
- DL 调试很困难,但是你需要学*如何进行调试!
书籍推荐

《Natural Language Processing with PyTorch: Build Intelligent Language Applications Using Deep Learning》
- Delip Rao & Goku Mohandas
1.卷积神经网络介绍
(卷积神经网络相关内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章 深度学*教程 | 卷积神经网络解读
1.1 从 RNN 到 CNN

-
循环神经网络不能捕获没有前缀上下文的短语
-
经常在最终向量中捕获的信息太多来自于最后的一些词汇内容
-
例如:softmax 通常只在最后一步计算

-
CNN / Convnet 的主要思路:
- 如果我们为每一个特定长度的词子序列计算向量呢?
-
例如:
tentative deal reached to keep government open -
计算的向量为
- tentative deal reached, deal reached to, reached to keep, to keep government, keep government open
-
不管短语是否合乎语法
-
在语言学上或认知上不太可信
-
然后将它们分组 (很快)
1.2 CNN 卷积神经网络

1.3 什么是卷积

-
一维离散卷积一般为: ( f ∗ g ) [ n ] = ∑ m = − M M f [ n − m ] g [ m ] (f \ast g)[n]=\sum_{m=-M}^{M} f[n-m] g[m] (f∗g)[n]=∑m=−MMf[n−m]g[m]
-
卷积通常地用于从图像中提取特征
- 模型位置不变的识别
- 可以参考斯坦福深度学*与计算机视觉课程 cs231n (也可以在ShowMeAI查阅 cs231n 系列笔记学*)
-
二维示例:
- 黄色和红色数字显示过滤器 (=内核) 权重
- 绿色显示输入
- 粉色显示输出
1.4 文本的一维卷积

- 用于文本应用的 1 维卷积
1.5 带填充的文本的一维卷积

-
输入长度为 L L L 的词序列
- 假设单词维度为 4,即有 4 channels
- 卷积后将会得到 1 channel
-
多个 channel,则最终得到多个 channel 的输出,关注的文本潜在特征也不同
1.6 conv1d,随时间推移填充最大池化

- 平均池化对 feature map 求平均
1.7 PyTorch 实现

- Pytorch 中的实现:参数很好地对应前面讲到的细节
batch_size= 16
word_embed_size= 4
seq_len= 7
input = torch.randn(batch_size, word_embed_size, seq_len)
conv1 = Conv1d(in_channels=word_embed_size, out_channels=3, kernel_size=3) # can add: padding=1
hidden1 = conv1(input)
hidden2 = torch.max(hidden1, dim=2) # max pool
1.8 步长 (这里为 2)

- stride 步长,减少计算量
1.9 局部最大池化

- 每两行做 max pooling,被称为步长为 2 的局部最大池化
1.10 1 维卷积的 k-max pooling

- 记录每一个 channel 的所有时间的 top k 的激活值,并且按原有顺序保留(上例中的-0.2 0.3)
1.11 空洞卷积:dilation 为 2

扩张卷积 / 空洞卷积
- 上例中,对 1 3 5 行进行卷积,通过两个 filter 得到两个 channel 的激活值
- 可以在第一步的卷积中将卷积核从 3 改为 5,即可实现这样的效果,既保证了矩阵很小,又保证了一次卷积中看到更大范围的句子
补充讲解 / Summary
- CNN 中,一次能看一个句子的多少内容是很重要的概念
- 可以使用更大的 filter、扩张卷积或者增大卷积深度 (层数)
2.应用 CNN 做文本分类
2.1 用于句子分类的单层 CNN

- 目标:句子分类
- 主要是识别判断句子的积极或消极情绪
- 其他任务
- 判断句子主观或客观
- 问题分类:问题是关于什么实体的?关于人、地点、数字、……

- 一个卷积层和池化层的简单使用
- 词向量: x i ∈ R k \mathbf{x}_{i} \in \mathbb{R}^{k} xi∈Rk
- 句子: x 1 : n = x 1 ⊕ x 2 ⊕ ⋯ ⊕ x n \mathbf{x}{1 : n}=\mathbf{x} \oplus x_{2} \oplus \cdots \oplus \mathbf{x}_{n} x1:n=x1⊕x2⊕⋯⊕xn (向量连接)
- 连接 X i : i + j \mathbf{X}_{i : i+j} Xi:i+j 范围内的句子 (对称更常见)
- 卷积核 w ∈ R h k \mathbf{w} \in \mathbb{R}^{h k} w∈Rhk (作用范围为 h h h 个单词的窗口)
- 注意,filter 是向量,size 可以是 2、3 或 4
2.2 单层 CNN

- 过滤器 w w w 应用于所有可能的窗口(连接向量)
- 为 CNN 层计算特征(一个通道)
c i = f ( w T x i : i + h − 1 + b ) c_{i}=f\left(\mathbf{w}^{T} \mathbf{x}_{i : i+h-1}+b\right) ci=f(wTxi:i+h−1+b)
-
句子 x 1 : n = x 1 ⊕ x 2 ⊕ … ⊕ x n \mathbf{x}{1 : n}=\mathbf{x} \oplus \mathbf{x}{2} \oplus \ldots \oplus \mathbf{x} x1:n=x1⊕x2⊕…⊕xn
-
所有可能的长度为 h h h 的窗口 { x 1 : h , x 2 : h + 1 , … , x n − h + 1 : n } \left{\mathbf{x}{1 : h}, \mathbf{x}, \dots, \mathbf{x}_{n-h+1 : n}\right}
-
结果是一个 feature map c = [ c 1 , c 2 , … , c n − h + 1 ] ∈ R n − h + 1 \mathbf{c}=\left[c_{1}, c_{2}, \dots, c_{n-h+1}\right] \in \mathbb{R}^{n-h+1} c=[c1,c2,…,cn−h+1]∈Rn−h+1
2.3 池化与通道数

-
池化:max-over-time pooling layer
-
想法:捕获最重要的激活(maximum over time)
-
从 feature map 中 c = [ c 1 , c 2 , … , c n − h + 1 ] ∈ R n − h + 1 \mathbf{c}=\left[c_{1}, c_{2}, \dots, c_{n-h+1}\right] \in \mathbb{R}^{n-h+1} c=[c1,c2,…,cn−h+1]∈Rn−h+1
-
池化得到单个数字 c ^ = max { c } \hat{c}=\max {\mathbf{c}} c^=max
-
使用多个过滤器权重 w w w
-
不同窗口大小 h h h 是有用的
-
由于最大池化 c ^ = max { c } \hat{c}=\max {\mathbf{c}} c^=max{c},和 c c c 的长度无关
c = [ c 1 , c 2 , … , c n − h + 1 ] ∈ R n − h + 1 \mathbf{c}=\left[c_{1}, c_{2}, \dots, c_{n-h+1}\right] \in \mathbb{R}^{n-h+1} c=[c1,c2,…,cn−h+1]∈Rn−h+1
- 所以我们可以有一些 filters 来观察 unigrams、bigrams、tri-grams、4-grams 等等
2.4 多通道输入数据

- 使用预先训练的单词向量初始化 (word2vec 或 Glove)
- 从两个副本开始
- 只对 1 个副本进行了反向传播,其他保持
静态 - 两个通道集都在最大池化前添加到 c i c_i ci
2.5 Classification after one CNN layer

-
首先是一个卷积,然后是一个最大池化
-
为了获得最终的特征向量 z = [ c ^ 1 , … , c ^ m ] \mathbf{z}=\left[\hat{c}{1}, \dots, \hat{c}\right] z=[c¹,…,c^m]
- 假设我们有 m m m 个卷积核 (滤波器 filter) w w w
- 使用 100 个大小分别为 3、4、5 的特征图
-
最终是简单的 softmax layer y = softmax ( W ( S ) z + b ) y=\operatorname{softmax}\left(W^{(S)} z+b\right) y=softmax(W(S)z+b)
补充讲解
- https://arxiv.org/pdf/1510.03820.pdf
- 输入长度为 7 的一句话,每个词的维度是 5 ,即输入矩阵是 7 × 5 7 \times 5 7×5
- 使用不同的
filter_size : (2,3,4),并且每个 size 都是用两个 filter,获得两个 channel 的 feature,即共计 6 个 filter - 对每个 filter 的 feature 进行 1-max pooling 后,拼接得到 6 维的向量,并使用 softmax 后再获得二分类结果
2.6 Regularization 正则化

-
使用 Dropout:使用概率 p p p (超参数) 的伯努利随机变量(只有 0 1 并且 p p p 是为 1 1 1 的概率)创建 mask 向量 r r r
-
训练过程中删除特征
y = softmax ( W ( S ) ( r ∘ z ) + b ) y=\operatorname{softmax}\left(W^{(S)}(r \circ z)+b\right) y=softmax(W(S)(r∘z)+b)
- 解释:防止互相适应(对特定特征的过度拟合)
- 在测试时不适用 Dropout,使用概率 p p p 缩放最终向量
W ^ ( S ) = p W ( S ) \hat{W}^{(S)}=p W^{(S)} W^(S)=pW(S)
-
此外:限制每个类的权重向量的 L2 Norm (softmax 权重 W ( S ) W^{(S)} W(S) 的每一行) 不超过固定数 s s s (也是超参数)
-
如果 ∥ W c ( S ) ∥ > s \left|W_{c}^{(S)}\right|>s ∥∥∥Wc(S)∥∥∥>s ,则重新缩放为 ∥ W c ( S ) ∥ = s \left|W_{c}^{(S)}\right|=s ∥∥∥Wc(S)∥∥∥=s
- 不是很常见
3.CNN 细节
3.1 CNN 参数讨论

-
基于验证集 (dev) 调整超参数
-
激活函数:Relu
-
窗口过滤器尺寸 h = 3 , 4 , 5 h=3,4,5 h=3,4,5
-
每个过滤器大小有 100 个特征映射
-
Dropout p = 0.5 p=0.5 p=0.5
- Kim(2014 年) 报告称,从 Dropout 来看,准确率提高了 2 − 4 % 2 - 4 % 2−4%
-
softmax 行的 L2 约束, s = 3 s=3 s=3
-
SGD 训练的最小批量: 50 50 50
-
词向量:用 word2vec 预训练, k = 300 k=300 k=300
-
训练过程中,不断检查验证集的性能,并选择最高精度的权重进行最终评估
3.2 实验结果

- 不同的参数设置下的实验结果
3.3 对比 CNN 与 RNN

-
Dropout 提供了 2 − 4 % 2 - 4 % 2−4% 的精度改进
-
但几个比较系统没有使用 Dropout,并可能从它获得相同的收益
-
仍然被视为一个简单架构的显著结果
-
与我们在前几节课中描述的窗口和 RNN 架构的不同之处:池化、许多过滤器和 Dropout
-
这些想法中有的可以被用在 RNNs 中
3.4 模型对比

-
词袋模型 / Bag of Vectors:对于简单的分类问题,这是一个非常好的基线。特别是如果后面有几个 ReLU 层 (See paper: Deep Averaging Networks)
-
词窗分类 / Window Model:对于不需要广泛上下文的问题 (即适用于 local 问题),适合单字分类。例如 POS、NER
-
卷积神经网络 / CNN:适合分类,较短的短语需要零填充,难以解释,易于在 gpu 上并行化
-
循环神经网络 / RNN:从左到右的认知更加具有可信度,不适合分类 (如果只使用最后一种状态),比 CNNs 慢得多,适合序列标记和分类以及语言模型,结合注意力机制时非常棒
补充讲解
- RNN 对序列标记和分类之类的事情有很好的效果,以及语言模型预测下一个单词,并且结合注意力机制会取得很好的效果,但是对于某个句子的整体解释,CNN 做的是更好的
3.5 跳接结构应用

-
我们在 LSTMs 和 GRUs 中看到的 门/跳接 是一个普遍的概念,现在在很多地方都使用这个概念
-
你还可以使用
**纵向**的门 -
实际上,关键的概念——用快捷连接对候选更新求和——是非常深的网络工作所需要的
-
Note:添加它们时,请将 x x x 填充成 conv 一样的维度,再求和
3.6 批归一化 BatchNorm

-
常用于 CNNs
-
通过将激活量缩放为零均值和单位方差,对一个 mini-batch 的卷积输出进行变换
- 这是统计学中熟悉的 Z-transform
- 但在每组 mini-batch 都会更新,所以波动的影响不大
-
使用 BatchNorm 使模型对参数初始化的敏感程度下降,因为输出是自动重新标度的
- 也会让学*率的调优更简单,模型的训练会更加稳定
-
PyTorch:
nn.BatchNorm1d
3.7 1x1 卷积

-
1x1 的卷积有作用吗?是的。
-
1x1 卷积,即网络中的 Network-in-network (NiN) connections,是内核大小为 1 的卷积内核
-
1x1 卷积提供了一个跨通道的全连接的线性层
-
它可以用于从多个通道映射到更少的通道
-
1x1 卷积添加了额外的神经网络层,附加的参数很少
- 与全连接 (FC) 层不同——全连接(FC)层添加了大量的参数
3.8 CNN 应用:机器翻译

- 最早成功的神经机器翻译之一
- 使用 CNN 进行编码,使用 RNN 进行解码
- Kalchbrennerand Blunsom(2013)
Recurrent Continuous Translation Models
3.9 #论文解读# Learning Character-level Representations for Part-of-Speech Tagging

- 对字符进行卷积以生成单词嵌入
- 固定窗口的词嵌入被用于 POS 标签
3.10 #论文解读# Character-Aware Neural Language Models

- 基于字符的单词嵌入
- 利用卷积、highway network 和 LSTM
4.深度 CNN 用于文本分类
4.1 深度卷积网络用于文本分类

- 起始点:序列模型 (LSTMs) 在 NLP 中占主导地位;还有 CNNs、注意力等等,但是所有的模型基本上都不是很深入——不像计算机视觉中的深度模型
- 当我们为 NLP 构建一个类似视觉的系统时会发生什么
- 从字符级开始工作
4.2 VD-CNN 结构

-
整个系统和视觉神经网络模型中的 VGG 和 ResNet 结构有点像
-
不太像一个典型的深度学* NLP 系统
-
结果是固定大小,因为文本被截断或者填充成统一长度了
-
每个阶段都有局部池化操作,特征数量 double
4.3 VD-CNN 的卷积模块

- 每个卷积块是两个卷积层,每个卷积层后面是 BatchNorm 和一个 ReLU
- 卷积大小为 3
- pad 以保持 (或在局部池化时减半) 维数
4.4 实验结果

- 使用大文本分类数据集
- 比 NLP 中经常使用的小数据集大得多,如 Yoon Kim(2014) 的论文
补充讲解
- 以上数据均为错误率,所以越低越好
- 深度网络会取得更好的结果,残差层取得很好的结果,但是深度再深时并未取得效果提升
- 实验表明使用 MaxPooling 比 KMaxPooling 和 使用 stride 的卷积 的两种其他池化方法要更好
- ConvNets 可以帮助我们建立很好的文本分类系统

4.5 RNNs 比较慢

- RNNs 是深度 NLP 的一个非常标准的构建块
- 但它们的并行性很差,因此速度很慢
- 想法:取 RNNs 和 CNNs 中最好且可并行的部分
5.Q-RNN 模型
5.1 Quasi-Recurrent Neural Network

- 努力把两个模型家族的优点结合起来
- 时间上并行的卷积,卷积计算候选,遗忘门和输出门
z t = tanh ( W z 1 x t − 1 + W z 2 x t ) f t = σ ( W f 1 x t − 1 + W f 2 x t ) o t = σ ( W o 1 x t − 1 + W o 2 x t ) \begin{aligned} \mathbf{z}{t} &=\tanh \left(\mathbf{W}^{1} \mathbf{x}{t-1}+\mathbf{W}^{2} \mathbf{x}{t}\right) \ \mathbf{f} &=\sigma\left(\mathbf{W}{f}^{1} \mathbf{x}+\mathbf{W}{f}^{2} \mathbf{x}\right) \ \mathbf{o}{t} &=\sigma\left(\mathbf{W}^{1} \mathbf{x}{t-1}+\mathbf{W}^{2} \mathbf{x}_{t}\right) \end{aligned} ztftot=tanh(Wz1xt−1+Wz2xt)=σ(Wf1xt−1+Wf2xt)=σ(Wo1xt−1+Wo2xt)
Z = tanh ( W z ∗ X ) F = σ ( W f ∗ X ) O = σ ( W o ∗ X ) \begin{aligned} \mathbf{Z} &=\tanh \left(\mathbf{W}{z} * \mathbf{X}\right) \ \mathbf{F} &=\sigma\left(\mathbf{W} * \mathbf{X}\right) \ \mathbf{O} &=\sigma\left(\mathbf{W}_{o} * \mathbf{X}\right) \end{aligned} ZFO=tanh(Wz∗X)=σ(Wf∗X)=σ(Wo∗X)
- 跨通道并行性的逐元素的门控伪递归是在池化层中完成的
h t = f t ⊙ h t − 1 + ( 1 − f t ) ⊙ z t \mathbf{h}{t}=\mathbf{f} \odot \mathbf{h}{t-1}+\left(1-\mathbf{f}\right) \odot \mathbf{z}_{t} ht=ft⊙ht−1+(1−ft)⊙zt
5.2 Q-RNN 实验:语言模型

5.3 Q-RNNs:情感分析

- 通常比 LSTMs 更好更快
- 可解释更好
5.4 QRNN 的限制

-
对于字符级的 LMs 并不像 LSTMs 那样有效
- 建模时遇到的更长的依赖关系问题
-
通常需要更深入的网络来获得与 LSTM 一样好的性能
- 当它们更深入时,速度仍然更快
- 有效地使用深度作为真正递归的替代
5.5 RNN 的缺点&Transformer 提出的动机

-
我们希望能够并行加速,但 RNN 是串行的
-
尽管 GRUs 和 LSTMs,RNNs 通过注意力机制可以捕捉到长时依赖,但随着序列增长,需要计算的路径也在增长
-
如果注意力机制本身可以让我们关注任何位置的信息,可能我们不需要 RNN?
6.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=11
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
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 与深度学*的未来

斯坦福 NLP 课程 | 第 12 讲 - NLP 子词模型

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!视频和课件等资料的获取方式见文末。
引言

授课计划

- A tiny bit of linguistics / 语法学基础知识
- Purely character-level models / 基于字符粒度的模型
- Subword-models: Byte Pair Encoding and friends / 子词模型
- Hybrid character and word level models / 混合字符与词粒度的模型
- fastText / fastText 模型
1.语法学基础知识
1.1 人类语言的声音:语音学和语音体系

-
语音学 (honetics) 是音流无争议的
物理学 -
语音体系 (Phonology) 假定了一组或多组独特的、分类的单元:音素 (phoneme) 或者是独特的特征
- 这也许是一种普遍的类型学,但却是一种特殊的语言实现
- 分类感知的最佳例子就是语音体系
- 音位差异缩小
- 音素之间的放大
1.2 词法:词类

- 传统上,词素 (morphemes) 是最小的语义单位
[ [ un [ [ fortun ( e ) ] Root ate ] STEM ] STEM ly ] WORD \left[\left[\text {un}\left[[\text { fortun }(\mathrm{e})]{\text { Root }} \text { ate }\right]{\text { STEM }}\right]{\text { STEM }} \text {ly}\right]{\text { WORD }} [[un[[ fortun (e)] Root ate ] STEM ] STEM ly] WORD
-
深度学*:形态学研究较少;递归神经网络的一种尝试是 (Luong, Socher, & Manning 2013)
- 处理更大词汇量的一种可能方法:大多数看不见的单词是新的形态(或数字)
-
声音本身在语言中没有意义
-
parts of words 是音素的下一级的形态学,是具有意义的最低级别

-
一个简单的替代方法是使用字符 n-grams
- Wickelphones (Rumelhart & McClelland 1986)
- Microsoft’s DSSM (Huang, He, Gao, Deng, Acero, & Hect2013)
-
使用卷积层的相关想法
-
能更容易地发挥词素的许多优点吗?
1.3 书写系统中的单词

-
书写系统在表达单词的方式上差异有大有小
-
没有分词 (没有在单词间放置空格)
- 例如中文
-
大部分的单词都是分开的:由单词组成了句子
- 附着词
- 分开的
- 连续的
- 复合名词
- 分开的
- 连续的
- 附着词
1.4 比单词粒度更细的模型

- 需要处理数量很大的开放词汇:巨大的、无限的单词空间
- 丰富的形态
- 音译 (特别是名字,在翻译中基本上是音译)
- 非正式的拼写
1.5 字符级模型

-
① 词嵌入可以由字符嵌入组成
- 为未知单词生成嵌入
- 相似的拼写共享相似的嵌入
- 解决 OOV 问题
-
② 连续语言可以作为字符处理:即所有的语言处理均建立在字符序列上,不考虑 word-level
-
这两种方法都被证明是非常成功的!
- 有点令人惊讶的是:一般意义上,音素/字母不是一个语义单元:但深度学*模型构成了 group
- 深度学*模型可以存储和构建来自多个字母组的含义表示,以模拟语素和更大单位的意义,汇总形成语义
1.6 单词之下:书写系统

- 大多数深度学* NLP 的工作,都是从语言的书面形式开始的:这是一种容易处理的、现成的数据
- 但是人类语言书写系统不是一回事!各种语言的字符是不同的!
2.基于字符粒度的模型
2.1 纯字符级模型

-
上节课,我们看到了一个很好的用于句子分类的纯字符级模型的例子
- 非常深的卷积网络用于文本分类
- Conneau, Schwenk, Lecun, Barrault.EACL 2017
-
强大的结果通过深度卷积堆叠
2.2 字符级别输入输出的机器翻译系统

-
最初,效果令人不满意
- (Vilaret al., 2007; Neubiget al., 2013)
-
只有 decoder (初步成功)
- (JunyoungChung, KyunghyunCho, YoshuaBengio. arXiv 2016).
-
然后,出现了还不错的结果
- (Wang Ling, Isabel Trancoso, Chris Dyer, Alan Black, arXiv 2015)
- (Thang Luong, Christopher Manning, ACL 2016)
- (Marta R. Costa-Jussà, José A. R. Fonollosa, ACL 2016)
2.3 English-Czech WMT 2015 Results


-
Luong 和 Manning 测试了一个纯字符级 seq2seq (LSTM) NMT 系统作为基线
-
它在单词级基线上运行得很好
- 对于 UNK,是用 single word translation 或者 copy stuff from the source
-
字符级的 model 效果更好了,但是太慢了
- 但是运行需要 3 周的时间来训练,运行时没那么快
- 如果放进了 LSTM 中,序列长度变为以前的数倍 (大约七倍)
2.4 无显式分割的完全字符级神经机器翻译

- Jason Lee, KyunghyunCho, Thomas Hoffmann. 2017.
- 编码器如下
- 解码器是一个字符级的 GRU
2.5 #论文解读# Stronger character results with depth in LSTM seq2seq model

-
Revisiting Character-Based Neural Machine Translation with Capacity and Compression. 2018. Cherry, Foster, Bapna, Firat, Macherey, Google AI
-
在 LSTM-seq2seq 模型中,随着深度的增加,特征越强
-
在捷克语这样的复杂语言中,字符级模型的效果提升较为明显,但是在英语和法语等语言中则收效甚微。
- 模型较小时,word-level 更佳
- 模型较大时,character-level 更佳
3.子词模型
3.1 子词模式:两种趋势

-
与 word 级模型相同的架构
- 但是使用更小的单元:
word pieces - [Sennrich, Haddow, Birch, ACL’16a], [Chung, Cho, Bengio, ACL’16].
- 但是使用更小的单元:
-
混合架构
- 主模型使用单词,其他使用字符级
- [Costa-Jussà& Fonollosa, ACL’16], [Luong & Manning, ACL’16].
3.2 字节对编码/BPE

-
最初的压缩算法
- 最频繁的字节 → 一个新的字节。
-
用字符 ngram 替换字节(实际上,有些人已经用字节做了一些有趣的事情)
-
Rico Sennrich, Barry Haddow, and Alexandra Birch. Neural Machine Translation of Rare Words with SubwordUnits. ACL 2016.


-
分词 (word segmentation) 算法
- 虽然做得很简单,有点像是自下而上的短序列聚类
-
将数据中的所有的 Unicode 字符组成一个 unigram 的词典
-
最常见的 ngram pairs 视为 一个新的 ngram
-
BPE 并未深度学*的有关算法,但已成为标准且成功表示 pieces of words 的方法,可以获得一个有限的词典与无限且有效的词汇表。

-
有一个目标词汇量,当你达到它的时候就停止
-
做确定性的最长分词分割
-
分割只在某些先前标记器 (通常 MT 使用的 Moses tokenizer) 标识的单词中进行
-
自动为系统添加词汇
- 不再是基于传统方式的 strongly
word
- 不再是基于传统方式的 strongly
-
2016 年 WMT 排名第一!仍然广泛应用于 2018 年 WMT
3.3 Wordpiece / Sentencepiece 模型

-
谷歌 NMT (GNMT) 使用了它的一个变体
- V1: wordpiece model
- V2: sentencepiece model
-
不使用字符的 n-gram count,而是使用贪心*似来最大化语言模型的对数似然函数值,选择对应的 pieces
- 添加最大限度地减少困惑的 n-gram

-
Wordpiece 模型标记内部单词
-
Sentencepiece 模型使用原始文本
- 空格被保留为特殊标记(_),并正常分组
- 可以通过将片段连接起来并将它们重新编码到空格中,从而在末尾将内容反转

-
BERT 使用了 wordpiece 模型的一个变体
- (相对) 在词汇表中的常用词
- at, fairfax, 1910s
- 其他单词由 wordpieces 组成
- hypatia = h ##yp ##ati ##a
- (相对) 在词汇表中的常用词
-
如果你在一个基于单词的模型中使用 BERT,你必须处理这个
3.4 字符级构建单词级

-
Learning Character-level Representations for Part-ofSpeech Tagging (Dos Santos and Zadrozny 2014)
-
对字符进行卷积以生成单词嵌入
-
为 PoS 标签使用固定窗口的词嵌入
3.5 基于字符的 LSTM 构建单词表示

- Bi-LSTM 构建单词表示
3.6 #论文解读# Character-Aware Neural Language Models

-
一个更复杂/精密的方法
-
动机
- 派生一个强大的、健壮的语言模型,该模型在多种语言中都有效
- 编码子单词关联性:eventful, eventfully, uneventful…
- 解决现有模型的罕见字问题
- 用更少的参数获得可比较的表达性

- 字符级别嵌入输入
- CNN+高速网络+LSTM

- 字符级别输入 + 卷积处理
- Max-over-time 池化

- N-gram 语法交互模型
- 在传递原始信息的同时应用转换
- 功能类似于 LSTM 内存单元

- 使用层次化 Softmax 处理大的输出词汇表
- 使用 truncated backprop through time 进行训练




- 本文对使用词嵌入作为神经语言建模输入的必要性提出了质疑
- 字符级的 CNNs + Highway Network 可以提取丰富的语义和结构信息
- 关键思想:您可以构建
building blocks来获得细致入微且功能强大的模型!
4.混合字符与词粒度的模型
4.1 混合 NMT

-
混合高效结构
- 翻译大部分是单词级别的
- 只在需要的时候进入字符级别
-
使用一个复制机制,试图填充罕见的单词,产生了超过 2 个点的 BLEU 的改进

- 单词级别 (4 层)
- End-to-end training 8-stacking LSTM layers:端到端训练 8 层 LSTM
4.2 二级解码

- 单词级别的集束搜索
- 字符级别的集束搜索 (遇到 ) 时
补充讲解
- 混合模型与字符级模型相比
- 纯粹的字符级模型能够非常有效地使用字符序列作为条件上下文
- 混合模型虽然提供了字符级的隐层表示,但并没有获得比单词级别更低的表示
4.3 English - Czech Results

-
使用 WMT’15 数据进行训练 (12M 句子对)
- 新闻测试 2015
-
30 倍数据
-
3 个系统
-
大型词汇+复制机制
-
达到先进的效果!
4.4 Sample English-czech translations

-
翻译效果很好!
-
基于字符:错误的名称翻译
-
基于单词:对齐不正确
-
基于字符的混合:diagnóze 的正确翻译
-
基于单词:特征复制失败
-
混合:正确,11-year-old-jedenactileta
-
错误:Shani Bartova
4.5 单词嵌入中的字符应用

- 一种用于单词嵌入和单词形态学的联合模型(Cao and Rei 2016)
- 与 w2v 目标相同,但使用字符
- 双向 LSTM 计算单词表示
- 模型试图捕获形态学
- 模型可以推断单词的词根
5.fastText 模型

-
用子单词信息丰富单词向量
Bojanowski, Grave, Joulinand Mikolov. FAIR. 2016. -
目标:下一代高效的类似于 word2vecd 的单词表示库,但更适合于具有大量形态学的罕见单词和语言
-
带有字符 n-grams 的 w2v 的 skip-gram 模型的扩展

- 将单词表示为用边界符号和整词扩充的字符 n-grams
w h e r e = , w h e r e = < w h , w h e , h e r , e r e , r e > , < w h e r e > where =,where =<wh,whe,her,ere,re>,
-
注意 < h e r >
、 < h e r <her <her 是不同于 h e r her her 的 - 前缀、后缀和整个单词都是特殊的
-
将 word 表示为这些表示的和。上下文单词得分为
S ( w , c ) = ∑ g ∈ G ( w ) Z g T V C S(w, c)=\sum g \in G(w) \mathbf{Z}{g}^{\mathrm{T}} \mathbf{V} S(w,c)=∑g∈G(w)ZgTVC
- 细节:与其共享所有 n-grams 的表示,不如使用
hashing trick来拥有固定数量的向量

- 低频罕见单词的差异收益

Suggested Readings
6.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=12
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
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 与深度学*的未来

斯坦福 NLP 课程 | 第 13 讲 - 基于上下文的表征与 NLP 预训练模型(ELMo, transformer)

作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI
教程地址:www.showmeai.tech/tutorials/36
本文地址: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 未知词的词向量应用建议

-
简单且常见的解决方案:
-
训练时:词汇表 { words occurring, say, ≥ 5 times } ∪ { < UNK > } {\text { words occurring, say, } \geq 5 \text { times }} \cup{<\text{UNK}>} { words occurring, say, ≥5 times }∪{
} - 将所有罕见的词 (数据集中出现次数小于 5) 都映射为 < UNK > <\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}>
- 将它们分解为词类 (如未知号码,大写等等),每种都对应一个 < 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 作为特征输入

h k , l = [ h → k , 1 ; h ← k , 1 ; h k L M ] \mathbf{h}{k, l}=\left[\overrightarrow{\mathbf{h}} ; \overleftarrow{\mathbf{h}}{k, 1} ; \mathbf{h}^{L M}\right] hk,l=[h k,1;h k,1;hkLM]
- 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 #论文解读#

-
也有一种思路:使用训练好的序列模型,为其他 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 所有层都是有用的
R k = { x k L M , h → k , j L M , h ← k , j L M ∣ j = 1 , … , L } = { h k , j L M ∣ j = 0 , … , L } \begin{aligned} R_{k} &=\left{\mathbf{x}{k}^{L M}, \overrightarrow{\mathbf{h}}^{L M}, \overleftarrow{\mathbf{h}}{k, j}^{L M} \mid j=1, \ldots, L\right} \ &=\left{\mathbf{h}^{L M} \mid j=0, \ldots, L\right} \end{aligned} Rk={xkLM,h k,jLM,h k,jLM∣j=1,…,L}={hk,jLM∣j=0,…,L}
E L M o k t a s k = E ( R k ; Θ t a s k ) = γ t a s k ∑ j = 0 L s j t a s k h k , j L M \mathbf{E} \mathbf{L} \mathbf{M} \mathbf{o}{k}^{t a s k}=E\left(R ; \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} ELMoktask=E(Rk;Θtask)=γtaskj=0∑Lsjtaskhk,jLM
-
γ t a s k \gamma^{task} γtask 衡量 ELMo 对任务的总体有用性,是为特定任务学*的全局比例因子
-
s t a s k \mathbf{s}^{task} stask 是 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
-
使用 [ h T , maxpool ( h ) , meanpool ( h ) ] \left[h_{T}, \operatorname{maxpool}(\mathbf{h}), \operatorname{meanpool}(\mathbf{h})\right] [hT,maxpool(h),meanpool(h)] 进行分类
-
使用大型的预训练语言模型,是一种提高性能的非常有效的方法
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 概览

-
序列到序列编码解码模型,但它是非循环非串行结构
-
任务:平行语料库的机器翻译
-
预测每个翻译单词
-
最终成本/误差函数是 softmax 分类器基础上的标准交叉熵误差
4.4 Transformer 基础

-
自学 transformer
- 主要推荐资源
- http://nlp.seas.harvard.edu/2018/04/03/attention.html
- The Annotated Transformer by Sasha Rush
- 一个使用 PyTorch 的 Jupyter 笔记本,解释了一切!
- 主要推荐资源
-
现在:我们定义 Transformer 网络的基本构建块:第一,新的注意力层
4.5 点乘注意力 Dot-Product Attention

-
输入:对于一个输出而言的查询 q q q 和一组键-值对 ( k − v k-v k−v)
-
Query,keys,values,and output 都是向量
-
输出值的加权和
-
权重的每个值是由查询和相关键的内积计算结果
-
Query 和 keys 有相同维数 d k d_k dk,value 的维数为 d v d_v dv
A ( q , K , V ) = ∑ i e q ⋅ k i ∑ j e q ⋅ k j v i A(q, K, V)=\sum_{i} \frac{e^{q \cdot k_{i}}}{\sum_{j} e^{q \cdot k_{j}}} v_{i} A(q,K,V)=i∑∑jeq⋅kjeq⋅kivi
4.6 点乘注意力矩阵表示法

- 当我们有多个查询 q q q 时,我们将它们叠加在一个矩阵 Q Q Q 中
A ( Q , K , V ) = softmax ( Q K T ) V A(Q, K, V)=\operatorname{softmax}\left(Q K^{T}\right) V A(Q,K,V)=softmax(QKT)V
4.7 缩放点乘注意力

-
问题: d k d_k dk 变大时, q T k q^Tk qTk 的方差增大 → 一些 softmax 中的值的方差将会变大 → softmax 得到的是峰值 → 因此梯度变小了
-
解决方案:通过 query / key 向量的长度进行缩放
A ( Q , K , V ) = softmax ( Q K T d k ) V A(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V A(Q,K,V)=softmax(dk QKT)V
4.8 编码器中的自注意力

-
输入单词向量是 queries,keys and values
-
换句话说:这个词向量自己选择彼此
-
词向量堆栈= Q = K = V
-
我们会通过解码器明白为什么我们在定义中将他们分开
4.9 多头注意力

-
简单 self-attention 的问题
- 单词只有一种相互交互的方式
-
解决方案:多头注意力
-
首先,通过矩阵 W W W 将 Q Q Q, K K K, V V V 映射到 h = 8 h = 8 h=8 的许多低维空间
-
然后,应用注意力,然后连接输出,通过线性层
MultiHead ( Q , K , V ) = Concat(head 1 , … , head h ) \text {MultiHead}(\boldsymbol{Q}, \boldsymbol{K}, \boldsymbol{V})=\text {Concat(head}{1}, \ldots, \text { head }) MultiHead(Q,K,V)=Concat(head1,…, head h)
where head i = Attention ( Q W i Q , K W i K , V W i V ) \text {where head}{i}=\text {Attention}\left(Q W^{Q}, K W_{i}^{K}, V W_{i}^{V}\right) where headi=Attention(QWiQ,KWiK,VWiV)
4.10 完整的 transformer 模块

-
每个 Block 都有两个
子层- 多头 attention
- 两层的前馈神经网络,使用 ReLU
-
这两个子层都
- 残差连接以及层归一化
- LayerNorm(x+Sublayer(x))
- 层归一化将输入转化为均值是 0 0 0,方差是 1 1 1,每一层和每一个训练点 (并且添加了两个参数)
μ l = 1 H ∑ i = 1 H a i l σ l = 1 H ∑ i = 1 H ( a i l − μ l ) 2 h i = f ( g i σ i ( a i − μ i ) + b i ) \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}-\mu{l}\right){2}} \quad h_{i}=f\left(\frac{g_{i}}{\sigma_{i}}\left(a_{i}-\mu_{i}\right)+b_{i}\right) μl=H1i=1∑Hailσl=H1i=1∑H(ail−μl)2 hi=f(σigi(ai−μi)+bi)
- Layer Normalization by Ba, Kiros and Hinton,
- https://arxiv.org/pdf/1607.06450.pdf
4.11 编码器输入

-
实际的词表示是 byte-pair 编码
-
还添加了一个 positional encoding 位置编码,相同的词语在不同的位置有不同的整体表征
{ P E ( p o s , 2 i ) = sin ( p o s / 1000 0 2 i / d m o d e l ) P E ( pos , 2 i + 1 ) = cos ( p o s / 1000 0 2 i / d m o d e l ) \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} {PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)
4.12 完整编码器 Encoder

-
encoder 中,每个 Block 都是来自前一层的 Q Q Q, K K K, V V 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 % k % k% 的输入单词,然后预测 masked words
-
不再是传统的计算生成句子的概率的语言模型,目标是填空
- 总是使用 k = 15 % 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 4x4 or 8x8 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 代码解析
-
jalammar 的一系列可视化简单教程
6.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=13
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
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 与深度学*的未来

斯坦福 NLP 课程 | 第 14 讲 - Transformers 自注意力与生成模型

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!视频和课件等资料的获取方式见文末。
引言

学*变长数据的表示

- 学*变长数据的表示,这是序列学*的基本组件
- 序列学*包括 NMT,text summarization,QA,···
1.循环神经网络(RNN)

- 通常使用 RNN 学*变长的表示
- RNN 本身适合句子和像素序列
- LSTMs, GRUs 和其变体在循环模型中占主导地位


- 但是序列计算抑制了并行化
- 没有对长期和短期依赖关系进行显式建模
- 我们想要对层次结构建模
- RNNs(顺序对齐的状态)看起来很浪费!
2.卷积神经网络(CNN)


- 并行化(每层)很简单
- 利用局部依赖
- 不同位置的交互距离是线性或是对数的
- 远程依赖需要多层
3.Attention 注意力

- NMT 中,编码器和解码器之间的 Attention 是至关重要的
- 为什么不把注意力用于表示呢?
3.1 自注意力

- 自注意力机制
4.文本生成

4.1 自注意力

- 任何两个位置之间的路径长度都是常数级别的
- 门控 / 乘法 的交互
- 可以并行化(每层)
- 可以完全替代序列计算吗?
4.2 既有成果

- Classification & regression with self-attention:
- Parikh et al.(2016), Lin et al. (2016)
- Self-attention with RNNs:
- Long et al.(2016), Shao, Gows et al.(2017)
- Recurrent attention:
- Sukhbaatar et al.(2015)
4.3 Transformer

- Transformer 结构
4.4 编码器与解码器的自注意力

- 编码器的自注意力
- 解码器的自注意力
4.5 Attention is Cheap!

- 由于计算只涉及到两个矩阵乘法,所以是序列长度的平方
- 当维度比长度大得多的时候,非常有效
4.6 注意力:加权平均

4.7 自注意力

-
上例中,我们想要知道谁对谁做了什么,通过卷积中的多个卷积核的不同的线性操作,我们可以分别获取到 who, did what, to whom 的信息。
-
但是对于 Attention 而言,如果只有一个 Attention layer,那么对于一句话里的每个词都是同样的线性变换,不能够做到在不同的位置提取不同的信息
-
Who,Did What,To Whom,分别拥有注意力头
-
将注意力层视为特征探测器
-
可以并行完成
-
为了效率,减少注意力头的维度,并行操作这些注意力层,弥补了计算差距
4.8 卷积和多头注意力

- Different linear transformations by relative position.
- Parallel attention layers with different linear transformations on input and output.
5.Results

5.1 机器翻译: WMT-2014 BLEU

- 但我们并不一定比 LSTM 取得了更好的表示,只是我们更适合 SGD,可以更好的训练
- 我们可以对任意两个词之间构建连接
6.框架

6.1 残差连接的必要性


- 残差连接结构
- 位置信息最初添加在了模型的输入处,通过残差连接将位置信息传递到每一层,可以不需要再每一层都添加位置信息
6.2 训练细节

- ADAM 优化器,同时使用了学*率预热 (warmup + exponential decay)
- 每一层在添加残差之前都会使用 dropout
- Layer-norm/层归一化
- 有些实验中使用了 Attention dropout
- Checkpoint-averaging 检查点平均处理
- Label smoothing 标签平滑
- Auto-regressive decoding with beam search and length biasing 使用集束搜索和 length biasing 的自回归解码
- ……
6.3 What Matters?

6.4 Generating Wikipedia by Summarizing Long Sequences

7.自相似度,图片与音乐生成

7.1 自相似度,图片与音乐生成

7.2 基于概率分布的图像生成

- 模拟像素的联合分布
- 把它变成一个序列建模问题
- 分配概率允许度量泛化

- RNNs 和 CNNs 是最先进的(PixelRNN, PixelCNN)
- incorporating gating CNNs 现在在效果上与 RNNs 相*
- 由于并行化,CNN 要快得多

- 图像的长期依赖关系很重要(例如对称性)
- 可能随着图像大小的增加而变得越来越重要
- 使用 CNNs 建模长期依赖关系需要两者之一
- 多层可能使训练更加困难
- 大卷积核参数/计算成本相应变大
7.3 自相似性的研究

- 自相似性的研究案例
7.4 非局部均值

- A Non-local Algorithm for Image Denoising (Buades, Coll, and Morel. CVPR 2005)
- Non-local Neural Networks (Wang et al., 2018)
7.5 既有工作

- Self-attention:
- Parikh et al. (2016), Lin et al. (2016), Vaswani et al. (2017)
- Autoregressive Image Generation:
- A Oord et al. (2016), Salimans et al. (2017)
7.6 自注意力

7.7 图像 Transformer


7.8 Attention is Cheap if length<<dim!

7.9 Combining Locality with Self-Attention

- 将注意力窗口限制为局部范围
- 由于空间局部性,这在图像中是很好的假设
7.10 局部 1 维和 2 维注意力

7.11 图像 Transformer 层

7.12 Task

7.13 Results

- lmage Transformer
- Parmar , Vaswani",Uszkoreit, Kaiser, Shazeer,Ku, and Tran.ICML 2018
7.14 无约束图像生成

7.15 Cifar10 样本

7.16 CelebA 超分辨率重建

7.17 条件图片生成

8.相对自注意力音乐生成

8.1 音乐和语言的原始表征

8.2 音乐语言模型

- 传统的 RNN 模型需要将长序列嵌入到固定长度的向量中
8.3 Continuations to given initial motif

8.4 音乐自相似度

- 给定一段音乐并生成后续音乐
- 不能直接去重复过去的片段
- 难以处理长距离
8.5 注意力:加权平均

- 移动的固定过滤器捕获相对距离
- Music Transformer 使用平移不变性来携带超过其训练长度的关系信息,进行传递
- Different linear transformations by relative position.
8.6 *观相对注意力

- 相对注意力
- 位置之间的相关性
- 但是音乐中的序列长度通常非常长
8.7 机器翻译

8.8 既有成果

8.9 Our formulation

- 将相对距离转化为绝对距离
8.10 Goal of skewing procedure

8.11 Skewing to reduce relative memoryfrom O(L2D) to O(LD)

8.12 AJazz sample from Music Transformer

8.13 Convolutions and Translational Equivariance

8.14 Relative Attention And Graphs

8.15 Message Passing Neural Networks

8.16 多塔结构

8.17 图工具库

8.18 自注意力

- 任意两个位置之间的路径长度是常数级的
- 没有边界的内存
- 易于并行化
- 对自相似性进行建模
- 相对注意力提供了表达时间、equivariance,可以自然延伸至图表
8.19 热门研究领域

- Non autoregressive transformer (Gu and Bradbury et al., 2018)
- Deterministic Non-Autoregressive Neural Sequence Modeling by lterative Refinement(Lee,Manismov, and Cho,2018)
- Fast Decoding in Sequence Models Using Discrete Latent Variables (ICML 2018)Kaiser, Roy, Vaswani, Pamar, Bengio, Uszkoreit, Shazeer
- Towards a Better Understanding of Vector Quantized AutoencodersRoy,Vaswani, Parmar,Neelakantan, 2018
- Blockwise Parallel Decoding For Deep Autogressive Models (NeurlPS 2019)Stern, Shazeer,Uszkoreit,
9.迁移学*


10.优化&大模型


- Adafactor: Adaptive Learning Rates with Sublinear Memory Cost(ICML 2018).Shazeer,Stern.
- Memory-Efficient Adaptive Optimization for Large-Scale Learning (2019).Anil,Gupta, Koren, Singer.
- Mesh-TensorFlow: Deep Learning for Supercomputers (NeurlPS 2019).
- Shazeer, Cheng,Parmar,Tran, Vaswani, Koanantakool,Hawkins,Lee,Hong,Young, Sepassi, Hechtman) Code (5 billion parameters)
11.自注意力其他研究与应用


- Generating Wikipedia by Summarizing Long sequences.(ICLR 2018). Liu,Saleh,Pot, Goodrich, Sepassi, Shazeer, Kaiser.
- Universal Transformers (ICLR 2019). Deghiani, Gouws,Vinyals, Uszkoreit,Kaiser.
- Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context(2019). Dai, Yang,Yang,Carbonell,Le, Salakhutdinov.
- A Time-Restricted Self-Attention Layer for ASR (ICASSP 2018).Povey,Hadian,Gharemani,Li, Khudanpur.
- Character-Level Language Modeling with Deeper Self-Attention (2018).Roufou, Choe, Guo, Constant , Jones*
12.未来的工作研究方向


- Self-supervision and classification for images and video
- Understanding Transfer

13.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=14
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
14.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 15 讲 - NLP 文本生成任务

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!视频和课件等资料的获取方式见文末。
引言

概要

- Recap what we already know about NLG / NLG 要点回顾
- More on decoding algorithms / 解码算法
- NLG tasks and neural approaches to them / NLG 任务及其神经网络解法
- NLG evaluation: a tricky situation / NLG 评估:一个棘手的情况
- Concluding thoughts on NLG research, current trends, and the future / NLG 研究的一些想法,目前的趋势,未来的可能方向
1.语言模型与解码算法知识回顾

1.1 自然语言生成(NLG)

-
自然语言生成指的是我们生成 (即写入) 新文本的任何任务
-
NLG 包括以下内容:
- 机器翻译
- 摘要
- 对话 (闲聊和基于任务)
- 创意写作:讲故事,诗歌创作
- 自由形式问答 (即生成答案,从文本或知识库中提取)
- 图像字幕
1.2 要点回顾

(语言模型相关内容也可以参考ShowMeAI对吴恩达老师课程的总结文章深度学*教程 | 序列模型与 RNN 网络)
- 语言建模是给定之前的单词,预测下一个单词的任务:
P ( y t ∣ y 1 , … , y t − 1 ) P\left(y_{t} \mid y_{1}, \ldots, y_{t-1}\right) P(yt∣y1,…,yt−1)
- 一个产生这一概率分布的系统叫做语言模型 (LM)
- 如果系统使用 RNN,则被称为 RNN-LM

- 条件语言建模是给定之前的单词以及一些其他 (限定条件) 输入 x x x,预测下一个单词的任务:
P ( y t ∣ y 1 , … , y t − 1 , x ) P\left(y_{t} \mid y_{1}, \dots, y_{t-1}, x\right) P(yt∣y1,…,yt−1,x)
- 条件语言建模任务的例子:
- 机器翻译 x = source sentence, y = target sentence
- 摘要 x = input text, y = summarized text
- 对话 x = dialogue history, y = next utterance

训练一个(条件)RNN 语言模型
- 这是神经机器翻译中的例子
- 在训练期间,我们将正确的 (又名引用) 目标句子输入解码器,而不考虑解码器预测的。这种训练方法称为 Teacher Forcing

解码算法
-
问题:训练条件语言模型后,如何使用它生成文本?
-
答案:解码算法是一种算法,用于从语言模型生成文本
-
我们了解了两种解码算法
- 贪婪解码
- 集束搜索

贪婪解码
-
一个简单的算法
-
在每一步中,取最可能的单词 (即 argmax)
-
将其用作下一个单词,并在下一步中将其作为输入提供
-
继续前进,直到产生 < END > <\text{END}>
或达到某个最大长度 -
由于缺乏回溯,输出可能很差 (例如,不合语法,不自然,荒谬)

集束搜索解码
-
一种旨在通过一次跟踪多个可能的序列,找到高概率序列 (不一定是最佳序列) 的搜索算法
-
核心思路:在解码器的每一步,跟踪 k k k 个最可能的部分序列 (我们称之为假设)
- k k k 是光束大小
-
达到某个停止标准后,选择概率最高的序列 (考虑一些长度调整)

束搜索解码
- Beam size = k = 2
- Blue numbers=score
1.3 旁白:《西部世界》使用的是集束搜索吗?

1.4 改变 beam size k 有什么影响?

-
小的 k k k 与贪心解码有类似的问题 ( k = 1 k = 1 k=1 时就是贪心解码)
- 不符合语法,不自然,荒谬,不正确
-
更大的 k k k 意味着考虑更多假设
-
增加 k k k 可以减少上述一些问题
-
更大的 k k k 在计算上更昂贵
-
但增加 k k k 可能会引入其他问题:
- 对于 NMT,增加 k k k 太多会降低 BLEU 评分(Tu et al, Koehnet al),这主要是因为大 k k k 光束搜索产生太短的翻译 (即使得分归一化)
-
在闲聊话等开放式任务中,大的 k k k 会输出非常通用的句子 (见下一张幻灯片)
-
1.5 光束大小对聊天对话的影响

-
低 beam size
- 话题更相关但是没有意义的
- 语法差,重复的
-
高 beam size
- 结果更保险
- 回答更
正确 - 但它更泛,主题相关性弱一些
1.6 基于采样的解码

-
纯采样
- 在每个步骤 t t t,从概率分布 P t P_t Pt 中随机抽样以获取下一个单词
-
像贪婪的解码,但是,是采样而不是 argmax
-
Top-n 采样
- 在每个步骤 t t t,从 P t P_t Pt 的前 n n n 个最可能的单词中,进行随机采样
- 与纯采样类似,但截断概率分布
- 此时, n = 1 n = 1 n=1 是贪婪搜索, n = V n = V n=V 是纯采样
- 增加 n n n 以获得更多样化 / 风险的输出
- 减少 n n n 以获得更通用 / 安全的输出
-
这两者都比光束搜索更有效率,不用关注多个假设
1.7 Softmax temperature

- 回顾:在时间步 t t t,语言模型通过对分数向量 s ∈ R ∣ V ∣ s \in \mathbb{R}^{|V|} s∈R∣V∣ 使用 softmax 函数计算出概率分布 P t P_t Pt
P t ( w ) = exp ( s w ) ∑ w ′ ∈ V exp ( s w ′ ) P_{t}(w)=\frac{\exp \left(s_{w}\right)}{\sum_{w^{\prime} \in V} \exp \left(s_{w^{\prime}}\right)} Pt(w)=∑w′∈Vexp(sw′)exp(sw)
- 可以对 softmax 函数时候用温度超参数
P t ( w ) = exp ( s w / τ ) ∑ w ′ ∈ V exp ( s w ′ / τ ) P_{t}(w)=\frac{\exp \left(s_{w} / \tau\right)}{\sum_{w^{\prime} \in V} \exp \left(s_{w^{\prime}} / \tau\right)} Pt(w)=∑w′∈Vexp(sw′/τ)exp(sw/τ)
-
提高温度 τ \tau τ: P t P_t Pt 变得更均匀
- 因此输出更多样化 (概率分布在词汇中)
-
降低温度 τ \tau τ: P t P_t Pt 变得更尖锐
- 因此输出的多样性较少 (概率集中在顶层词汇上)
1.8 解码算法:总结

-
贪心解码是一种简单的译码方法;给低质量输出
-
Beam 搜索(特别是高 beam 大小) 搜索高概率输出
- 比贪婪提供更好的质量,但是如果 Beam 尺寸太大,可能会返回高概率但不合适的输出(如通用的或是短的)
-
抽样方法来获得更多的多样性和随机性
- 适合开放式/创意代 (诗歌,故事)
- T o p − n Top-n Top−n 个抽样允许控制多样性
-
Softmax 温度控制的另一种方式多样性
- 它不是一个解码算法!这种技术可以应用在任何解码算法。
2.NLG 任务和它们的神经网络解法

2.1 摘要:任务定义

-
任务:给定输入文本 x x x,写出更短的摘要 y y y 并包含 x x x 的主要信息
-
摘要可以是单文档,也可以是多文档
- 单文档意味着我们写一个文档 x x x 的摘要 y y y
- 多文档意味着我们写一个多个文档 x 1 , … , x n x_{1}, \ldots, x_{n} x1,…,xn 的摘要 y y y
- 通常 x 1 , … , x n x_{1}, \ldots, x_{n} x1,…,xn 有重叠的内容:如对同一事件的新闻文章

在单文档摘要,数据集中的源文档具有不同长度和风格
- Gigaword:新闻文章的前一两句 → 标题 (即句子压缩)
- LCSTS (中文微博):段落 → 句子摘要
- NYT, CNN / DailyMail:新闻文章 → (多个)句子摘要
- Wikihow (new!):完整的 how-to 文章 → 摘要句子
句子简化是一个不同但相关的任务:将源文本改写为更简单 (有时是更短) 的版本
- Simple Wikipedia:标准维基百科句子 → 简单版本
- Newsela:新闻文章 → 为儿童写的版本
2.2 总结:两大策略

-
抽取式摘要 Extractive summarization
- 选择部分 (通常是句子) 的原始文本来形成摘要
- 更简单
- 限定性的 (无需解释)
- 选择部分 (通常是句子) 的原始文本来形成摘要
-
生成式摘要 Abstractive summarization
- 使用自然语言生成技术生成新的文本
- 更困难
- 更多变 (更人性化)
- 使用自然语言生成技术生成新的文本
2.3 前神经网络时代摘要抽取综述

-
前深度学*时期摘要系统大多是抽取式的
-
类似统计机器翻译系统,他们通常有一个流水线
- 内容选择 Content selection:选择一些句子
- 信息排序 Information ordering:为选择的句子排序
- 句子实现 Sentence realization:编辑并输出句子序列例如,简化、删除部分、修复连续性问题
-
Diagram credit: Speech and Language Processing, Jurafsky and Martin
-
前神经网络时代的内容选择算法
- 句子得分函数可以根据
- 主题关键词,通过计算如 tf-idf 等
- 特性,例如这句话出现在文档的哪里
- 句子得分函数可以根据
-
图算法将文档为一组句子(节点),每对句子之间存在边
- 边的权重与句子相似度成正比
- 使用图算法来识别图中最重要的句子
2.4 综述生成评估:ROUGE

类似于 BLEU,是基于 n-gram 覆盖的算法,不同之处在于:
-
没有简洁惩罚
-
基于召回率 recall,BLEU 是基于准确率的
- 可以说,准确率对于机器翻译来说是更重要的 (通过添加简洁惩罚来修正翻译过短),召回率对于摘要来说是更重要的 (假设你有一个最大长度限制),因为需要抓住重要的信息
- 但是,通常使用 F1 (结合了准确率和召回率)
-
ROUGE: A Package for Automatic Evaluation of Summaries, Lin, 2004

-
BLEU 是一个单一的数字,它是 n = 1 , 2 , 3 , 4 n − g r a m s n=1,2,3,4n-grams n=1,2,3,4n−grams 的精度的组合
-
每 n-gram 的 ROUGE 得分分别报告
-
最常见的报告 ROUGE 得分是
- ROUGE-1:unigram 单元匹配
- ROUGE 红-2:bigram 二元分词匹配
- ROUGE-L:最长公共子序列匹配
-
现在有了一个方便的 ROUGE 的 Python 实现
2.5 神经摘要生成 (2015 年-至今)

-
2015:Rush et al. publish the first seq2seq summarization paper
-
单文档摘要摘要是一项翻译任务!
-
因此我们可以使用标准的 seq2seq + attention 神经机器翻译方法
-
A Neural Attention Model for Abstractive Sentence Summarization, Rush et al, 2015

- 自 2015 年以来,有了更多的发展
- 使其更容易复制
- 也防止太多的复制
- 分层 / 多层次的注意力机制
- 更多的全局 / 高级的内容选择
- 使用 RL 直接最大化 ROUGE 或者其他离散目标 (例如长度)
- 复兴前深度学*时代的想法 (例如图算法的内容选择),把它们变成神经系统
- 使其更容易复制

- Seq2seq+attention systems 善于生成流畅的输出,但是不擅长正确的复制细节 (如罕见字)
- 复制机制使用注意力机制,使 seq2seq 系统很容易从输入复制单词和短语到输出
- 显然这是非常有用的摘要
- 允许复制和创造给了一个混合了抽取 / 抽象式的方法

- 有几篇论文提出了复制机制的变体:
- Language as a Latent Variable: Discrete Generative Models for Sentence Compression, Miao et al, 2016
- Abstractive Text Summarization using Sequence-to-sequence RNNs and Beyond, Nallapati et al, 2016
- Incorporating Copying Mechanism in Sequence-to-Sequence Learning, Gu et al, 2016

-
在每一步上,计算生成下一个词汇的概率 P g e n P_{gen} Pgen,最后的分布是生成 (词汇表) 分布和 copying (注意力) 分布的一个混合分布
-
Get To The Point: Summarization with Pointer-Generator Networks, See et al, 2017

-
复制机制的大问题
- 他们复制太多!
- 主要是长短语,有时甚至整个句子
- 他们复制太多!
-
一个原本应该是抽象的摘要系统,会崩溃为一个主要是抽取的系统
-
另一个问题
- 他们不善于整体内容的选择,特别是如果输入文档很长的情况下
- 没有选择内容的总体战略

-
回忆:前深度学*时代摘要生成是不同阶段的内容选择和表面实现 (即文本生成)
-
标准 seq2seq + attention 的摘要系统,这两个阶段是混合在一起的
- 每一步的译码器(即表面实现),我们也能进行词级别的内容选择(注意力)
- 这是不好的:没有全局内容选择策略
-
一个解决办法:自下而上的汇总
2.6 自下而上的摘要生成

-
内容选择阶段:使用一个神经序列标注模型来将单词标注为
include/don’t-include -
自下而上的注意力阶段:seq2seq + attention 系统不能处理
don’t-include的单词 (使用 mask) -
简单但是非常有效!
- 更好的整体内容选择策略
- 减少长序列的复制 (即更摘要的输出)
- 因为长序列中包含了很多
don’t-include的单词,所以模型必须学会跳过这些单词并将那些include的单词进行摘要与组合
- 因为长序列中包含了很多
2.7 基于强化学*的神经网络摘要生成

-
核心思路:使用 RL 直接优化 ROUGE-L
- 相比之下,标准的最大似然 (ML) 训练不能直接优化 ROUGE-L,因为它是一个不可微函数
-
有趣的发现
- 使用 RL 代替 ML 取得更高的 ROUGE 分数,但是人类判断的得分越低
-
混合模型最好!
2.8 对话系统

对话 包括各种各样的设置
-
面向任务的对话
- 辅助 (如客户服务、给予建议,回答问题,帮助用户完成任务,如购买或预订)
- 合作 (两个代理通过对话在一起解决一个任务)
- 对抗 (两个代理通过对话完成一个任务)
-
社会对话
- 闲聊 (为了好玩或公司)
- 治疗 / 精神健康
2.9 前/后神经网络时期对话系统

-
由于开放式自由 NLG 的难度,前深度学*时代的对话系统经常使用预定义的模板,或从语料库中检索一个适当的反应的反应
-
摘要过去的研究,自 2015 年以来有很多论文将 seq2seq 方法应用到对话,从而导致自由对话系统兴趣重燃
-
一些早期 seq2seq 对话文章包括
- A Neural Conversational Model, Vinyals et al, 2015
- Neural Responding Machine for Short-Text Conversation, Shang et al, 2015
2.10 基于 Seq2Seq 的对话

(seq2seq 相关内容也可以参考ShowMeAI的 NLP 教程NLP 教程(6) - 神经机器翻译、seq2seq 与注意力机制,以及对吴恩达老师课程的总结文章深度学*教程 | Seq2Seq 序列模型和注意力机制)
- 然而,很快就发现,标准 seq2seq +attention 的方法在对话 (闲聊) 任务中有严重的普遍缺陷
- 一般性/无聊的反应
- 无关的反应(与上下文不够相关)
- 重复
- 缺乏上下文(不记得谈话历史)
- 缺乏一致的角色人格
2.11 无关回答问题

-
问题:seq2seq 经常产生与用户无关的话语
- 要么因为它是通用的 (例如
我不知道) - 或因为改变话题为无关的一些事情
- 要么因为它是通用的 (例如
-
一个解决方案:不是去优化输入 S S S 到回答 T T T 的映射来最大化给定 S S S 的 T T T 的条件概率,而是去优化输入 S S S 和回复 T T T 之间的最大互信息 Maximum Mutual Information (MMI),从而抑制模型去选择那些本来就很大概率的通用句子
log p ( S , T ) p ( S ) p ( T ) \log \frac{p(S, T)}{p(S) p(T)} logp(S)p(T)p(S,T)
T ^ = arg max T { log p ( T ∣ S ) − log p ( T ) } \hat{T}=\underset{T}{\arg \max }{\log p(T | S)-\log p(T)} T^=Targmax{logp(T∣S)−logp(T)}
2.12 一般性/枯燥的回答问题

-
简单的测试修复
- 直接在集束搜索中增大罕见字的概率
- 使用抽样解码算法而不是 Beam 搜索
-
条件修复
- 用一些额外的内容训练解码器 (如抽样一些内容词并处理)
- 训练 retrieve-and-refine(检索并调优) 模型而不是 generate-from-scratch(从头生成) 模型
- 从语料库采样人类话语并编辑以适应当前的场景
- 这通常产生更加多样化/人类/有趣的话语!
2.13 重复回答问题

-
简单的解决方案
- 直接在集束搜索中禁止重复 n-grams
- 通常非常有效
- 直接在集束搜索中禁止重复 n-grams
-
更复杂的解决方案
- 在 seq2seq 中训练一个覆盖机制,这是客观的,可以防止注意力机制多次注意相同的单词
- 定义训练目标以阻止重复
- 如果这是一个不可微函数生成的输出,然后将需要一些技术例如 RL 来训练
2.14 缺少一致的人物角色问题

- 2016 年,李等人提出了一个 seq2seq 对话模式,学会将两个对话伙伴的角色编码为嵌入
- 生成的话语是以嵌入为条件的

- 最*有一个闲聊的数据集称为 PersonaChat,包括每一次会话的角色 (描述个人特质的 5 个句子的集合)
- 这提供了一种简单的方式,让研究人员构建 persona-conditional 对话代理
2.15 谈判对话

- 2017 年,Lewis et al 收集谈判对话数据集
- 两个代理协商谈判对话 (通过自然语言) 如何分配一组项目
- 代理对项目有不同的估值函数
- 代理人会一直交谈直到达成协议

- 他们发现用标准的最大似然 (ML) 来训练 seq2seq 系统的产生了流利但是缺乏策略的对话代理
- 和 Paulus 等的摘要论文一样,他们使用强化学*来优化离散奖励 (代理自己在训练自己)
- RL 的基于目的的目标函数与 ML 目标函数相结合
- 潜在的陷阱:如果两两对话时,代理优化的只是 RL 目标,他们可能会偏离英语

- 在测试时,模型通过计算 rollouts,选择可能的反应:模拟剩余的谈话和预期的回报


- 2018 年,Yarats 等提出了另一个谈判任务的对话模型,将策略和 NLG 方面分开
- 每个话语 x t x_t xt 都有一个对应的离散潜在变量 z t z_t zt
- z t z_t zt 学*成为一个很好的预测对话中的未来事件的预测器 (未来的消息,策略的最终收获),但不是 x t x_t xt 本身的预测器
- 这意味着 z t z_t zt 学会代表 x t x_t xt 对对话的影响,而不是 x t x_t xt 的 words
- 因此 z t z_t zt 将任务的策略方面从 NLG 方面分离出来
- 这对可控制性、可解释性和更容易学*策略等是有用的
2.16 会话问答:CoQA

-
一个来自斯坦福 NLP 的新数据集
-
任务:回答关于以一段对话为上下文的文本的问题
-
答案必须写摘要地(不是复制)
-
QA / 阅读理解任务,和对话任务
2.17 故事述说

-
神经网络讲故事的大部分工作使用某种提示
- 给定图像生成的故事情节段落
- 给定一个简短的写作提示生成一个故事
- 给定迄今为止的故事,生成故事下个句子(故事续写)
- 这和前两个不同,因为我们不关心系统在几个生成的句子上的性能
-
神经故事飞速发展
- 第一个故事研讨会于 2018 年举行
- 它举行比赛 (使用五张图片的序列生成一个故事)
2.18 从图像生成故事

- 有趣的是,这并不是直接的监督图像标题。没有配对的数据可以学*。

-
问题:如何解决缺乏并行数据的问题
-
回答:使用一个通用的 sentence-encoding space
-
Skip-thought 向量是一种通用的句子嵌入方法
- 想法类似于我们如何学通过预测周围的文字来学*单词的嵌入
-
使用 COCO (图片标题数据集),学*从图像到其标题的 Skip-thought 编码的映射
-
使用目标样式语料库(Taylor Swift lyrics),训练 RNN-LM, 将 Skip-thought 向量解码为原文
-
把两个放在一起
2.19 从写作提示生成故事

- 2018 年,Fan 等发布了一个新故事生成数据集 collected from Reddit’s WritingPrompts subreddit.
- 每个故事都有一个相关的简短写作提示

Fan 等也提出了一个复杂的 seq2seq prompt-to-story 模型
-
基于卷积的模型
- 这使它的速度比基于 RNN 的 seq2seq 更快
-
封闭的多头多尺度的自注意力
- 自注意力对于捕获远程上下文而言十分重要
- 门控允许更有选择性的注意机制
- 不同的注意力头在不同的尺度上注意不同的东西——这意味着有不同的注意机制用于检索细粒度和粗粒度的信息

- 模型融合
- 预训练一个 seq2seq 模型,然后训练第二个 seq2seq 模型访问的第一个模型的隐状态
- 想法是,第一个 seq2seq 模型学*通用语言模型,第二个模型学*基于提示的条件

-
结果令人印象深刻
- 与提示相关
- 多样化,并不普通
- 在文体上戏剧性
-
但是
- 主要是氛围 / 描述性 / 场景设定,很少是事件 / 情节
- 生成更长时,大多数停留在同样的想法并没有产生新的想法——一致性问题
2.20 讲故事的挑战

- 由神经语言模型生成的故事听起来流畅…但是是曲折的,荒谬的,情节不连贯的
缺失的是什么?
- 语言模型对单词序列进行建模。故事是事件序列
- 为了讲一个故事,我们需要理解和模拟
- 事件和它们之间的因果关系结构
- 人物,他们的个性、动机、历史、和其他人物之间的关系
- 世界 (谁、是什么和为什么)
- 叙事结构(如说明 → 冲突 → 解决)
- 良好的叙事原则(不要引入一个故事元素然后从未使用它)
2.21 event2event 故事生成

2.22 结构化故事生成

2.23 跟踪事件、实体、状态等

-
旁注:在神经 NLU (自然语言理解) 领域,已经有大量关于跟踪事件 / 实体 / 状态的工作
- 例如,Yejin Choi’s group 很多工作在这一领域
-
将这些方法应用到 NLG 是更加困难的
- 如果缩小范围,则更可控的
- 不采用自然语言生成开放域的故事,而是跟踪状态
- 生成一个配方 (考虑到因素),跟踪因素的状态
2.24 生成食谱时跟踪状态

- 过程神经网络:给定因素,生成配方指示
- 显式跟踪所有因素的状态,并利用这些知识来决定下一步要采取什么行动
2.25 诗歌生成:Hafez

-
Hafez:Ghazvininejad et al 的诗歌系统
-
主要思路:使用一个有限状态受体 (FSA) 来定义所有可能的序列,服从希望满足的韵律 (节拍) 约束
- 然后使用 FSA 约束 RNN-LM 的输出
-
例如
- 莎士比亚的十四行诗是 14 行的 iambic pentameter
- 所以莎士比亚的十四行诗的 FSA 是 ( ( 01 ) 5 ) 14 ((01)⁵)^{14} ((01)5)14
- 在 Beam 搜索解码中,只有探索属于 FSA 的假设

- 全系统
- 用户提供主题字
- 得到一个与主题相关的词的集合
- 识别局部词语押韵,这将是每一行的结束
- 使用受制于 FSA 的 RNN 语言模型生成这首诗
- RNN 语言模型向后(自右向左)。这是必要的,因为每一行的最后一个词是固定的

- 在后续的一篇论文中,作者制作了系统交互和用户可控
- 控制方法很简单:在集束搜索中,增大具有期望特征的单词的分数
2.26 诗歌生成:Deep-speare

-
更多的诗歌生成的端到端方法 (lau 等)
-
三个组件
- 语言模型
- pentameter model
- rhyme model 韵律模型……
-
作为一个多任务学*问题共同学*
-
作者发现 meter 和押韵是相对容易的,但生成的诗歌上有些缺乏
情感和可读性
2.27 NMT 的非自回归生成

-
2018 年,顾等发表了
Non-autoregressive 神经机器翻译模型- 意义:它不是根据之前的每个单词,从左到右产生翻译
-
它并行生成翻译
-
这具有明显的效率优势,但从文本生成的角度来看也很有趣
-
架构是基于 Transformer 的;最大的区别是,解码器可以运行在测试时并行

3.自然语言生成 NLG 评估

3.1 NLG 的自动评价指标

基于词重叠的指标 (BLEU,ROUGE,METROR,F1,等等)
- 他们不适合机器翻译
- 对于摘要而言是更差的评价标准,因为摘要比机器翻译更开放
- 不幸的是,与抽象摘要系统相比,提取摘要系统更受 ROUGE 青睐
- 对于对话甚至更糟,这比摘要更开放
- 类似的例子还有故事生成
3.2 单词重叠指标不利于对话

- 上图展示了 BLEU-2、Embedding average 和人类评价的相关性都不高

3.3 NLG 的自动评价指标

-
Perplexity / 困惑度?
- 捕捉 LM 有多强大,但是不会告诉关于生成的任何事情 (例如,如果困惑度是未改变的,解码算法是不好的)
-
词嵌入基础指标?
- 主要思想:比较词嵌入的相似度 (或词嵌入的均值),而不仅仅是重叠的单词。以更灵活的方式捕获语义
- 不幸的是,仍然没有与类似对话的开放式任务的人类判断,产生很好的联系
3.4 单词重叠指标不利于对话

3.5 NLG 的自动评价指标

-
没有自动指标充分捕捉整体质量 (即代表人类的质量判断)
-
但可定义更多的集中自动度量来捕捉生成文本的特定方面
- 流利性 (使用训练好的语言模型计算概率)
- 正确的风格 (使用目标语料库上训练好的语言模型的概率)
- 多样性 (罕见的用词,n-grams 的独特性)
- 相关输入 (语义相似性度量)
- 简单的长度和重复
- 特定于任务的指标,如摘要的压缩率
-
虽然这些不衡量整体质量,他们可以帮助我们跟踪一些我们关心的重要品质
3.6 人工评价

-
人类的判断被认为是黄金标准
-
当然,我们知道人类评价是缓慢而昂贵的
-
但这些问题?
-
假如获得人类的评估:人类评估解决所有的问题吗?
-
没有!进行人类有效评估非常困难:
- 是不一致的
- 可能是不合逻辑的
- 失去注意力
- 误解了问题
- 不能总是解释为什么他们会这样做
3.7 可控聊天机器人的详细人工评估

- 在聊天机器人项目上工作的个人经验 (PersonaChat)
- 我们研究了可控性 (特别是控制所产生的话语,如重复,特异性,回应相关性 和 问题询问)

-
如何要求人的质量判断?
-
我们尝试了简单的整体质量 (多项选择) 问题,例如:
- 这次对话有多好?
- 这个用户有多吸引人?
- 这些用户中哪一个给出了更好的响应?
- 想再次与该用户交谈吗?
- 认为该用户是人还是机器人?
-
主要问题:
- 必然非常主观
- 回答者有不同的期望;这会影响他们的判断
- 对问题的灾难性误解 (例如
聊天机器人非常吸引人,因为它总是回写) - 总体质量取决于许多潜在因素;他们应该如何被称重 和/或 比较?

- 最终,我们设计了一个详细的人类评价体系分离的重要因素,有助于整体 chatbot 质量

发现
- 控制重复对于所有人类判断都非常重要
- 提出更多问题可以提高参与度
- 控制特异性 (较少的通用话语) 提高了聊天机器人的吸引力,趣味性和感知的听力能力。
- 但是,人类评估人员对风险的容忍度较低 (例如无意义或非流利的输出) 与较不通用的机器人相关联
- 总体度量“吸引力” (即享受) 很容易最大化 - 我们的机器人达到了*乎人性化的表现
- 整体度量“人性化” (即图灵测试) 根本不容易最大化 - 所有机器人远远低于人类表现
- 人性化与会话质量不一样!
- 人类是次优的会话主义者:他们在有趣,流利,倾听上得分很低,并且问的问题太少
3.8 NLG 评估的可能新途径?

-
语料库级别的评价指标
- 度量应独立应用于测试集的每个示例,或整个语料库的函数
- 例如,如果对话模型对测试集中的每一个例子回答相同的通用答案,它应该被惩罚
-
评估衡量多样性安全权衡的评估指标
-
免费的人类评估
- 游戏化:使任务(例如与聊天机器人交谈)有趣,这样人类就可以为免费提供监督和隐式评估,作为评估指标
-
对抗性鉴别器作为评估指标
- 测试 NLG 系统是否能愚弄经过训练能够区分人类文本和 AI 生成的文本的识别器
4.NLG 研究的一些想法,目前的趋势,未来的可能方向

4.1 NLG 中令人兴奋的当前趋势

-
将离散潜在变量纳入 NLG
- 可以帮助在真正需要它的任务中建模结构,例如讲故事,任务导向对话等
-
严格的从左到右生成的替代方案
- 并行生成,迭代细化,自上而下生成较长的文本
-
替代 teacher forcing 的最大可能性训练
- 更全面的句子级别的目标函数 (而不是单词级别)
4.2 NLG 研究

4.3 神经 NLG 群体正在迅速成熟

-
在 NLP+深度学*的早期,社区主要将成功的非机动车交通方法迁移到 NLG 任务中。
-
现在,越来越多的创新 NLG 技术出现,针对非 NMT 生成环境。
-
越来越多 (神经) NLG 研讨会和竞赛,特别关注开放式 NLG
- NeuralGen workshop
- Storytelling workshop
- Alexa challenge
- ConvAI2 NeurIPS challenge
-
这些对于组织社区提高再现性、标准化评估特别有用
-
最大障碍是评估!
4.4 在 NLG 工作学到的 8 件事

- ① 任务越开放,一切就越困难
- 约束有时是受欢迎的
- ② 针对特定改进的目标比旨在提高整体生成质量更易于管理
- ③ 如果使用一个语言模型作为 NLG:改进语言模型 (即困惑) 最有可能提高生成质量
- 但这并不是提高生成质量的唯一途径
- ④ 多看看输出

- ⑤ 需要一个自动度量,即使它是不受影响的
- 可能需要几个自动度量
- ⑥ 如果做了人工评估,让问题尽可能的集中
- ⑦ 在今天的 NLP + 深度学*和 NLG 中,再现性是一个巨大的问题。
- 请公开发布所有生成的输出以及的论文
- ⑧ 在 NLG 工作可能很令人沮丧,但也很有趣
4.5 我和我的聊天机器人之间奇怪的对话

5.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=15
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
6.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 16 讲 - 指代消解问题与神经网络方法

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!视频和课件等资料的获取方式见文末。
引言

授课计划

- What is Coreference Resolution? / 什么是共指消解(指代消解)
- Applications of coreference resolution / 共指消解应用
- Mention Detection / 指代检测
- Some Linguistics: Types of Reference Four Kinds of Coreference Resolution Models
- Rule-based (Hobbs Algorithm) / 基于规则的方式
- Mention-pair models / 指代对模型
- Mention ranking models / 指代排序模型
- Including the current state-of-the-art coreference system!
- Mention clustering model / 指代聚类模型
- Evaluation and current results / 效果评估
1.共指消解定义
- 识别所有涉及到相同现实世界实体的 mention (指代)
- He, her 都是实体的提及 mentions of entities (实体指代)

2.共指消解应用
2.1 应用

-
全文理解
- 信息提取,回答问题,总结,…
他生于 1961 年(谁?)
-
机器翻译
- 语言对性别,数量等有不同的特征
-
对话系统
2.2 指代消解两个步骤

- ① 指代的检测(简单)
- ② 指代的聚类(难)
3.指代检测
3.1 指代检测

- Mention:指向某个实体的一段文本
三种 mention
- ① Pronouns 代词
- I, your, it, she, him, etc.
- ② Named entities 命名实体
- People, places, etc.
- ③ Noun phrases 名词短语
- “a dog,” “the big fluffy cat stuck in the tree”

-
指某个实体的文本范围
-
检测:使用其他 NLP 系统
-
① Pronouns 代词
- 【I, your, it, she, him, etc.】因为代词是 POS 检测结果的一种,所以只要使用 POS 检测器即可
-
② Named entities 命名实体
- 【People, places, etc.】Use a NER system
-
③ Noun phrases 名词短语
- 【“a dog,” “the big fluffy cat stuck in the tree”】Use a parser (尤其依存解析器)
3.2 指代检测:并非很简单

-
将所有代词、命名实体和 NPs 标记为
mention或over-generates mentions -
下方是否是 mention?
- lt is sunny
- Every student
- No student
- The best donut in the world
- 100 miles
3.3 如何处理这些不好的指代

-
可以训练一个分类器过滤掉 spurious mentions
-
更为常见的:保持所有
mentions作为candidate mentions -
在你的 coreference 系统运行完成后,丢弃所有的单个 mention (即没有被标记为与其他任何东西 coreference 的)
3.4 我们能不用繁琐的流水线系统吗?

-
我们可以训练一个专门用于指代检测的分类器,而不是使用 POS 标记器、NER 系统和解析器
-
甚至端到端共同完成指代检测和指代消解,而不是两步
3.5 首先基于语言学

-
当两个指代指向世界上的同一个实体时,被称为 coreference
- Barack Obama 和 Obama
-
相关的语言概念是 anaphora (回指):下文的词返指或代替上文的词
- anaphor 的解释在某种程度上取决于 antecedent 先行词的解释
- Barack Obama said he would sign the bill
3.6 前指代 vs 共指

- 命名实体的 coreference
3.7 并非所有前指代都是指代

- Not all noun phrases have reference (不是所有的名词短语都有指代)
- Every dancer twisted her knee
- No dancer twisted her knee
每一个句子有三个 NPs;因为第一个是非指示性的,另外两个也不是
3.8 前指代 vs 后指

- 并非所有 anaphora 关系都是 coreference
We went to see a concert last night. The tickets were really expensive.
- 这被称为 **bridging anaphora (桥接回指) **

- 通常先行词在 anaphor (回指) (如代词)之前,但并不总是
3.9 后指代

3.10 四种共指模型

- 基于规则的
- mention 对
- mention 排序
- 聚类
3.11 传统代词回指消解:霍布斯朴素算法

-
该算法仅用于寻找代词的参考,也可以延伸到其他案例
-
1.从名词短语开始,立即支配代词。
-
2.上树到第一个 N P NP NP 或 S S S。把这个叫做 X X X,路径叫做 p p p。
-
3.从 X X X 到 p p p 的左边,从左到右,宽度优先遍历 X X X 下的所有分支。提出任何在它和 X X X 之间有 N P NP NP 或 s b sb sb 的 N P NP NP 作为先行词。
-
4.如果 X X X 是句子中最高的 S S S,则按最*的顺序遍历前面句子的解析树。从左到右遍历每棵树,宽度优先。当遇到 N P NP NP 时,建议作为先行词。如果 X X X 不是最高节点,请转至步骤 5 5 5。

-
5.从节点 X X X,向上到树的第一个 N P NP NP 或 S S S。叫它 X X X,路径 p p p。
-
6.如果 X X X 是 N P NP NP,路径 p p p 到 X X X 来自 X X X 的非首语短语 (一个说明符或附加语,如所有格、PP、同位语或相关从句),建议 X X X 作为先行词。
-
7.以从左到右、宽度优先的方式,遍历路径左侧 X X X 下方的所有分支。提出任何遇到的 N P NP NP 作为先行条件。
-
8.如果 X X X 是 S S S 节点,则遍历路径右侧 X X X 的所有分支,但不要低于遇到的任何 N P NP NP 或 S S S。命题 N P NP NP 作为先行词。
-
9.转至步骤 4 4 4。
3.12 霍布斯朴素算法示例

- 这是一个很简单、但效果很好的 coreference resolution 的 baseline
3.13 基于知识的代词共指

-
第一个例子中,两个句子具有相同的语法结构,但是出于外部世界知识,我们能够知道倒水之后,满的是杯子 (第一个
it指向的是the cup),空的是壶 (第二个it指向的是the pitcher) -
可以将世界知识编码成共指问题
3.14 霍布斯朴素算法:评价

4.指代对模型
4.1 Mention Pair 指代对共指模型

4.2 指代对共指模型

-
训练一个二元分类器,为每一对 mention 分配一个相关概率 p ( m i , m j ) p(m_i,m_j) p(mi,mj)
- 例如,为寻找
she的 coreference,查看所有候选先行词 (以前出现的 mention ),并确定哪些与之相关
- 例如,为寻找
-
和
she有关系吗? -
Positive 例子:希望 p ( m i , m j ) p(m_i,m_j) p(mi,mj) 接* 1 1 1
-
Negative 例子:希望 p ( m i , m j ) p(m_i,m_j) p(mi,mj) 接* 0 0 0
4.3 指代对共指模型训练

- 文章中有 N N N 个 mention
- 如果 m i m_i mi 和 m j m_j mj 是 coreference,则 y i j = 1 y_{ij}=1 yij=1,否则 y i j = − 1 y_{ij}=-1 yij=−1
- 只是训练正常的交叉熵损失 (看起来有点不同,因为它是二元分类)
J = − ∑ i = 2 N ∑ j = 1 i y i j log p ( m j , m i ) J=-\sum_{i=2}^{N} \sum_{j=1}^{i} y_{i j} \log p\left(m_{j}, m_{i}\right) J=−i=2∑Nj=1∑iyijlogp(mj,mi)
- i = 2 i=2 i=2:遍历 mentions
- j = 1 j=1 j=1:遍历候选先行词 (前面出现的 mention)
- log p ( m j , m i ) \log p(m_j,m_i) logp(mj,mi):coreference mention pairs 应该得到高概率,其他应该得到低概率
4.4 指代对共指模型测试阶段

-
coreference resolution 是一项聚类任务,但是我们只是对 mentions 对进行了评分……该怎么办?
-
选择一些阈值 (例如 0.5 0.5 0.5),并将 p ( m i , m j ) p(m_i,m_j) p(mi,mj) 在阈值以上的 mentions 对之间添加 coreference 链接
-
利用传递闭包得到聚类
-
coreference 连接具有传递性,即使没有不存在 link 的两者也会由于传递性,处于同一个聚类中
-
这是十分危险的。如果有一个 coreference link 判断错误,就会导致两个 cluster 被错误地合并了
4.5 指代对共指模型缺点

-
假设我们的长文档里有如下的 mentions
-
许多 mentions 只有一个清晰的先行词
- 但我们要求模型来预测它们
-
解决方案:相反,训练模型为每个 mention 只预测一个先行词
- 在语言上更合理
-
根据模型把其得分最高的先行词分配给每个 mention
-
虚拟的 NA mention 允许模型拒绝将当前 mention 与任何内容联系起来(
singletonorfirstmention) -
she 最好的先行词?
-
Positive 例子:模型必须为其中一个分配高概率 (但不一定两者都分配)
-
对候选先行词的分数应用 softmax,使概率总和为 1
-
只添加得分最高的 coreference link
5.指代排序模型
5.1 coreference 模型:训练

- 我们希望当前 mention m j m_j mj 与它所关联的任何一个候选先行词相关联。
- 在数学上,我们想要最大化这个概率:
∑ j = 1 i − 1 1 ( y i j = 1 ) p ( m j , m i ) \sum_{j=1}^{i-1} \mathbb{1}\left(y_{i j}=1\right) p\left(m_{j}, m_{i}\right) j=1∑i−11(yij=1)p(mj,mi)
-
j = 1 j=1 j=1:遍历候选先行词集合
-
y i j = 1 y_{ij}=1 yij=1:即 m i m_i mi 与 m j m_j mj 是 coreference 关系的情况
-
p ( m j , m i ) p\left(m_{j}, m_{i}\right) p(mj,mi):我们希望模型能够给予其高可能性
-
将其转化为损失函数:
J = ∑ i = 2 N − log ( ∑ j = 1 i − 1 1 ( y i j = 1 ) p ( m j , m i ) ) J=\sum_{i=2}^{N}-\log \left(\sum_{j=1}^{i-1} \mathbb{1}\left(y_{i j}=1\right) p\left(m_{j}, m_{i}\right)\right) J=i=2∑N−log(j=1∑i−11(yij=1)p(mj,mi))
- i = 2 i=2 i=2:遍历所有文档中的指代
- − log -\log −log:使用负对数和似然结合构建损失
- 该模型可以为一个正确的先行词产生概率 0.9 0.9 0.9,而对其他所有产生较低的概率,并且总和仍然很大
5.2 指代排序模型预测阶段

- 和 mention-pair 模型几乎一样,除了每个 mention 只分配一个先行词
5.3 如何计算概率

A.非神经网络的统计算法分类器
B.简单神经网络
C.复杂神经网络像 LSTM 和注意力模型
5.4 A.非神经网络方法:特征

- 人、数字、性别
- 语义相容性
- 句法约束
- 更*的提到的实体是个可能的参考对象
- 语法角色:偏好主语位置的实体
- 排比
5.5 B.神经网络模型

- 标准的前馈神经网络
- 输入层:词嵌入和一些类别特征

-
嵌入
- 每个 mention 的前两个单词,第一个单词,最后一个单词,head word,…
- head word 是 mention 中
最重要的单词—可以使用解析器找到它 - 例如:The fluffy cat stuck in the tree
- head word 是 mention 中
- 每个 mention 的前两个单词,第一个单词,最后一个单词,head word,…
-
仍然需要一些其他特征
- 距离
- 文档体裁
- 说话者的信息
5.7 C.端到端模型

-
当前最先进的模型算法 (Kenton Lee et al. from UW, EMNLP 2017)
-
Mention 排名模型
-
改进了简单的前馈神经网络
- 使用 LSTM
- 使用注意力
- 端到端的完成 mention 检测和 coreference
- 没有 mention 检测步骤!
- 而是考虑每段文本 (一定长度) 作为候选 mention
- a sapn 是一个连续的序列

-
首先,将文档里的单词使用词嵌入矩阵和字符级别 CNN 一起构建为词嵌入
-
接着,在文档上运行双向 LSTM
-
接着,将每段文本 i i i 从 S T A R T ( i ) START (i) START(i) 到 E N D ( i ) END(i) END(i) 表示为一个向量
- sapn 是句子中任何单词的连续子句
- General, General Electric, General Electric said, … Electric, Electric said, …都会得到它自己的向量表示
-
接着,将每段文本 i i i 从 S T A R T ( i ) START (i) START(i) 到 E N D ( i ) END(i) END(i) 表示为一个向量,例如
the postal service
g i = [ x START ( i ) ∗ , x E N D ( i ) ∗ , x ^ i , ϕ ( i ) ] \boldsymbol{g}{i}=\left[\boldsymbol{x}(i)}^{}, \boldsymbol{x}_{\mathrm{END}(i)}^{}, \hat{\boldsymbol{x}}_{i}, \phi(i)\right] gi=[xSTART(i)∗,xEND(i)∗,x^i,ϕ(i)]
-
x START ( i ) ∗ \boldsymbol{x}{\operatorname{START}(i)}^{*} xSTART(i)∗、 x E N D ( i ) ∗ \boldsymbol{x}(i)}^{*} xEND(i)∗: sapn 的开始和结束的双向 LSTM 隐状态表示
-
x ^ i \hat{\boldsymbol{x}}_{i} x^i:基于注意力机制的 sapn 内词语的表示
-
ϕ ( i ) \phi(i) ϕ(i):更多的其他特征
-
x ^ i \hat{\boldsymbol{x}}_{i} x^i 是 sapn 的注意力加权平均的词向量
- 权重向量与变换后的隐状态点乘
α t = w α ⋅ FFNN α ( x t ∗ ) \alpha_{t}=\boldsymbol{w}{\alpha} \cdot \operatorname{FFNN}\left(\boldsymbol{x}_{t}^{*}\right) αt=wα⋅FFNNα(xt∗)
- sapn 内基于 softmax 的注意力得分向量
a i , t = exp ( α t ) ∑ k = START ( i ) END ( i ) exp ( α k ) a_{i, t}=\frac{\exp \left(\alpha_{t}\right)}{\sum_{k=\operatorname{START}(i)}^{\operatorname{\operatorname {END}}(i)} \exp \left(\alpha_{k}\right)} ai,t=∑k=START(i)END(i)exp(αk)exp(αt)
- 使用注意力权重对词嵌入做加权求和
x ^ i = ∑ t = START ( i ) END ( i ) a i , t ⋅ x t \hat{\boldsymbol{x}}{i}=\sum(i)}^{\operatorname{END}(i)} a_{i, t} \cdot \boldsymbol{x}_{t} x^i=t=START(i)∑END(i)ai,t⋅xt

-
为什么要在 sapn 中引入所有的这些不同的项
-
表征 sapn 左右的上下文
-
表征 sapn 本身
-
表征其他文本中不包含的信息

- 最后,为每个 sapn pair 打分,来决定他们是不是 coreference mentions
s ( i , j ) = s m ( i ) + s m ( j ) + s a ( i , j ) s(i, j)=s_{\mathrm{m}}(i)+s_{\mathrm{m}}(j)+s_{\mathrm{a}}(i, j) s(i,j)=sm(i)+sm(j)+sa(i,j)
- 打分函数以 sapn representations 作为输入
s m ( i ) = w m ⋅ FFNN m ( g i ) s a ( i , j ) = w a ⋅ FFNN a ( [ g i , g j , g i ∘ g j , ϕ ( i , j ) ] ) \begin{aligned} s_{\mathrm{m}}(i) &=\boldsymbol{w}{\mathrm{m}} \cdot \operatorname{FFNN}{\mathrm{m}}\left(\boldsymbol{g}{i}\right) \ s{\mathrm{a}}(i, j) &=\boldsymbol{w}{\mathrm{a}} \cdot \operatorname{FFNN}{\mathrm{a}}\left(\left[\boldsymbol{g}{i}, \boldsymbol{g}, \boldsymbol{g}{i} \circ \boldsymbol{g}, \phi(i, j)\right]\right) \end{aligned} sm(i)sa(i,j)=wm⋅FFNNm(gi)=wa⋅FFNNa([gi,gj,gi∘gj,ϕ(i,j)])
- ∘ \circ ∘:表征向量之间会通过乘法进行交叉
- ϕ ( i , j ) \phi(i, j) ϕ(i,j):同样也有一些额外的特征

-
为每个 sapn pair 打分是棘手的
- 一个文档中有 O ( T 2 ) O(T²) O(T2) sapns ( T T T 是词的个数)
- O ( T 4 ) O(T⁴) O(T4) 的运行时间
- 所以必须做大量的修剪工作 (只考虑一些可能是 mention 的 sapn )
-
关注学*哪些单词是重要的在提到(有点像 head word)
6.指代聚类模型
6.1 基于聚类的共指模型

-
coreference 是个聚类任务,让我们使用一个聚类算法吧
- 特别是使用 agglomerative 聚类 (自下而上的)
-
开始时,每个 mention 在它自己的单独集群中
-
每一步合并两个集群
- 使用模型来打分那些聚类合并是好的

6.2 聚类模型结构


-
首先为每个 mention 对生成一个向量
- 例如,前馈神经网络模型中的隐藏层的输出
-
接着将池化操作应用于 mention-pair 表示的矩阵上,得到一个 cluster-pair 聚类对的表示
-
通过用权重向量与表示向量的点积,对候选 cluster merge 进行评分
6.3 聚类模型:训练

- 当前候选簇的合并,取决于之前的合并
- 所以不能用常规的监督学*
- 使用类似强化学*训练模型
- 奖励每个合并:coreference 评价指标的变化
7.效果评估
7.1 指代模型评估

-
许多不同的评价指标:MUC, CEAF, LEA, BCUBED, BLANC
- 经常使用一些不同评价指标的均值
-
例如 B-cubed
- 对于每个 mention,计算其准确率和召回率
- 然后平均每个个体的准确率和召回率
7.2 系统性能

- OntoNotes 数据集:~ 3000 人类标注的文档
- 英语和中文
- Report an F1 score averaged over 3 coreference metrics

7.3 神经评分模型有什么帮助?

- 特别是对于没有字符串匹配的 NPs 和命名实体。神经与非神经评分
7.4 结论

-
coreference 是一个有用的、具有挑战性和有趣的语言任务
- 许多不同种类的算法系统
-
系统迅速好转,很大程度上是由于更好的神经模型
- 但总的来说,还没有惊人的结果
-
Try out a coreference system yourself
- http://corenlp.run/ (ask for coref in Annotations)
- https://huggingface.co/coref/
8.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=16
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
9.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 17 讲 - 多任务学*(以问答系统为例)

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!视频和课件等资料的获取方式见文末。
1.问答系统与多任务学*

2.NLP 与 AI 的下一步

3.单任务的弊端

- 鉴于 { d a t a s e t , t a s k , m o d e l , m e t r i c } {dataset,task,model,metric} {dataset,task,model,metric},*年来性能得到了很大改善
- 只要 ∣ dataset ∣ > 1000 × C |\text{dataset}| > 1000 \times C ∣dataset∣>1000×C,我们就可以得到当前的最优结果 ( C C C 是输出类别的个数)
- 对于更一般的 Al,我们需要在单个模型中继续学*
- 模型通常从随机开始,仅部分预训练
4.预训练与信息共享帮助很大

-
计算机视觉
- Imagenet+cnn 巨大的成功
- 分类属于视觉最基础的任务块
-
自然语言处理
- Word2vec、GloVe、CoVe、ELMo、BERT 开始步向成功
- 自然语言处理中没有统一的基础任务块
5.为什么 NLP 中共享权重相对较少

- NLP 需要多种推理:逻辑,语言,情感,视觉,++
- 需要短期和长期记忆
- NLP 被分为中间任务和单独任务以取得进展
- 在每个社区中追逐基准
- 一个无人监督的任务可以解决所有问题吗?不可以
- 语言显然需要监督
6.为什么 NLP 也需要 1 个统一多任务模型

- 多任务学*是一般 NLP 系统的阻碍
- 统一模型可以决定如何转移知识(领域适应,权重分享,转移和零射击学*)
- 统一的多任务模型可以
- 更容易适应新任务
- 简化部署到生产的时间
- 降低标准,让更多人解决新任务
- 潜在地转向持续学*
7.如何在 1 个框架中承载多个 NLP 任务

- 序列标记
- 命名实体识别,aspect specific sentiment
- 文字分类
- 对话状态跟踪,情绪分类
- Seq2seq
- 机器翻译,总结,问答
8.NLP 中的超级任务

- 语言模型
- 问答
- 对话
9.自然语言处理十项全能 (decaNLP)

- 把 10 项不同的任务都写成了 QA 的形式,进行训练与测试
10.问答多任务学*

- Meta-Supervised learning 元监督学* :
From {x,y} to {x,t,y}(t is the task) - 使用问题 q q q 作为任务 t t t 的自然描述,以使模型使用语言信息来连接任务
- y y y 是 q q q 的答案, x x x 是回答 q q q 所必需的上下文
11.为 decaNLP 设计模型

- 需求:
- 没有任务特定的模块或参数,因为我们假设任务 ID 是未提供的
- 必须能够在内部进行调整以执行不同的任务
- 应该为看不见的任务留下零射击推断的可能性
12.decaNLP 的 1 个多任务问答神经网络模型方案

- 以一段上下文开始
- 问一个问题
- 一次生成答案的一个单词,通过
- 指向上下文
- 指向问题
- 或者从额外的词汇表中选择一个单词
- 每个输出单词的指针切换都在这三个选项中切换
13.多任务问答网络 (MQAN)

- 固定的 GloVe 词嵌入 + 字符级的 n-gram 嵌入→ Linear → Shared BiLSTM with skip connection
- 从一个序列到另一个序列的注意力总结,并通过跳过连接再次返回
- 分离 BiLSTM 以减少维数,两个变压器层,另一个 BiLSTM
- 自回归解码器使用固定的 GloVe 和字符 n-gram 嵌入,两个变压器层和一个 LSTM 层来参加编码器最后三层的输出
- LSTM 解码器状态用于计算上下文与问题中的被用作指针注意力分布问题
- 对上下文和问题的关注会影响两个开关:
- gamma 决定是复制还是从外部词汇表中选择
- lambda 决定是从上下文还是在问题中复制
14.评估

15.单任务效果 vs 多任务效果

-
S2S 是 seq2seq
-
+SelfAtt = plus self attention
-
+CoAtt = plus coattention
-
+QPtr = plus question pointer == MQAN
-
Transformer 层在单任务和多任务设置中有收益
-
QA 和 SRL 有很强的关联性
-
指向问题至关重要
-
多任务处理有助于实现零射击
-
组合的单任务模型和单个多任务模型之间存在差距
16.训练策略:全联合

-
Training Strategies: Fully Joint
-
简单的全联合训练策略
-
困难:在单任务设置中收敛多少次迭代
-
带红色的任务:预训练阶段包含的任务
17.单任务 vs 多任务

- QA 的 Anti-curriculum 反课程预训练改进了完全联合培训
- 但 MT 仍然很糟糕
18.*期研究与实验

- Closing the Gap: Some Recent Experiments
19.单任务 vs 多任务

20.MQAN 细节

- Where MQAN Points
- 答案从上下文或问题中正确的复制
- 没有混淆模型应该执行哪个任务或使用哪个输出空间
21.decaNLP 预训练提升最后效果

- Pretraining on decaNLP improves final performance
- 例如额外的 IWSLT language pairs
- 或者是新的类似 NER 的任务
22.预训练 MQAN 的零次学*任务域自适应

- Zero-Shot Domain Adaptation of pretrained MQAN:
- 在 Amazon and Yelp reviews 上获得了 80% 的 精确率
- 在 SNLI 上获得了 62% (参数微调的版本获得了 87% 的精确率,比使用随机初始化的高 2%)
23.零次学*(Zero-Shot)分类

- Zero-Shot Classification
- 问题指针使得我们可以处理问题的改变(例如,将标签转换为满意/支持和消极/悲伤/不支持)而无需任何额外的微调
- 使模型无需训练即可响应新任务
24.decaNLP:通用 NLP 任务效果基准

- decaNLP: A Benchmark for Generalized NLP
- 为多个 NLP 任务训练单问题回答模型
- 解决方案
- 更一般的语言理解
- 多任务学*
- 领域适应
- 迁移学*
- 权重分享,预训练,微调(对于 NLP 的 ImageNet-CNN?)
- 零射击学*
25.相关研究与工作

26.NLP 的下一步

27.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=17
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
28.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 18 讲 - 句法分析与树形递归神经网络

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!

本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
引言

授课计划

- Motivation: Compositionality and Recursion
- Structure prediction with simple Tree RNN: Parsing
- Backpropagation through Structure
- More complex TreeRNN units
- Other uses of tree-recursive neural nets
- Institute for Human-Centered Artificial Intelligence
1.CS 语言谱

- 词袋模型和复杂形式的语言表达结构
1.1 语言的语义解释:不仅仅是词向量

- 我们怎样才能弄清楚更大的短语的含义?
The snowboarderis leaping over a mogulA person on a snowboardjumps into the air
The snowboarder在语义上相当于A person on a snowboard,但它们的字长不一样
人们通过较小元素的语义成分来解释较大文本单元的意义
- 实体,描述性术语,事实,论点,故事

- 人们之所以可以理解
A person on a snowboard,是因为组合原则 (the principle of compositionality)- 人们知道每个单词的意思,从而知道了
on a snowboard的意思 - 知道组件的含义并将他们组合成为更大的组件
- 人们知道每个单词的意思,从而知道了

- 小的组件元素构建成完整图片场景

- 语言理解 - 和人工智能 - 需要能够通过了解较小的部分来理解更大的事物

- 我们拥有将较小的部分组合起来制作出更大东西的能力
1.2 语言是递归的吗?

-
认知上有点争议 (需要前往无限)
-
但是:递归对于描述语言是很自然的
[The person standing next to [the man from [the company that purchased [the firm that you used to work at]]]]- 包含名词短语的名词短语,包含名词短语
-
它是语言结构的一个非常强大的先验
1.3 Penn Treebank tree


2.基于词向量空间模型的构建

-
the country of my birth -
the place where I was born -
我们怎样表示更长短语的意思呢?
-
通过将他们映射到相同的向量空间!
2.1 我们应该如何将短语映射到向量空间?

- 基于组合原则
- 使用单词的含义和组合他们的规则,得到一个句子的含义向量
- 同时学*解析树以及组合向量表示
2.2 Constituency Sentence Parsing

- 我们需要能够学*如何解析出正确的语法结构,并学*如何基于语法结构,来构建句子的向量表示
2.3 递归与循环神经网络

- 循环神经网络需要一个树结构
- 循环神经网络不能在没有前缀上下文的情况下学*理解短语,并且经常它得到的最终向量包含太多末尾单词的信息 (而忽略了前面的一些内容)
2.4 结构预测对的递归神经网络

-
如果我们自上而下的工作,那么我们在底层有单词向量,所以我们想要递归地计算更大成分的含义
-
输入:两个候选的子节点的表示
-
输出:
- 两个节点被合并后的语义表示
- 新节点的合理程度
2.5 递归神经网络定义

2.6 用递归网络分析句子

- 自左向右重复遍历,每次将得分最高的两者组合在一起
2.7 分析一个句子

2.8 Max-Margin Framework:细节

- 树的得分是通过每个节点的解析决策得分的总和来计算的
s ( x , y ) = ∑ n ∈ n o d e ( y ) s n s(x, y)=\sum_{n \in n o d e (y)} s_{n} s(x,y)=n∈node(y)∑sn
- x x x 是句子, y y y 是解析树


- 类似于最大边距解析 (Taskar et al.2004) ,有一个监督学*的最大边际目标
J = ∑ i s ( x i , y i ) − max y ∈ A ( x i ) ( s ( x i , y ) + Δ ( y , y i ) ) J=\sum_{i} s\left(x_{i}, y_{i}\right)-\max {y \in A\left(x\right)}\left(s\left(x_{i}, y\right)+\Delta\left(y, y_{i}\right)\right) J=i∑s(xi,yi)−y∈A(xi)max(s(xi,y)+Δ(y,yi))
-
损失 Δ ( y , y i ) \Delta\left(y, y_{i}\right) Δ(y,yi) 惩罚所有不正确的决策
-
结构搜索 A ( x ) A(x) A(x) 是贪婪的 (每次加入最佳节点)
- 相反:使用 Beam search 搜索图
2.9 场景分析

- 和组合类似的准则
- 场景图像的含义也是较小区域的函数
- 它们如何组合成部分以形成更大的对象
- 以及对象如何相互作用
2.10 图像解析算法

- Same Recursive Neural Network as for natural language parsing! (Socher et al. ICML 2011)
2.11 多类分割

3.结构反向传播(BTS)

- Introduced by Goller & Küchler (1996)
- 和通用的反向传播的规则相同
δ ( l ) = ( ( W ( l ) ) T δ ( l + 1 ) ) ∘ f ′ ( z ( l ) ) \delta{(l)}=\left(\left(W{(l)}\right) \delta^{(l+1)}\right) \circ f{\prime}\left(z\right) δ(l)=((W(l))Tδ(l+1))∘f′(z(l))
∂ ∂ W ( l ) E R = δ ( l + 1 ) ( a ( l ) ) T + λ W ( l ) \frac{\partial}{\partial W^{(l)}} E_{R}=\delta{(l+1)}\left(a\right)^{T}+\lambda W^{(l)} ∂W(l)∂ER=δ(l+1)(a(l))T+λW(l)
递归和树结构导致的计算:
- ① 从所有节点 (像 RNN 一样) 求 W W W 的导数
- ② 在每个节点处拆分导数 (对于树)
- ③ 从父节点和节点本身添加 error message
3.1 结构反向传播:第 1 步

- 求所有节点的偏导
∂ ∂ W f ( W ( f ( W x ) ) = f ′ ( W ( f ( W x ) ) ( ( ∂ ∂ W W ) f ( W x ) + W ∂ ∂ W f ( W x ) ) = f ′ ( W ( f ( W x ) ) ( f ( W x ) + W f ′ ( W x ) x ) \begin{aligned} & \frac{\partial}{\partial W} f(W(f(W x))\ =& f^{\prime}\left(W(f(W x))\left(\left(\frac{\partial}{\partial W} W\right) f(W x)+W \frac{\partial}{\partial W} f(W x)\right)\right.\ =& f^{\prime}\left(W(f(W x))\left(f(W x)+W f^{\prime}(W x) x\right)\right. \end{aligned} ==∂W∂f(W(f(Wx))f′(W(f(Wx))((∂W∂W)f(Wx)+W∂W∂f(Wx))f′(W(f(Wx))(f(Wx)+Wf′(Wx)x)
∂ ∂ W 2 f ( W 2 ( f ( W 1 x ) ) + ∂ ∂ W 1 f ( W 2 ( f ( W 1 x ) ) = f ′ ( W 2 ( f ( W 1 x ) ) ( f ( W 1 x ) ) + f ′ ( W 2 ( f ( W 1 x ) ) ( W 2 f ′ ( W 1 x ) x ) = f ′ ( W 2 ( f ( W 1 x ) ) ( f ( W 1 x ) + W 2 f ′ ( W 1 x ) x ) = f ′ ( W ( f ( W x ) ) ( f ( W x ) + W f ′ ( W x ) x ) \begin{aligned} & \frac{\partial}{\partial W_{2}} f\left(W_{2}\left(f\left(W_{1} x\right)\right)+\frac{\partial}{\partial W_{1}} f\left(W_{2}\left(f\left(W_{1} x\right)\right)\right.\right.\ =& f^{\prime}\left(W_{2}\left(f\left(W_{1} x\right)\right)\left(f\left(W_{1} x\right)\right)+f^{\prime}\left(W_{2}\left(f\left(W_{1} x\right)\right)\left(W_{2} f^{\prime}\left(W_{1} x\right) x\right)\right.\right.\ =& f^{\prime}\left(W_{2}\left(f\left(W_{1} x\right)\right)\left(f\left(W_{1} x\right)+W_{2} f^{\prime}\left(W_{1} x\right) x\right)\right.\ =& f^{\prime}\left(W(f(W x))\left(f(W x)+W f^{\prime}(W x) x\right)\right. \end{aligned} ===∂W2∂f(W2(f(W1x))+∂W1∂f(W2(f(W1x))f′(W2(f(W1x))(f(W1x))+f′(W2(f(W1x))(W2f′(W1x)x)f′(W2(f(W1x))(f(W1x)+W2f′(W1x)x)f′(W(f(Wx))(f(Wx)+Wf′(Wx)x)
3.2 结构反向传播:第 2 步

- 在每个节点处分开偏导
3.3 结构反向传播:第 3 步

- 叠加 error message
3.4 BTS Python 编程:前向传播

3.5 BTS Python 编程:反向传播

4.版本 1:简单 TreeRNN

- 使用单矩阵 TreeRNN 的结果
- 单个权重矩阵 TreeRNN 可以捕获一些现象但不适合更复杂的现象以及更高阶的构成或解析长句
- 输入词之间没有真正的交互
- 组合函数对于所有句法类别,标点符号等都是相同的
5.版本 2: Syntactically-Untied RNN

- 符号的上下文无关的语法(Context Free Grammar CFG)主干是足以满足基本的句法结构
- 我们使用子元素的离散句法类别来选择组合矩阵
- 对于不同的语法环境,TreeRNN 可以针对不同的组合矩阵做得更好
- 结果为我们提供了更好的语义
补充讲解
- 左边 RNN 是使用概率的上下文无关的语法解析,为句子生成可能的树结构
- 右边 SU-RNN 是语法解开的递归神经网络,此时每个节点和序列都有一个类别,我们可以使用对应不同类别的矩阵组合起来,例如将类别 B 和类别 C 的矩阵组合起来作为本次计算的权重矩阵,所以这个权重矩阵是更符合句子结构的
5.1 组合向量文法

-
问题:速度
- 集束搜索中的每个候选分数都需要一次矩阵向量乘法
-
解决方案:仅针对来自更简单,更快速模型(Probabilistic Context Free Grammar (PCFG))的树的子集计算得分
- 对概率低的候选进行剪枝以获得更快的速度
- 为每个集束候选提供子句的粗略语法类别
-
组合矢量语法= PCFG + TreeRNN
5.2 解析相关工作

- 产生的 CVG Parser 与以前扩展 PCFG 解析器的工作有关
- Klein and Manning (2003a):手工特征工程
- Petrov et al. (2006):分解和合并句法类别的学*算法
- 词汇化解析器(Collins, 2003; Charniak, 2000):用词汇项描述每个类别
- Hall and Klein (2012) 在一个因式解析器中结合了几个这样的注释方案
- CVGs 将这些想法从离散表示扩展到更丰富的连续表达
5.3 实验

5.4 #论文解读# SU-RNN / CVG

-
Learns soft notion of head words
-
初始化: W ( ⋅ ) = 0.5 [ I n × n I n × n 0 n × 1 ] + ε W^{(\cdot)}=0.5\left[I_{n \times n} I_{n \times n} 0_{n \times 1}\right]+\varepsilon W(⋅)=0.5[In×nIn×n0n×1]+ε
- 初始化为一对对角矩阵
- 学*的是一个短语中哪个子节点是重要的
5.5 结果向量表示的分析

-
所有数据均根据季节变化进行调整
- 所有数字都根据季节性波动进行调整
- 调整所有数字以消除通常的季节性模式
-
night-Ridder 不会评论这个提议
- Harsco declined to say what country placed the order
- Coastal wouldn’t disclose the terms
-
Sales grew almost 7 % 7% 7% to $$ \text{UNK}$ m. from $$ \text{UNK}$ m.
- Sales rose more than 7 % 7% 7% to $$ 94.9$ m. from $$ 88.3$ m.
- Sales surged 40 % 40 % 40% to UNK \text{UNK} UNK b. yen from UNK \text{UNK} UNK b.
6.版本 3: Compositionality Through Recursive Matrix-Vector Spaces

-
之前: p = tanh ( W [ c 1 c 2 ] + b ) p=\tanh \left(W\left[\begin{array}{l}{c_{1}} \ {c_{2}}\end{array}\right]+b\right) p=tanh(W[c1c2]+b)
-
c 1 c_1 c1 和 c 2 c_2 c2 之间并没有相互影响
-
使组合函数更强大的一种方法是解开权重 W W W
-
但是,如果单词主要作为运算符,例如
very good的very是没有意义的,是用于增加good的规模的运算符 -
提案:新的组合函数
-
问题是如何定义呢,因为不知道 c 1 c_1 c1 和 c 2 c_2 c2 哪个是 operator,比如 very good ,就应该讲 very 视为作用在 good 的矩阵上的向量

-
每个单词都拥有一个向量意义和一个矩阵意义
-
左侧计算得到合并后的向量意义
-
右侧计算得到合并后的矩阵意义
-
可以捕获运算符语义,即中一个单词修饰了另一个单词的含义
6.1 预测情绪分布

- 语言中非线性的好例子
6.2 语义关系的分类

- MV-RNN 可以学*到大的句法上下文传达语义关系吗?
- 为包括两项的最小成分构建单个组合语义
6.3 语义关系的分类

- 问题:参数量过大,且获得短语的矩阵意义的方式不够好
7.版本 4: Recursive Neural Tensor Network

- 比 MV-RNN 更少的参数量
- 允许两个单词或短语向量乘法交互
7.1 词袋之上: 情感检测

-
一段文字的语调是积极的,消极的还是中性的?
- 某种程度上情绪分析是容易的
- 较长文档的检测精度~90%,但是
-
有了这样的演员阵容和题材,这部电影应该会更有趣,更具娱乐性。
7.2 斯坦福情感分析数据集

- 215,154 phrases labeled in 11,855 sentences
- 可以真的训练和测试组合
- http://nlp.stanford.edu:8080/sentiment/
7.3 好的数据集对所有模型都有提升帮助

- 负面情感的难样本仍然大多判断错误的
- 我们还需要一个更强大的模型!
7.4 版本 4: Recursive Neural Tensor Network

-
思路:允许载体的加性和介导的乘法相互作用
-
在树中使用结果向量作为逻辑回归的分类器的输入
-
使用梯度下降联合训练所有权重
补充讲解
- 回到最初的使用向量表示单词的意义,但不是仅仅将两个表示单词含义的向量相互作用,左上图是在中间插入一个矩阵,以双线性的方式做注意力并得到了注意力得分。即令两个单词的向量相互作用并且只产生一个数字作为输出
- 如上中图所示,我们可以拥有三维矩阵,即多层的矩阵(二维),从而得到了两个得分
- 使用 softmax 做分类
7.5 递归神经张量网络/Recursive Neural Tensor Network

7.6 数据集上的实验效果

- RNTN 可以捕捉类似 X X X but Y Y Y 的结构
- RNTN accuracy of 72%, compared to MV-RNN (65%), biword NB (58%) and RNN (54%)
7.7 否定的样本结果

- 双重否定时,积极反应应该上升
- Demo: http://nlp.stanford.edu:8080/sentiment/
8.版本 5: Improving Deep Learning Semantic Representations using a TreeLSTM

目标:
- 仍试图将句子的含义表示为 (高维,连续) 向量空间中的位置
- 一种准确处理语义构成和句子含义的方式
- 将广泛使用的链式结构 LSTM 推广到树结构
8.1 LSTM Units for Sequential Composition

- 门是 [ 0 , 1 ] d [0,1]^{d} [0,1]d 的向量,用于逐元素乘积的软掩蔽元素
8.2 #论文解读# Tree-Structured Long Short-Term Memory Networks

8.3 Tree-structured LSTM

- 将连续 LSTM 推广到具有任何分支因子的树
8.4 结果

8.5 忘记门:选择性状态保护

- Stripes = forget gate activations; more white ⇒ more preserved
- 图中的条纹代表遗忘门激活,更多的白色占比表示更多的信息保留
9.#论文解读# QCD-Aware Recursive Neural Networks for Jet Physics

10.用于程序翻译的 tree-to-tree 神经网络

- 探索在编程语言之间使用树形结构编码和生成进行翻译
- 在生成中,将注意力集中在源树上


11.HAI 以人为中心的人工智能


- 人工智能有望改变经济和社会,改变我们沟通和工作的方式,重塑治理和政治,并挑战国际秩序
- HAI 的使命是推进人工智能研究,教育,政策和实践,以改善人类状况

12.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=18
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
13.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 19 讲 - AI 安全偏见与公平

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!视频和课件等资料的获取方式见文末。
1.Bias in the Vision and Language of Artificial Intelligence

2.Prototype Theory

- Bananas
- Stickers
- Dole Bananas
- Bananas at a store
- Bananas on shelves
- Bunches of bananas
- Bananas with stickers on them
- Bunches of bananas with stickers on them on shelves in a store
…We don’t tend to say Yellow Bananas




- Prototype Theory
- 分类的目的之一是减少刺激行为和认知上可用的比例的无限差异
- 物品的一些核心、原型概念可能来自于存储的对象类别的典型属性 (Rosch, 1975)
- 也可以存储范例 (Wu & Barsalou, 2009)

- Doctor —— Female Doctor
- 大多数受试者忽视了医生是女性的可能性,包括男性、女性和自称女权主义者的人


- Human Reporting Bias
- murdered 是 blinked 出现次数的十倍
- 我们不倾向于提及眨眼和呼吸等事情

- Human Reporting Bias
- 人们写作中的行为、结果或属性的频率并不反映真实世界的频率,也不反映某一属性在多大程度上是某一类个体的特征。
- 更多关于我们处理世界和我们认为非凡的东西的实际情况。这影响到我们学*的一切。



-
Data 数据
- Reporting bias 报告偏见:人们分享的并不是真实世界频率的反映
- Selection Bias 选择偏差:选择不反映随机样本
- Out-group homogeneity bias 外群体同质性偏见:People tend to see outgroup members as more alike than ingroup members when comparing attitudes, values, personality traits, and other characteristics
-
Interpretation
- Confirmation bias 确认偏见:倾向于寻找、解释、支持和回忆信息,以确认一个人先前存在的信念或假设
- Overgeneralization 泛化过度:根据过于笼统和/或不够具体的信息得出结论
- Correlation fallacy 相关性谬误:混淆相关性和因果关系
- Automation bias 自动化偏差:人类倾向于喜欢来自自动化决策系统的建议,而不是没有自动化的相互矛盾的信息
3.Biases in Data


- Selection Bias 选择偏差:选择不反映随机样本

- Out-group homogeneity bias 外群体同质性偏见:在比较态度、价值观、个性特征和其他特征时,往往群体外的成员认为比群体内的成员更相似
- 这有些难以理解:意思就是左边的四只猫之间是非常不同的,但是在狗的眼里他们是相同的

- Biases in Data → Biased Data Representation
- 你可能对你能想到的每一个群体都有适当数量的数据,但有些群体的表现不如其他群体积极。

- Biases in Data → Biased Labels
- 数据集中的注释将反映注释者的世界观
4.Biases in Interpretation


- Biases in Interpretation
- Confirmation bias 确认偏见:倾向于寻找、解释、支持和回忆信息,以确认一个人先前存在的信念或假设

- Biases in Interpretation
- Overgeneralization 泛化过度:根据过于笼统和/或不够具体的信息得出结论(相关:过拟合)

- Biases in Interpretation
- Correlation fallacy 相关性谬误:混淆相关性和因果关系

- Biases in Interpretation
- Automation bias 自动化偏差:人类倾向于喜欢来自自动化决策系统的建议,而不是没有自动化的相互矛盾的信息

- 会形成反馈循环
- 这被称为 Bias Network Effect 以及 Bias “Laundering”

- Human data perpetuates human biases. As ML learns from human data, the result is a bias network effect.
- 人类数据延续了人类的偏见。当 ML 从人类数据中学*时,结果是一个偏置网络效应。
5.BIAS = BAD ??


-
统计以及 ML 中的偏差
- 估计值的偏差:预测值与我们试图预测的正确值之间的差异
- “偏差”一词 b(如 y = mx + b)
-
认知偏见
- 确认性偏差、*因性偏差、乐观性偏差
-
算法偏差
- 对与种族、收入、性取向、宗教、性别和其他历史上与歧视和边缘化相关的特征相关的人的不公平、不公平或偏见待遇,何时何地在算法系统或算法辅助决策中体现出来”

- 如何避免算法偏差,开发出不会放大差异的算法
6.Predicting Future Criminal Behavior


- Predicting Future Criminal Behavior
- 算法识别潜在的犯罪热点
- 基于之前报道的犯罪的地方,而不是已知发生在哪里
- 从过去预测未来事件
- 预测的是逮捕的地方而不是犯罪的地方

- Prater (白人)额定低风险入店行窃后,尽管两个武装抢劫;一次持械抢劫未遂。
- Borden (黑色)额定高危后她和一个朋友(但在警察到来之前返回)一辆自行车和摩托车坐在外面。
- 两年后,Borden 没有被指控任何新的罪行。Prater 因重大盗窃罪被判 8 年有期徒刑。
- 系统默认认为黑人的犯罪风险高于白人
7.Automation Bias


- 以色列启动 Faception
- Faception 是第一个科技领域的率先面市的,专有的计算机视觉和机器学*技术分析人员和揭示他们的个性只基于他们的面部图像。
- 提供专业的引擎从脸的形象识别“高智商”、“白领犯罪”、“恋童癖”,和“恐怖分子”。
- 主要客户为国土安全和公共安全。

- “Automated Inference on Criminality using Face Images” Wu and Zhang, 2016. arXiv
- 1856 个紧密裁剪的面孔的图像,包括“通缉犯”ID 特定区域的照片
- 存在确认偏差和相关性偏差
8.Selection Bias + Experimenter’s Bias +Confirmation Bias + Correlation Fallacy +Feedback Loops


9.(Claiming to) Predict Internal Qualities Subject To Discrimination


- Wang and Kosinski, Deep neural networks are more accurate than humans at detecting sexual orientation from facial images, 2017.
- “Sexual orientation detector” using 35,326 images from public profiles on a US dating website.
- “与性取向的产前激素理论(PHT)相一致,男同性恋者和女同性恋者往往具有非典型的性别面部形态。”

- 在自拍中,同性恋和异性恋之间的差异与打扮、表现和生活方式有关,也就是说,文化差异,而不是面部结构的差异
- See our longer response on Medium, “Do Algorithms Reveal Sexual Orientation or Just Expose our Stereotypes?”
- Selection Bias + Experimenter’s Bias + Correlation Fallacy
10.Selection Bias + Experimenter’s Bias + Correlation Fallacy

11.Measuring Algorithmic Bias


- 评估公平性和包容性
- 分类评估
- 为每个创建(子组,预测)对。跨子组比较
- 例如
- 女性,面部检测
- 男性,面部检测
- 分类评估


- “机会平等”公平准则:子组的 recall 是相等的
- “预测平价”公平准则:子组的 precision 是相等
- 选择评价指标的可接受的假阳性和假阴性之间的权衡
12.False Positives and False Negatives


- False Positives Might be Better than False Negatives
- Privacy in Images
- Spam Filtering


- 缺乏对数据和模型中的偏见来源的洞察力
- 缺乏对反馈循环的洞察力
- 缺乏细心,分类的评价
- 人类偏见在解释和接受结果
13.It’s up to us to influence how AI evolves.


14.It’s up to us to influence how AI evolves. Here are some things we can do.

15.Data


- 了解您的数据:偏差,相关性
- 从类似的分布放弃单一训练集/测试集
- 结合来自多个来源的输入
- 对于困难的用例使用 held-out 测试集
- 与专家讨论其他信号


- 没有一个数据集是没有偏差的,因为这是一个有偏差的世界。重点是知道是什么偏差。
16.Machine Learning


- Bias Mitigation 偏差缓解
- 删除有问题的输出的信号
- 刻板印象
- 性别歧视,种族歧视,*-ism
- 又称为“debiasing”
- 删除有问题的输出的信号

- Inclusion
- 添加信号所需的变量
- 增加模型性能
- 注意性能很差的子组或数据片
- 添加信号所需的变量
17.Multi-task Learning to Increase Inclusion


-
与宾夕法尼亚大学 WWP 合作
-
直接与临床医生合作
-
目标
- 系统警告临床医生如果企图自杀迫在眉睫
- 几个训练实例可用时诊断的可行性
-
Benton, Mitchell, Hovy. Multi-task learning for Mental Health Conditions with Limited Social Media Data. EACL, 2017.

-
内部数据
- 电子健康记录
- 病人或病人家属提供
- 包括心理健康诊断,自杀企图,竞赛
- 社交媒体数据
- 电子健康记录
-
代理数据
- Twitter 媒体数据
- 代理心理健康诊断中使用自称诊断
- 我被诊断出患有 X
- 我试图自杀





18.Adversarial Multi-task Learning to Mitigate Bias



- 考虑到真正正确的决策,分类器的输出决策应该在敏感特征之间是相同的。
19.Case Study: Conversation AI Toxicity

19.1 Measuring and Mitigating Unintended Bias in Text Classification

19.2 Conversation-AI & Research Collaboration

- Conversation-AI
- ML 提高大规模在线对话
- Research Collaboration
- Jigsaw, CAT, several Google-internal teams, and external partners (NYTimes, Wikimedia, etc)
19.3 Perspective API

19.4 Unintended Bias

19.5 Bias Source and Mitigation

-
偏见造成的数据不平衡
- 经常袭击了有毒的身份所占比例评论
- 长度问题
-
添加维基百科文章中假定的无毒数据来修复这种不平衡
- 原始数据集有 127820 个例子
- 4620 个补充的无毒例子
19.6 Measuring Unintended Bias - Synthetic Datasets

- 挑战与真实数据
- 现有数据集是小 and/or 有错误的相关性
- 每个例子是完全独特的
- Approach:"bias madlibs”:一个综合生成的模板化数据集进行评估
19.7 Assumptions

- 数据集是可靠的
- 和产品相似的分布
- 忽略注释器偏见
- 没有因果分析
19.8 Deep Learning Model

- 深度学*模型
- CNN 架构
- 预训练的 GloVe 嵌入
- Keras 实现
19.9 Measuring Model Performance

19.10 Measuring Model Performance

19.11 Types of Bias

- Low Subgroup Performance
- 模型在子组注释上的性能比在总体注释上差
- Metric : Subgroup AUC

-
Subgroup Shift (Right)
- 该模型系统地对来自子组的评价打分更高
- Metric: BPSN AUC
- (Background Positive Subgroup Negative)
-
Subgroup Shift (Left)
- 该模型系统地对来自子组的评价打分较低
- Metric: BNSP AUC
- (Background Negative Subgroup Positive)
19.12 Results

20.Release Responsibly


- 目前还没有模型发布时报告模型效果的 common practice
- What It Does
- 一份关注模型性能透明度的报告,以鼓励负责任的人工智能的采用和应用
- How It Works
- 这是一个容易发现的和可用的工件在用户旅程中重要的步骤为一组不同的用户和公共利益相关者
- Why It Matter
- 它使模型开发人员有责任发布高质量和公平的模型
- Intended Use, Factors and Subgroups


21.Moving from majority representation… to diverse representation… for ethical AI

22.Thanks

23.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=19
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
24.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来

斯坦福 NLP 课程 | 第 20 讲 - NLP 与深度学*的未来

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

ShowMeAI为斯坦福 CS224n《自然语言处理与深度学*(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了 GIF 动图!视频和课件等资料的获取方式见文末。
1.NLP 和深度学*的未来


- 5 年前的深度学*和 NLP
- No Seq2Seq
- No Attention
- No large-scale QA / reading comprehension datasets
- No TensorFlow or Pytorch

-
利用无标签数据
- Back-translation 和无监督机器翻译
- 提高预训练和 GPT-2
-
接下来呢?
- NLP 技术的风险和社会影响
- 未来的研究方向
1.1 为什么深度学*最*如此成功?


- 扩展能力 (模型和数据大小) 是深度学**些年来成功的原因
- 过去受到计算资源和数据资源的规模限制
1.2 三个使用大量数据获得成功的范例

- 图像识别:被 Google, Facebook 等广泛使用
- ImageNet:14 million examples
- 机器翻译:谷歌翻译等
- WMT:Millions of sentence pairs
- 打游戏:Atari Games, AlphaGo, and more
- 10s of millions of frames for Atari AI
- 10s of millions of self-play games for AlphaZero
1.3 NLP 数据集

-
即使是英语,大部分任务也只有 100 k 100k 100k 或更少的有标签样本
-
其他语言的可用数据就更少了
- 有成千上万的语言,其中有成百上千的语言的母语使用者是大于一百万的
- 只有 10 % 10% 10% 的人将英语作为他们的第一语言
-
越来越多的解决方案是使用 无标签 数据
2.使用未标记数据进行翻译

2.1 机器翻译数据

- 获得翻译需要人类的专业知识
- 限制数据的大小和领域
- 语言文本更容易获得
2.2 预训练

- ① 分别将两个预训练好的语言模型作为 Encoder 和 Decoder
- ② 然后使用双语数据共同训练

- English -> German Results:2+ BLEU point improvement
- 英语到德语的翻译结果,BLEU 有 2 2 2 个点的提升
2.3 自训练

-
预训练的问题:预训练中两个语言之间没有交互
-
自训练:标记未标记的数据以获得有噪声的训练样本
-
自训练技术没有被广泛使用,因为其训练的来源是其之前的产出
2.4 Back-Translation

-
有两种方向相反的机器翻译模型 en→fr 和 fr→en
-
不再循环
-
模型再也看不到
坏翻译,只有坏输入
补充讲解
- 模型训练时会加入一些标记数据,确保 en→fr 模型的输出,即 fr→en 模型的输入,从而保证模型的正常
- 如何协调对标记数据与未标记数据的训练呢?
- 先在标记数据上训练两个模型
- 然后在未标记数据上标记一些数据
- 再在未标记数据上进行反向翻译的训练
- 重复如上的过程

- 4.5M English-German sentence pairs and 226M monolingual sentences
2.5 如果没有双语数据呢?

补充讲解
- 当我们只有未标记的句子时,我们使用一种比完全的翻译更简单的任务
- 不是做句子翻译
- 而是做单词翻译
- 我们想要找到某种语言的翻译但不使用任何标记数据
2.6 无监督单词翻译

- 跨语言文字嵌入 cross-lingual word embeddings
- 两种语言共享嵌入空间
- 保持词嵌入的正常的好属性
- 但也要接*他们的翻译
- 想从单语语料库中学*
补充讲解
- 如上图所示,在共享的嵌入空间中,每个英文单词都有其对应的德语单词,并且距离很*
- 我们在使用时,只需选取英文单词在嵌入空间中距离最*的德语单词,就可以获得对应的翻译

- 词嵌入有很多结构
- 假设:不同语言之间的结构应该相似
补充讲解
- 即使是运行两次 word2vec 会获得不同的词嵌入,嵌入空间的结构有很多规律性
- 如上图所示,是英语与意大利语的词嵌入,矢量空间看上去彼此十分不同,但是结构是十分相似的
- 可以理解为,在英语词嵌入空间中的 cat 与 feline 的距离与意大利语词典如空间中的 gatto 和 felino 之间的距离是相似的
- 我们在跨语言的词嵌入中想要学*不同种语言的词嵌入之间的对齐方式

-
首先在单语语料库上运行 word2vec 以得到单词嵌入 X X X 和 Y Y Y
-
学*一个 (正交) 矩阵 W W W 使得 W X ∼ Y WX \sim Y WX∼Y
-
使用对抗训练来学* W W W
-
鉴别器:预测一个嵌入是来自于 Y Y Y 的还是来自于 X X X 并使用 W W W 转换后的嵌入
-
训练 W W W 使得鉴别器难以区分这两者
-
其他可以被用来进一步提升效果的方法参见 Word Translation without Parallel Data
-
正交性来约束词嵌入的原因是为了防止过拟合
-
我们假设我们的嵌入空间是类似的,只是需要对英语的词向量和意大利语的词向量进行旋转

- 模型:不考虑不同输入和输出语言,使用相同的(共享的) encoder-decoder (没有使用注意力)
- 使用 cross-lingual 的词嵌入来初始化,即其中的英语和法语单词应该看起来完全相同
补充讲解
- 可以喂给 encoder 一个英文句子,也可以喂一个法语句子,从而获得 cross-lingual embeddings ,即英文句子和法语句子中各个单词的词嵌入,这意味着 encoder 可以处理任何输入
- 对于 decoder,我们需要喂一个特殊的标记 来告诉模型应该生成什么语言的输出
- 可以用做一个 auto-encoder,完成 en→en ,即再现输入序列
2.7 无监督神经机器翻译

- Training objective 1:降噪自编码器

- Training objective 2:back translation (只有无标签的数据)
- 首先翻译 fr→en
- 然后使用一个监督样本来训练 en→fr
补充讲解
- 注意,这里的 fr→en 输出的句子,是 en→fr 输入的句子,这个句子是有些混乱的,不完美的,例如这里的
I am student,丢失了a - 我们需要训练模型,即使是有这样糟糕的输入,也能够还原出原始的法语句子
2.8 为什么无监督会有效

- 跨语言嵌入和共享编码器为模型提供了一个起点
- 使用 cross-lingual 的词嵌入来初始化,即其中的英语和法语单词应该看起来完全相同
补充解释
- 共享编码器
- 例如我们以一个法语句子作为模型的输入
- 由于嵌入看起来非常相似,并且我们使用的是相同的 encoder
- 因此 encoder 得到的法语句子的 representation 应该和英语句子的 representation 非常相似
- 所以希望能够获得和原始的英语句子相同的输出

- 训练目标鼓励语言无关(language-agnostic)的表示
- 获得与语言类型无关的 encoder vector
2.9 无监督机器翻译

补充讲解
- 水平线是无监督模型,其余的都是有监督的
- 在一定的监督数据规模下,无监督模型能够取得和监督模型类似的效果
- 当然,随着数据规模的增大,监督模型的效果会提升,超过无监督模型
2.10 属性迁移

- 还可以使用无监督的机器翻译模型完成属性转移
2.11 一些缺点

-
英语,法语和德语是相当类似的语言
-
在非常不同的语言上 (例如英语和土耳其语)
- 完全的无监督的词翻译并不十分有效。需要种子字典可能的翻译
- 简单的技巧:使用相同的字符串从词汇
- UNMT 几乎不工作
- 完全的无监督的词翻译并不十分有效。需要种子字典可能的翻译
2.12 跨语言 BERT


-
常规的 BERT ,有一系列的英语句子,并且会 mask 一部分单词
-
谷歌实际上已经完成的是训练好的多语言的 BERT
-
基本上是连接一大堆不同语言的语料库,然后训练一个模型
-
masked LM training objective
-
由 Facebook 提出的
-
联合了 masked LM training objective 和翻译
-
给定一个英语句子和法语句子,并分别 mask 一部分单词,并期望模型填补

3.大模型和 GPT-2

3.1 训练大模型

3.2 机器学*大趋势

补充说明
- peta:用于计量单位,表示 10 的 15 次方,表示千万亿次
- FLOPS = FLoating-point Operations Per Second,每秒浮点运算次数
3.3 计算机视觉中的大模型

- 使用无监督技术的大规模计算机视觉模型

3.4 训练大模型

- 更好的硬件
- 数据和模型的并行化
3.5 GPT-2

- 只是一个非常大的 Transformer LM
- 40 GB 的训练文本
- 投入相当多的努力去确保数据质量
- 使用 reddit 中获得高投票的网页 link
3.6 那么,GPT-2 能做什么呢?
mg20-37.png 那么,GPT-2 能做什么呢?
- 显然,语言模型建模(效果非常好)
- 在其没有训练过的数据上,都可以得到最先进的困惑度(perplexity)

- Zero-Shot Learning:no supervised training data! 在没有接受过训练的情况下尝试完成任务
- Ask LM to generate from a prompt
3.7 GPT-2 结果

- GPT2 在阅读理解、翻译、摘要生成、问答里的表现
3.8 GPT-2 如何进行翻译?

- 它有一个很大的语料库,里面几乎全是英语
补充说明
- 由于数据集中存在一些翻译的例子
- 法语*语及其翻译
- 法语引用及其翻译

3.9 GPT-2 问答

- Simple baseline:1% accuracy
- GPT-2:~4% accuracy
- Cherry-picked most confident results 精选出最自信的结果
3.10 当模型变得更大时会发生什么?

- 对于一些任务,性能似乎随着 log (模型大小) 的增加而增加

- 但如下图所示趋势并不明朗
3.11 GPT-2 相关事件




- 关于 GPT2 是否应该开源的一些争端

- 对于 GPT2 是否应该开源的一些说法


-
NLP 专家应该做这些决定吗?
- 计算机安全专家?
- 技术和社会专家?
- 道德专家?
-
需要更多的跨学科科学
-
许多 NLP 具有较大社会影响的例子,尤其是对于偏见/公平
3.12 影响程度大的决策

-
越来越感兴趣用 NLP 帮助高影响力的决策
- 司法判决
- 招聘
- 等级测试
-
一方面,可以快速评估机器学*系统某些偏见
-
然而,机器学*反映了训练数据
- 甚至放大偏见…这可能导致更偏向数据的创建

- AI 模型
偏见 - 在男女平等和法律领域

3.13 聊天机器人

4.BERT 解决了什么?接下来做什么?

4.1 GLUE 基线结果

- 逐年提升的 GLUE 结果
4.2 再也不用在神经网络模型设计技巧上反复琢磨?

- 往年会有很多不同的神经网络结构构建思路

- 在
attention is all you need之下,这些结构不再热门

- 花费六个月来研究 体系结构的设计,得到了 1 个点 F1 的提升
- 只是让 BERT 扩大 3 倍,得到了 5 个点 F1 的提升
- SQuAD 的 TOP20 参赛者都是用了 BERT
4.3 更难的自然语言理解

-
阅读理解
- 在长文档或多个文档
- 需要多跳推理
- 在对话中定位问答
-
许多现有阅读理解数据集的关键问题:人们写问题时看着上下文
- 不现实的
- 鼓励简单的问题
4.4 QuAC:基于上下文的问答

- 学生问问题,老师回答的对话
- 教师看到维基百科文章主题,学生不喜欢

- 仍然和人类水平有很大差距
4.5 HotPotQA

- 设计要求多跳推理
- 问题在多个文档
4.6 多任务学*

- NLP 的另一个前沿是让一个模型执行许多任务。GLUE 和 DecaNLP 是最*的例子
- 在 BERT 的基础上,多任务学*产生了改进
4.7 低资源支撑的场景

- 不需要很多计算能力的模型(不能使用 BERT)
- 为移动设备尤其重要
- 低资源语言
- 低数据环境(few shot learning 小样本学*)
- ML 中的元学*越来越受欢迎
4.8 模型理解/可解释性

-
我们能得到模型预测的解释吗?
-
我们能理解模型,例如 BERT 知道什么和他们为什么工作这么好?
-
NLP 中快速增长的地区
-
对于某些应用程序非常重要(如医疗保健)
4.9 Diagnostic/Probing Classifiers

- 看看模型知道什么语言的信息
- 诊断分类器需要表示一个模型(例如 BERT)作为输入,并做一些任务
- 只有诊断分类器被训练

- 诊断分类器通常非常简单(例如,单个 softmax)
- 否则他们不通过模型表示来自省会学会完成任务
- 一些诊断任务

- Results / 结果
- BERT 的低层表示在基础(低层次)任务中表现更好
4.10 NLP 行业应用与发展

- NLP 是快速增长的行业。尤其是两大领域:
- 对话
- 聊天机器人
- 客户服务
- 健康
- 理解健康记录
- 理解生物医学文献
4.11 结论

- 在过去的 5 年里,由于深度学*,进步很快
- 随着有能力训练更大的模型和更好地使用无监督数据,在去年有了更大的进展
- 是在 NLP 领域的激动人心的时刻
- NLP 是正逐渐对社会产生巨大影响力,使偏差和安全等问题越来越重要

5.视频教程
可以点击 B 站 查看视频的【双语字幕】版本
player.bilibili.com/player.html?aid=376755412&page=20
【双语字幕+资料下载】斯坦福 CS224n | 深度学*与自然语言处理(2019·全 20 讲)
6.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福 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 与深度学*的未来


浙公网安备 33010602011771号