word2vec模型本質:是乙個用來生成詞向量的、簡單的神經網路模型。
通過計算相似度來降低原來輸入詞的維度,舉個例子:
圖.甲
網路結構如下:
圖.乙
如乙圖所示,我們一開始輸入的是one-hot編碼後的向量,1位於第7位,其對應的輸入層到隱藏層的權重矩陣w一定是第7行,如下圖示意
圖.丙
丙圖示意的是第三行,如果輸入one-hot編碼過了,那就將one-hot編碼後的輸入再tokenize轉化回去(如果沒有one-hot的話,直接tokenize獲取索引即可),查詢w索引值為3的行,拿出來即可,拿出來的就是詞向量原來需要計算那麼多次乘法,現在只需查表即可。
圖甲那張圖的全過程稱之為池化向量。
圖.丁
圖丁,全連線層是沒有啟用函式的,output到**值時的啟用函式為softmax,也可以為sigmoid,沒有規定必須用哪個,此圖為原始的池化向量過程。下面的負取樣是解決反向傳播時複雜的乘法計算。
負取樣:
在訓練神經網路時,每當接受乙個訓練樣本,然後調整所有神經單元權重引數,來使神經網路**更加準確。換句話說,每個訓練樣本都將會調整所有神經網路中的引數。
我們詞彙表的大小決定了我們skip-gram 神經網路將會有乙個非常大的權重引數,並且所有的權重引數會隨著數十億訓練樣本不斷調整。
negative sampling (負例樣本,即one-hot編碼後的為0的那些位置的樣本)每次讓乙個訓練樣本僅僅更新一小部分的權重引數,從而降低梯度下降過程中的計算量。
如果 vocabulary 大小為1萬時, 當輸入樣本 ( "fox", "quick") 到神經網路時, 「 fox」 經過 one-hot 編碼,在輸出層我們期望對應 「quick」 單詞的那個神經元結點輸出 1,其餘 9999 個都應該輸出 0。在這裡,這9999個我們期望輸出為0的神經元結點所對應的單詞我們為 negative word. negative sampling 的想法也很直接 ,將隨機選擇一小部分的 negative words,比如選 10個 negative words 來更新對應的權重引數。
在**中作者指出指出對於小規模資料集,建議選擇 5-20 個 negative words,對於大規模資料集選擇 2-5個 negative words.
如果使用了 negative sampling 僅僅去更新positive word- 「quick」 和選擇的其他 10 個negative words 的結點對應的權重,共計 11 個輸出神經元,相當於每次只更新 300 x 11 = 3300 個權重引數。對於 3百萬 的權重來說,相當於只計算了千分之一的權重,這樣計算效率就大幅度提高。
使用 一元模型分布 (unigram distribution) 來選擇 negative words,乙個單詞被選作 negative sample 的概率跟它出現的頻次有關,出現頻次越高的單詞越容易被選作negative words,經驗公式為:
f(w) 代表 每個單詞被賦予的乙個權重,即 它單詞出現的詞頻,分母 代表所有單詞的權重和。公式中3/4完全是基於經驗的,**中提到這個公式的效果要比其它公式更加出色。
與word2vec 原來word2vec那麼簡單
說到word2vec,它可謂非結構化資料裡面的佼佼者,尤其是在推薦和nlp當中,足以體現它的優勢所在,並且多年一直備受工業界喜愛.那麼word2vec到底是怎麼個原理的,發現身邊總是有很多人問,確不能準確的說出為什麼是兩個矩陣,到底是怎麼自動反向傳播的,以及對於softmax之後那麼大的維度資料,是...
Word2Vec教程 Skip Gram模型
這個教程包含 訓練word2vec的 skip gram 模型。通過這個教程,我希望跳過常規word2vec 的介紹和抽象理解,而是去討論一些細節。特別是skip gram的網路結構。skipgram model 常常讓人驚訝於它的簡單結構。我認為基本沒啥彎路,或者需要複雜的模型解釋。讓我們從高層語...
小小word2vec模型訓練
嗨,好久不見啊!今天我們來完成乙個word2vec模型訓練,學習筆記有挺多人寫的,不瞞您說,小白也是看別人的部落格學習的。所以這次,小白就直接上手例項啦,一起嘛?首先介紹一下模型引數 通過jieba分詞 import jieba import pandas as pd 把文字檔案讀進來,再分詞,去停...