丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習社
發(fā)送

0

一文詳解 Word2vec 之 Skip-Gram 模型(訓練篇)

本文作者: AI研習社 2017-06-23 10:34
導語:這可能是關(guān)于 Skip-Gram 模型最詳細的講解。

雷鋒網(wǎng)按:這是一個關(guān)于 Skip-Gram 模型的系列教程,依次分為結(jié)構(gòu)、訓練和實現(xiàn)三個部分,本文為第二部分:訓練篇,最后一部分我們將隨后發(fā)布,敬請期待。原文作者天雨粟,原載于作者知乎專欄,雷鋒網(wǎng)已獲授權(quán)。

第一部分我們了解skip-gram的輸入層、隱層、輸出層。在第二部分,會繼續(xù)深入講如何在skip-gram模型上進行高效的訓練。

在第一部分講解完成后,我們會發(fā)現(xiàn)Word2Vec模型是一個超級大的神經(jīng)網(wǎng)絡(luò)(權(quán)重矩陣規(guī)模非常大)。

舉個栗子,我們擁有10000個單詞的詞匯表,我們?nèi)绻肭度?00維的詞向量,那么我們的輸入-隱層權(quán)重矩陣隱層-輸出層的權(quán)重矩陣都會有 10000 x 300 = 300萬個權(quán)重,在如此龐大的神經(jīng)網(wǎng)絡(luò)中進行梯度下降是相當慢的。更糟糕的是,你需要大量的訓練數(shù)據(jù)來調(diào)整這些權(quán)重并且避免過擬合。百萬數(shù)量級的權(quán)重矩陣和億萬數(shù)量級的訓練樣本意味著訓練這個模型將會是個災(zāi)難(太兇殘了)。

Word2Vec 的作者在它的第二篇論文中強調(diào)了這些問題,下面是作者在第二篇論文中的三個創(chuàng)新:

1. 將常見的單詞組合(word pairs)或者詞組作為單個“words”來處理。

2. 對高頻次單詞進行抽樣來減少訓練樣本的個數(shù)。

3. 對優(yōu)化目標采用“negative sampling”方法,這樣每個訓練樣本的訓練只會更新一小部分的模型權(quán)重,從而降低計算負擔。

事實證明,對常用詞抽樣并且對優(yōu)化目標采用“negative sampling”不僅降低了訓練過程中的計算負擔,還提高了訓練的詞向量的質(zhì)量。

Word pairs and "phases"

論文的作者指出,一些單詞組合(或者詞組)的含義和拆開以后具有完全不同的意義。比如“Boston Globe”是一種報刊的名字,而單獨的“Boston”和“Globe”這樣單個的單詞卻表達不出這樣的含義。因此,在文章中只要出現(xiàn)“Boston Globe”,我們就應(yīng)該把它作為一個單獨的詞來生成其詞向量,而不是將其拆開。同樣的例子還有“New York”,“United Stated”等。

在Google發(fā)布的模型中,它本身的訓練樣本中有來自Google News數(shù)據(jù)集中的1000億的單詞,但是除了單個單詞以外,單詞組合(或詞組)又有3百萬之多。

如果你對模型的詞匯表感興趣,可以點擊:

http://t.cn/RoVde3h

你還可以直接瀏覽這個詞匯表:

http://t.cn/RoVdsZr

如果想了解這個模型如何進行文檔中的詞組抽取,可以看論文中“Learning Phrases”這一章,對應(yīng)的代碼在 word2phrase.c ,相關(guān)鏈接如下。

論文鏈接:

http://t.cn/RMct1c7

代碼鏈接:

http://t.cn/R5auFLz

對高頻詞抽樣

在第一部分的講解中,我們展示了訓練樣本是如何從原始文檔中生成出來的,這里我再重復一次。我們的原始文本為“The quick brown fox jumps over the laze dog”,如果我使用大小為2的窗口,那么我們可以得到圖中展示的那些訓練樣本。

一文詳解 Word2vec 之 Skip-Gram 模型(訓練篇)

但是對于“the”這種常用高頻單詞,這樣的處理方式會存在下面兩個問題:

  1. 當我們得到成對的單詞訓練樣本時,("fox", "the") 這樣的訓練樣本并不會給我們提供關(guān)于“fox”更多的語義信息,因為“the”在每個單詞的上下文中幾乎都會出現(xiàn)。

  2. 由于在文本中“the”這樣的常用詞出現(xiàn)概率很大,因此我們將會有大量的(”the“,...)這樣的訓練樣本,而這些樣本數(shù)量遠遠超過了我們學習“the”這個詞向量所需的訓練樣本數(shù)。

