深度学习笔记之Transformer——Position Embedding铺垫:Word2vec
引言
在Transformer(三)自注意力机制一节中介绍了位置编码 ( Position Embedding ) (\text{Position Embedding}) (Position Embedding),本系列针对位置编码再回首,从公式角度重新认识位置编码。本节作为铺垫,介绍一下词向量模型—— Word2vec \text{Word2vec} Word2vec。
回顾:关于词特征表示的 One-hot \text{One-hot} One-hot编码
在循环神经网络简单示例中,我们简单介绍了基于 One-hot \text{One-hot} One-hot向量的文本表征。
- 关于某种语言的词汇表 
      
       
        
        
          V 
         
        
       
         \mathcal V 
        
       
     V内包含 
      
       
        
        
          ∣ 
         
        
          V 
         
        
          ∣ 
         
        
       
         |\mathcal V| 
        
       
     ∣V∣个具体词语:
V = { ω 1 , ω 2 , ⋯ , ω ∣ V ∣ } \mathcal V = \{\omega_1,\omega_2,\cdots,\omega_{|\mathcal V|}\} V={ω1,ω2,⋯,ω∣V∣}
而 One-hot \text{One-hot} One-hot编码将 ∣ V ∣ |\mathcal V| ∣V∣均使用长度为 ∣ V ∣ |\mathcal V| ∣V∣的向量进行文本表征。并满足:
其中j j j表示词语在V \mathcal V V中的下标;ω j ( i ) \omega_j^{(i)} ωj(i)则是某词语ω j \omega_j ωj的特征表示过程中,第i i i个特征分量的结果。
{ ∑ j = 1 ∣ V ∣ ω j ( i ) = 1 ω j ( i ) ∈ { 0 , 1 } \begin{cases} \begin{aligned} & \sum_{j=1}^{|\mathcal V|} \omega_j^{(i)} = 1 \\ & \omega_j^{(i)} \in \{0,1\} \end{aligned} \end{cases} ⎩ ⎨ ⎧j=1∑∣V∣ωj(i)=1ωj(i)∈{0,1} - 这种词向量的表示方法优点在于:每一个 One-hot \text{One-hot} One-hot编码必然与 V \mathcal V V中的某个词之间存在恒等映射关系,并且将文本信息转换为 One-hot \text{One-hot} One-hot编码过程中,不存在特征信息丢失的情况。
 - 相应地,该编码方式的缺陷也很明显:首先,每个 
      
       
        
        
          One-hot 
         
        
       
         \text{One-hot} 
        
       
     One-hot编码仅有 
      
       
        
        
          1 
         
        
       
         1 
        
       
     1位存在有效信息,其余位均为 
      
       
        
        
          0 
         
        
       
         0 
        
       
     0(稀疏编码);其次,无法表达词语之间的相关性信息。因为各向量之间内积结果必然是 
      
       
        
        
          0 
         
        
       
         0 
        
       
     0,从而使得它们之间线性无关。
但这种表达明显违背了语言自身的‘性质’。在对应的语境下,某些词之间存在关联关系。 
目标函数构建
关于语料库与任务目标
我们已知的训练信息就是语料库 
     
      
       
       
         ( 
        
       
         Corpus 
        
       
         ) 
        
       
      
        (\text{Corpus}) 
       
      
    (Corpus)。这个语料库没有标签,只有一段一段地文本。我们将这些文本整合在一起,表示成一个长度为 
     
      
       
       
         T 
        
       
      
        \mathcal T 
       
      
    T的超长序列:
 其中这里的 
     
      
       
        
        
          w 
         
        
          t 
         
        
       
         ( 
        
       
         t 
        
       
         = 
        
       
         1 
        
       
         , 
        
       
         2 
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
       
         T 
        
       
         ) 
        
       
      
        w_t(t=1,2,\cdots,\mathcal T) 
       
      
    wt(t=1,2,⋯,T)表示基于词的随机变量。
  
      
       
        
        
          D 
         
        
          = 
         
        
          { 
         
         
         
           w 
          
         
           1 
          
         
        
          , 
         
         
         
           w 
          
         
           2 
          
         
        
          , 
         
        
          ⋯ 
          
        
          , 
         
         
         
           w 
          
          
          
            t 
           
          
            − 
           
          
            1 
           
          
         
        
          , 
         
         
         
           w 
          
         
           t 
          
         
        
          , 
         
         
         
           w 
          
          
          
            t 
           
          
            + 
           
          
            1 
           
          
         
        
          , 
         
        
          ⋯ 
          
        
          , 
         
         
         
           w 
          
         
           T 
          
         
        
          } 
         
        
       
         \mathcal D = \{w_1,w_2,\cdots,w_{t-1},w_t,w_{t+1},\cdots,w_{\mathcal T}\} 
        
       
     D={w1,w2,⋯,wt−1,wt,wt+1,⋯,wT}
而目标是求解基于语料库 D \mathcal D D内产生的词汇表 V \mathcal V V中每个词的分布式向量 ( Distributed Vector ) (\text{Distributed Vector}) (Distributed Vector)表示。而这个向量需要满足如下要求:
- 能够在有限维数条件下尽量完整地描述某个词的语义信息;
 - 向量能够表达出词与词之间的相似度关系。
 
从语言自身的角度观察,两个词语之间存在相似度关系的依据是:描述各词语对应的上下文 ( Context ) (\text{Context}) (Context)进行对比,如果对应上下文之间存在相似性,我们推断这两个词之间存在相似性关系。相反,如果已知两个词语之间存在相似性,那么它们所在文本序列的上下文之间同样存在相似性关系。
似然函数构建
如何使用概率分布描述上下文信息 
     
      
       
       
         ? 
        
       
      
        ? 
       
      
    ?关于语料库 
     
      
       
       
         D 
        
       
      
        \mathcal D 
       
      
    D的联合概率分布表示如下:
  
      
       
        
        
          P 
         
        
          ( 
         
         
         
           w 
          
          
          
            1 
           
          
            : 
           
          
            T 
           
          
         
        
          ) 
         
        
          = 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           1 
          
         
        
          , 
         
         
         
           w 
          
         
           2 
          
         
        
          , 
         
        
          ⋯ 
          
        
          , 
         
         
         
           w 
          
         
           T 
          
         
        
          ) 
         
        
       
         \mathcal P(w_{1:\mathcal T}) = \mathcal P(w_1,w_2,\cdots,w_{\mathcal T}) 
        
       
     P(w1:T)=P(w1,w2,⋯,wT)
