CS224N笔记 Lecture1: Introduction and Word Vectors

  • Post author:
  • Post category:其他




0 目录

  1. 教学目标
  2. 人类语言和词义(word meaning)
  3. Word2vec介绍
  4. Word2vec目标函数梯度
  5. 优化方法



1 教学目标

  1. 了解有效的现代深度学习方法

    首先学习基础知识,然后学习一些NLP领域中重要的方法:RNN,以及attention机制等等

  2. 对人类语言的全局把握以及理解和形成人类语言的一些困难

  3. 理解并掌握怎样去构造一个系统(PyTorch)来解决NLP领域中的一些主要的问题:

    • Word Meaning
    • Dependency Parsing
    • Machine Translation
    • Question Answering



2 人类语言和词义



2.1 一张XKCD漫画

在这里插入图片描述

  • 语言带有不确定性
  • 每一句话的措辞、拼写、语气以及说话的时间都带有无数的信号和上下文信息,并且每一个听众都以自己的方式去理解这些信号



2.2 人类语言

  • 人类和大猩猩最大的区别就是人类拥有

    语言系统
  • 人类大概在离开非洲时(约10万年前)拥有了语言
  • 语言系统让人类能够更加有效的进行团队合作,这也是人类能够在自然界立于不败之地的原因
  • 写作(writing)也是一项具有开创性的发明(5000年前)
  • 写作让知识得以传承下去
  • 语言系统能够起作用的原因是因为人类具有相似的知识储备。当我们用自然语言对一个场景进行描述时,听者在脑海中可以构建出相似的视觉场景。



2.3 我们怎么样表示一个词的意思(meaning)?

meaning的定义(韦伯斯特词典):

  • 用单词、词组表示概念
  • 人们运用单词、符号表示自己的观点
  • 通过写作作品、艺术来表达观点

signifier(symbol)⇔signified(idea or thing)



2.4 我们怎么在计算机上表示词义



2.4.1 WordNet

一个包含同义词(synonym)集合和上义词(hypernyms)的词典。

【上位词】:用 “is a”来表示关系的词集列表

在这里插入图片描述

Wordnet存在的问题:

  • 作为一个较好的资料,但忽略了细微的一些差别:例如词典中‘proficient’与‘good’认为是同义词,但是这只在某些文本上下文中成立。
  • 忽略了一些单词的新的含义(无法随时更新)
  • 比较主观(缺少客观性)
  • 需要人类劳动力来不断地创建和更新
  • 不能计算单词之间的相似度



2.4.2 Representing words as discrete symbols

传统NLP中,我们将单词看作是离散的表示,通过one-hot vector来表示:

在这里插入图片描述

One-hot表示存在的问题:

  • 如果词汇量太多,向量的维度会变得很大。
  • 由于向量是正交的,因此没法表示他们之间啊的相似度。



2.4.3 Representing words by their context

Distributional semantics:一个单词的含义通常由在它附近经常出现的单词给出的。

对于文本中的一个单词w,它的上下文就是出现在它附近的一组单词(在一个划定好size的窗口下)

通过许多包含w的文本中的上下文来构建w的含义表示:

在这里插入图片描述



3 Word2vec介绍

Word2vec是一种学习词向量的框架。



3.1主要思想

  • 包含大量的文本语料
  • 固定词表中的每一个单词由一个词向量表示
  • 文本中的每个单词位置

    t

    ,有一个中心词

    c

    ,和它的上下文

    o

    (除了

    c

    的外部单词)。
  • 通过

    c



    o

    的词向量相似性来计算 P(o|c)
  • 不断的调整词向量,最大化概率



3.2 计算



P

(

w

t

+

j

w

t

)

P(w_{t+j}|w_t)






P


(



w











t


+


j























w










t


















)





的示例

在这里插入图片描述

在这里插入图片描述



3.3 Word2vec的目标函数

对于每个位置 t = 1,…,T,固定窗口大小m,给定中心词



w

j

w_j







w










j





















:





l

i

k

e

l

i

h

o

o

d

=

L

(

θ

)

=

t

=

1

T

m

j

m

     

j

0

p

(

w

t

+

j

w

t

;

θ

)

likelihood=L(\theta)=\prod_{t=1}^{T}\prod_{-m \le j \le m\ \ \ \ \ j\ne0}^{}p(w_{t+j}|w_t;\theta)






l


i


k


e


l


i


h


o


o


d




=








L


(


θ


)




=

















t


=


1



















T
































m





j





m






















j





































=



0





































p


(



w











t


+


j























w










t


















;




θ


)








  • θ

    \theta






    θ





    是需要优化的参数





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 1TlogL(\theta)=-\frac1T\sum_{t=1}^T\sum_{-m\le j\le m \ \ \ \ \ j\ne 0}logP(w_{t+j}|w_t;\theta)






J





θ







=





















T












1



















l


o


g


L


(


θ


)




=





















T












1






























t


=


1


















T































m





j





m






















j





































=



0





























l


o


g


P


