论文地址:Efficient Estimation of Word Representations in Vector Space
 个人认为,word2vec主要解决的问题是one-hot中维度过高并且稀疏的问题。word2vec是Google团队在2013年发表的一篇paper,当时一经问世直接将NLP领域带到了一个新的高度,在2018年bert被提出之前,word2vec一直是NLP算法工程师追捧的预训练词向量模型。
 Word2Vec是轻量级的神经网络,其模型仅仅包括输入层、隐藏层和输出层,模型框架根据输入输出的不同,主要包括CBOW和Skip-gram模型。CBOW是知道 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           2 
          
         
        
       
      
        w_{t-2} 
       
      
    wt−2, 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           1 
          
         
        
       
      
        w_{t-1} 
       
      
    wt−1, 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           1 
          
         
        
       
      
        w_{t+1} 
       
      
    wt+1, 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           2 
          
         
        
       
      
        w_{t+2} 
       
      
    wt+2,预测 
     
      
       
        
        
          w 
         
        
          t 
         
        
       
      
        w_t 
       
      
    wt.而Skip-gram是知道 
     
      
       
        
        
          w 
         
        
          t 
         
        
       
      
        w_t 
       
      
    wt,预测 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           2 
          
         
        
       
      
        w_{t-2} 
       
      
    wt−2, 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           1 
          
         
        
       
      
        w_{t-1} 
       
      
    wt−1, 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           1 
          
         
        
       
      
        w_{t+1} 
       
      
    wt+1, 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           2 
          
         
        
       
      
        w_{t+2} 
       
      
    wt+2
 
 首先,输入层是一个one-hot向量,具体细节请看前面的博客。例如 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           2 
          
         
        
       
         = 
        
       
         [ 
        
       
         0 
        
       
         , 
        
       
         0 
        
       
         , 
        
       
         1 
        
       
         , 
        
       
         0 
        
       
         , 
        
       
         0 
        
       
         , 
        
       
         0 
        
       
         ] 
        
       
      
        w_{t-2}=[0,0,1,0,0,0] 
       
      
    wt−2=[0,0,1,0,0,0] 经过一个矩阵 
      
       
        
        
          [ 
         
         
          
           
            
            
              0 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
          
          
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              0 
             
            
           
          
          
           
            
            
              3 
             
            
           
           
            
            
              5 
             
            
           
           
            
            
              6 
             
            
           
          
          
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              0 
             
            
           
          
          
           
            
            
              1 
             
            
           
           
            
            
              0 
             
            
           
           
            
            
              1 
             
            
           
          
         
        
          ] 
         
        
       
         \begin{bmatrix} 0&1&1\\ 1&1&0\\ 3&5&6\\ 1&1&0\\ 1&0&1\\ \end{bmatrix} 
        
       
      
              013111151010601 
              将高维度的one-hot向量映射为低维度的向量 
     
      
       
       
         [ 
        
       
         3 
        
       
         , 
        
       
         5 
        
       
         , 
        
       
         6 
        
        
        
          ] 
         
        
          T 
         
        
       
      
        [3,5,6]^T 
       
      
    [3,5,6]T,再经过一个矩阵,把低维向量映射回高维,得到输出层 
      
       
        
        
          [ 
         
         
          
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
          
          
           
            
            
              3 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              0 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
          
          
           
            
            
              2 
             
            
           
           
            
            
              5 
             
            
           
           
            
            
              6 
             
            
           
           
            
            
              1 
             
            
           
           
            
            
              1 
             
            
           
          
         
        
          ] 
         
        
       
         \begin{bmatrix} 1&1&1&1&1\\ 3&1&0&1&1\\ 2&5&6&1&1\\ \end{bmatrix} 
        
       
      
              132115106111111 
              这样可以得到输出为 
     
      
       
       
         [ 
        
       
         30 
        
       
         , 
        
       
         38 
        
       
         , 
        
       
         39 
        
       
         , 
        
       
         14 
        
       
         , 
        
       
         14 
        
        
        
          ] 
         
        
          T 
         
        
       
      
        [30,38,39,14,14]^T 
       
      
    [30,38,39,14,14]T这就是根据 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           2 
          
         
        
       
      
        w_{t-2} 
       
      
    wt−2预测得到 
     
      
       
        
        
          w 
         
        
          t 
         
        
       
      
        w_t 
       
      
    wt的结果,将 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           2 
          
         
        
       
      
        w_{t-2} 
       
      
    wt−2扩展到 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           − 
          
         
           1 
          
         
        
       
      
        w_{t-1} 
       
      
    wt−1, 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           1 
          
         
        
       
      
        w_{t+1} 
       
      
    wt+1, 
     
      
       
        
        
          w 
         
         
         
           t 
          
         
           + 
          
         
           2 
          
         
        
       
      
        w_{t+2} 
       
      
    wt+2就是多几个输入的one-hot向量的问题。同理Skip-gram也是一样。总的来说就是一个从高维映射到低维再映射回去的过程。
参考:
- 详解Word2Vec原理篇
- 深入浅出Word2Vec原理解析



















