Word2vec原理详细解读

0. 预备知识

Softmax函数:S_{i} =\frac{e^{V_i} }{\Sigma_j(e^{V_j} ) }

哈夫曼树(Huffman Tree)


1.Skip-gram

图1. Skip-gram示意图

     从图1可以看出Skip-gram就是用当前中心词w_t(banking)预测附近的词,图1中将窗口大小设为2,即需要预测左边的2个词和右边的2个词。

     对于每个位置t\in {1,2,..,T},预测窗口大小为m的上下文,设当前中心词为w_t,那么目标为最大化:

            L(\theta )=\prod_{t=1}^T \prod_{-m\leq j\leq m\\j\neq 0}P(w_{t+j}|w_t;\theta )                                                                  (1)

其中\theta 为模型的参数。

     为了将最大化转为最小化,可对L(\theta )取负数,为了简化计算,可取对数:

       J(\theta )=-\frac{1}{T}logL(\theta ) =-\frac{1}{T}\sum_{t=1}^T \sum_{-m\leq j\leq m\\j\neq 0} logP(w_{t+j}|w_t;\theta )                       (2)  

      现在问题的关键是如何计算P(w_{t+j}|w_t;\theta ),我们使用两个向量表示:v_w为中心词的表示,u_w为上下文词的表示。那么,计算中心词c和上下文词o的出现概率为:

              P(o|c)=\frac{exp(u_{o}^Tv_c )}{\sum\nolimits_{w\in V}exp(u_{w}^Tv_c)}                                                                         (3)

其中,V为整个词表大小,v_c为中心词向量表示。其实式3就是softmax函数。

图2. Skip-gram计算示意图

      图2展示了Skip-gram的计算过程,从图中可以看出Skip-gram预测的是p(w_{t-2}|w_t)p(w_{t-1}|w_t),p(w_{t+1}|w_t),p(w_{t-2}|w_t),由于只预测前后两个单词,因此窗口大小为2。

输入层到隐藏层:输入层的中心词w_t用one-hot向量表示(维度为V*1,V为整个词表大小),输入层到隐藏层的权重矩阵为中心词矩阵W(维度为V*d,d为词向量维度),设隐含向量为v(维度为d*1),那么:

                           v=W^Tw_t                                                                                 (4)

隐藏层到输出层:隐藏层到输出层的上下文权重矩阵为U(维度为d*V),输出层为y(维度为V*1),那么:

                          y=softmax(U^Tv)                                                               (5)

注意,输出层的向量y与输出层的向量w_t虽然维度一样,但是y并不是one-hot向量,并且向量y的每一个元素都是有意义的。如,假设训练样本只有一句话”I like to eat apple”,此时我们正在使用eat去预测to,输出层结果如图3所示。

图3 输出向量y

     向量y中的每个元素表示用 I、like、eat、apple 四个词预测出来的词是对应的词的概率,比如是like的概率为0.05,是to的概率是0.80。由于我们想让模型预测出来的词是to,那么我们就要尽量让to的概率尽可能的大,所以我们将式子(1)作为最大化函数。

CBOW


图4CBOW计算示意图

Continuous Bag-of-Words(CBOW),的计算示意图如图4所示。从图中可以看出,CBOW模型预测的是p(w_t|w_{t-2},w_{t-1},w_{t+1},w_{t+2}),由于目标词w_t只取前后的两个词,因此窗口大小为2。假设目标词w_t前后各取k个词,即窗口大小为k,那么CBOW模型为:

        p(w_t|w_{t-k},w_{t-(k-1)},...,w_{t-1},w_{t+1},...,w_{t+(k-1)},w_{t+k};\theta )                (6)

输入层到隐藏层:如图4所示,输入层为4个词的one-hot向量表示,分别为w_{t-2},w_{t-1},w_{t+1},w_{t+2}(维度都为V*1,V为整个词表大小),记输入层到隐藏层的上下文词的权重矩阵为W(维度为V*d,d是词向量维度),隐藏层的向量h(维度为d*1),那么:

            h=\frac{W^Tw_{t-2}+W^Tw_{t-1}+W^Tw_{t+1}+W^Tw_{t+2}}{4}                              (7)

