【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
文章目錄
- 詞向量基礎(chǔ)
- One-hot represention
- Distributed Representation
- word2vec 基礎(chǔ)知識(shí)
- CBOW 和 Skip-gram
- 霍夫曼樹(shù)
系列文章:
由于計(jì)算機(jī)不能直接對(duì)各種字符進(jìn)行運(yùn)算,為此需要將詞的表示進(jìn)行一些轉(zhuǎn)換。因此,在自然語(yǔ)言處理中,通常需要對(duì)輸入的語(yǔ)料進(jìn)行一些預(yù)處理:
其中,如何對(duì)詞匯進(jìn)行表示是很關(guān)鍵的問(wèn)題,糟糕的表示方法容易導(dǎo)致所謂的 “Garbage in, garbage out”。
詞向量基礎(chǔ)
對(duì)詞匯的表示,常見(jiàn)的有One-hot represention 和 Distributed Representation 兩種形式。
One-hot represention
One-hot represention 將詞匯用二進(jìn)制向量表示,這個(gè)向量表示的詞匯,僅僅在詞匯表中的索引位置處為1,其他地方都為0。例子如下圖所示:
這樣的方式表示詞匯雖然簡(jiǎn)單,但是也有如下缺點(diǎn):
- 單詞的上下文丟失了。
- 沒(méi)有考慮頻率信息。
- 詞匯量大的情況下,向量維度高且稀疏,占用內(nèi)存。
Distributed Representation
Distributed Representation 也可以理解為Word Embedding,具體形式為:
注意到,使用Word Embedding得到的向量維度遠(yuǎn)小于詞匯表的個(gè)數(shù)。如果將上面的向量在空間中表示,可以得到:
上圖告訴我們,通過(guò)詞向量之間的距離可以度量他們之間的關(guān)系,意思相近的詞在空間中的距離比較近。出現(xiàn)這種現(xiàn)象的原因是,我們最后得到的詞向量在訓(xùn)練過(guò)程中學(xué)習(xí)到了詞的上下文。
那么,Distributed Representation 要如何得到?
之前介紹的神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型可以得到。
接下來(lái)要介紹的 word2vec 就是另一種更受歡迎的方法。
word2vec 基礎(chǔ)知識(shí)
word2vec 是 Google 于 2013 年推出的一個(gè)用于獲取 word vector 的工具包,它簡(jiǎn)單、高效,因此引起了很多人的關(guān)注。在正式講解 word2vec 前,還需要對(duì)一些基本概念有所了解。
CBOW 和 Skip-gram
CBOW 的思想是輸入是某一個(gè)詞wtw_twt?的上下文相關(guān)的詞對(duì)應(yīng)的詞向量,而輸出就是wtw_twt?的詞向量。如下圖所示:
可以看到,模型對(duì)輸入的上下文詞匯進(jìn)行了求和運(yùn)算,使用求和后的向量表示上下文的信息,然后學(xué)習(xí)wtw_twt?的向量表示。
Skip-Gram 的思想是和 CBOW 的思路是反著來(lái)的,即輸入是特定的一個(gè)詞wtw_twt?的詞向量,而輸出是特定詞對(duì)應(yīng)的上下文詞向量。
word2vec 根據(jù)輸入輸出形式的不同,可以分為CBOW (Continuous Bag-of-Words) 與Skip-Gram兩種模型。
霍夫曼樹(shù)
一般情況下,詞匯表中詞匯的數(shù)量是非常多的,如果用傳統(tǒng)的DNN+Softmax的方式來(lái)訓(xùn)練詞向量,計(jì)算量太大了。于是,word2vec 使用的數(shù)據(jù)結(jié)構(gòu)是用霍夫曼樹(shù)來(lái)代替隱藏層和輸出層的神經(jīng)元。霍夫曼樹(shù)的葉子節(jié)點(diǎn)起到輸出層神經(jīng)元的作用,葉子節(jié)點(diǎn)的個(gè)數(shù)即為詞匯表的小大, 而內(nèi)部節(jié)點(diǎn)則起到隱藏層神經(jīng)元的作用。具體的內(nèi)容,我們?cè)谥髸?huì)講解。這里首先需要了解下霍夫曼樹(shù)。
從實(shí)際的例子出發(fā),看看如何構(gòu)造霍夫曼樹(shù):
假設(shè)有(a,b,c,d,e,f)共6個(gè)詞匯,詞匯的權(quán)值用詞頻表示:wa=16,wb=4,wc=8,wd=6,we=20,wf=3w_a=16,w_b=4,w_c=8,w_d=6,w_e=20,w_f=3wa?=16,wb?=4,wc?=8,wd?=6,we?=20,wf?=3,我們假設(shè)這6個(gè)詞匯是6棵只要根節(jié)點(diǎn)的森林集合。于是構(gòu)造步驟如下:
首先是權(quán)值最小的b和f合并,得到的新樹(shù),根節(jié)點(diǎn)權(quán)重是7。將b于f這兩個(gè)樹(shù)從列表中刪除,并且添加剛剛得到的合并的樹(shù)。此時(shí)森林里共有5棵樹(shù),根節(jié)點(diǎn)權(quán)重分別是16,8,6,20,7。此時(shí)根節(jié)點(diǎn)權(quán)重最小的6,7對(duì)應(yīng)的樹(shù)合并,得到新子樹(shù),依次類(lèi)推,最終得到下面的霍夫曼樹(shù):
如何編碼呢?
一般對(duì)于一個(gè)霍夫曼樹(shù)的節(jié)點(diǎn)(根節(jié)點(diǎn)除外),可以約定左子樹(shù)編碼為0,右子樹(shù)編碼為1.如上圖,則可以得到c的編碼是00。
注意,在word2vec中,約定編碼方式和上面的例子相反,即約定左子樹(shù)編碼為1,右子樹(shù)編碼為0,同時(shí)約定左子樹(shù)的權(quán)重不小于右子樹(shù)的權(quán)重。
那么霍夫曼樹(shù)有什么好處呢?
一般得到霍夫曼樹(shù)后我們會(huì)對(duì)葉子節(jié)點(diǎn)進(jìn)行霍夫曼編碼,由于權(quán)重高的葉子節(jié)點(diǎn)越靠近根節(jié)點(diǎn),而權(quán)重低的葉子節(jié)點(diǎn)會(huì)遠(yuǎn)離根節(jié)點(diǎn)。這樣我們的高權(quán)重節(jié)點(diǎn)編碼值較短,而低權(quán)重值編碼值較長(zhǎng)。這保證的樹(shù)的帶權(quán)路徑最短,即我們希望越常用的詞擁有更短的編碼。
有了上面的基礎(chǔ)知識(shí),就可以對(duì)word2vec進(jìn)行講解了。相比于用傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)的方法來(lái)訓(xùn)練詞向量,于word2vec提出了有兩種改進(jìn)方法:一種是基于 Hierarchical Softmax 算法的,另一種是基于 Negative Sampling 算法的。
參考文章:
word2vec模型
word2vec 中的數(shù)學(xué)原理詳解
總結(jié)
以上是生活随笔為你收集整理的【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 3dsmax怎么去除uv材质 3dsma
- 下一篇: 【word2vec】篇二:基于Hiera