-  
如果我们在上下文未知的条件下,想要知道这个长为 T \mathcal T T的序列中,第 t ( t ∈ { 1 , 2 , ⋯ , T } ) t(t \in \{1,2,\cdots,\mathcal T\}) t(t∈{1,2,⋯,T})个位置的随机变量 w t w_t wt选择某个具体词的概率 P ( w t ) \mathcal P(w_t) P(wt)。由于没有任何额外信息,这等价于:从词汇表 V \mathcal V V中均匀采样出一个样本,而该采样概率是我们想要的具体词的概率,即 P ( w t ) = 1 ∣ V ∣ \begin{aligned}\mathcal P(w_t) = \frac{1}{|\mathcal V|}\end{aligned} P(wt)=∣V∣1。
在该条件下,P ( w t ) \mathcal P(w_t) P(wt)的结果是恒定不变的( Constant ) (\text{Constant}) (Constant)。 -  
在 P ( w t ) \mathcal P(w_t) P(wt)已知的条件下,联合概率分布 P ( w 1 : T ) \mathcal P(w_{1:\mathcal T}) P(w1:T)可表示为:
其中这里的Context ( w t ) \text{Context}(w_t) Context(wt)没有进行约束,即表示w t w_t wt的上下文。即w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T} w1,⋯,wt−1,wt+1,⋯,wT。
P ( w 1 : T ) = P ( w t ) ⋅ P [ Context ( w t ) ∣ w t ] \mathcal P(w_{1:\mathcal T}) = \mathcal P(w_t) \cdot \mathcal P[\text{Context}(w_t) \mid w_t] P(w1:T)=P(wt)⋅P[Context(wt)∣wt] -  
如果不对 Context ( w t ) \text{Context}(w_t) Context(wt)范围进行约束,那么它的计算量是非常复杂的。为了简化运算,我们引入假设 ( 1 ) (1) (1):给 Context \text{Context} Context范围设置成有限的窗口大小。我们假设窗口大小为 2 C 2\mathcal C 2C。也就是说:我们仅考虑 w t w_t wt之前与之后的 C \mathcal C C个随机变量对 w t w_t wt产生的影响。因而上述公式可改写成如下形式:
很明显,这只是一个‘近似相等’,因假设( 1 ) (1) (1)的约束将原始的联合概率分布P ( w 1 : T ) \mathcal P(w_{1:\mathcal T}) P(w1:T)限制成了P ( w t − C : t + C ) \mathcal P(w_{t-\mathcal C \text{ : } t+\mathcal C}) P(wt−C : t+C)。
P ( w 1 : T ) = ( 1 ) P ( w t ) ⋅ P ( w t − C : t − 1 , w t + 1 : t + C ∣ w t ) \mathcal P(w_{1:\mathcal T}) \overset{(1)}{=} \mathcal P(w_t) \cdot \mathcal P(w_{t-\mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+\mathcal C} \mid w_t) P(w1:T)=(1)P(wt)⋅P(wt−C : t−1,wt+1 : t+C∣wt) -  
由于 P ( w t ) \mathcal P(w_{t}) P(wt)是一个定值,因而我们关注的对象在条件概率分布 P ( w t − C : t − 1 , w t + 1 : t + C ∣ w t ) \mathcal P(w_{t-\mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+\mathcal C} \mid w_t) P(wt−C : t−1,wt+1 : t+C∣wt)上面。最终关于 w t w_t wt的条件似然 ( Conditional Likelihood ) (\text{Conditional Likelihood}) (Conditional Likelihood)表示如下:
由于P ( w t ) \mathcal P(w_t) P(wt)是定值,不会发生变化;因而P ( w t ) \mathcal P(w_t) P(wt)的‘似然’不在考虑范围内。
P ( w t − C : t − 1 , w t + 1 : t + C ∣ w t ) \mathcal P(w_{t-\mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+\mathcal C} \mid w_t) P(wt−C : t−1,wt+1 : t+C∣wt)
由于 w t w_t wt是我们任意指定位置的随机变量,从而得到一个关于 w t w_t wt的条件似然;实际上,我们可以取到 w 1 , w 2 , ⋯ , w T w_1,w_2,\cdots,w_{\mathcal T} w1,w2,⋯,wT内的任意一个位置,每一个位置均对应一个条件似然:
共存在T \mathcal T T个条件似然。
P ( w t − C : t − 1 , w t + 1 : t + C ∣ w t ) t = 1 , 2 , ⋯ T \mathcal P(w_{t-\mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+\mathcal C} \mid w_t) \quad t=1,2,\cdots \mathcal T P(wt−C : t−1,wt+1 : t+C∣wt)t=1,2,⋯T
引入假设 ( 2 ) (2) (2):如果给定对应 w t ( t ∈ { 1 , 2 , ⋯ , T } ) w_t(t \in\{1,2,\cdots,\mathcal T\}) wt(t∈{1,2,⋯,T})的条件下,任意两个条件似然分布之间相互独立,那么完整的条件似然可以表示为上述 T \mathcal T T个条件似然的乘积结果:
∏ t = 1 T P ( w t − C : t − 1 , w t + 1 : t + C ∣ w t ) \prod_{t=1}^{\mathcal T} \mathcal P(w_{t-\mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+\mathcal C} \mid w_t) t=1∏TP(wt−C : t−1,wt+1 : t+C∣wt)
为了简化上述的连乘形式,在此基础上,增加均值和 log \text{log} log函数,得到均值化的条件对数似然 ( Average Conditional Log Likelihood ) (\text{Average Conditional Log Likelihood}) (Average Conditional Log Likelihood):
均值和log  \log log函数并不影响‘完整条件似然’的单调性。
1 T ∑ t = 1 T log  P ( w t − C : t − 1 , w t + 1 : t + C ∣ w t ) \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \log \mathcal P(w_{t-\mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+\mathcal C} \mid w_t) T1t=1∑TlogP(wt−C : t−1,wt+1 : t+C∣wt) -  
继续观察 P ( w t − C : t − 1 , w t + 1 : t + C ∣ w t ) \mathcal P(w_{t-\mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+\mathcal C} \mid w_t) P(wt−C : t−1,wt+1 : t+C∣wt),它可看作是 w t w_t wt条件下,窗口内 2 C − 1 2\mathcal C - 1 2C−1个词的联合概率分布,继续对其进行分解。引入假设 ( 3 ) (3) (3):在给定 w t w_t wt的条件下, w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} wt−C,⋯,wt−1,wt+1,⋯,wt+C之间独立同分布。基于该假设:可以将 P ( w t − C : t − 1 , w t + 1 : t + C ∣ w t ) \mathcal P(w_{t-\mathcal C \text{ : } t-1},w_{t+1 \text{ : } t+\mathcal C} \mid w_t) P(wt−C : t−1,wt+1 : t+C∣wt)分解成更细致地连乘形式:
该部分需要注意:这里说的是w t − C ∣ w t , ⋯ , w t − 1 ∣ w t , w t + 1 ∣ w t , ⋯ , w t + C ∣ w t w_{t-\mathcal C} \mid w_t,\cdots,w_{t-1} \mid w_t,w_{t+1} \mid w_t,\cdots,w_{t+\mathcal C} \mid w_t wt−C∣wt,⋯,wt−1∣wt,wt+1∣wt,⋯,wt+C∣wt它们之间独立同分布,而不仅仅是w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} wt−C,⋯,wt−1,wt+1,⋯,wt+C独立同分布。如果是第二种情况,下面公式不成立。
I = 1 T ∑ t = 1 T log  ∏ i ∈ [ − C , C ] ; i ≠ 0 P ( w t + i ∣ w t ) = 1 T ∑ t = 1 T ∑ i = − C ( ≠ 0 ) C log  P ( w t + i ∣ w t ) \begin{aligned} \mathcal I & = \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \log \prod_{ i \in [-\mathcal C,\mathcal C] ;i \neq 0} \mathcal P(w_{t+i} \mid w_t) \\ & = \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i = -\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_{t+i} \mid w_t) \end{aligned} I=T1t=1∑Tlogi∈[−C,C];i=0∏P(wt+i∣wt)=T1t=1∑Ti=−C(=0)∑ClogP(wt+i∣wt) 
至此,通过 
     
      
       
       
         3 
        
       
      
        3 
       
      
    3个假设,将完整似然 
     
      
       
        
         
          
           
            
            
              ∏ 
             
             
             
               t 
              
             
               = 
              
             
               1 
              
             
            
              T 
             
            
           
             P 
            
           
             [ 
            
           
             Context 
            
           
             ( 
            
            
            
              w 
             
            
              t 
             
            
           
             ) 
            
           
             ∣ 
            
            
            
              w 
             
            
              t 
             
            
           
             ] 
            
           
          
         
        
       
      
        \begin{aligned}\prod_{t=1}^\mathcal T \mathcal P[\text{Context}(w_t) \mid w_t]\end{aligned} 
       
      
    t=1∏TP[Context(wt)∣wt]简化并分解成了上述形式。基于上述的分解结果,仅需要对 
      
       
        
        
          P 
         
        
          ( 
         
         
         
           w 
          
          
          
            t 
           
          
            + 
           
          
            i 
           
          
         
        
          ∣ 
         
         
         
           w 
          
         
           t 
          
         
        
          ) 
         
        
       
         \mathcal P(w_{t+i} \mid w_t) 
        
       
     P(wt+i∣wt)进行建模,就可将该似然求解出来。而 
     
      
       
       
         P 
        
       
         ( 
        
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           i 
          
         
        
       
         ∣ 
        
        
        
          w 
         
        
          t 
         
        
       
         ) 
        
       
      
        \mathcal P(w_{t+i} \mid w_t) 
       
      
    P(wt+i∣wt)的物理意义是:给定一个中心词 
      
       
        
         
         
           w 
          
         
           t 
          
         
        
       
         w_t 
        
       
     wt,基于该词所在窗口内的某个词 
      
       
        
         
         
           w 
          
          
          
            t 
           
          
            + 
           
          
            i 
           
          
         
        
          ( 
         
        
          i 
         
        
          ≤ 
         
        
          C 
         
        
          ) 
         
        
       
         w_{t+i}(i \leq \mathcal C) 
        
       
     wt+i(i≤C)的后验概率。
 重点:由于假设窗口内的其他词 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           C 
          
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           1 
          
         
        
       
         , 
        
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           1 
          
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           C 
          
         
        
       
      
        w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C} 
       
      
    wt−C,⋯,wt−1,wt+1,⋯,wt+C在给定 
     
      
       
        
        
          w 
         
        
          t 
         
        
       
      
        w_t 
       
      
    wt情况下是‘独立同分布’的,因此这些词之间已经失去了顺序关系。
