1、课程介绍
- 了解有效的现代深度学习方法;
- 首先回顾一些基础知识,然后介绍NLP中的关键方法:递归网络,注意力机制等; - 了解人类语言的全貌,以及理解和产生语言的困难;
- 理解并有能力为NLP中的主要问题构建系统(在pytorch中);
- 单词的意思,依赖解释(dependency parsing),机器翻译,问题回答;
2、人类语言和词义
2.1 我们怎样表达一个词的意思?
定义:meaning(韦氏词典)——对meaning的定义的解释
- 用一个词、短语等来表示想法;
- 一个人想要用语言、符号等来表达的想法;
- 以文字、艺术等形式表达的思想。最常见的语言意义思考方式: 能 指 ( 符 号 ) ⇔ 所 指 ( 概 念 或 者 事 物 ) = 指 称 语 义 能指(符号)\Leftrightarrow 所指(概念或者事物)=指称语义 能指(符号)⇔所指(概念或者事物)=指称语义
2.2 我们如何在计算机中拥有可用的意义
常见的解决方案:使用例如WordNet,一个包含同义词集和上位词(“is a” 关系)列表的同义词典;
2.3 资源的问题(例如Wordnet)
- 作为资源很好,但缺少细微差别;
- 如“精通”被列为“好”的同义词,这只在某些情况下是正确的;
- 缺少单词的新含义;
- 如邪恶,坏蛋,俏皮的向导,天才,忍者炸弹;
- 无法保持更新;
- 主观的;
- 需要人类劳动来创造和适应;
- 无法计算准确的单词相似度;
2.4 用离散符号表示单词
在传统的NLP中,我们把单词看作离散的符号:旅馆、会议、汽车旅馆——一种地方主义的表现(localist representation);
单词可以通过独热向量来表示:
motel = [0 0 0 0 0 0 0 0 0 0 0 1 0 0 ]
hotel = [0 0 0 0 0 0 1 0 0 0 0 0 0 0 ]
这存在一个问题,语言是有很多单词的,例如英语,实际上英语的单词是无限的,我们可以在现有单词的基础上衍生出更多的单词。
向量维数=词汇量(例如500000)。如果想要表示合理的大小词汇,需要很大的向量。还有一个更大的问题,理解关系和词语的意义。举个例子,在网络搜索中,如果用户搜索“西雅图汽车旅馆(Seattle motel)”,我们希望匹配包含“西雅图旅馆(Seattle hotel)”的文档。,酒店和汽车旅馆几乎是一回事。但如果使用上面讲到的独热编码,这两者之间是没有相似的关系的·。在数学上,这两个向量是正交的。
解决办法
- 可以尝试依靠wordNet的同义词列表来获得相似性吗?
- 但是众所周知,严重失败:不完整等等问题;
- 在向量本身中学习编码相似性;
2.5 根据上下文来表示单词
- 分布式语义:一个词的意思是由经常出现在它附近的词所赋予的;
- 有了它的伙伴,你就会知道一个字;
- 现代统计NLP最成功的思想之一;
- 当一个单词w出现在文本中时,它的上下文是附近(在一个固定大小的窗口内)出现的一组单词 ;
- 使用单词w的许多上下文来建立单词w的表示;
2.6 词向量
我们将为每个选择的单词构建一个密集的向量,使其与出现在类似上下文中的单词的向量相似,例如可以将单词banking表示为向量 [ 0.286 , 0.792 , − 0.177 , − 0.107 , 0.109 , − 0.543 , 0.349 , 0.271 ] [0.286,0.792,-0.177,-0.107,0.109,-0.543,0.349,0.271] [0.286,0.792,−0.177,−0.107,0.109,−0.543,0.349,0.271]这是一个密集向量,其中所有数字都是非零的。这个例子中词向量的维度为九维,但是在实际应用中,需要使用更大的维度,一般情况下使用的维度可能是50维,300维,也可能是1000维,2000维,4000维。
提示:词向量是一种称为词嵌入或词表示的形式,它们是一种分布式表示;
2.7 词的意义作为一个神经词向量——可视化
每个单词都有一个词向量,那么就会有一个向量空间,可以在其中放置所有的单词。这个向量空间整体上不是可读的。但我们将其中一些维度进行可视化操作时,我们可以看到单词之间的一些关系。
3、Word2vec:Overview
Word2vec(Mikolov2013年提出)是一个学习词向量的框架;
想法:
- 我们有大量的文本语料库;
- 固定词汇表中的每个单词都由一个向量表示;
- 遍历文本中的每个位置t,其中有一个中心词c和上下文(“外部”)单词o;
- 使用向量c和o的相似度来计算给定c的o的概率(反之亦然);
- 不断调整单词vector来最大化这个概率;
3.1 计算 P ( w t + j ∣ w t ) P(w_{t+j}|w_{t}) P(wt+j∣wt)的例子窗口和过程
上图中的公式
P
(
u
p
r
o
b
l
e
m
s
∣
v
i
n
t
o
)
P(u_{problems}|v_{into})
P(uproblems∣vinto)是公式
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
,
∣
t
h
e
t
a
)
P(problems|into;u_{problems},v_{into},|theta)
P(problems∣into;uproblems,vinto,∣theta)的缩写
3.2 目标函数
对于每个位置 t = 1 , . . . , T t=1,...,T t=1,...,T,给定中心词 w j w_j wj,预测固定大小m的窗口内的上下文单词。 似 然 函 数 = L ( θ ) = ∏ t = 1 T ∏ − m ≤ j ≤ m ( j ≠ 0 ) P ( w t + j ∣ w t ; θ ) 似然函数=L(\theta)=\prod _{t=1}^T\prod_{-m\leq j\leq m(j\neq 0)}P(w_{t+j}|w_t;\theta) 似然函数=L(θ)=t=1∏T−m≤j≤m(j=0)∏P(wt+j∣wt;θ) θ \theta θ是所有要优化的参数,目标函数 J ( θ ) J(\theta) 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\leq j \leq m(j\neq 0)}log P(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
w,我们将使用两个向量进行表示:
- v w v_w vw表示当 w w w为中心词时的向量表示;
- u w u_w uw表示当 w w w为上下文词时的向量表示;
- 对于一个中心词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^Tv_c)}{\sum _{w\in V}exp(u_w^Tv_c)} P(o∣c)=∑w∈Vexp(uwTvc)exp(uoTvc) 在公式中, e x p ( ) exp() exp()是取幂操作,取幂可以使任何数为正。 u o T v c u_o^Tv_c uoTvc是点积操作,表示向量o和向量c的相似性, u T v = u . v = ∑ i = 1 n u i v i u^Tv=u.v=\sum _{i=1}^nu_iv_i uTv=u.v=∑i=1nuivi,点积值越大表示两个向量之间越相似。 ∑ w ∈ V e x p ( u w T v c ) \sum _{w\in V}exp(u_w^Tv_c) ∑w∈Vexp(uwTvc)是对整个词汇进行归一化,给出概率分布。
对于softmax,有: s o f t m a x ( x i ) = e x p ( x i ) ∑ j = 1 n e x p ( x j ) = p i softmax(x_i)=\frac{exp(x_i)}{\sum _{j=1}^nexp(x_j)}=p_i softmax(xi)=∑j=1nexp(xj)exp(xi)=pi
- softmax函数将任意值
x
i
x_i
xi映射到概率分布
p
i
p_i
pi;
- “max”:放大了最大值 x i x_i xi的概率;
- “soft”:仍然给较小的 x i x_i xi赋值一些概率;
- 频繁用于深度学习;
3.3 通过优化参数来训练模型
- 为了训练模型,我们调整参数以使损失最小化;
- 对于两个参数上的简单凸函数;
- 等高线表示目标函数的级别;
3.4 训练模型:计算所有向量梯度
- 回忆: θ \theta θ在一个长向量中代表模型的所有参数;
- 在我们的例子中是d维向量和v 个单词;
- 记住:每个单词有两个向量,中心词向量和背景词向量;
- 我们沿着梯度下降来优化参数;