CS224N笔记——第二讲——word vector representations,word2vec

来源:互联网 发布:淘宝打造爆款团队 编辑:程序博客网 时间:2024/06/06 12:53

Natural Language Processing with Deep Learning课程代号CS224N,是斯坦福大学的有关自然语言处理的课程,并且是世界上有关神经网络与自然语言处理方面优秀的课程。找遍了网络也没有找到有中文翻译的,所以我这个英语渣只能强行听英文课程。因此做一些笔记方便以后复习。记录得也比较混乱。

第一讲是一个总体介绍,就没有写了。


以下内容来自课程视频以及PPT


在处理自然语言的过程中,需要将语言进行表示,无论是什么学派,一般nlp研究者都将单词作为最小的单位。使用one-hot形式,语料越多,维度越大,直到非常大,非常巨大…并且两个one-hot形式是正交的,无法表示有关两个单词的相似度。

因此需要找到其他的办法来表示单词。
其中一个很有用的思想是——可以通过一个单词的上下文了解这个单词的意思,或者有一些其他的不同说法,但是思想都是统一的,就是在表示一个单词的时候,你可以根据其上下文得到很多有用的信息。如下图:

我们按照向量的形式来定义单词的意思。

每个单词一个dense vector, 为了便于预测其上下文出现的其他单词。这些单词也是用向量表示。形成一种递归。


word2vec

定义一个从某一个单词来预测上下文的模型,也需要有一个loss function,优化loss function来更好地预测上下文。

(注:-t表示的是除了t的内容,也就是t的上下文。)

如果loss为0了那就是完美的预测,可是我们无法做到,因此我们的目标是在一个大的语料库中不同位置得到训练实例,改变单词的表示来尽可能的最小化loss function。

word2vec的主要思想

通过上下文预测单词或者是通过单词预测上下文。

有两种算法:
Skip-grams 单词预测上下文
CBOW 上下文预测单词

两种(稍微有效率些的)训练方法:
Hierarchical Softmax
Negative sampling

以上四个内容,在课程中,将会讲到的只是Skip-grams。


这是Skip-grams的模型。我们要做的就是确定一个中心词,在图中是bank,来预测某个window size中的围绕中心词的上下文。模型定义了给定中心词后其上下文中出现某个单词的概率。我们选择单词的向量表示来最大化分布概率。也就是图中的P(wt - 2 | wt)这样的概率。

需要了解的是这里只有一个概率分布,而不是每个单词有一个。对上下文的单词只有一个作为output的概率分布。

word2vec的细节

目标函数

对于每一个t,也就是对于每一个中心词语,都要预测一个window size m的上下文。这就是上图中第一个式子的含义。也就是模型的目标,这个式子作为目标函数。我们要最大化上下文的概率也就是最大化这个目标函数。
将这个式子取log,因为这样会使所有的乘法变成加法,让计算变得简单一些。不是计算全部语料库的概率,而是可以对每一个位置都求平均,从而在某种意义上达到对每一个词的标准化。最后取负,从而可以最小化这个式子。如上图中第二个式子所示。我们得到了一个negative log likelihood作为可以用来最小化的目标函数。

而P( | )又是什么呢,使用softmax来定义,softmax的公式不再多说,见下图:

vc和uo分别是中心词和输出词的向量。

两个向量的点积,可以代表两者之间的相似度,点积越大越相似。而softmax函数可以得到数字到概率分布的映射,也就是说可以讲数字转化为概率。因此这里使用softmax将一堆相似度转化为概率。

(这是一个学生问的问题:)
answer:
你可能会认为一个单词应该只有一个向量表示,如果你想这么做你就可以这么做,但是如果一个单词有两个向量可以相当大地简化计算,其中一个表示单词,另一个表示单词的上下文。不仅简化了计算,也会在优化的过程中将两个向量分离,而不会存在联系。


Skip-gram模型总体叙述

下图是Skip-gram模型的样子。

从左向右看,先是一个中心单词的one-hot形式。W是中心词语representation的矩阵。(上方藕荷色文字已经标注了向量和矩阵的shape)。这两个相乘,得到我们所需要的那个中心词语的vector表示。中间的三个红色的框代表的是存储上下文单词的representation的矩阵。(这里作为例子只画出三个)中心词语的vector表示上下文单词的representation的矩阵相乘得到每个上下文备选词语与已经选定的中心词语的相似度,就是上文中提到的vc·uo。最相似的一个或几个我们就认为它们是中心词语的上下文。使用softmax得到的概率与真实上下文单词的one-hot形式作比较。还可以看出目前的预测并不准确。
因此我们需要进行对模型进行训练,让模型的预测变得尽可能准确。


训练Skip-gram模型

将模型中所有的参数放到向量θ中。我们这里是容量为V的语料库 * 一个单词的d维。并且如前文所说,一个单词有两个向量表示(一个是上下文表示,一个是中心词表示)。具体见下图:

然后,优化:

就是梯度下降,对目标函数求偏导,如下图所示:
将原式变形成图中①②两个部分,然后分别求偏导,具体见图中。

两部分分别求完,然后再合到一起:

以上步骤只是对中心单词求偏导,我们也需要对其他的每一个上下文单词(window中的)做同样的计算。

最后,更新参数:

done

原创粉丝点击