从极大似然估计的角度也能看出来,它将整个似然函数 ∏ t = 1 T P [ Context ( w t ) ∣ w t ] \begin{aligned}\prod_{t=1}^\mathcal T \mathcal P[\text{Context}(w_t) \mid w_t]\end{aligned} t=1∏TP[Context(wt)∣wt]分解成若干个 log  P ( w t + i ∣ w t ) \log \mathcal P(w_{t+i} \mid w_t) logP(wt+i∣wt)并各自独立地求解最大值。因此基于这种策略求解的 Vector \text{Vector} Vector结果并不包含序列信息。
最终,将极大似然估计转换成常见的优化问题:
 其中 
     
      
       
       
         θ 
        
       
      
        \theta 
       
      
    θ表示模型参数,并转换成最小化问题。
  
      
       
        
        
          J 
         
        
          ( 
         
        
          θ 
         
        
          ) 
         
        
          = 
         
        
          − 
         
         
         
           1 
          
         
           T 
          
         
         
         
           ∑ 
          
          
          
            t 
           
          
            = 
           
          
            1 
           
          
         
           T 
          
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            − 
           
          
            C 
           
          
            ( 
           
          
            ≠ 
           
          
            0 
           
          
            ) 
           
          
         
           C 
          
         
        
          log 
         
        
           
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
          
          
            t 
           
          
            + 
           
          
            i 
           
          
         
        
          ∣ 
         
         
         
           w 
          
         
           t 
          
         
        
          ) 
         
        
       
         \mathcal J(\theta) = - \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i = -\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_{t+i} \mid w_t) 
        
       
     J(θ)=−T1t=1∑Ti=−C(=0)∑ClogP(wt+i∣wt)
