Word2Vec教程 Skip Gram模型

2021-08-02 03:38:43 字數 3162 閱讀 3712

這個教程包含 訓練word2vec的 skip-gram 模型。通過這個教程,我希望跳過常規word2vec 的介紹和抽象理解, 而是去討論一些細節。特別是skip gram的網路結構。

skipgram model 常常讓人驚訝於它的簡單結構。我認為基本沒啥彎路,或者需要複雜的模型解釋。

讓我們從高層語義開始。word2vec 使用了乙個小trick,你可能在其他machine learning問題中見過。我們訓練乙個簡單的網路來執行乙個任務,但是最乎我們實際上並沒有用這個網路 來** test中的任務。而是,利用這個任務(目標)去學習網路中的權重w。我們將看到這些學出來的權重w就是我們所要的詞向量(word vectors)。

你可能會見到這個trick,的另乙個地方是 auto-encoder。 auto-encoder 常常用來壓縮乙個輸入,然後再把壓縮後的結果解壓回去。在訓練完成之後,你可以把解壓的網路扔掉,只使用壓縮的網路。這就是乙個trick來獲得 無監督下 好的影象特徵。
那現在我們來討論一下我們所要建立網路的訓練任務(假任務)。然後我們再來討論為什麼這個任務可以間接地學習到想要的word vector。

給定句子中乙個特定的詞(input word),隨機選它附近的乙個詞。網路的目標是** 我們選到這個附近詞的概率。

實際上這個「附近「,是乙個視窗。乙個常用的視窗大小為5,意味著 輸入詞前方的5個詞,後方的5個詞。
輸出的概率實際上關係到周圍的每乙個詞。比如,如果你給出乙個詞蘇聯(soviet),那麼概率很高的輸出 應該是 聯合(union)和俄羅斯(russia)而不是西瓜或者袋鼠。

我們通過給網路 輸入我們在訓練文字中 找到的詞對,來訓練網路。下面這個例子展示了從「the quick brown fox jumps over the lazy dog.「 中找到的一些詞對. 我使用了window size=2,而藍色標出的詞為輸入詞。

網路將會去學這些pair出現的統計概率。舉個例子來說,網路會得到很多 (蘇聯,聯合)的概率多過(蘇聯,大腳怪)。所以當訓練完成的時候,當你輸入了蘇聯這個詞,聯合會得到比大腳怪更高的**概率。

首先,你不能把word變成乙個string輸入給網路,所以我們要找另外乙個形式。所以我們首先建立乙個word的詞典,比如我們有10,000個不同的詞,那麼我們就建立乙個10,000的詞典。

「ants「就可以變成乙個10,000維的向量。這個向量每一維代表乙個詞,我們把代表「ants「的那一維置為1,其他維置為0。

而網路的輸出也是一樣也是乙個 10,000維的向量,代表每個詞**的概率。

網路結構如下圖:

網路中沒有啟用函式,輸出使用的是softmax。我們等下再回來討論。

當使用這個網路來訓練詞pair的時候,訓練的輸入是one-hot向量 訓練的目標輸出也是乙個one-hot向量。但實際test這個網路的時候,輸出會是乙個概率分布。

(譯者按:打個比方,蘇聯只 和 聯合/俄羅斯 有交集,所以會收斂到 50%, 50% 的分布。而不是 聯合就是100%。 當然test的時候也可以找最高概率的結果,那也是one-hot。)

我們需要學習300維的word vector。所以我們使用的隱層將是 10,000行 (詞典中詞的數量)和 300列的 (每個隱層神經元)。

300 是google公布出來在google news 上訓練使用的維數,你可以通過這個鏈結([
如果你從行的角度看,這個隱層的w實際上就是我們要的word vector。

所以最終目標就是 讓網路學習 隱層中的權重。當我們訓練完成的時候,我們就可以把後半部分 output層給去掉了。

好,讓我們回到之前的模型的定義。

現在你可能在問自己,one-hot向量就是基本全是0,只有乙個是1的向量,那麼這會產生什麼結果呢? 當你用 1×

10,000 乘 10,

000×

300 的矩陣,他相當於只選擇了那一行『1『的。下面是乙個簡單的例子:

這意味著這個網路的隱層實際上就是像乙個 查詢表(lookup table)一樣。輸出的300維就是這個詞的word vector。

『ant『的1×

300 的word vector 然後傳到了輸出層。輸出層是乙個softmax 的分類器(譯者按:我認為不是regression,就是classification吧)主旨就是把每個輸出normal到0~1之間,並且這些輸出的和為1。

更具體的來說,每個word vector(1×

300 )將會乘乙個w(

300×10,

000 )再次對映到 10,000維,每一維代表臨近詞的概率。而這些概率做乙個softmax的normal(就是圖中的ex

p 的函式,來歸一化)。 下面是一張說明圖。

需要注意的是,神經網路彬不知道輸出詞對於輸入詞的位置。輸出詞常常在輸入詞的前面還是後面。舉個例子來說,雖然york 100%是跟在 new的後面,但是訓練出來的網路 用york 作為輸入,new 並不是100%的,還可能是其詞。
讓我們對這個網路做乙個直覺上的感受。

如果兩個不同的詞有相同的上下文,那麼我們的模型會需要**類似的輸出。那麼網路為了輸出類似的**,他就會使這兩個不同詞的word vector盡可能相似。所以,如果兩個詞有相同的上下文,我們就可以得到比較接近的word vector。

那麼什麼詞有相同的上下文? 比如一些近義詞 smart 和intelligent 再比如 一些相關的詞 engine 和 transmission。

這也可以幫你處理一些形式變化。比如 ant 和ants 因為他們應該有類似的上下文。

你可能注意到 skip-gram 有很多權重需要學習。 舉個例子說,300維特徵,10,000的詞表, 3m

b×2

與word2vec 原來word2vec那麼簡單

說到word2vec,它可謂非結構化資料裡面的佼佼者,尤其是在推薦和nlp當中,足以體現它的優勢所在,並且多年一直備受工業界喜愛.那麼word2vec到底是怎麼個原理的,發現身邊總是有很多人問,確不能準確的說出為什麼是兩個矩陣,到底是怎麼自動反向傳播的,以及對於softmax之後那麼大的維度資料,是...

word2vec學習參考

最近看nlp的東西比較多。就拿現在google 基於神經網路做的 word2vec 作為部落格的開始吧,今後會陸陸續續補充內容。基本是分4塊內容 1.神經網路語言模型 2.語言模型分層優化 3.word2vec 原理 4.google word2vec 看一點寫一點,先扔些參考資料鏈接上去。附上在研...

Word2Vec知識總結

word2vec是乙個產生詞向量的模型,是乙個雙層的神經網路 非常善於找出詞彙的相似度,同時可用於處理之前的技術 像one hot編碼和wordnet 處理不了的語義關係。它可以利用神經網路從大量的無標註的文字中提取有用資訊。我們也可以將它看成是乙個工具,它裡面包含了三種重要的模型 1 nnlm 神...