这里就是把各个上下文词的向量查找出来,再进行简单的加和平均。

隐藏层到输出层:记隐藏层到输出层的中心词权重矩阵为U(维度d*V),输出层的向量y(维度V*1),那么:

                         y=softmax(U^Th)                                                                          (8)

注意,输出层的向量y与输入层的w_t虽然维度一样,但是y并不是one-hot向量,并且向量y的每个元素都是有意义的。CBOW的目标是最大化函数:

L(\theta )=\prod_{t=1}^T P(w_t|w_{t-k},w_{t-(k-1)},...,w_{t-1},w_{t+1},...,w_{t+(k-1)},w_{t+k})     (9)

层次softmax和负采样

由于softmax的分母部分计算代价很大,在实际应用时,一般采用层次softmax或者负采样替换掉输出层,降低计算复杂度。

层次softmax

层次softmax(Hierarchical Softmax)是一棵哈夫曼树,树的叶子节点是训练文本中所有的词,非叶子节点是一个逻辑回归二分类器,每个逻辑回归分类器的参数都不同,分别用\theta _*表示,假定分类器的输入为向量h,记逻辑回归分类器输出的结果为\sigma (\theta _*h)将向量h传递给节点的左孩子概率为\sigma (\theta _*h),否则传递给节点的右孩子概率为1-\sigma (\theta _*h)。重复这个传递流程直到叶子节点。


图5 基于层次softmax的CBOW


图6 基于层次softmax的skip-gram

从图5和图6可以看出,我们就是将隐藏层的向量h直接传递到了层次softmax,层次softmax的复杂度为O(log(V)),层次softmax采样到每个词的概率如下:

对于CBOW或者skip-gram模型,如果要预测的词是to,那么我们就让p(to|context)尽量大,所以我们将任务转换成训练V-1个逻辑分类器。CBOW模型和skip-gram模型训练目标函数和之前形式一样,为:

                     L_{skip-gram}(\theta )=\prod_{t=1}^T \prod_{-m\leq j\leq m\\j\neq 0}P(w_{t+j}|w_t )                                       (10)

L_{CBOW}(\theta )=\prod_{t=1}^T P(w_t|w_{t-k},w_{t-(k-1)},...,w_{t-1},w_{t+1},...,w_{t+(k-1)},w_{t+k})  (11)

3.2 负采样

负采样实际上是采样负例来帮助训练的手段,其目的与层次softmax一样,是用来提升模型的训练速度。我们知道,模型对正例的预测概率是越大越好,模型对负例的预测概率是越小越好。负采样的思路就是根据某种负采样的策略随机挑选一些负例,然后保证挑选的这部分负例的预测概率尽可能小。所以,负采样策略是对模型的效果影响很大,word2vec常用的负采样策略有均匀负采样、按词频率采样等等。

A.CBOW

以“I like to eat apple”为例子,假设窗口的大小是2,当中心词为like时,即我们会用 I to 来预测like,所以在这里我们就认为(I,like)和(to,like)都是正例,而(I,apple)、(to,apple)就是负例,因为(I,apple)、(to,apple)不出现在当前正例中。用NEG(w)表示负样本,有:

         P(w|context(w)) = \sigma (\theta^wh^{contex(w)})                                                         (12)

P(NEG(w)|context(w))=\prod_{u\in NEG(w)}(1-\theta^{NEG(w)}h^{context(w)})                (13)

这里的\theta^*是词*的中心词向量表示,h为隐藏层的输出向量。我们只需要最大化目标函数:

    L(\theta )=\prod_{t=1}^TP(w_t|context(w_t)) ^*P(NEG(w_t)|context(w_t))                 (14)

这个损失函数的含义就是让正例概率更大,负例的概率更小。

B.Skip-gram

