CS224n NLP笔记-Lecture01
人类语言和文字意义
人类之所以比类人猿更“聪明”,是因为我们有语言,因此是一个人机网络,其中人类语言作为网络语言。人类语言具有 信息功能 和 社会功能
但是,相较于如今的互联网的传播速度而言,人类语言是一种缓慢的语言。然而,只需人类语言形式的几百位信息,就可以构建整个视觉场景。这就是自然语言如此迷人的原因,这可以理解为人类语言拥有极高的效率,即有着极高的价值
The meaning of the word
比较重要的含义,直接放英文:
- 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.
The utilization of usable meaning in computer
WordNet
一个包含同义词集和上位词(“is a”关系) synonym sets and hypernyms 的列表的辞典
缺点:
- 有些词在特定的上下文内不能被看作同义词Synonym
- 更新困难
- 判定上下级和同义词的方式是人为确定的,不是模型确定的
One-hot Vectors
在传统的自然语言处理中,我们把词语看作离散的符号: hotel, conference, motel - a localist representation。单词可以通过独热向量(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
]
h
o
t
e
l
=
[
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
]
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]
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]
Problem with words as discrete symbols
所有向量是正交的(向量积为0)。对于one-hot vectors,没有关于相似性概念,并且向量维度过大
痛点
- 使用类似 WordNet 的工具中的列表,获得相似度,但会因不够完整而失败
- 学习在向量本身中编码相似性
因此,引入Word2vec算法
Word2vec 介绍
接下来感觉是这节课的重点——Word2vec,个人目前的理解这是一种根据前面提到的上下文思想构造词向量的方法。
大概含义就是为每个单词构造一个密集的向量,这个向量可以看作中心向量(Center Vector,之后简称 c ),中心向量与在上下文出现的向量(Outside Vector,之后简称 o )可能存在相似的关系。这些向量都是n-dimensional的(每个dimension都代表一定的含义,但是我们没有必要去深究它)。因此,这类向量也可以被称之为分布式向量Distribution representation,如下图:
Word2vec的算法思想
Word2vec的算法思想更像是在求解中心词与上下文的“匹配”关系。主要有以下几点思想:
- 有大量的文本(corpus means ‘body’ in Latin. 复数为corpora),这些文本为我们提供了无穷多的中心词和上下文的组合
- 固定词汇表中的每个单词都由一个向量表示,可以看作一个初始向量,我们要做的是不断迭代求解最优解,即不断调整词向量来最大化第四点提到的概率
- 文本中的每个位置 t,其中有一个中心词 c 和上下文(“外部”)单词 o
- 使用 c 和 o 的词向量的相似性来计算给定 c 的情况下 o 出现的条件概率 (反之亦然)
- 窗口的概念指的是上下文单词的范围,即对于中心单词来说语境的范围
下图为窗口大小
j
=
2
j=2
j=2 时的
P
(
w
t
+
j
∣
w
t
)
P\left(w_{t+j} | w_{t}\right)
P(wt+j∣wt) 计算过程,center word分别为 into 和 banking
Word2vec目标函数定义
对于每个位置
t
=
1
,
…
,
T
t=1, \ldots, T
t=1,…,T,在大小为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_{-m \leq j \leq m \atop j \neq 0} P(w_{t+j} | w_{t} ; \theta)
Likelihoood=L(θ)=t=1∏Tj=0−m≤j≤m∏P(wt+j∣wt;θ)
θ
\theta
θ就是我们之前提到的需要迭代来优化的变量,即词向量组成的向量集
一般的优化问题我们都会处理为最小值考虑最优解,而且连乘在求导的时候是很难处理的,因此,使用对数化并取负的方式,构建目标函数(这个函数也被成为成本函数或许损失函数):
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;θ)
其实,我们只需要求解出
log
P
(
w
t
+
j
∣
w
t
;
θ
)
\log P\left(w_{t+j} | w_{t} ; \theta\right)
logP(wt+j∣wt;θ) ,这是问题的主要矛盾
针对该问题,每一个单词都会使用两个初始向量
- v w v_w vw 当 w 是中心词时
- u w u_w uw 当 w 是上下文词时
因此以上式子可以表示为:
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)
个人理解,分子是从向量积(向量点积)的角度来表示向量之间的相似程度,而分母是一种将数据标准化的形式,因此该式子很好的表示了条件概率需要表达的含义
这个式子很好地体现了深度学习的一个比较常用的公式:Hierarchical Softmax function
Word2vec目标函数求解
这里给出计算公式,其中的细节不在赘述:
∂ ∂ 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
∂ ∂ 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
主要是需要使用到函数的多层求导和 ∑ \sum ∑的用法,以及对数和指数的转化
可以理解,当 P ( o ∣ c ) → 1 P(o|c) \to 1 P(o∣c)→1 ,即通过中心词 c 我们可以正确预测上下文词 o ,此时我们不需要调整 u o u_o uo ,反之,则相应调整 u o u_o uo
个人感悟
学完这一课之后,对于NLP和Word2Vec的理解还颇浅,课后有时间会自行总结一份Word2Vec的深度介绍帮助自己和大家更好的理解