CS224n Note-01 Lecture 1: Introduction and Word Vectors School:Stanford Teacher:Prof. Christopher Manning Library:Pytorch image-20200607162934164 内容目录 语言学到自然语言处理简要介绍 人类语言和单词含义 词向量 Word2vec语言模型的简要介绍 优化简介:梯度下降 image-20200607163700334 课程目标 理解目前深度学习处理方法(包括NLP主流模型和方法) 了解NLP中的处理问题 NLP中主流问题的建模和处理能力(in Pytorch) image-20200607163959699 The course
School:Stanford
Teacher:Prof. Christopher Manning
Library:Pytorch

内容目录

课程目标

人类比猩猩更加聪明,是因为人们可以通过语言进行交互,对语言的理解和思考,展现了人类语言的复杂和高效。
每个人对于语言都可以有自己的理解,因此语言不光具有信息传递的功能,还可以通过语言来影响其他人。
当今社会,网络速度不断更新迭代,5G已经油然而生,相对于人类语言,我们使用NLP技术可以高速学习构建更强大的处理能力。
NLP就是对各种文本内容进行处理。
How do we represent the meaning of a word?
定义meaning:
用单词、词组表示概念
人们运用单词、符号表示自己的观点
通过写作作品、艺术来表达观
理解含义最普遍的语言方式(denotational semantics用语言符号对语义进行转化):
signifier(symbol)⇔signified(idea or thing)
How do we have usable meaning in a computer?
通常的解决方案:Wordnet(包含同义词集和上位词的一个巨大词典)
|上位词:用 “is a”来表示关系的词集列表

Problems with resources like WordNet
Wordnet的劣势:
Representing words as discrete symbols
传统NLP中,我们将单词看作是离散的表示,通过one-hot vector来表示。

One-hot vector表示,由于向量是正交的,因此没法表示他们之间啊的相似度,如果词汇量太多,将使得向量的维度过大。
Representing words by their context
Distributional semantics:一个单词的含义通常由在它附近经常出现的单词给出的。
对于文本中的一个单词w,它的上下文就是出现在它附近的一组单词(在一个划定好size的窗口下)
通过许多包含w的文本中的上下文来构建w的含义表示:

Word vectors
我们将为每个单词构建一个稠密的向量,使得它能够与相似文本里的词向量相近,word meaning 作为一种神经词向量,在我们对向量空间进行可视化:

注:word vector 有时也叫做 word embedding 或者 word representations,他们都是一种表示结构。
Word2vec:Overview
Word2vec(Mikolov et al. 2013) 是一种学习词向量的框架
包含大量的文本语料
固定词表中的每一个单词由一个词向量表示
文本中的每个单词位置 t,有一个中心词c,和它的上下文 o(除了 c 的外部单词)。
通过 c 和 o 的词向量相似性来计算 P(o/c)
不断的调整词向量,最大化概率
固定窗口,滑动窗口并计算:


Word2vec的目标函数:
对于每个位置 t = 1,...,T,固定窗口大小m,给定中心词wj:
注: \theta 是需要优化的参数
注:
如何计算?
问:如何计算P(w_{t+j}|w_t;\theta)?
答:对于每个单词 w 我们使用两个向量 v_w 和 u_w
v_w :当 w 是中心词时
u_w :当 w 是上下文单词时
对于中心词 c 和上下文单词 o,有:
Example:

在概率函数中:
softmax函数进行归一化(深度学习中常用): \Bbb{R^n}\to \Bbb{R^n}
注:用于将任意值 x_i 映射到概率分布 p_i
Training a model by optimizing parameters
(通过优化参数的方式训练模型)- 最小化损失

To train the model: Compute all vector gradients
整个模型里只有一个参数 \theta ,所以我们只用优化这一个参数就行。
例如:模型在一个 d 维,词典大小为 V :
Example:

计算手稿:


Optimization:Gradient Descent(梯度下降)
我们的损失函数 J(\theta) 需要最小化
使用的方法为:梯度下降
对于当前 \theta ,计算 J(\theta) 的梯度
然后小步重复朝着负梯度方向更新方程里的参数 \alpha=(step\ size)\ or\ (learning\ rate)
更新唯一的参数 \theta:
while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad
SGD:Stochastic Gradient Descent
由于 J(\theta) 是在语料文本中所有窗口的方程
当语料很大的时候,计算梯度会消耗巨大
解决办法:SGD
不断sample窗口,不断更新
while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = tehta - alpha * theta_grad