Word2Vec通過“抽樣”模式來解決這種高頻詞問題。它的基本思想如下:對于我們在訓練原始文本中遇到的每一個單詞,它們都有一定概率被我們從文本中刪掉,而這個被刪除的概率與單詞的頻率有關(guān)。
如果我們設(shè)置窗口大?。矗?,并且從我們的文本中刪除所有的“the”,那么會有下面的結(jié)果:

1. 由于我們刪除了文本中所有的“the”,那么在我們的訓練樣本中,“the”這個詞永遠也不會出現(xiàn)在我們的上下文窗口中。

2. 當“the”作為input word時,我們的訓練樣本數(shù)至少會減少10個。

這句話應(yīng)該這么理解,假如我們的文本中僅出現(xiàn)了一個“the”,那么當這個“the”作為input word時,我們設(shè)置span=10,此時會得到10個訓練樣本 ("the", ...) ,如果刪掉這個“the”,我們就會減少10個訓練樣本。實際中我們的文本中不止一個“the”,因此當“the”作為input word的時候,至少會減少10個訓練樣本。

上面提到的這兩個影響結(jié)果實際上就幫助我們解決了高頻詞帶來的問題。

抽樣率

word2vec的C語言代碼實現(xiàn)了一個計算在詞匯表中保留某個詞概率的公式。

ω是一個單詞,Z(ωi) 是 ωi 這個單詞在所有語料中出現(xiàn)的頻次。舉個栗子,如果單詞“peanut”在10億規(guī)模大小的語料中出現(xiàn)了1000次,那么 Z(peanut) = 1000/1000000000 = 1e - 6。

在代碼中還有一個參數(shù)叫“sample”,這個參數(shù)代表一個閾值,默認值為0.001(在gensim包中的Word2Vec類說明中,這個參數(shù)默認為0.001,文檔中對這個參數(shù)的解釋為“ threshold for configuring which higher-frequency words are randomly downsampled”)。這個值越小意味著這個單詞被保留下來的概率越?。从性酱蟮母怕时晃覀儎h除)。

P(ωi) 代表著保留某個單詞的概率:

一文詳解 Word2vec 之 Skip-Gram 模型(訓練篇)

一文詳解 Word2vec 之 Skip-Gram 模型(訓練篇)

圖中x軸代表著 Z(ωi) ,即單詞 ωi 在語料中出現(xiàn)頻率,y軸代表某個單詞被保留的概率。對于一個龐大的語料來說,單個單詞的出現(xiàn)頻率不會很大,即使是常用詞,也不可能特別大。

從這個圖中,我們可以看到,隨著單詞出現(xiàn)頻率的增高,它被采樣保留的概率越來越小,我們還可以看到一些有趣的結(jié)論:

● 當 Z(ωi) <= 0.0026 時,P(ωi) = 1.0 。當單詞在語料中出現(xiàn)的頻率小于 0.0026 時,它是 100% 被保留的,這意味著只有那些在語料中出現(xiàn)頻率超過 0.26% 的單詞才會被采樣。

● 當時 Z(ωi) = 0.00746 時,P(ωi) = 0.5,意味著這一部分的單詞有 50% 的概率被保留。

● 當 Z(ωi) = 1.0 時,P(ωi) = 0.033,意味著這部分單詞以 3.3% 的概率被保留。

如果你去看那篇論文的話,你會發(fā)現(xiàn)作者在論文中對函數(shù)公式的定義和在C語言代碼的實現(xiàn)上有一些差別,但我認為C語言代碼的公式實現(xiàn)是更權(quán)威的一個版本。

負采樣(negative sampling)

訓練一個神經(jīng)網(wǎng)絡(luò)意味著要輸入訓練樣本并且不斷調(diào)整神經(jīng)元的權(quán)重,從而不斷提高對目標的準確預測。每當神經(jīng)網(wǎng)絡(luò)經(jīng)過一個訓練樣本的訓練,它的權(quán)重就會進行一次調(diào)整。

正如我們上面所討論的,vocabulary的大小決定了我們的Skip-Gram神經(jīng)網(wǎng)絡(luò)將會擁有大規(guī)模的權(quán)重矩陣,所有的這些權(quán)重需要通過我們數(shù)以億計的訓練樣本來進行調(diào)整,這是非常消耗計算資源的,并且實際中訓練起來會非常慢。

負采樣(negative sampling)解決了這個問題,它是用來提高訓練速度并且改善所得到詞向量的質(zhì)量的一種方法。不同于原本每個訓練樣本更新所有的權(quán)重,負采樣每次讓一個訓練樣本僅僅更新一小部分的權(quán)重,這樣就會降低梯度下降過程中的計算量。

