word2vec原理浅析
?1.word2vec簡介
word2vec,即詞向量,就是一個詞用一個向量來表示。是2013年Google提出的。word2vec工具主要包含兩個模型:跳字模型(skip-gram)和連續(xù)詞袋模型(continuous bag of words,簡稱CBOW),以及兩種高效訓(xùn)練的方法:負(fù)采樣(negative sampling)和層序softmax(hierarchical softmax)。word2vec詞向量可以較好地表達(dá)不同詞之間的相似和類比關(guān)系。word2vec是一個NLP工具,它可以將所有的詞向量化,這樣詞與詞之間就可以定量的去度量他們之間的關(guān)系,挖掘詞之間的聯(lián)系。
NLP(自然語言處理)里面,最細(xì)粒度的是詞語,詞語組成句子,句子再組成段落、篇章、文檔。所以處理 NLP 的問題,首先要先處理詞語。詞語,是人類的抽象總結(jié),是符號形式的(比如中文、英文、拉丁文等等),所以需要把他們轉(zhuǎn)換成數(shù)值形式,或者說——嵌入到一個數(shù)學(xué)空間里,這種嵌入方式,就叫詞嵌入(word embedding),而 Word2vec,就是詞嵌入( word embedding) 的一種。簡單點(diǎn)來說就是把一個詞語轉(zhuǎn)換成對應(yīng)向量的表達(dá)形式,來讓機(jī)器讀取數(shù)據(jù)。
2.語言模型
首先我們需要先思考這樣一個問題:如何計算一段文本序列在某種語言下出現(xiàn)的概率?之所為稱其為一個基本問題,是因為它在很多NLP任務(wù)中都扮演著重要的角色。例如,在機(jī)器翻譯的問題中,如果我們知道了目標(biāo)語言中每句話的概率,就可以從候選集合中挑選出最合理的句子做為翻譯結(jié)果返回。
統(tǒng)計語言模型給出了這一類問題的一個基本解決框架。對于一段文本序列S=w1,w2,…,wT,它的概率可以表示為:
p(S)=p(w1,w2,w3,w4,w5,…,wt)
=p(w1)p(w2|w1)p(w3|w1,w2)…p(wt|w1,w2,…,wt-1)
即將序列的聯(lián)合概率轉(zhuǎn)化為一系列條件概率的乘積。問題變成了如何去預(yù)測這些給定previous words下的條件概率p(wt|w1,w2,…,wt?1)。常見的統(tǒng)計語言模型有N元文法模型(N-gram Model)
基于馬爾科夫假設(shè)(Markov Assumption):下一個詞的出現(xiàn)僅依賴于它前面的一個或幾個詞。
假設(shè)下一個詞的出現(xiàn)依賴它前面的一個詞,則有:
p(S)=p(w1)p(w2|w1)p(w3|w1,w2)…p(wn|w1,w2,…,wn-1)=p(w1)p(w2|w1)p(w3|w2)…p(wn|wn-1) // bigram
假設(shè)下一個詞的出現(xiàn)依賴它前面的兩個詞,則有:
p(S)=p(w1)p(w2|w1)p(w3|w1,w2)…p(wn|w1,w2,…,wn-1)=p(w1)p(w2|w1)p(w3|w1,w2)…p(wn|wn-1,wn-2) // trigram
那么,我們在面臨實(shí)際問題時,如何選擇依賴詞的個數(shù),即n。
更大的n:對下一個詞出現(xiàn)的約束信息更多,具有更大的辨別力;
更小的n:在訓(xùn)練語料庫中出現(xiàn)的次數(shù)更多,具有更可靠的統(tǒng)計信息,具有更高的可靠性。
理論上,n越大越好,經(jīng)驗上,trigram用的最多,盡管如此,原則上,能用bigram解決,絕不使用trigram。
3.?CBOW和skip-gram模型介紹
假設(shè)我們輸入的一句話為 The quick brown fox jumps over the lazy dog.
設(shè)定我們的窗口大小為2(window_size=2),也就是說我們僅選輸入詞前后各兩個詞和輸入詞進(jìn)行組合。
?
3.1 CBOW
CBOW模型如下圖所示,該模型的特點(diǎn)是輸入已知上下文,輸出對當(dāng)前單詞的預(yù)測。?
?
?
?假設(shè)window_size取2時,利用CBOW模型可以得到:
([quick, brown],The) ([The, brown, fox],quick) ([The, quick, fox, jumps],brown) ([quick, brown, jumps, over],fox) ......首先輸入的是one-hot向量,第一層是一個全連接層,然后沒有激活函數(shù),輸出層是一個softmax層,輸出一個概率分布,表示詞典中每個詞出現(xiàn)的概率。?
- 1 輸入層:上下文單詞的onehot. {假設(shè)單詞向量空間dim為V,上下文單詞個數(shù)為C},假定要預(yù)測的單詞是fox,那么輸入層為quick、brown、jumps、over,采用one-hot編碼,分別為[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]、[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]、[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]、[0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
- 2 所有onehot分別乘以共享的輸入權(quán)重矩陣W. {V*N矩陣,N為自己設(shè)定的數(shù),初始化權(quán)重矩陣W}
- 3 所得的向量 {因為是onehot所以為向量} 相加求平均作為隱層向量, size為1*N.
- 4 乘以輸出權(quán)重矩陣W' {N*V}
- 5 得到向量 {1*V} 激活函數(shù)處理得到V-dim概率分布 {其中的每一維度代表著一個單詞}
- 6 概率最大的index所指示的單詞為預(yù)測出的中間詞(target word)與true label的onehot做比較,誤差越小越好(根據(jù)誤差更新權(quán)重矩陣)
所以,需要定義loss function(一般為交叉熵代價函數(shù)),采用梯度下降算法更新W和W'。訓(xùn)練完畢后,輸入層的每個單詞與矩陣W相乘得到的向量的就是我們想要的詞向量,這個矩陣也叫做look up table,也就是說,任何一個單詞的onehot乘以這個矩陣都將得到自己的詞向量。
?
?3.2 skip_gram
?skip-gram只是逆轉(zhuǎn)了CBOW的因果關(guān)系而已,即已知當(dāng)前詞語,預(yù)測上下文。
下圖中,藍(lán)色代表input word,方框內(nèi)代表位于窗口內(nèi)的單詞。Training Samples(輸入, 輸出)
?假設(shè)window_size取2時,利用CBOW模型可以得到:
(The, [quick, brown]) (quick, [The, brown, fox]) (brown, [The, quick, fox, jumps]) (fox, [quick, brown, jumps, over]) ......?
4. 高效訓(xùn)練方法
在CBOW和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ò)中進(jìn)行梯度下降是相當(dāng)慢的。更糟糕的是,你需要大量的訓(xùn)練數(shù)據(jù)來調(diào)整這些權(quán)重并且避免過擬合。百萬數(shù)量級的權(quán)重矩陣和億萬數(shù)量級的訓(xùn)練樣本意味著訓(xùn)練這個模型將會是個災(zāi)難。
下面主要介紹兩種方法優(yōu)化訓(xùn)練過程。
1.負(fù)采樣(negative sampling)
負(fù)采樣解決了這個問題,它是用來提高訓(xùn)練速度并且改善所得到詞向量的質(zhì)量的一種方法。不同于原本每個訓(xùn)練樣本更新所有的權(quán)重,負(fù)采樣每次讓一個訓(xùn)練樣本僅僅更新一小部分的權(quán)重,這樣就會降低梯度下降過程中的計算量。?
2.層序softmax也是解決這個問題的一種方法。
具體細(xì)節(jié)下次分享~
?
參考文獻(xiàn):
https://blog.csdn.net/yu5064/article/details/79601683
https://www.jianshu.com/p/471d9bfbd72f
?
轉(zhuǎn)載于:https://www.cnblogs.com/cymx66688/p/11185824.html
總結(jié)
以上是生活随笔為你收集整理的word2vec原理浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jmeter_简单的关联设置
- 下一篇: MVP+WCF+三层结构搭建项目框架(上