CS224n Lecture 2 词向量表示:word2vec

1. Word meaning

1.1 one-hot表示法

比如一个有4个词的语料:

I like deep learning,如果使用one-hot编码那么每一个词对应一个1,其他词则对应0,

I :[1 0 0 0]
like :[0 1 0 0]
deep :[0 0 1 0]
learning:[0 0 0 1]

但是使用这样的表大方是有个问题,就是每当我的语料库更改的话,那么同一个词的编码方式就会发生变化,比如我的语料库变成了:I like deep learning very much,那么这里面的词的编码就变成:

I :[1 0 0 0 0 0]
enjoy :[0 1 0 0 0 0]
deep :[0 0 1 0 0 0]
learning:[0 0 0 1 0 0]
very :[0 0 0 0 1 0]
much :[0 0 0 0 0 1]

可以看到,只是语料库发生了变化,同一个词I,deep,learning三个词都发生了变化,而且可以发现随着语料库的增加,每一个句中的词的长度都在增加,并且1在整个句子中越来越稀疏,比如有个200个词的语料库只有一位是1,其他199位都是0,再比如2000个词的语料库呢?并且 like 和 enjoy其实表达的是差不多的意思,但是使用这种方法就完全体现不出来,所以总结一下使用one-hot有一下几个缺点:

  • 同一个随着语料库发生改变表达也会不同

  • 不能表示词与词之间的相似性

  • 随着语料库的增加one-hot表式会变得越来越稀疏

1.2 分布式表示

基于上面one-hot无法表示词与词之间的相似性,所以1957年语言学家J.R.Firth提出:

这句话是说:你要是想知道一个单词的意思,可以通过这个单词周围的词(上下文)看出来。所以应运而生了一种新的表示方法:distributed representation(分布式表示),其实这个概念我们中国学生最了解不过了,还记不记得大家上学时做过一种英语题叫做完形填空,你做题时是不是英语老师会跟你说这个空里面的词你就看上下文就能十有八九猜出来。这里有的小伙伴可能会疑惑,为什么叫分布式表示呢,我的理解是一个词的意思不单单在于它本身还取决于他周围的词,也就是说词的信息有一部分存在于上下文中,信息被分散了。比如下面这个例子:

1.3 分布式词表示的实现

跟one-hot相同的是,分布式词表示同样使用一个向量来表示,但与one-hot使用词在句子中的位置来标识不同,分布式是是使用一个稠密的向量来表示一个词,这个向量一般在300-500维左右,有的会超过1000维,但对于超大型的预料来说这已经相对于one-hot是降维的了。


那么,句中的所有词都使用这样的稠密向量表示后,我们就可以用一些手段来优化这些向量,使得剧中的某些词的向量能更准确的代表词的意思。而这种方法就是接下来要提到的word2vec model(Mikolov et al. 2013)

2. Word2vec introduction

2.1 word2vec的主要思路

2.2 word2vec有两个基本模型

  • Skip-gram(SG)
    给出中心词预测上下文 predict context words given target (position independent)
  • Continuous Bags of Words(CBOW)
    给出上下文预测中心词 predict target word from bag-of-words context

2.3 两种高效的训练模型的方式

  • Hierarchical softmax(层次softmax)
  • Negative sampling(负例采样)
    虽然上述两种方式对于word2vec模型的训练很高效,但是在本节课中只针对Skip-gram模型介绍一种低效的训练方式,叫做Naïve softmax

2.4 Skip-gram

skip-gram的主题思想是通过一个中心词预测该词周围的上下文词,如图:


从图中看到,该中心词是然后预测的词是 、、、 四个词,也就是说定义了一个分别向前向后的窗口,用数据学表达式写出就是:

公式的意义是:最大化所有中心词预测它周围上下文词正确的概率,这个公式作为即代价函数。
我再举个例子来说明下这个数学公式,借用漫威中Spider Man的一句话:


这里我就写了和两个,但是聪明的你应该知道这里的应该要遍历文本中所有的词来作为中心词的。这里解释清楚了我们继续,对取对数似然的相反数为:

我们的目标是最大化即,那么对于就变成了。再反观公式,这个该如何表示呢?答案是使用函数替换:

这个公式里面的和分别代表的是中心词的向量和当前预测的上下文的向量,这个也说明了:在一句话中一个词有两个向量,一个是中心词向量,一个是上下文向量,比如我刚才举的例子,当作为中心词预测时,会有个上下文向量,当作为中心词预测其他词时,也会有个中心词向量。

2.5 Skip-gram详细过程

下图是课程中老教授给出的一幅skip-gram的介绍图,从图中我们可以看出一点端倪:


这里有几个符号需要说一下:

:句子中某个单词的向量
:语料库中(非一个句子)所有单词对应的中心词向量矩阵(这个矩阵就是我们的优化目标,初始化一般是随机小数)
:中心词的向量
:语料库中(非一个句子)所有单词的上下文向量矩阵(这个矩阵就是我们的优化目标,初始化一般是随机小数)
:中心词向量与上下文向量的内积

可以看到在最终的结果中和都预测错了,所以我们会不断优化使得最终所有的词尽可能的都预测正确。如果这个图看着不舒服的话,这里附上标准的图片:

3. Skip-gram模型训练:梯度计算

在2.5中提到过和都是我们的优化目标矩阵,有的时候会把它们统称为然后放在一起:

明白了这点我们就开始使用梯度下降对进行求导计算了:




你可能感兴趣的:(CS224n Lecture 2 词向量表示:word2vec)