cs224n词向量表示word2vec

cs224n词向量表示word2vec

Word2vec

word2vec模型的核心是构建一个简单、可扩展的快速训练模型。利用语义理论来预测每个单词和它的上下文的词汇
两个算法:
Skip-grams (SG):预测上下文
Continuous Bag of Words (CBOW):预测目标单词
两种稍微高效一些的训练方法:
Hierarchical softmax
Negative sampling
但在这门课里,只会讲Naïve softmax。

Skip-gram prediction

已知当前词语,预测上下文。m为窗口半径为超参数, w t w_t wt表示第t个中心词
我们要最大化当前中心词的所有上下文词的概率,θ为模型参数
J ′ ( θ ) = ∏ t = 1 T ∏ − m ≤ j ≤ m   j ≠ 0 p ( w t + j ∣ w t ; θ ) J'(\theta)=\prod_{t=1}^T\prod_{-m\leq j\leq m \:\\{j\neq0}}p(w_{t+j}|w_t;\theta) J(θ)=t=1Tmjmj̸=0p(wt+jwt;θ)
对数似然函数为:
J ( θ ) = − 1 T ∑ t = 1 T ∑ − m ≤ j ≤ m l o g p ( w t + j ∣ w t ) J(\theta)=-\frac1T\sum_{t=1}^T\sum_{-m \leq j \leq m} logp(w_{t+j}|w_t) J(θ)=T1t=1Tmjmlogp(wt+jwt)
在实际操作时,要对这个最原始的目标函数进行一下改造。乘法显然是不太好处理的,一个通用的trick是将乘法转成求和,利用log操作。处理最小化要比处理最大化更受欢迎,原始目标函数是进行最大化,取个负数就转成了最小化。因此,将原始目标函数进行对数似然的相反数操作即可得到较易处理的损失函数形式。对于目标函数里的p,用softmax函数得到。
softmax函数本质上是将一个向量转换成另一个向量,向量的shape不变,只是将向量中的各个值进行"规范化"处理,将一个任意值转成(0,1)之间的一个浮点数,在NN里这个值可近似认为是概率。softmax的计算函数如下:
p ( o ∣ c ) = e x p ( u 0 T v c ) ∑ w = 1 v e x p ( u w T v c ) p(o|c)=\frac{exp(u_0^Tv_c)}{\sum_{w=1}^vexp(u_w^Tv_c)} p(oc)=w=1vexp(uwTvc)exp(u0Tvc)
这里涉及到的u和v分别对应词o(context词)的向量和词c(中心词)的向量,来自于两个矩阵U和V,二者均为这个模型的参数,是我们要通过损失函数反复迭代更新的。
在这里插入图片描述
Skipgram最左侧的 w t w_t wt为中心词的one hot编码,然后他右边的矩阵为每个中心词的数值向量表示,将 w t 与 W 相 乘 w_t与W相乘 wtW可以提取到中心词t的数值向量,然后右边我们有向量用于储存上下文词汇的表示,我们把提取出的向量与矩阵相乘,我们得到了这些内积,然后通过softmax就能产生概率分布。

gradient

我们可以用gradient来最小化负对数似然函数
∂ ∂ v c l o g e x p ( u 0 T v c ) ∑ w = 1 V e x p ( u w T v c ) = ∂ ∂ v c l o g e x p ( u 0 T v c ) − l o g ∑ w = 1 V e x p ( u w T v c ) \frac{\partial}{\partial v_c}log\frac{exp(u_0^Tv_c)}{\sum_{w=1}^V exp(u_w^Tv_c)} \\=\frac{\partial}{\partial v_c}log{exp(u_0^Tv_c)}-log\sum_{w=1}^Vexp(u_w^Tv_c) vclogw=1Vexp(uwTvc)exp(u0Tvc)=vclogexp(u0Tvc)logw=1Vexp(uwTvc)
对于前半部分求偏导 = u 0 =u_0 =u0
对于后半部分求偏导chain rule
∂ ∂ v c l o g ∑ w = 1 V e x p ( u w T v c ) = 1 ∑ w = 1 V e x p ( u w T v c ) ∗ ∂ ∂ v c ∑ x = 1 V e x p ( u x T v c ) = 1 ∑ w = 1 V e x p ( u w T v c ) ∗ ∑ x = 1 V e x p ( u x T v c ) ∗ u x \frac{\partial}{\partial v_c}log\sum_{w=1}^Vexp(u_w^Tv_c) \\=\frac{1}{\sum_{w=1}^Vexp(u_w^Tv_c)}*\frac{\partial}{\partial v_c}\sum_{x=1}^Vexp(u_x^Tv_c) \\=\frac{1}{\sum_{w=1}^Vexp(u_w^Tv_c)}*\sum_{x=1}^Vexp(u_x^Tv_c)*u_x vclogw=1Vexp(uwTvc)=w=1Vexp(uwTvc)1vcx=1Vexp(uxTvc)=w=1Vexp(uwTvc)1x=1Vexp(uxTvc)ux
可以得到对数似然函数的偏导为:
u 0 − ∑ x = 1 V e x p ( u x T v c ) ∗ u x ∑ w = 1 V e x p ( u w T v c ) = u 0 − ∑ x = 1 V p ( x ∣ c ) u x u_0-\frac{\sum_{x=1}^Vexp(u_x^Tv_c)*u_x}{\sum_{w=1}^Vexp(u_w^Tv_c)} \\=u_0-\sum_{x=1}^Vp(x|c)u_x u0w=1Vexp(uwTvc)x=1Vexp(uxTvc)ux=u0x=1Vp(xc)ux
u0为实际输出的上下文词汇,后面的部分为对于每一个词的期望。接下来我们要做的就是调整参数使其最小化

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值