1. 程式人生 > >Word2Vec詞向量(一)

Word2Vec詞向量(一)

 一、詞向量基礎(一)來源背景
   word2vec是google在2013年推出的一個NLP工具,它的特點是將所有的詞向量化,這樣詞與詞之間就可以定量的去度量他們之間的關係,挖掘詞之間的聯絡。雖然原始碼是開源的,但是谷歌的程式碼庫國內無法訪問,                       
        因此本文的講解word2vec原理以Github上的word2vec程式碼為準。

     最早的詞向量是使用one-hot編碼表示的(就是有多少個詞就有多少維度,每個詞對應的位置是1, 其他位置是0), 如下圖:


          

  這樣表示最大的確定就是我們的詞彙表一般都非常大,比如達到百萬級別,這樣每個詞都用百萬維的向量來表示簡直是記憶體的災難。
        

       分散式表示可以解決One-hot方式的問題,它的思路是通過訓練,將每個詞都對映到一個較短的詞向量上來。所有的這些詞向量就構成了向量空間,
       進而可以用普通的統計學的方法來研究詞與詞之間的關係。這個較短的詞向量維度是多大呢?這個一般需要我們在訓練時自己來指定。

       比如下圖我們將詞彙表裡的詞用"Royalty","Masculinity", "Femininity"和"Age"4個維度來表示,King這個詞對應的詞向量可能是(0.99,0.99,0.05,0.7)(0.99,0.99,0.05,0.7)。
       當然在實際情況中,我們並不能對詞向量的每個維度做一個很好的解釋。

      

       有了用分散式表示的較短的詞向量,我們就可以較容易的分析詞之間的關係了,比如我們將詞的維度降維到2維,有一個有趣的研究表明,用下圖的詞向量表示我們的詞時,我們可以發現:

      

    

  可見我們只要得到了詞彙表裡所有詞對應的詞向量,那麼我們就可以做很多有趣的事情了。不過,怎麼訓練得到合適的詞向量呢?一個很常見的方法是使用神經網路語言模型。

    二、詞向量基礎(CBOW與Skip-Gram模型)

   通俗解釋: 

    CBOW((Continuous Bag-of-Words)模型根據中心詞W(t)周圍的詞來預測中心詞
   Skip-gram模型則根據中心詞W(t)來預測周圍詞