Word2vec \text{Word2vec} Word2vec模型结构
基于上述描述,我们将对 
     
      
       
       
         P 
        
       
         ( 
        
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           i 
          
         
        
       
         ∣ 
        
        
        
          w 
         
        
          t 
         
        
       
         ) 
        
       
      
        \mathcal P(w_{t+i} \mid w_t) 
       
      
    P(wt+i∣wt)进行建模。由于 
     
      
       
       
         P 
        
       
         ( 
        
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           i 
          
         
        
       
         ∣ 
        
        
        
          w 
         
        
          t 
         
        
       
         ) 
        
       
      
        \mathcal P(w_{t+i} \mid w_t) 
       
      
    P(wt+i∣wt)内已经不包含窗口内词语的序列信息,因此将 
     
      
       
       
         P 
        
       
         ( 
        
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           i 
          
         
        
       
         ∣ 
        
        
        
          w 
         
        
          t 
         
        
       
         ) 
        
       
      
        \mathcal P(w_{t+i} \mid w_t) 
       
      
    P(wt+i∣wt)简化成如下形式:
 其中 
     
      
       
        
        
          w 
         
        
          i 
         
        
       
      
        w_i 
       
      
    wi表示输入的词语信息; 
     
      
       
        
        
          w 
         
        
          o 
         
        
       
      
        w_o 
       
      
    wo表示基于 
     
      
       
        
        
          w 
         
        
          i 
         
        
       
      
        w_i 
       
      
    wi的,模型输出的词语分布。
  
      
       
        
        
          P 
         
        
          ( 
         
         
         
           w 
          
          
          
            t 
           
          
            + 
           
          
            i 
           
          
         
        
          ∣ 
         
         
         
           w 
          
         
           t 
          
         
        
          ) 
         
        
          = 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           o 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           i 
          
         
        
          ) 
         
        
       
         \mathcal P(w_{t+i} \mid w_t) = \mathcal P(w_o \mid w_i) 
        
       
     P(wt+i∣wt)=P(wo∣wi)
 假设我们的 
     
      
       
        
        
          w 
         
        
          i 
         
        
       
      
        w_i 
       
      
    wi取的是词汇表中的第 
     
      
       
       
         k 
        
       
      
        k 
       
      
    k个词语 
     
      
       
        
        
          ω 
         
        
          k 
         
        
       
      
        \omega_k 
       
      
    ωk,对应的输入就是 
     
      
       
        
        
          ω 
         
        
          k 
         
        
       
      
        \omega_k 
       
      
    ωk的 
     
      
       
       
         One-hot 
        
       
      
        \text{One-hot} 
       
      
    One-hot编码:
 当然, 
     
      
       
       
         One-hot 
        
       
      
        \text{One-hot} 
       
      
    One-hot编码自身就是一个很‘极端’的离散型分布。
  
      
       
        
         
         
           w 
          
         
           i 
          
         
        
          = 
         
         
         
           ω 
          
         
           k 
          
         
        
          = 
         
        
          ( 
         
        
          0 
         
        
          , 
         
        
          0 
         
        
          , 
         
        
          ⋯ 
          
        
          , 
         
         
          
          
            1 
           
          
            ⏟ 
           
          
          
          
            位置 
           
          
            k 
           
          
         
        
          , 
         
        
          0 
         
        
          , 
         
        
          ⋯ 
          
        
          , 
         
        
          0 
         
         
         
           ) 
          
         
           T 
          
         
        
       
         w_i = \omega_k = (0,0,\cdots,\underbrace{1}_{位置k},0,\cdots,0)^T 
        
       
     wi=ωk=(0,0,⋯,位置k 
                   
                   
                  1,0,⋯,0)T
 关于 
     
      
       
        
        
          w 
         
        
          o 
         
        
       
      
        w_o 
       
      
    wo可能取值的后验结果见下表:
| w o ∣ w i = ω k w_o \mid w_i = \omega_k wo∣wi=ωk | ω 1 \omega_1 ω1 | ω 2 \omega_2 ω2 | ⋯ \cdots ⋯ | ω j \omega_j ωj | ⋯ \cdots ⋯ | ω ∣ V ∣ \omega_{\mid\mathcal V\mid} ω∣V∣ | 
|---|---|---|---|---|---|---|
| P ( w o ∣ w i = ω k ) \mathcal P(w_o \mid w_i = \omega_k) P(wo∣wi=ωk) | p 1 p_1 p1 | p 2 p_2 p2 | ⋯ \cdots ⋯ | p j p_j pj | ⋯ \cdots ⋯ | p ∣ V ∣ p_{\mid\mathcal V \mid} p∣V∣ | 
既然是概率值,自然满足:
  
      
       
        
         
         
           ∑ 
          
          
          
            j 
           
          
            = 
           
          
            1 
           
          
          
          
            ∣ 
           
          
            V 
           
          
            ∣ 
           
          
         
         
         
           p 
          
         
           j 
          
         
        
          = 
         
        
          1 
         
         
         
         
           { 
          
          
           
            
             
              
               
               
                 p 
                
               
                 j 
                
               
              
                = 
               
              
                P 
               
              
                ( 
               
               
               
                 w 
                
               
                 o 
                
               
              
                = 
               
               
               
                 ω 
                
               
                 j 
                
               
              
                ∣ 
               
               
               
                 w 
                
               
                 i 
                
               
              
                = 
               
               
               
                 ω 
                
               
                 k 
                
               
              
                ) 
               
              
             
            
           
           
            
             
              
               
               
                 p 
                
               
                 j 
                
               
              
                ∈ 
               
              
                ( 
               
              
                0 
               
              
                , 
               
              
                1 
               
              
                ] 
               
              
             
            
           
          
         
        
       
         \sum_{j=1}^{|\mathcal V|} p_j = 1 \quad \begin{cases} p_j = \mathcal P(w_o = \omega_j \mid w_i = \omega_k) \\ p_j \in (0,1] \end{cases} 
        
       
     j=1∑∣V∣pj=1{pj=P(wo=ωj∣wi=ωk)pj∈(0,1]
 对于这样一个离散的后验分布,通常会想到多分类任务。因而可以使用 
     
      
       
       
         Softmax 
        
       
      
        \text{Softmax} 
       
      
    Softmax函数对各离散概率进行表示:
 公式中的 
     
      
       
        
        
          x 
         
        
          j 
         
        
       
      
        x_j 
       
      
    xj表示模型学习特征信息中的第 
     
      
       
       
         j 
        
       
      
        j 
       
      
    j个分量,也就是下面所说的隐藏层的第 
     
      
       
       
         j 
        
       
      
        j 
       
      
    j个输出;对应的 
     
      
       
       
         Softmax 
        
       
      
        \text{Softmax} 
       
      
    Softmax结果就是关于概率 
     
      
       
        
        
          p 
         
        
          j 
         
        
       
      
        p_j 
       
      
    pj的预测结果。
  
      
       
        
         
          
           
            
            
              p 
             
            
              j 
             
            
           
          
          
           
            
             
            
              = 
             
            
              P 
             
            
              ( 
             
             
             
               w 
              
             
               o 
              
             
            
              = 
             
             
             
               ω 
              
             
               j 
              
             
            
              ∣ 
             
             
             
               w 
              
             
               i 
              
             
            
              = 
             
             
             
               ω 
              
             
               k 
              
             
            
              ) 
             
            
           
          
         
         
          
           
            
           
          
          
           
            
             
            
              = 
             
            
              Softmax 
             
            
              ( 
             
             
             
               x 
              
             
               j 
              
             
            
              ) 
             
            
           
          
         
        
       
         \begin{aligned} p_j & = \mathcal P(w_o = \omega_j \mid w_i = \omega_k) \\ & = \text{Softmax}(x_j) \end{aligned} 
        
       
     pj=P(wo=ωj∣wi=ωk)=Softmax(xj)
 由于 
     
      
       
       
         P 
        
       
         ( 
        
        
        
          w 
         
        
          o 
         
        
       
         = 
        
        
        
          ω 
         
        
          j 
         
        
       
         ∣ 
        
        
        
          w 
         
        
          i 
         
        
       
         = 
        
        
        
          ω 
         
        
          i 
         
        
       
         ) 
        
       
      
        \mathcal P(w_o = \omega_j \mid w_i = \omega_i) 
       
      
    P(wo=ωj∣wi=ωi)本质上依然是一个以 
      
       
        
         
         
           w 
          
         
           o 
          
         
        
       
         w_o 
        
       
     wo作为输入,输出是各词对应概率分布的复杂函数,因此可以利用神经网络的通用逼近定理进行描述:
其中模型的输入就是w i = ω k w_i = \omega_k wi=ωk对应的One-hot \text{One-hot} One-hot编码,长度为∣ V ∣ |\mathcal V| ∣V∣;并且第k k k个位置的元素是1 1 1;对应输出是随机变量w o w_o wo对应各词的概率分布结果,长度同样是∣ V ∣ |\mathcal V| ∣V∣。其中Softmax \text{Softmax} Softmax的函数表示式为Softmax ( x i ) = exp  ( x i ) ∑ j = 1 ∣ V ∣ exp  ( x j ) \begin{aligned} \text{Softmax}(x_i) = \frac{\exp(x_i)}{\sum_{j=1}^{|\mathcal V|} \exp(x_j)} \end{aligned} Softmax(xi)=∑j=1∣V∣exp(xj)exp(xi),其中x i ( i ∈ { 1 , 2 , ⋯ , ∣ V ∣ } ) x_i(i\in\{1,2,\cdots,|\mathcal V|\}) xi(i∈{1,2,⋯,∣V∣})表示隐藏层的输出结果。该函数的输出结果保证了∑ j = 1 ∣ V ∣ p j = 1 ; p j ∈ ( 0 , 1 ] \begin{aligned}\sum_{j=1}^{|\mathcal V|} p_j = 1 ; p_j \in (0,1]\end{aligned} j=1∑∣V∣pj=1;pj∈(0,1]的条件约束。

关于 Word2vec \text{Word2vec} Word2vec模型,它的隐藏层并没有设置激活函数,或者说它的激活函数就是一个恒等映射。其目的依然是为了计算过程简便。如果加入了激活函数,由于输入和输出都是 ∣ V ∣ |\mathcal V| ∣V∣个神经元,对应隐藏层的计算量是非常恐怖的。因而只有在输出层保留一个 Softmax \text{Softmax} Softmax激活函数,其余层均只有线性计算操作。
由于隐藏层部分没有激活函数,仅包含线性运算操作,因而可以将其视作矩阵之间的乘法运算.下面剖析该神经网络隐藏层的执行过程:
- 关于输入 ω i ∈ R ∣ V ∣ × 1 \omega_i \in \mathbb R^{|\mathcal V| \times 1} ωi∈R∣V∣×1对应隐藏层的权重信息使用矩阵进行表示。分别记作 W ∈ R ∣ V ∣ × d , U ∈ R d × ∣ V ∣ \mathcal W \in \mathbb R^{|\mathcal V| \times d},\mathcal U \in \mathbb R^{d \times |\mathcal V|} W∈R∣V∣×d,U∈Rd×∣V∣:
 - 基于上述定义,输入层  
      
       
        
        
          ⇒ 
         
        
       
         \Rightarrow 
        
       
     ⇒ 隐藏层,隐藏层  
      
       
        
        
          ⇒ 
         
        
       
         \Rightarrow 
        
       
     ⇒ 输出层的矩阵乘法操作分别表示为:
{ [ ω i ] 1 × ∣ V ∣ T ⋅ W ∣ V ∣ × d ∈ R 1 × d { [ ω i ] T ⋅ W } 1 × d ⋅ U d × ∣ V ∣ ∈ R 1 × ∣ V ∣ \begin{cases} [\omega_i]_{1 \times |\mathcal V|}^T \cdot \mathcal W_{|\mathcal V| \times d} \in \mathbb R^{1 \times d} \\ \left\{[\omega_i]^T \cdot \mathcal W \right\}_{1 \times d} \cdot \mathcal U_{d \times |\mathcal V|} \in \mathbb R^{1 \times |\mathcal V|} \end{cases} {[ωi]1×∣V∣T⋅W∣V∣×d∈R1×d{[ωi]T⋅W}1×d⋅Ud×∣V∣∈R1×∣V∣ 
观察第一次矩阵乘法操作,由于 
     
      
       
        
        
          ω 
         
        
          i 
         
        
       
      
        \omega_i 
       
      
    ωi是一个 
     
      
       
       
         One-hot 
        
       
      
        \text{One-hot} 
       
      
    One-hot编码向量(第 
     
      
       
       
         i 
        
       
      
        i 
       
      
    i分量为 
     
      
       
       
         1 
        
       
      
        1 
       
      
    1),那么 
     
      
       
       
         [ 
        
        
        
          ω 
         
        
          i 
         
        
        
        
          ] 
         
        
          T 
         
        
       
         ⋅ 
        
       
         W 
        
       
      
        [\omega_i]^T \cdot \mathcal W 
       
      
    [ωi]T⋅W操作就是将 
      
       
        
        
          W 
         
        
       
         \mathcal W 
        
       
     W内的第 
      
       
        
        
          i 
         
        
       
         i 
        
       
     i行元素 
      
       
        
        
          ∈ 
         
         
         
           R 
          
          
          
            1 
           
          
            × 
           
          
            d 
           
          
         
        
       
         \in \mathbb R^{1 \times d} 
        
       
     ∈R1×d取出而已。记 
     
      
       
       
         W 
        
       
      
        \mathcal W 
       
      
    W为如下形式:
 其中 
     
      
       
        
        
          w 
         
        
          1 
         
        
       
         , 
        
        
        
          w 
         
        
          2 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          w 
         
         
         
           ∣ 
          
         
           V 
          
         
           ∣ 
          
         
        
       
      
        w_1,w_2,\cdots,w_{|\mathcal V|} 
       
      
    w1,w2,⋯,w∣V∣表示 
     
      
       
       
         W 
        
       
      
        \mathcal W 
       
      
    W每行元素组成的列向量。
  
      
       
        
        
          W 
         
        
          = 
         
         
         
           [ 
          
          
           
            
             
              
              
                ( 
               
               
               
                 w 
                
               
                 1 
                
               
               
               
                 ) 
                
               
                 T 
                
               
              
             
            
           
           
            
             
              
              
                ( 
               
               
               
                 w 
                
               
                 2 
                
               
               
               
                 ) 
                
               
                 T 
                
               
              
             
            
           
           
            
             
              
              
                ⋮ 
               
               
                
               
              
             
            
           
           
            
             
              
              
                ( 
               
               
               
                 w 
                
                
                
                  ∣ 
                 
                
                  V 
                 
                
                  ∣ 
                 
                
               
               
               
                 ) 
                
               
                 T 
                
               
              
             
            
           
          
         
           ] 
          
         
        
       
         \mathcal W = \begin{bmatrix} (w_1)^T \\ (w_2)^T \\ \vdots \\ (w_{|\mathcal V|})^T \end{bmatrix} 
        
       
     W= 
              (w1)T(w2)T⋮(w∣V∣)T 
              
 同理,对应 
     
      
       
       
         U 
        
       
      
        \mathcal U 
       
      
    U表示为如下形式:
 其中 
     
      
       
        
        
          u 
         
        
          1 
         
        
       
         , 
        
        
        
          u 
         
        
          2 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          u 
         
         
         
           ∣ 
          
         
           V 
          
         
           ∣ 
          
         
        
       
      
        u_1,u_2,\cdots,u_{|\mathcal V|} 
       
      
    u1,u2,⋯,u∣V∣表示 
     
      
       
       
         U 
        
       
      
        \mathcal U 
       
      
    U每一列的列向量。
  
      
       
        
        
          U 
         
        
          = 
         
        
          ( 
         
         
         
           u 
          
         
           1 
          
         
        
          , 
         
         
         
           u 
          
         
           2 
          
         
        
          , 
         
        
          ⋯ 
          
        
          , 
         
         
         
           u 
          
         
           j 
          
         
        
          ⋯ 
          
        
          , 
         
         
         
           u 
          
          
          
            ∣ 
           
          
            V 
           
          
            ∣ 
           
          
         
        
          ) 
         
        
       
         \mathcal U = (u_1,u_2,\cdots,u_j\cdots,u_{|\mathcal V|}) 
        
       
     U=(u1,u2,⋯,uj⋯,u∣V∣)
至此,上面的矩阵乘法操作可以描述成如下形式:
  
      
       
        
        
          { 
         
         
          
           
            
             
             
               [ 
              
              
              
                ω 
               
              
                i 
               
              
              
              
                ] 
               
              
                T 
               
              
             
               ⋅ 
              
             
               W 
              
             
               = 
              
             
               ( 
              
              
              
                w 
               
              
                i 
               
              
              
              
                ) 
               
              
                T 
               
              
             
            
           
          
          
           
            
             
              
               
                
                 
                 
                   ( 
                  
                  
                  
                    w 
                   
                  
                    i 
                   
                  
                  
                  
                    ) 
                   
                  
                    T 
                   
                  
                 
                   ⋅ 
                  
                 
                   U 
                  
                 
                
               
               
                
                 
                  
                 
                   ⇒ 
                  
                 
                   ( 
                  
                  
                  
                    w 
                   
                  
                    i 
                   
                  
                  
                  
                    ) 
                   
                  
                    T 
                   
                  
                 
                   ⋅ 
                  
                 
                   ( 
                  
                  
                  
                    u 
                   
                  
                    1 
                   
                  
                 
                   , 
                  
                  
                  
                    u 
                   
                  
                    2 
                   
                  
                 
                   , 
                  
                 
                   ⋯ 
                   
                 
                   , 
                  
                  
                  
                    u 
                   
                   
                   
                     ∣ 
                    
                   
                     V 
                    
                   
                     ∣ 
                    
                   
                  
                 
                   ) 
                  
                 
                
               
              
              
               
                
                 
                
               
               
                
                 
                  
                 
                   = 
                  
                  
                  
                    [ 
                   
                  
                    ( 
                   
                   
                   
                     w 
                    
                   
                     i 
                    
                   
                   
                   
                     ) 
                    
                   
                     T 
                    
                   
                   
                   
                     u 
                    
                   
                     1 
                    
                   
                  
                    , 
                   
                  
                    ( 
                   
                   
                   
                     w 
                    
                   
                     i 
                    
                   
                   
                   
                     ) 
                    
                   
                     T 
                    
                   
                   
                   
                     u 
                    
                   
                     2 
                    
                   
                  
                    , 
                   
                  
                    ⋯ 
                    
                  
                    , 
                   
                  
                    ( 
                   
                   
                   
                     w 
                    
                   
                     i 
                    
                   
                   
                   
                     ) 
                    
                   
                     T 
                    
                   
                   
                   
                     u 
                    
                    
                    
                      ∣ 
                     
                    
                      V 
                     
                    
                      ∣ 
                     
                    
                   
                  
                    ] 
                   
                  
                 
                
               
              
             
            
           
          
         
        
       
         \begin{cases} [\omega_i]^T \cdot \mathcal W = (w_i)^T \\ \begin{aligned} (w_i)^T \cdot \mathcal U & \Rightarrow (w_i)^T \cdot (u_1,u_2,\cdots,u_{|\mathcal V|}) \\ & = \left[(w_i)^T u_1,(w_i)^T u_2,\cdots,(w_i)^T u_{|\mathcal V|}\right] \end{aligned} \end{cases} 
        
       
     ⎩ 
              ⎨ 
              ⎧[ωi]T⋅W=(wi)T(wi)T⋅U⇒(wi)T⋅(u1,u2,⋯,u∣V∣)=[(wi)Tu1,(wi)Tu2,⋯,(wi)Tu∣V∣]
 因而关于输出层(执行 
     
      
       
       
         Softmax 
        
       
      
        \text{Softmax} 
       
      
    Softmax前一层)中第 
     
      
       
       
         j 
        
       
         ( 
        
       
         j 
        
       
         ∈ 
        
       
         { 
        
       
         1 
        
       
         , 
        
       
         2 
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
       
         ∣ 
        
       
         V 
        
       
         ∣ 
        
       
         } 
        
       
         ) 
        
       
      
        j(j \in \{1,2,\cdots,|\mathcal V|\}) 
       
      
    j(j∈{1,2,⋯,∣V∣})个神经元的输出 
     
      
       
        
        
          x 
         
        
          j 
         
        
       
      
        x_j 
       
      
    xj可直接表示为如下形式:
 它就是一个标量。
  
      
       
        
         
         
           x 
          
         
           j 
          
         
        
          = 
         
        
          ( 
         
         
         
           w 
          
         
           i 
          
         
         
         
           ) 
          
         
           T 
          
         
         
         
           u 
          
         
           j 
          
         
        
       
         x_j = (w_i)^T u_j 
        
       
     xj=(wi)Tuj
 最终经过 
     
      
       
       
         Softmax 
        
       
      
        \text{Softmax} 
       
      
    Softmax函数,求出第 
     
      
       
       
         j 
        
       
      
        j 
       
      
    j个位置的概率分布 
     
      
       
        
        
          p 
         
        
          j 
         
        
       
      
        p_j 
       
      
    pj。 同理,通过这种操作可以求解其他概率分布 
     
      
       
        
        
          p 
         
        
          1 
         
        
       
         , 
        
        
        
          p 
         
        
          2 
         
        
       
         , 
        
       
         ⋯ 
         
       
         , 
        
        
        
          p 
         
         
         
           ∣ 
          
         
           V 
          
         
           ∣ 
          
         
        
       
      
        p_1,p_2,\cdots,p_{|\mathcal V|} 
       
      
    p1,p2,⋯,p∣V∣。
 而最后的优化函数中的参数 
     
      
       
       
         θ 
        
       
      
        \theta 
       
      
    θ指的就是 
     
      
       
       
         Word2vec 
        
       
      
        \text{Word2vec} 
       
      
    Word2vec中的权重信息 
     
      
       
       
         W 
        
       
         , 
        
       
         U 
        
       
      
        \mathcal W,\mathcal U 
       
      
    W,U。
重点总结
本质上 
     
      
       
       
         Word2vec 
        
       
      
        \text{Word2vec} 
       
      
    Word2vec本身是一个特殊的神经网络,因为这个网络中没有激活函数。并且该模型遵循的优化策略是负均值化的对数似然:
  
      
       
        
        
          J 
         
        
          ( 
         
        
          θ 
         
        
          ) 
         
        
          = 
         
        
          − 
         
         
         
           1 
          
         
           T 
          
         
         
         
           ∑ 
          
          
          
            t 
           
          
            = 
           
          
            1 
           
          
         
           T 
          
         
         
         
           ∑ 
          
          
          
            i 
           
          
            = 
           
          
            − 
           
          
            C 
           
          
            ( 
           
          
            ≠ 
           
          
            0 
           
          
            ) 
           
          
         
           C 
          
         
        
          log 
         
        
           
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
          
          
            t 
           
          
            + 
           
          
            i 
           
          
         
        
          ∣ 
         
         
         
           w 
          
         
           t 
          
         
        
          ) 
         
        
       
         \mathcal J(\theta) = - \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i = -\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_{t+i} \mid w_t) 
        
       
     J(θ)=−T1t=1∑Ti=−C(=0)∑ClogP(wt+i∣wt)
 该似然函数中的 
     
      
       
       
         3 
        
       
      
        3 
       
      
    3个假设使得该优化过程中丢失了序列信息。它的底层逻辑就是描述输出词与输入词之间的相似性关系。
相关参考:
 词向量(Word Vector)【白板推导系列】










