CS224n笔记二之word2vec与softmax推导

版权声明:本文为博主原创文章,未经许可,请勿转载 https://blog.csdn.net/liweibin1994/article/details/78154336

最近刚刚开始看斯坦福CS224n系列视频,主要讲的是自然语言处理与深度学习的结合。笔者怕自己看完视频就忘了,因此想记录下学习过程中的笔记。当然笔者发现了网上已经有人也发了一些CS224n的学习笔记。笔者主要学习了视频和参考了这篇笔记,再加上一些自己觉得难懂的地方的理解。笔者也是刚刚入门,水平有限,如有错漏,还望指出。

如何在电脑中表示一个词的意义?

用电脑表示一个词的问题

|500*0|center

词向量的主要思路

  • 通过单词和单词的上下文预测彼此。
  • 两个算法:
    • Skip-gram:通过目标单词来预测它的上下文
    • Continuous Bag of Words(CBOW):通过上下文预测目标单词
  • 两种训练方法:
    • Hierarchical softmax
    • Negative sampling

Skip-gram模型

|500*0|center

  • 上图的意思就是在已知banking的情况下,预测turning,into,cnises,as的概率,即: P ( w t + j | w t ) , j = 2 , 1 , 1 , 2 。所以我们的目标函数就是:
    J ( θ ) = t = 1 T m j m ,   j 0 P ( w t + j | w t ; θ )
  • 我们要的是让概率最大化,也就是最大化这个目标函数,但是这里是连乘的形式,一般我们会取负对数,让乘法变成加法,让最大化变最小化。即:
    J ( θ ) = 1 T t = 1 T m j m , j 0 l o g   P ( w t + j | w t ; θ )
P ( w t + j | w t ; θ ) 这个条件概率要怎么表示。
  • 预测某个上下文条件概率 P ( w t + j | w t ; θ ) 可以由softmax来计算:

    P ( o | c ) = e x p ( u o T v c ) w = 1 V e x p ( u w T v c )

  • 首先,公式中的u和v都是词向量,所以 u T v 是向量内积,如果两个词向量比较接近,他们的内积会比较大。V是整个词典词的个数,所以其实分母部分就是所有词的词向量与目标词向量(即上面图中的示例banking的词向量)的内积之和。而使用指数是为了将实数(有负有正)映射成整数,然后分母部分是为了归一化变成概率。

skip-gram

这里写图片描述

  • 上图很清晰地展示了skip-gram模型的整个流程。
  • 最左边是当前词的one-hot向量( w t )。
  • 第二个矩阵W(图中W矩阵是dxV,实际应该是Vxd,下同),矩阵的每一列其实就是一个词的分布式词向量。V是词典的词的个数,所以这个矩阵包含了词库中每个词的词向量。
  • w t 的one-hot向量与W相乘得到 v c ,也就是相当于从W矩阵中提取了词 w t 的词向量。
  • W矩阵包含了所有词的词向量,所以第三步是 v c 与W矩阵的转置相乘,其实就是让 v c 与词库中的所有词的词向量作内积。
  • 得到内积之后,利用softmax将内积的结果映射成概率,就可以得到在 v c 的条件下,上下文中出现最大概率的词是哪一个,然后和标签(就是上图中最后一行)对比,接下来可以得到loss函数。然后利用梯度下降来更新W矩阵,让它的结果更接近标签的结果。
  • 官方笔记有非手写版的图:
    这里写图片描述
  • 这个图的W矩阵的行与列才是对的。
训练模型:计算参数向量的梯度
  • 我们的目标是训练出矩阵W,所以我们把所有参数写进向量 θ :
    这里写图片描述
  • 其中,每一行都是一个词向量, v 是当词作为center word的时候的词向量, u 是当词作为上下文的时候的词向量,所以有2V个。
  • 梯度下降的具体推导如下:
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    导数的后一项刚好就是均值(期望)。p为概率,乘以u。然后加和,不就是均值的定义吗?

  • 计算出了梯度之后,就可以更新参数 θ 了。即:

    θ n e w = θ o l d α θ o l d J ( θ )

猜你喜欢

转载自blog.csdn.net/liweibin1994/article/details/78154336