Spark推荐系列之Word2vec算法介绍实现和应用说明

Posted 搜索与推荐Wiki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark推荐系列之Word2vec算法介绍实现和应用说明相关的知识,希望对你有一定的参考价值。

Spark推荐实战系列目前已经更新:

更多精彩内容,请持续关注「搜索与推荐Wiki」!

1. 背景

word2vec 是Google 2013年提出的用于计算词向量的工具,在论文Efficient Estimation of Word Representations in Vector Space中,作者提出了Word2vec计算工具,并通过对比NNLM、RNNLM语言模型验证了word2vec的有效性。

word2vec工具中包含两种模型:CBOW和skip-gram。论文中介绍的比较简单,如下图所示,CBOW是通过上下文的词预测中心词,Skip-gram则是通过输入词预测上下文的词。

Word2vec 开启了Embedding的相关工作,自从embedding开始大规模走进推荐系统中,下面我们就来看一下Word2vec算法的原理、Spark实现和应用说明。

2. 算法原理

Word2vec包含了两种模型,分别是CBOW和Skip-gram,CBOW又分为:

  • One-word context
  • multi-word context

其中单词的总个数为 V V V,隐藏层的神经元个数为 N N N,输入层到隐藏层的权重矩阵为 W V ∗ N W_V*N WVN,隐藏层到输出层的权重矩阵为 W N ∗ V ′ W'_N*V WNV

此时的 h h h 表达式为:
h = 1 C W T ( x 1 + x 2 + . . . . + x C ) = 1 C ( v w 1 + v w 2 + . . . + v w C ) T h = \\frac1C W^T (x_1 + x_2 + .... + x_C) \\\\ = \\frac1C (v_w_1 + v_w_2+ ... + v_w_C)^T h=C1WT(x1+x2+....+xC)=C1(vw1+vw2+...+vwC)T
其中 C C C 表示上下文单词的个数, w 1 , w 2 , . . . , w C w_1, w_2, ..., w_C w1,w2,...,wC 表示上下文单词, v w v_w vw 表示单词的输入向量(注意和输入层 x x x区别)。

目标函数为:
E = − l o g   p ( w O ∣ w I 1 , w I 2 , . . . , w I C ) = − u j ∗ l o g ∑ j ′ = 1 V e x p ( u j ′ ) = − ( v w O ′ ) T ∗ h + l o g ∑ j ′ = 1 V e x p ( ( v w j ′ ) T ∗ h ) E = -log \\, p(w_O | w_I_1, w_I_2, ..., w_I_C) \\\\ = - u_j * log \\sum_j'=1^V exp(u_j') \\\\ = -(v'_w_O)^T * h + log \\sum_j'=1^V exp((v'_w_j)^T * h) E=logp(wOwI1,wI2,...,wIC)=ujlogj=1Vexp(uj)=(vwO)Th+logj=1Vexp((vwj)Th)

Skip-gram 对应的图如下:

从输入层到隐藏层:
h = W k , . T : = v w I T h =W^T_k,. := v^T_w_I h=Wk,.T:=vwIT
从隐藏层到输出层:
p ( w c , j = w O , c ∣ w I ) = y c , j = e x p ( u c , j ) ∑ j ′ = 1 V e x p ( u j ′ ) p(w_c,j= w_O,c | w_I) = y_c, j = \\fracexp(u_c,j) \\sum_j'=1^Vexp(u_j') p(wc,j=wO,cwI)=yc,j=j=1Vexp(uj)exp(uc,j)
其中: