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提出:
“You \ shall \ know \ a \ word \ by \ the \ company \ it \ keeps"
这句话是说:你要是想知道一个单词的意思,可以通过这个单词周围的词(上下文)看出来。所以应运而生了一种新的表示方法: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的主要思路

predict \ between \ every \ word \ and \ its \ context \ words!

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的主题思想是通过一个中心词预测该词周围的上下文词,如图:


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

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

I \ believe \ there's \ a \ hero \ in \ all \ of \ us

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

我们的目标是最大化loss functionmaxJ'(\theta),那么对于J(\theta)就变成了minJ(\theta)。再反观J(\theta)公式,这个P(w_{{t+j}}|w_{t})该如何表示呢?答案是使用softmax函数替换:

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

2.5 Skip-gram详细过程

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


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

w_{t}:句子中某个单词的one-hot向量
W:语料库中(非一个句子)所有单词对应的中心词向量矩阵(这个矩阵就是我们的优化目标,初始化一般是随机小数)
v_{c}:中心词的向量
W':语料库中(非一个句子)所有单词的上下文向量矩阵(这个矩阵就是我们的优化目标,初始化一般是随机小数)
u_{x}^{T}v_{c}:中心词向量与上下文向量的内积

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

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

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

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




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • BERT发展史(三)全方位多角度理解Word2Vec 建议先阅读之前两篇文章: BERT发展史(一)从词嵌入讲起 ...
    LITD阅读 8,820评论 0 13
  • 自然语言处理中文本数值化表方法 词向量是什么,自然语言理解的问题要转化为机器学习的问题,第一步肯定是要找一种方法把...
    mugtmag阅读 10,603评论 4 10
  • 目前词向量主要用的技术 word2vec fasttext glove 1 one-host编码 one-hot编...
    georgeguo阅读 6,948评论 0 2
  • 1. 导入   这是语言表示系列的第1篇,主要讲述了分布式表示里的Word2vec方法。该系列目前暂定有4篇语言的...
    brucep3阅读 8,461评论 0 5
  • 自从关注了熹文的公众号,几乎定期或者不定期地看了她写的文章,才觉得她的文字对我来说太有力量了。她能把好多现实与难以...
    吴晓亮爱分享阅读 1,508评论 0 0