文章目录
- 1.课程简单介绍
- 1.1 本课程目标
- 1.2 今年的课程与以往的不同
- 1.3 作业计划
- 2.人类语言和词义
- 2.1 我们应该如何表示一个单词的词义(word meaning)
- 2.2 我们如何在计算机中得到一个可用的词义(word meaning)
- 2.2.1 常见的解决方案:例如,使用WordNet
- 2.2.1.1 WordNet含义
- 2.2.1.2 WordNet等这类资源存在的问题
- 2.2.2 使用离散符号表示词,比如one-hot表示
- 2.2.2.1 one-hot表示
- 2.2.2.2 使用离散符号表示词存在的问题
- 2.2.2.3 可以尝试的解决办法
- 2.2.3 使用词的上下文(context)来表示词
- 2.2.3.1 分布式语义(Distributional semantics)
- 2.2.3.2 词向量
- 2.2.3.3 Word meaning as a neural word vector –visualization
- 3.Word2vec介绍
- 3.1 Word2vec概述
- 3.1.1 简介
- 3.1.2 窗口和 P ( w t + j ∣ w t ) P(w_{t+j}|w_t) P(wt+j∣wt)计算过程示例
- 3.2 目标函数(objective function)
- 3.2.1 目标函数推导
- 3.2.2 目标函数
- 3.3 如何训练模型
- 3.3.1 模型训练示例
- 3.3.2 模型训练:计算**所有**词向量的梯度
- 4.Word2vec目标函数梯度
- 4.1 补充知识
- 4.1.1 链式法则
- 4.1.2 向量求导
- 4.2 白板推导
- 4.3 计算梯度
- 4.4 关于Word2vec的细节
- 5.优化基础
- 5.1 梯度下降法介绍
- 5.1.1 示例
- 5.1.2 梯度更新
- 5.2 梯度下降法分类
- 6.词向量的简单演示
1.课程简单介绍
1.1 本课程目标
- An understanding of the effective modern methods for deep learning
- Basics first, then key methods used in NLP: Recurrent networks, attention, etc.
- A big picture understanding of human languages and the difficulties in understanding and producing them
- An understanding of and ability to build systems (in PyTorch) for some of the major problems in NLP:
- Word meaning, dependency parsing, machine translation, question answering
1.2 今年的课程与以往的不同
- Lectures (including guest lectures) covering new material: character models, transformers, safety/fairness, multitask learn.
- 5x one-week assignments instead of 3x two-week assignments
- Assignments covering new material (NMT with attention, ConvNets, subwordmodeling)
- Using PyTorchrather than TensorFlow
- Gentler but earlier ramp-up
- First assignment is easy, but due one week from today!
1.3 作业计划
- HW1 is hopefully an easy on ramp –an IPythonNotebook
- HW2 is pure Python (numpy) but expects you to do (multivariate) calculus so you really understand the basics
- HW3 introduces PyTorch
- HW4 and HW5 use PyTorch on a GPU (Microsoft Azure)
-
Libraries like PyTorch, Tensorflow(and Chainer, MXNet, CNTK, Keras, etc.) are becoming the standard tools of DL
5.For FP, you either -
Do the default project, which is SQuAD question answering
Open-ended but an easier start; a good choice for most
-
Propose a custom final project, which we approve
You will receive feedback from a mentor(TA/prof/postdoc/PhD)
2.人类语言和词义
2.1 我们应该如何表示一个单词的词义(word meaning)
首先我们来看一下韦伯斯特词典对于meaning的定义:
- the idea that is represented by a word, phrase, etc.
- the idea that a person wants to express by using words, signs, etc.
- the idea that is expressed in a work of writing, art, etc.
然后看一下最常见的思考meaning的语言学方式:
denotational semantics是指称语义的意思,在视频中教授解释说,指称语义的想法是把meaning视为事物的代表(也就是signifier“能指”,一种符号),比如我们说到“椅子”,那么椅子这个词的meaning就指示了我们现实世界中的椅子这种物体(signified“所指”,想法或者事物)
我们现在知道了词义的概念,下一步就是想我们如何在计算机中得到一个可用的词义。
2.2 我们如何在计算机中得到一个可用的词义(word meaning)
2.2.1 常见的解决方案:例如,使用WordNet
2.2.1.1 WordNet含义
WordNet是一个包含同义词集列表和上义词(“is a”关系)的库。
2.2.1.2 WordNet等这类资源存在的问题
- Great as a resource but missing nuance(细微差别)
- e.g. “proficient” is listed as a synonym for “good”. This is only correct in some contexts.
- Missing new meanings of words
- e.g., wicked, badass, nifty, wizard, genius, ninja, bombest
- Impossible to keep up-to-date!
- Subjective
- Requires human labor to create and adapt
- Can’t compute accurate word similarity
2.2.2 使用离散符号表示词,比如one-hot表示
2.2.2.1 one-hot表示
在传统的NLP中,我们视单词为离散的符号。one-hot的意思就是一个词向量中只有1个位置为1,剩下的位置全部为0,因此也可以翻译作独热。
词向量的维度 = 词表(不含重复词)中单词的数量(比如, 500,000)。
比如hotel,conference,motel的一个本地表示(localist representation)是:
motel = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
hotel = [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
2.2.2.2 使用离散符号表示词存在的问题
Example: in web search, if user searches for “Seattle motel”, we would like to match documents containing “Seattle hotel”.
但是我们上面也看到了motel和hotel的表示,可以发现:
- 这两个向量是正交的,也就是说点积为0;
- 因此,在one-hot向量中没有一个自然的相似的概念。也就是说使用one-hot向量很难度量词之间的相似度。
2.2.2.3 可以尝试的解决办法
- 可以依靠WordNet的同义词集列表去得到相似度?
- 但众所周知,很失败:比如同义词集不完整等等,其实我觉得还是因为上面提到的WordNet存在的问题,比如很难及时更新等。
- 试着在向量本身中去编码相似度。
2.2.3 使用词的上下文(context)来表示词
2.2.3.1 分布式语义(Distributional semantics)
- 分布式语义:一个单词的词义是由频繁出现在它附近的词给出的(A word’s meaning is given by the words that frequently appear close-by);
对于分布式语义的评价:
- “You shall know a word by the company it keeps”(J. R. Firth 1957: 11)
- One of the most successful ideas of modern statistical NLP!
- 当一个词w出现在一段文本中,它的上下文(context)就是这段文本中在它附近一个固定窗口(window)内出现的词的集合(When a word w appears in a text, its context is the set of words that appear nearby (within a fixed-size window).)
- 基于以上理论,我们就可以使用w的多个上下文来建立w的表示。比如:
2.2.3.2 词向量
我们为每个单词构建一个稠密的向量,使其与出现在类似上下文中的单词的向量相似。
Note:
- 词向量有时也称作是词嵌入 或者 词表示。他们都是一种分布式表示。
- one-hot表示,有时也称作离散/稀疏 表示;
- 分布式表示(distributed representation),称作稠密 表示(dense representation)
2.2.3.3 Word meaning as a neural word vector –visualization
3.Word2vec介绍
3.1 Word2vec概述
3.1.1 简介
Word2vec (Mikolovet al. 2013)是一个学习词语向量表示(词向量)的框架。
Word2vec的主要想法(Idea):
- 我们有一个大型的的文本语料库
- 在一个固定词汇表中的每个单词都由一个向量表示(is represented by a vector)
- 遍历文本中的每个位置t,其中有一个中心词(center word)c和上下文(outside,“外部”)单词o
- 使用单词向量c和o的相似度来计算P(o|c),反之亦然
- 不断调整单词向量来最大化这个概率
3.1.2 窗口和 P ( w t + j ∣ w t ) P(w_{t+j}|w_t) P(wt+j∣wt)计算过程示例
3.2 目标函数(objective function)
3.2.1 目标函数推导
对于每个位置t=1,…,T,给定一个中心词 w t w_t wt,预测一个固定大小的窗口(大小为m)内的上下文单词:
L i k e l y h o o d = L ( θ ) = ∏ t = 1 T ∏ − m ⩽ j ⩽ m , j ≠ 0 P ( w t + j ∣ w t ; θ ) Likelyhood=L(\theta)=\prod_{t=1}^T\prod_{-m\leqslant j\leqslant m,j\neq 0}P(w_{t+j}|w_t;\theta) Likelyhood=L(θ)=t=1∏T−m⩽j⩽m,j=0∏P(wt+j∣wt;θ)
- 最大化上面这个函数就可以达到我们的目的,即最大化预测精度
- θ \theta θ代表所有待优化的变量
但是上面这种形式(连乘)不适合求导,因此需要做一定的转换,log转换可以把连乘变成累加,并且不改变原函数的单调性。于是最终的目标函数为:
J ( θ ) = − 1 T l o g L ( θ ) = − 1 T ∑ t = 1 T ∑ − m ⩽ j ⩽ m , j ≠ 0 l o g P ( w t + j ∣ w t ; θ ) J(\theta)=-\frac{1}{T}logL(\theta)=-\frac{1}{T}\sum_{t=1}^{T}\sum_{-m\leqslant j\leqslant m,j\neq 0}logP(w_{t+j}|w_t;\theta) J(θ)=−T1logL(θ)=−T1t=1∑T−m⩽j⩽m,j=0∑logP(wt+j∣wt;θ)
- 这样最大化预测精度的问题就转变成了最小化目标函数的问题,即最小化目标函数等价于最大化预测精度
3.2.2 目标函数
- 现在我们要最小化目标函数J(θ):
J ( θ ) = − 1 T ∑ t = 1 T ∑ − m ⩽ j ⩽ m , j ≠ 0 l o g P ( w t + j ∣ w t ; θ ) J(\theta)=-\frac{1}{T}\sum_{t=1}^{T}\sum_{-m\leqslant j\leqslant m,j\neq 0}logP(w_{t+j}|w_t;\theta) J(θ)=−T1t=1∑T−m⩽j⩽m,j=0∑logP(wt+j∣wt;θ) - 还有一个问题,我们如何计算 P ( w t + j ∣ w t ; θ ) P(w_{t+j}|w_t;\theta) P(wt+j∣wt;θ)。因为在遍历过程中,每个单词有时是中心词,有时是上下文。
- 解决方案:对每个单词w使用两个向量表示:
- 当w是中心词的时候,用向量 v w v_w vw表示
- 当w是上下文词的时候,用向量 u w u_w uw表示
- 然后对于一个中心词c和一个上下文词o,计算公式:
P ( o ∣ c ) = e x p ( u o T v c ) ∑ w ∈ V e x p ( u w T v c ) P(o|c)=\frac{exp(u_{o}^{T}v_c)}{\sum_{w\in V}exp(u_{w}^{T}v_c)} P(o∣c)=∑w∈Vexp(uwTvc)exp(uoTvc) - 向量示例如下:
Note: - 上述计算公式是softmax函数,一般形式是:
s o f t m a x ( x i ) = e x p ( x i ) ∑ j = 1 n e x p ( x j ) softmax(x_i)=\frac{exp(x_i)}{\sum_{j=1}^{n}exp(x_j)} softmax(xi)=∑j=1nexp(xj)exp(xi) - softmax函数将任意值 x i x_i xi映射到一个概率分布 p i p_i pi
- “max”:是因为会放大较大的 x i x_i xi的概率
- “soft”:是因为也会给较小的 x i x_i xi赋一些概率值
- softmax函数经常用在深度学习中
3.3 如何训练模型
3.3.1 模型训练示例
通常训练一个模型的时候,我们需要调整参数,最小化损失函数。
3.3.2 模型训练:计算所有词向量的梯度
4.Word2vec目标函数梯度
4.1 补充知识
4.1.1 链式法则
用于复合函数求导,有 y = f ( u ) , u = g ( x ) y=f(u),u=g(x) y=f(u),u=g(x),则:
d y d x = d y d u d u d x \frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx} dxdy=dudydxdu
4.1.2 向量求导
∂ x T a ∂ x = ∂ a T x ∂ x = a \frac{\partial x^Ta}{\partial x}=\frac{\partial a^Tx}{\partial x}=a ∂x∂xTa=∂x∂aTx=a
- 其中,x、a默认为列向量
- 上式求导为标量对向量求导,分子布局:n维行向量,分母布局:n维列向量(默认布局) [ 2 ] ^{[2]} [2](关于具体的推导步骤:见评论区链接)
4.2 白板推导
有了上述补充知识之后,就开始进行求偏导数的白板推导,视频中教授只对一个中心词进行了求导演示,以下是我跟着视频推导的过程(感兴趣的可以看看这部分视频,讲解非常清晰):
4.3 计算梯度
4.4 关于Word2vec的细节
为什么同一个词需要两个向量?
- 更易进行优化
- 在训练完成后将两者取平均,即为该词的词向量
有两种模型:
- Skip-gram(SG):通过中心词预测上下文词
- Continuous Bag of Words(CBOW):使用窗口内的所有上下文词预测中心词
- 本文上面讲述的是Skip-gram模型
其他令训练更有效的手段:
- 负采样(negative sampling)
- 本文上面讲的是很简单的训练方法
5.优化基础
5.1 梯度下降法介绍
5.1.1 示例
- 假设我们有一个损失函数 J ( θ ) J(\theta) J(θ),要最小化
- 梯度下降法就是一种可以最小化 J ( θ ) J(\theta) J(θ)的算法
- 主要想法:
5.1.2 梯度更新
- 矩阵形式更新:
θ n e w = θ o l d − α ∇ θ J ( θ ) \theta^{new}=\theta^{old}-\alpha \nabla \theta J(\theta) θnew=θold−α∇θJ(θ) - 单个参数更新,要注意参数必须同时更新:
θ j n e w = θ j o l d − α ∂ ∂ θ j o l d J ( θ ) \theta^{new}_j=\theta^{old}_j-\alpha \frac{\partial}{\partial \theta_j^{old}}J(\theta) θjnew=θjold−α∂θjold∂J(θ) - α称为学习率(learning rate)
5.2 梯度下降法分类
根据每次迭代时使用的样本量大致分为:
- 批量梯度下降法(Batch GD,BGD):每次迭代使用全部的样本对参数进行更新
- 随机梯度下降法(Stochastic,SGD):每次迭代使用一个样本对参数进行更新
- 小批量梯度下降法(Mini-Batch GD,MBGD):每次迭代使用batch_size个样本对参数进行更新
更加详细的介绍见批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解
6.词向量的简单演示
教授利用Glove词向量做了一些简单展示:
- 相似词:找和某个词向量最相似的那个词,model.most_similar(“banana”)
- 词类比:比如king之于man,等于queen之于woman,也是词在向量空间king-man+woman=queen
- 可视化:将词向量利用PCA降到二维,并进行可视化,可以发现相似概念的词距离很接近,最终结果如下所示:
参考资料:
1.2019斯坦福公开课CS224N-P1
2.矩阵向量求导-求导定义与求导布局