以“I like to eat apple”为例子,假设窗口的大小是1,即我们会用 like 来预测 I to,所以在这里我们就认为(like,I)和(like,to)都是正例,而(like,apple)就是负例,因为(like,apple)不会出现在正例中。那么,对于给定的正样本(w,context(w))和采样出的负样本(w,NEG(w)),有:

                              P(contex(w)|w)=\sigma (\theta ^uh^w)                                                   (15)

                   P(NEG(w)|w)=\prod_{u\in NEG(w)}(1-\sigma (\theta ^uh^w))                                    (16)

这里的\theta ^*是词*的中心词向量表示,h为隐藏层的输出向量。我们只需要最大化目标函数:

                L(\theta )=\prod_{t=1}^T P(context(w_t)|w_t)*P(NEG(w_t)|w_t)                        (17)

C.采样方法

word2vec常用的负采样策略有均匀负采样、按词频率采样等等。比较常用的采样方法是一元分布模型的3/4次幂。该方法中,一个词被采样的概率,取决于这个词在语料中的词频 ,其满足一元分布模型(Unigram Model).

                                   P(w_i)=\frac{f(w_i)^{3/4}}{\sum\nolimits_{k=0}^V f(w_k)^{3/4}}                                                      (18) 

其中V为整个词表大小,   f(w_i)为词w_i的词频。

至于为什么选择3/4呢?其实是由论文作者的经验所决定的。

假设由三个词,,”我“,”和平“,”觊觎“ 权重分别为 0.9 ,0.01,0.003;经过3/4幂后:

我: 0.9^3/4 = 0.92

和平:0.01^3/4 = 0.03

觊觎:0.003^3/4 = 0.012

对于”觊觎“而言,权重增加了4倍;”和平“增加3倍;”我“只有轻微增加。

可以认为:在保证高频词容易被抽到的大方向下,通过权重3/4次幂的方式,适当提升低频词、罕见词被抽到的概率。如果不这么做,低频词,罕见词很难被抽到,以至于不被更新到对应的Embedding。


Question&Answer

Question1: 如图7中,skip-gram模型中,从隐藏层到输出层,因为使用权值共享,所以会导致输出的几个上下文词向量总是完全一样,但网络的目的是要去预测上下文会出现的词,而实际中给定中心词的情况下上下文的词会五花八门。怎么解释skip gram的这种输出形式?

图7.  skip-gram前向传播过程

Answer1: 网络的目的不是要预测上下文会出现啥词,这只是一个fake task。实际上这个loss就是降不下来的,所以本来就不能用于真正预测上下文,而初衷也不是用于预测上下文,只是利用上下文信息去实现嵌入。

       如果你的100W个句子都是”I really love machine learning and deep learning“,加上权值共享,结果就是给定machine以后,它输出really,love,learning,and这四个词的概率完全相同,这就意味着这四个词的词向量也是差不多的。正因为这样,语义相近的词,他们在空间上的映射才会接近。

Question2: Word2Vec哪个矩阵是词向量?

Answer2:如图7所示,中心词矩阵W,上下文矩阵W' 可以任意选一个作为词向量矩阵。但是,如果采用优化后(层次softmax)的模型,那么将不存在W',这种情况下只能选矩阵W。


三千多字,码字不易,如果大家发现我有地方写得不对或者有疑问的,麻烦评论,我会回复并改正。对于重要问题,我会持续更新至Question&Answer。

参考:

[1]skip-gram的关键术语与详细解释

[2]一篇浅显易懂的word2vec原理讲解

[3]CS224n:深度学习的自然语言处理(2017年冬季)1080p

[4]Stanford CS224N: NLP with Deep Learning | Winter 2019 | Lecture 2 – Word Vectors and

Word Senses

[5]关于skip gram的输出?

[6] Le, Quoc V , and T. Mikolov . "Distributed Representationsof Sentences and Documents." (2014).

[7] Mikolov, T. . "Distributed Representations of Words andPhrases and their Compositionality." Advances in Neural InformationProcessing Systems 26(2013):3111-3119.

[8] Mikolov, Tomas , et al."Efficient Estimation of Word Representations in Vector Space." Computerence (2013).

[9] Goldberg, Yoav , and O. Levy . "word2vec Explained:deriving Mikolov et al.'s negative-sampling word-embedding method." arXiv(2014).

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容