(



w











t


+


j























w










t


















;




θ


)








  • J

    (

    θ

    )

    J(\theta)






    J


    (


    θ


    )





    为损失函数(这里是平均负对数似然);

  • 负号将最大化损失函数转化为最小化损失函数;
  • log函数方便将乘法转化为求和(优化处理)



3.4 如何计算



P

(

w

t

+

j

w

t

;

θ

)

P(w_{t+j}|w_t;\theta)






P


(



w











t


+


j























w










t


















;




θ


)





对于每个单词 w 我们使用两个向量



v

w

v_w







v










w

























u

w

u_w







u










w























  • v

    w

    v_w







    v










    w





















    表示当 w 是中心词时




  • u

    w

    u_w







    u










    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\epsilon V}exp(u_w^Tv_c)}






    P


    (


    o





    c


    )




    =
































    w


    ϵ


    V





















    e


    x


    p


    (



    u










    w








    T



















    v










    c


















    )














    e


    x


    p


    (



    u










    o








    T



















    v










    c


















    )























在上式中:

  • 分子取幂函数使得始终可以为正
  • 向量



    u

    o

    u_o







    u










    o





















    和向量



    v

    c

    v_c







    v










    c





















    点乘,点乘结果越大,向量之间越相似




  • u

    T

    v

    =

    u

    v

    =

    i

    =

    1

    n

    u

    i

    v

    i

    u^Tv=u·v=\sum_{i=1}^nu_iv_i







    u










    T









    v




    =








    u







    v




    =





















    i


    =


    1









    n





















    u










    i



















    v










    i




















  • 对整个词表标准化,给出概率分布
  • softmax函数进行归一化(深度学习中常用):



    R

    n

    R

    n

    \Bbb{R^n}\to \Bbb{R^n}








    R










    n























    R










    n

















    s

    o

    f

    t

    m

    a

    x

    x

    =

    e

    x

    p

    (

    x

    i

    )

    j

    =

    1

    n

    e

    x

    p

    (

    x

    j

    )

    =

    p

    i

    softmax(x)= \frac {exp(x_i)}{\sum_{j=1}^nexp(x_j)}=p_i






    s


    o


    f


    t


    m


    a


    x





    x







    =
































    j


    =


    1









    n




















    e


    x


    p


    (



    x










    j


















    )














    e


    x


    p


    (



    x










    i


















    )






















    =









    p










    i






















    注:用于将任意值



    x

    i

    x_i







    x










    i





















    映射到概率分布



    p

    i

    p_i







    p










    i






















4 Word2vec目标函数梯度



4.1 训练模型

通过调整参数的方式来最小化损失函数

在这里插入图片描述



4.1.1 训练模型的方法:计算所有的向量梯度

由于整个模型里只有一个参数



θ

\theta






θ





,所以我们只要优化这一个参数就行。如一个 d 维,词典大小为 V 的模型所包含的参数(每个单词有两个向量):

在这里插入图片描述

我们可以通过梯度下降的方式优化参数,梯度下降会用到链式法则。

  • 迭代计算每个中心词向量和上下文词向量随着滑动窗口移动的梯度
  • 依次迭代更新窗口中所有的参数


示例:


在这里插入图片描述



5 优化方法



5.1 梯度下降法

最小化损失函数



J

(

θ

)

J(\theta)






J


(


θ


)




对于当前



θ

\theta






θ





,计算



J

(

θ

)

J(\theta)






J


(


θ


)





的梯度

然后小步重复朝着负梯度方向更新方程里的参数



α

=

(

s

t

e

p

 

s

i

z

e

)

 

o

r

 

(

l

e

a

r

n

i

n

g

 

r

a

t

e

)

\alpha=(step\ size)\ or\ (learning\ rate)






α




=








(


s


t


e


p




s


i


z


e


)




o


r




(


l


e


a


r


n


i


n


g




r


a


t


e


)










θ

n

e

w

=

θ

o

l

d

α

θ

J

(

θ

)

\theta^{new}=\theta^{old}-\alpha \nabla_\theta J(\theta)







θ











n


e


w












=









θ











o


l


d





















α














θ


















J


(


θ


)





更新唯一的参数



θ

\theta






θ





:




θ

j

n

e

w

=

θ

j

o

l

d

α

α

α

 

θ

j

o

l

d

J

(

θ

)

\theta_j^{new}=\theta_j^{old}-\alpha \frac \alpha{\alpha\ \theta_j^{old}}J(\theta)







θ










j









n


e


w





















=









θ










j









o


l


d






























α













α





θ










j









o


l


d






























α



















J


(


θ


)





在这里插入图片描述

while True:
	theta_grad = evaluate_gradient(J,corpus,theta)
  theta = theta - alpha * theta_grad



5.2 随机梯度下降SGD

由于



J

(

θ

)

J(\theta)






J


(


θ


)





是在语料文本中所有窗口的方程

当语料很大的时候,计算梯度会消耗巨大

解决办法:SGD

不断sample窗口,不断更新

while True:
  window = sample_window(corpus)
  theta_grad = evaluate_gradient(J,window,theta)
  theta = tehta - alpha * theta_grad



版权声明:本文为whatiscode原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。