CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
Lecture Notes: Part I
Word Vectors I: Introduction, SVD and Word2Vec
CS224n
RNN LSTM CNN
transformerbert问答要、成、模型
理解等前沿内容。
Singular Value Decomposition (SVD)
首先绍了自然处理(NLP)概念及其的问题。后我
们继续讨论将单词表示为数字向量的概念。最后,讨论了常用的
词向量设计方法。
笔记核心词
/Natural Language Processing(NLP)
/Word Vectors Singular Value Decomposition Skip-
gramNegative Sampling transformerContinuous Bag
of Words(CBOW)Hierarchical SoftmaxWord2Vec
课程部资料和已整
获取!!
微信公众号·全套资料
回复 CS224n
底部菜单栏
Bilibili·课程视频
视频简介
置顶评论
GitHub·项目代码
阅读 ReadMe
点击超链接
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
1. Introduction to Natural Language Processing
1.1 What is so special about NLP
人类的语言有什么特别之处?人类语言是一个专门用来表达意义
的系统,而不是由任何形式的物理表现产生的。在这方面上,它
与视觉或任何其他机器学习任务都有很大的不同。
大多数单词只是一个语言学以外的的符号:单词是一个映射到所
(signified 想法或事)的能(signifier)
“rocket”是火
使
whoompaa使
续的信号传输给大脑,大脑本身似乎也能以一种连续的方式对这
些信号进行解码。人们在语言哲学和语言学方面做了大量的工作
来概念化人类语言,并将词语与其参照、意义等区分开来。
1.2 Examples of Tasks
自然语言处理有不同层次的任务,从语言处理到语义解释再到语
使
度是不一样的
▐░ Easy
拼写检查 Spell Checking
关键词检索 Keyword Search
同义词查找 Finding Synonyms
▐░ Medium
解析来自网站、文档等的信息
▐░ Hard
机器翻译 Machine Translation
语义分析 Semantic Analysis
指代消解 Coreference
问答系统 Question Answering
1.3 How to Represent Words?
在所有的 NLP 任务中,第一个也是可以说是最重要的共同点是
我们如何将单词表示为任何模型的输入。在这里我们不会讨论早
期的自然语言处理工作是将单词视为原子符号 atomic symbols
1.1 Notes info.
课件/Slides
视频/Video
GitHub·代码
Bilibili
·视频
Stanford University X ShowMeAI
Natural language is a
discrete[] / symbolic[]
/ categorical[分类的] system.
1.3 Notes info.
课件/Slides
视频/Video
GitHub·代码
Bilibili·视频
Stanford University X ShowMeAI
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
为了让大多数的自然语言处理任务能有更好的表现,我们首先需
要了解单词之间的相似和不同。有了词向量,我们可以很容易地
将其编码到向量本身中。
2. Word Vectors
使用词向量编码单词,N 维空间足够我们编码语言的所有语义,
使 one-hot
向量
|V|
减少
纬度的子空间,来获得稠密的词向量,获得词之间的关系。
3. SVD Based Methods
这是一类找到词嵌入的方法(即词向量),我们首先遍历一个很
X X
SVD US
V
T
使 U 作为
词的词向量。我们来讨论一下矩阵 X 的几种选择。
3.1 Word-Document Matrix
我们最初的尝试,我们猜想相关连的单词在同一个文档中会经常
“banks”“bondsstocks”“moneys
“banks”
“octopus”“banana”“hockey不大可能会连续地出现
Word-Document
X
照以方式:遍亿
出现
,我

