理解word2vec的训练过程
from:http://blog.csdn.net/dn_mug/article/details/69852740
生成詞向量是自然語言處理中的基本過程,此前對此只知道使用但是一直不知道其原理。
最近補課,仔細學習了word2vec,上網查資料的時候發現很多博客資料上講到的主要是理論,不好全面理解;而對于介紹應用的文章又偏重于某個工具的使用而不是訓練的細節,所以特別參考了Tensorflow上的實現寫下本篇文章,以防忘記。其中Tensorflow實現word2vec請點擊這里
正文:
對于word2vec的原理這里不做過多解釋,如果不熟悉可以看?[NLP] 秒懂詞向量Word2vec的本質,下文中有些圖片借用了文章中的圖片,下面主要介紹訓練過程。
詞向量其實是將詞映射到一個語義空間,得到的向量。而word2vec是借用神經網絡的方式實現的,考慮文本的上下文關系,有兩種模型CBOW 和Skip-gram,這兩種模型在訓練的過程中類似。Skip-gram 模型是用一個詞語作為輸入,來預測它周圍的上下文,CBOW模型是拿一個詞語的上下文作為輸入,來預測這個詞語本身。
詞向量訓練的預處理步驟:
? 1. 對輸入的文本生成一個詞匯表,每個詞統計詞頻,按照詞頻從高到低排序,取最頻繁的V個詞,構成一個詞匯表。每個詞存在一個one-hot向量,向量的維度是V,如果該詞在詞匯表中出現過,則向量中詞匯表中對應的位置為1,其他位置全為0。如果詞匯表中不出現,則向量為全0
? 2. 將輸入文本的每個詞都生成一個one-hot向量,此處注意保留每個詞的原始位置,因為是上下文相關的
? 3. 確定詞向量的維數N
Skip-gram處理步驟:
? 1. 確定窗口大小window,對每個詞生成2*window個訓練樣本,(i, i-window),(i, i-window+1),...,(i, i+window-1),(i, i+window)
? 2. 確定batch_size,注意batch_size的大小必須是2*window的整數倍,這確保每個batch包含了一個詞匯對應的所有樣本
? 3. 訓練算法有兩種:層次 Softmax 和 Negative Sampling
? 4. 神經網絡迭代訓練一定次數,得到輸入層到隱藏層的參數矩陣,矩陣中每一行的轉置即是對應詞的詞向量
CBOW的處理步驟:
? 1. 確定窗口大小window,對每個詞生成2*window個訓練樣本,(i-window, i),(i-window+1, i),...,(i+window-1, i),(i+window, i)
? 2. 確定batch_size,注意batch_size的大小必須是2*window的整數倍,這確保每個batch包含了一個詞匯對應的所有樣本
? 3. 訓練算法有兩種:層次 Softmax 和 Negative Sampling
? 4. 神經網絡迭代訓練一定次數,得到輸入層到隱藏層的參數矩陣,矩陣中每一行的轉置即是對應詞的詞向量
參數矩陣解釋:
對輸入層到隱藏層的參數包含W和b,我們需要的是W,這里的W是一個矩陣,shape=(N,V)。其中V是上文所述的詞表的大小,N是需要生成的詞向量的維數。N同樣也是隱藏層(第一層)中的隱藏節點個數。
每次一個batch_size輸入其實一個矩陣(batch_size, V),記為X,隱藏層輸出為Y,公式為。所有的輸入共享一個W,每次迭代的時候都在修改W,由于one-hot的性質,每次修改W只修改1對應的那一行。而這一行也就是詞向量(轉置后)
神經網絡像是一個黑盒子,這其中的概念很難理解,這里給出我對詞向量訓練的個人理解:
對于每個詞s,訓練數據對應的標記是另一個詞t,訓練其實是想找到一種映射關系,讓s映射到t。但很顯然我們不是希望找到一個線性函數,使得給定s一定能得到t,我們希望的是能夠通過s得到一類詞T,包含t。對于T中的每個t,由于在s上下文中出現的頻次不同,自然能得到一個概率,頻次越高說明s與t相關性越高。
對于詞向量,或者說參數矩陣W,可以認為是一個將詞映射到語義空間的橋梁,s與t相關性越高,則認為其在語義空間中越近,那么對應的橋梁也越靠近。如果用向量來理解的話就是向量之前的夾角越小,我們使用向量來表示這個詞的信息,重要的是得到了語義信息。在實際應用中,生成一段文本,我們可以判斷詞與詞的向量之間相似度,如果過低則就需要懷疑是否正確了。
總結
以上是生活随笔為你收集整理的理解word2vec的训练过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一篇: 词向量之Word2vector
- 下一篇: Github上Pandas,Numpy和