當我們用訓練樣本 ( input word: "fox",output word: "quick") 來訓練我們的神經(jīng)網(wǎng)絡(luò)時,“ fox”和“quick”都是經(jīng)過one-hot編碼的。如果我們的vocabulary大小為10000時,在輸出層,我們期望對應(yīng)“quick”單詞的那個神經(jīng)元結(jié)點輸出1,其余9999個都應(yīng)該輸出0。在這里,這9999個我們期望輸出為0的神經(jīng)元結(jié)點所對應(yīng)的單詞我們稱為“negative” word。

當使用負采樣時,我們將隨機選擇一小部分的negative words(比如選5個negative words)來更新對應(yīng)的權(quán)重。我們也會對我們的“positive” word進行權(quán)重更新(在我們上面的例子中,這個單詞指的是”quick“)。

在論文中,作者指出指出對于小規(guī)模數(shù)據(jù)集,選擇5-20個negative words會比較好,對于大規(guī)模數(shù)據(jù)集可以僅選擇2-5個negative words。

回憶一下我們的隱層-輸出層擁有300 x 10000的權(quán)重矩陣。如果使用了負采樣的方法我們僅僅去更新我們的positive word-“quick”的和我們選擇的其他5個negative words的結(jié)點對應(yīng)的權(quán)重,共計6個輸出神經(jīng)元,相當于每次只更新 300 x 6 = 1800 個權(quán)重。對于3百萬的權(quán)重來說,相當于只計算了0.06%的權(quán)重,這樣計算效率就大幅度提高。

如何選擇negative words

我們使用“一元模型分布(unigram distribution)”來選擇“negative words”。

要注意的一點是,一個單詞被選作negative sample的概率跟它出現(xiàn)的頻次有關(guān),出現(xiàn)頻次越高的單詞越容易被選作negative words。

在word2vec的C語言實現(xiàn)中,你可以看到對于這個概率的實現(xiàn)公式。每個單詞被選為“negative words”的概率計算公式與其出現(xiàn)的頻次有關(guān)。

代碼中的公式實現(xiàn)如下:

一文詳解 Word2vec 之 Skip-Gram 模型(訓練篇)

每個單詞被賦予一個權(quán)重,即 f(ωi), 它代表著單詞出現(xiàn)的頻次。

公式中開3/4的根號完全是基于經(jīng)驗的,論文中提到這個公式的效果要比其它公式更加出色。你可以在google的搜索欄中輸入“plot y = x^(3/4) and y = x”,然后看到這兩幅圖(如下圖),仔細觀察x在[0,1]區(qū)間內(nèi)時y的取值,x^(3/4) 有一小段弧形,取值在 y = x 函數(shù)之上。

一文詳解 Word2vec 之 Skip-Gram 模型(訓練篇)

負采樣的C語言實現(xiàn)非常的有趣。unigram table有一個包含了一億個元素的數(shù)組,這個數(shù)組是由詞匯表中每個單詞的索引號填充的,并且這個數(shù)組中有重復,也就是說有些單詞會出現(xiàn)多次。那么每個單詞的索引在這個數(shù)組中出現(xiàn)的次數(shù)該如何決定呢,有公式,也就是說計算出的負采樣概率*1億=單詞在表中出現(xiàn)的次數(shù)。

有了這張表以后,每次去我們進行負采樣時,只需要在0-1億范圍內(nèi)生成一個隨機數(shù),然后選擇表中索引號為這個隨機數(shù)的那個單詞作為我們的negative word即可。一個單詞的負采樣概率越大,那么它在這個表中出現(xiàn)的次數(shù)就越多,它被選中的概率就越大。

到目前為止,Word2Vec中的Skip-Gram模型就講完了,對于里面具體的數(shù)學公式推導細節(jié)這里并沒有深入。這篇文章只是對于實現(xiàn)細節(jié)上的一些思想進行了闡述。

其他資料

如果想了解更多的實現(xiàn)細節(jié),可以去查看C語言的實現(xiàn)源碼:

http://t.cn/R6w6Vi7

其他Word2Vec教程請參考:

http://t.cn/R6w6ViZ

下一部分將會介紹如何用 TensorFlow 實現(xiàn)一個 Word2Vec 中的 Skip-Gram 模型。

雷鋒網(wǎng)相關(guān)閱讀:

一文詳解 Word2vec 之 Skip-Gram 模型(結(jié)構(gòu)篇)

一文詳解 Word2vec 之 Skip-Gram 模型(實現(xiàn)篇)

25 行 Python 代碼實現(xiàn)人臉檢測——OpenCV 技術(shù)教程

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

一文詳解 Word2vec 之 Skip-Gram 模型(訓練篇)

分享:
相關(guān)文章

編輯

聚焦數(shù)據(jù)科學,連接 AI 開發(fā)者。更多精彩內(nèi)容,請訪問:yanxishe.com
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說