加一。
|V|×M
M
正比关系。因此我们可以尝试更好的方法。
3.2 Window based Co-occurrence Matrix
X
成为一个关联矩阵。在此方法中,我们计算每个单词在特定大小
的窗口中出现的次数。我们按照以下方法对语料库中的所有单词
进行统计。
2 Notes info.
课件/Slides
视频/Video
GitHub
·代码
Bilibili·视频
Stanford University X ShowMeAI
3 Notes info.
课件/Slides
Lecture2, P15-P25
视频/Video
Lecture2, 39:00
GitHub·代
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeAI
相似性。
3.2 Notes info.
课件/Slides
Lecture2, P16
视频/Video
Lecture2, --:00
GitHub
·代
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeAI
使用单词共现矩阵
|V|×|V|
X
X
SVD
X=
USV
T
U
k
k
i=1
k
σ
i
i=1
|V|
σ
i
表示第一 k 维捕的方
差量
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
3.3 Applying SVD to the cooccurrence matrix
对矩
X
使用 SVD,观奇异值( S 上对角线
k
素:
=1
=1
||
取子矩阵
U
1:|V|,1:k
作为词嵌矩阵。这给出了词
中每个词的 k 维表示。
对矩阵 X使用 SVD
通过选择前 k 个奇异向量来降低维度:
(part of speech)信息,但伴随许多其他问题:
矩阵的维度会经常发生改变(经常增加新的单词和语料库的
大小会改变)
矩阵会非常的稀疏,因为很多词不会共现。
矩阵维度一般会非常高 10
6
×10
6
X
衡。
X
衡。
对上述讨论中存在的问题存在以下的解决方法:
忽略功能词,例如 “the”“he”“has” 等等。
使 ramp window
计数进行加权
使 0使
原始计数
正如我们在下一节中看到的,基于迭代的方法以一种优雅得多的
方式解决了大部分上述问题
SVD
(
m×n
O(
mn
2
)
)
文档。
效地利用统计量。
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
4. Iteration Based Methods - Word2vec
这里我们尝试一个新的方法。我们可以尝试创建一个模型,该模
型能够一次学习一个迭代,并最终能够对给定上下文的单词的概
(亿
个句子)的全局信息。
这个想法是设计一个模型,该模型的参数就是词向量。然后根据
一个目标函数训练模型,在每次模型的迭代计算误差,并遵循一
些更新规则,该规则具有惩罚造成错误的模型参数的作用,从而
1986
快。
已经测试不同[Collobert et al.,
2011] 设计的模型首先将每个单词转换为向量。对每个特定的任
数,同时也训练单词向量,计算出了非常好的词向量的同时取得
了很好的性能
Word2vec
Word2vec 是一个软件包实际上包含:
continuous bag-of-words CBOW
skip-gramCBOW
skip-gram
周围上下文的词的概率分布
negative sampling hierarchical
softmaxNegative sampling
标,hierarchical softmax 过使用一的树构来
算所有词的概率来定义目标
4.1 Language Models (Unigrams, Bigrams, etc.)
首先,需要创建一个模型来为一系列的单词分配概率。从例子开
始:
“The cat jumped over the puddle”
一个好的语言模型会给这个句子很高的概率,因为在句法和语义
“stock boil fish is
toy”
数学上,我们可以称为对给 n 个词的序列的概率是:
4 Notes info.
课件/Slides
Lecture1, P19
视频/Video
Lecture1, 42:00
GitHub·代
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeAI
SVD
数。
相似的词有相似的上下文
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
(
1
,
2
,…,
)
我们可以用一元模型方(Unigram model),假设单
出现是完全独立的,从而分解概率
1
,
2
,⋯,
=
=1
但是我们知道这是不大合理的,因为下一个单词是高度依赖于前
面的单词序列的。如果使用上述的语言模型,可能会让一个无意
义的句子具有很高的概率。所以我们让序列的概率取决于序列中
的单词和其旁边的单词的成对概率。我们称之为 bigram 模型
1
,
2
,⋯,
=
=2
|
−1
词,而不是针对整个句子来考虑。但是我们将看到,这个方法会
有显的提- 1
基本上能得到这样的成对的概率。但是,这又需要计算和存储大
量数据集的全局信息。
既然我们已经理解了如何考虑具有概率的单词序列,那么让我们
观察一些能够学习这些概率的示例模型。
4.2 Continuous Bag of Words Model (CBOW)
{"The","cat","over","the","puddle"}
文,希望从这些词能够预测或者生成中心“jumped”。这
continuous bag-of-words CBOW
型。
的已 one-hot
one-hot
x
(c)
表示出用 y
(c)
表示 CBOW 模型因为只有
y one-hot 。现
在让我们定义模型的未知参数。
我们建两个矩
n×|V|
|V|×n
。其 n 嵌入
使
时,的第 i 列是词 w
i
n 维嵌入向量。我们定义这个 n×1
向量 v
i
。相
是输其为
的第 j 行是
w
j
n 嵌入向量。我们定义
的这行为
u
j
注意
w
i
我们即输
v
i
和输出词向量
u
i
)。
Unigram 模型:
1
,
2
,⋯,
=
=1
bigram 模型:
1
,
2
,,
=
=2
|
−1
CBOW 模型
们希望学习两个向量:
v
(输入向量) 当词在上下文中
u
(输出向量) 当词是中心
CBOW
以下定义
w
i
:词汇表
V
中的单词
i
n×|V|
:输入词矩
v
i
i
w
i
入向量表示
|V|×n
:输出词矩
u
i
i
w
i
出向量表示
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
我们将这个模型分解为以下步骤:
1. m one-hot
(x
(c−m)
,...,x
(c−1)
,x
(c+1)
,...,x
(c+m)
|V|
)
2.
(v
c−m
=x
(c−m)
,v
c−m+1
=
x
(c−m+1)
,...,v
c+m
=x
(c+m)
n
)得到嵌入词向量。
3. 对上述的向量求平均值 v
=
v
c−m
+v
c−m+1+...+v
c+m
2m
n
4. z=
v
|V|
高,就会令到相似的词更为靠近,从而获得更高的分数。
5. 将分数转换为概率 y
=softmax(z)
|V|
6. 我们生成概率 y
|V|
与实概率 y
|V|
匹配
使得其刚好是实际的词就是这个 one-hot 向量。
如果
,我道这
学习这两个矩阵呢?
这需要创建一个目标函数。一般我们想从一些真实的概率中学习
法。这里我们采用一个常见的距离/损失方法,交叉熵
H(y
,y)
在离散情况下使用交叉熵可以直观地得出损失函数的公式
H(
y
,y)=
j=1
|V|
y
j
log y
j
上面公式中,y one-hot 向量。因此损失函数可简化为:
H(
y
,y)=y
j
 log(
y
j
)
c one-hot
y
c
=1
H(y
,y)=1 log(1)=0
此,对一个完美的预测,我们不会面临任何惩罚或者损失。现在
我们虑一
y
c
=0.01
。和
H(y
,y)=1 log(0.01)=4.605
此,我们可以看到,对于概率分布,交叉熵为我们提供了一个很
好的距离度量。因此我们的优化目标函数公式为:
minimize =−log
|
−
,…,
−1
,
+1
,,
+
=−log
|
=−log
exp
=1
||
exp
=−
+
log
=1
||
exp
我们使用 SGD 来更新所有相关的词向量 u
c
v
j
softmax
向量,其中转换后的向量的第
i
个元
素是
e
y
i
k=1
|V|
e
y
k
所以值一定为正数;
k=1
|V|
e
y
k
使
k=1
|V|
y
k
=1
率。
CBOW
示:
y
= y
y
H(y
,y)
y
使
H(y
,y)
y
y
中心词!
U
V
CBOW
U
V
随机梯度下降来优化成本
SGD 一个度和
新参数:
old
old
α
J
new
old
α
J
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
4.3 Skip-Gram Model
Skip-Gram 模型与 CBOW 大体相同,但是交换了我们 x
y,即 CBOW x 现在 yy 现在 x。输 one-hot
量(中心)我们示为 x输出向量
y
(j)
。我们定
是和 CBOW 一样的。
我们将此模型的工作方式细分为以下步骤
1. 生成中心词的 one-hot 向量 x
|V|
2. 我们对中心词
v
c
=x
|V|
得到词嵌入向
3. 生成分数向量
z=v
c
4. y
=softmax(z)
y
c−m
,...,y
c−1
,y
c+1
,...,y
c+m
是每个上下文词观察到的概
5.
y
(c−m)
,...,y
(c−1)
,y
(c+1)
,...,y
(c+m)
one-hot
输出
CBOW 型一,我需要生成目标数来估这
型。 CBOW 的一主要的不我们用了个朴
(
公式 1 2 )
minimize
=−log
−
,…,
−1
,
+1
,…,
+
|
=−log
=0,≠
2
−+
|
=−log
=0,≠
2
−+
|
=−log
=0,≠
2
exp
−+
=1
||
exp
=−
=0,≠
2
−+
+2log
=1
||
exp
通过这个目标函数,我们可以计算出与未知参数相关的梯度,并
且在每次迭代中通过 SGD 来更新它们。
注意
=
=0,≠
2
log
−+
|
=
=0,≠
2
,
−+
H(
y
,
y
c−m+j
)
y
one-hot y
c−m+j
的交叉熵。
4.3 Notes info.
课件/Slides
视频/Video
GitHub·代码
Bilibili
·视频
Stanford University X ShowMeAI
Skip-Gram
词的情况下预测周围的上下文词
首先我 Skip-Gram
出以下定义
w
i
:词汇表
V
中的单词
i
n×|V|
:输入词矩
v
i
i
w
i
入向量表示
|V|×n
:输出词矩
u
i
i
w
i
出向量表示
y
Skip-Gram
心单词的距离无关。
Skip-Gram 模型的计算图
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
4.4 Negative Sampling
|V|
O(|V|)
复杂度。一个简单的想法是不去直接计算,而是去求近似值。
在每一个训练的时间步,我们不去遍历整个词汇表,而仅仅是抽
取一噪声
P
n
(w)
词频的排序相匹配的。为加强对问题的表述以纳入负抽样,我们
只需更新其目标函数、梯度和更新规则。
Mikolov Distributed Representations of Words and
Phrases and their Compositionality.中提
负采样是 Skip-Gram 模型,但际上对一个不的目
函数进行优化。考虑一对中心词和上下文词 (w,c)。这词对是来
P(D=1∣w,c) (w,c)
料库。相应地 P(D=0∣w,c)表示 (w,c)不是来自语料库。
首先,我们对
P(D=1∣w,c)
sigmoid 函数建模:
(=1|,,)=
=
1
1+
−
现在,我们建立一个新的目标函数,如果中心词和上下文词确实
P(D=1∣w,c)
P(D=0∣w,c)
这两个率采用一个单的极大似然估计的方法(这里我们把
θ
作为模型的参数,在我们的例子是
= argmax
(,)∈
(=1|,,)
(,)∈
(=0|,,)
= argmax
(,)∈
(=1|,,)
(,)∈
( 1(=1|,,))
= argmax
(,)∈
log (=1|,,)+
(,)∈
log (1(=1|,,))
=argmax
(,)∈
log
1
1+
exp
+
(,)∈
log
1
1
1+exp
=argmax
(,)∈
log
1
1+exp
+
(,)∈
log
1
1+
exp
4.4 Notes info.
课件/Slides
视频/Video
GitHub
·代码
Bilibili·视频
Stanford University X ShowMeAI
softmax
CBOW Skip
Gram J
贵!
sigmoid softmax 1D
版本,可用于建立概率模
()=
1
1+
−
Sigmoid 函数
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
注意最大化似然函数等同于最小化负对数似然:
=−
(,)∈
log
1
1+exp
(,)∈
log
1
1+exp
D
“stock boil fish is toy”
很低的概率。我们可以从语料库中随机抽样出负样
D
对于 Skip-Gram 型,们对心词
c
来观的上文单
cm+j的新目标函数为:
−
−+
=1
log
CBOW
v
=
v
c−m
+v
c−m+1
+...+v
c+m
2m
来观察中心词 u
c
的新的目标函数为
−log σ(u
c
T
v
)
k=1
K
l og σ(u
k
T
v
)
在上
{
u
k
∣k=1...K}
是从
P
n
(w)有很
3/4 Unigram 3/4
能让你有一些直观的了解:
:0.9
3/4
= 0.92
:0.09
3/4
= 0.16
:0.01
3/4
= 0.032
“Bombastic“is”
前的才提高了一点点。
4.5 Hierarchical Softmax
Mikolov Distributed Representations of Words and
Phrases and their Compositionality. hierarchical
softmax softmax
在实际中hierarchical softmax 对低频词往表得更,负
采样对高频词和较低维度向量表现得更好。
w
i
w
p(w∣w
i
) w
漫步概率。这个方法最大的优势是计算概率的时间复杂度仅仅是
O(log(|V|))
,对应着路径的长度。
与常 softmax 损耗进行比较
−+
+log
=1
||
exp
u
CBOW softmax
耗进行比较
u
c
T
v
+log
j=1
|V|
exp(
u
j
T
v
)
Hierarchical softmax 使
O(log(|V|))
而不是
O(|V|)
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
让我们引入一些概念。 L(w)从根结点到叶结点 w的路径中
L(w
2
)
3
n(w,i)
v
n(w,i)
i n(w,1)
n(w,L(w)) w
n
ch(n)
后,我们可以计算概率为
|
=
=1
()−1
[(,+1)=ch((,))]
(,)
其中,
[]=
1 if is true
−1 otherwise
这个公式看起来非常复杂,让我们细细梳理一下。
首先们将 (n(w,1)) (w)的路
状来计算相乘的项。如果我们假 ch(n)一直都 n的左节点
[n(w,j+1)=ch(n(w,j))]
1
则返回 0
[n(w,j+1)=ch(n(w,j))]
n
处,往左点的
v
n
T
v
w
i
的任
何值则可以检查,
+
=1
归一
w=1
|V|
P
(w∣w
i
)=1
,和 softmax
样的。
v
w
i
v
n(w,j)
T
w
2
例,从根点要经过次左的边和一右边边才到达 w
2
因此
2
|
=
2
,1
,left
2
,2
,left
2
,3 ,
right
=
2
,1
2
,2
2
,3
−log P(w∣w
i
)
是更新每个词的输出向量,而是更新更新二叉树中从根结点到叶
结点的路径上的节点的向量
该方法的速度由构建二叉树的方式确定,并将词分配给叶节点。
Mikolov Distributed Representations of Words and
Phrases and their Compositionality.中使
在树中分配高频词到较短的路径。
Hierarchical softmax
示意图:
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
5. Gensim word vectors example
Gensim Glove Word2Vec API
most_similar, doesnt_match API
most_similar 进行封装,输出三元组的类比结果:
model = KeyedVectors.load_word2vec_format(word2vec_glove_file)
model.most_similar('banana')
def analogy(x1, x2, y1):
result = model.most_similar(positive=[y1, x2], negative=[x1])
return result[0][0]
analogy('japan', 'japanese', 'australia')
model.doesnt_match("breakfast cereal dinner lunch".split())
6. Suggested Readings
6.1 Fake Task
务,但是我们实际上并没有将这个神经网络用于我们训练它的任
务。相反,目标实际上只是学习隐藏层的权重,这实际上是我们
用。一个 auto-encoder 从而
在输出层将隐藏层向量解压缩得到输入向量。训练完成后,去除
输出层,只是用隐藏层。
下图是从源文本中抽取样本的过程
5 Notes info.
课件/Slides
视频/Video
GitHub·代码
Bilibili
·视频
Stanford University X ShowMeA
I
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
下图是网络架构图
能出现的单词是相似的),那么我们的模型需要为这两个单词输
出非常相似的结果。网络为这两个单词输出类似的上下文预测的
一种方式是判断单词向量是否相似。因此,如果两个单词具有相
似的上下文,那么我们的网络就会为这两个单词学习相似的单词
向量!
Efficient Estimation of Word Representations in Vector
Space(original word2vec paper)
Distributed Representations of Words and Phrases and their
Compositionality (negative sampling paper)
Word2Vec Tutorial - The Skip-Gram Model
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part I - Word Vectors I: Introduction, SVD and Word2Vec
机器学习
深度学习
自然语言处
计算机视觉
知识图谱
Machine Learning
Deep Learning
Natural Language Processing
Computer Vision
Knowledge Graphs
Stanford · CS229
Stanford · CS230
Stanford · CS224n
Stanford · CS231n
Stanford · CS520
# 系列内容 Awesome AI Courses Notes Cheatsheets
图机器学习
深度强化学
自动驾驶
Machine Learning with Graphs
Deep Reinforcement Learning
Deep Learning for Self-Driving Cars
Stanford · CS224W
UCBerkeley · CS285
MIT · 6.S094
...
...
...
ShowMeAI 的分,覆具知TOP20+ AI 旨在和学供一
高品质中文学习笔记和速查表。
斯坦(Stanford University) Natural Language Processing with Deep Learning (CS224n)
系列的第三门产出。
课程版本 2019 Winter,核心深(transformerbert问答摘要、文生成)在当(2021 )
业界和研究界依旧是前沿的方法。最新版课程的笔记生产已在规划中,也敬请期待。
笔记内容经由深度加工整合,以 5 个部分构建起完整的CS224n 容世界”,并依托 GitHub 建了汇总
页。快扫描二维码,跳转进入吧!有任何建议和反馈,也欢迎通过下方渠道和我们联络 (*3)~