日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础

發(fā)布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

word2vec原理(一): CBOW與Skip-Gram模型基礎(chǔ)

word2vec原理(二):基于Hierarchical Softmax的模型

word2vec原理(三): 基于Negative Sampling的模型

目錄

1. 詞向量基礎(chǔ)

1.1?One-Hot 編碼(獨(dú)熱編碼)

1.2 分布式表示:詞向量/詞嵌入

1.3 詞向量可視化

1.4 用詞嵌入做遷移學(xué)習(xí)

2. 生成詞向量的方式

2.1. 基于統(tǒng)計(jì)方法

1. 共現(xiàn)矩陣

2.?SVD(奇異值分解)

2.2 基于語言模型(language model)

3. CBOW與Skip-Gram

3.1 CBOW與Skip-Gram用于神經(jīng)網(wǎng)絡(luò)語言模型

1. CBOW模型

2. Skip-gram模型

3.2 word2vec中的CBOW與Skip-Gram??

1. CBOW模型

2. Skip-gram


? ? ? ? word2vec是Google在2013年推出的一個NLP工具,它的特點(diǎn)是將所有的詞向量化,這樣詞與詞之間就可以定量的去度量他們之間的關(guān)系,挖掘詞之間的聯(lián)系。

? ? ? ? word2vec工具主要包含兩個模型跳字模型(skip-gram)連續(xù)詞袋模型(continuous bag of words,簡稱CBOW),以及兩種高效訓(xùn)練的方法負(fù)采樣(negative sampling)和層序softmax (hierarchical softmax)。值得一提的是,word2vec詞向量可以較好地表達(dá)不同詞之間的相似和類比關(guān)系。

? ? ? ? Skip-gram和CBOW是Word2vec架構(gòu)的兩種類型,可以理解為兩種實(shí)現(xiàn)方式,不是說,word2vec包含這兩個模型。word2vec自提出后被廣泛應(yīng)用在自然語言處理任務(wù)中。它的模型和訓(xùn)練方法也啟發(fā)了很多后續(xù)的詞向量模型。

1. 詞向量基礎(chǔ)

? ? ? ? 向量空間模型長期以來一直被用于分布式語義的目的,它以向量的形式表示文本文檔和查詢語句。通過以向量空間模型在N維空間中來表示單詞,可以幫助不同的NLP算法實(shí)現(xiàn)更好的結(jié)果,因此這使得相似的文本在新的向量空間中組合在一起。

? ? ? ? 自然語言是一套用來表達(dá)含義的復(fù)雜系統(tǒng)。在這套系統(tǒng)中,詞是表義的基本單元。在機(jī)器學(xué)習(xí)中,如何使用向量表示詞?顧名思義,詞向量是用來表示詞的向量,通常也被認(rèn)為是詞的特征向量。詞向量,又名詞嵌入(Word Embedding)。近年來,詞向量已逐漸成為自然語言處理的基礎(chǔ)知識。

? ? ? ?用詞向量來表示詞并不是word2vec的首創(chuàng),在很久之前就出現(xiàn)了,表示方式:

1.1?One-Hot 編碼(獨(dú)熱編碼)

? ? ? ? 一種最簡單的詞向量方式是one-hot representation,就是用一個很長的向量來表示一個詞,向量的長度為詞匯表的大小,向量的分量只有一個 1,其他全為 0,1 的位置對應(yīng)該詞在詞典中的位置。比如:

? ? ? ? ? ?'中國'表示為: [00010000000......]

? ? ? ? ? ?'美國'表示為:[0000000010000...]

每個詞都是茫茫 0 海中的一個 1。這種 One-hot Representation 采用稀疏向量方式存儲,會是非常的簡潔:也就是給每個詞分配一個數(shù)字 ID。比如剛才的例子中,中國記為 3,美國記為 8(假設(shè)從 0 開始記)。如果要編程實(shí)現(xiàn)的話,用 Hash 表給每個詞分配一個編號就可以了。這么簡潔的表示方法配合上最大熵、SVM、CRF 等等算法已經(jīng)很好地完成了 NLP 領(lǐng)域的各種主流任務(wù)。

? ? ? ?

這種詞表示有兩個缺點(diǎn)

? ? ?(1)容易受維數(shù)災(zāi)難的困擾,尤其是將其用于 Deep Learning 的一些算法時:詞匯表一般都非常大,比如達(dá)到百萬級別,這樣每個詞都用百萬維的向量來表示簡直是內(nèi)存的災(zāi)難。這樣的向量其實(shí)除了一個位置是1,其余的位置全部都是0,表達(dá)的效率不高,能不能把詞向量的維度變小呢?

? ? ?(2)不能很好地刻畫詞與詞之間的相似性(術(shù)語好像叫做“詞匯鴻溝”):任意兩個詞之間都是孤立的,這樣使得算法對相關(guān)詞的泛化能力不強(qiáng)。因?yàn)槿魏蝺蓚€one-hot向量之間的內(nèi)積都是0,很難區(qū)分他們之間的差別。光從這兩個向量中看不出兩個詞是否有關(guān)系,哪怕是丈夫和老公這樣的同義詞也不能幸免于難。

(個人認(rèn)為,主要原因在于one-hot編碼是把不適合歐式距離度量的類別數(shù)據(jù),轉(zhuǎn)換到歐式空間,適合距離度量,而文本分析中,更常用的是余弦距離,此時one-hot編碼體現(xiàn)不出角度概念,因?yàn)橛嘞揖嚯x將距離歸一化了)

1.2 分布式表示:詞向量/詞嵌入

? ? ? ? Distributed?representation可以解決One hot?representation的問題,它最早是 Hinton 于 1986 年提出的。它的思路是通過訓(xùn)練,將每個詞都映射到一個較短的詞向量上來。所有的這些詞向量就構(gòu)成了向量空間,進(jìn)而可以用普通的統(tǒng)計(jì)學(xué)的方法來研究詞與詞之間的關(guān)系。這就是word embedding,即指的是將詞轉(zhuǎn)化成一種分布式表示,又稱詞向量。分布式表示將詞表示成一個定長的連續(xù)的稠密向量,這個較短的詞向量維度是多大呢?這個一般需要我們在訓(xùn)練時自己來指定。

? ? ? ? Distributed Representation 可以創(chuàng)建多個層次結(jié)構(gòu)或分段,其中可以為每個單詞顯示的信息分配不同的權(quán)重。這些分段或維度的選擇可以是我們決定的,并且每個單詞將由這些段中的權(quán)重分布表示。

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ????

? ? ? ? 比如上圖我們將詞匯表里的詞用"位置","人口", "面積"和"距離"4個維度來表示,Rome這個詞對應(yīng)的詞向量可能是(0.99,0.99,0.05,0.7),也就是普通的向量表示形式。維度以 50 維和 100 維比較常見。當(dāng)然在實(shí)際情況中,我們并不能對詞向量的每個維度做一個很好的解釋。?

? ? ? ?有了用Distributed Representation表示的較短的詞向量,我們就可以較容易的分析詞之間的關(guān)系了,比如我們將詞的維度降維到2維,有一個有趣的研究表明,用下圖的詞向量表示我們的詞時,我們可以發(fā)現(xiàn):

? ? ? ? ? ? ? ? ? ? ??

分布式表示優(yōu)點(diǎn):?
? ? ? (1) 詞之間存在相似關(guān)系:?是詞之間存在“距離”概念,這對很多自然語言處理的任務(wù)非常有幫助。?
? ? ? (2) 包含更多信息:?詞向量能夠包含更多信息,并且每一維都有特定的含義。在采用one-hot特征時,可以對特征向量進(jìn)行刪減,詞向量則不能。

? ? ? ? ?可見我們只要得到了詞匯表里所有詞對應(yīng)的詞向量,那么我們就可以做很多有趣的事情了。不過,怎么訓(xùn)練得到合適的詞向量呢?一個很常見的方法是使用神經(jīng)網(wǎng)絡(luò)語言模型

? ? ? ? 當(dāng)然一個詞怎么表示成這么樣的一個向量是要經(jīng)過一番訓(xùn)練的,訓(xùn)練方法較多,word2vec是其中一種,在后面會提到,這里先說它的意義。還要注意的是每個詞在不同的語料庫和不同的訓(xùn)練方法下,得到的詞向量可能是不一樣的。

? ? ? ? 由于是用向量表示,而且用較好的訓(xùn)練算法得到的詞向量的向量一般是有空間上的意義的,也就是說,將所有這些向量放在一起形成一個詞向量空間,而每一向量則為該空間中的一個點(diǎn),在這個空間上的詞向量之間的距離度量也可以表示對應(yīng)的兩個詞之間的“距離”。所謂兩個詞之間的“距離”,就是這兩個詞之間的語法,語義之間的相似性。

? ? ? ? 一個比較實(shí)用的場景是找同義詞,得到詞向量后,假如對于詞老婆來說,想找出與這個詞相似的詞,這個場景對人來說都不輕松,畢竟比較主觀,但是對于建立好詞向量后的情況,對計(jì)算機(jī)來說,只要拿這個詞的詞向量跟其他詞的詞向量一一計(jì)算歐式距離或者cos距離,得到距離小于某個值那些詞,就是它的同義詞。這個特性使詞向量很有意義,自然會吸引很多人去研究,google的word2vec模型也是基于這個做出來的。

1.3 詞向量可視化

? ? ? ? 如果我們能夠?qū)W習(xí)到一個 300 維的特征向量,或者說 300 維的詞嵌入,通常我們可以做一件事,把這 300 維的數(shù)據(jù)嵌入到一個二維空間里,這樣就可以可視化了。常用的可視化算法是 t-SNE 算法,來自于 Laurens van der Maaten 和 Geoff Hinton 的論文。

? ? ? ?t-SNE 算法:所做的就是把這些 300 維的數(shù)據(jù)用一種非線性的方式映射到 2 維平面上,可以得知 t-SNE 中這種映射很復(fù)雜而且很非線性。
?

? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ?如果觀察這種詞嵌入的表示方法,會發(fā)現(xiàn) man 和 woman 這些詞聚集在一塊(上圖編號 1 所示), king 和queen 聚集在一塊(上圖編號 2 所示),這些都是人,也都聚集在一起(上圖編號 3 所示)。動物都聚集在一起(上圖編號 4 所示),水果也都聚集在一起(上圖編號 5 所示),像 1、2、 3、 4 這些數(shù)字也聚集在一起(上圖編號 6 所示)。如果把這些生物看成一個整體,他們也聚集在一起(上圖編號 7 所示)。

? ? ? ?詞嵌入算法對于相近的概念,學(xué)到的特征也比較類似,在對這些概念可視化的時候,這些概念就比較相似,最終把它們映射為相似的特征向量。

? ? ? ?這種表示方式用的是在 300 維空間里的特征表示,這叫做嵌入( embeddings)。之所以叫嵌入的原因是,你可以想象一個 300 維的空間,這里用個 3 維的代替(上圖編號 8 所示)。現(xiàn)在取每一個單詞比如 orange,它對應(yīng)一個 3 維的特征向量,所以這個詞就被嵌在這個 300 維空間里的一個點(diǎn)上了(上圖編號 9 所示), apple 這個詞就被嵌在這個 300 維空間的另一個點(diǎn)上了(上圖編號 10 所示)。為了可視化, t-SNE 算法把這個空間映射到低維空間,你可以畫出一個 2 維圖像然后觀察,這就是這個術(shù)語嵌入的來源。

1.4 詞嵌入用做遷移學(xué)習(xí)

? ? ? ? 如果對于一個命名實(shí)體識別任務(wù),只有一個很小的標(biāo)記的訓(xùn)練集,訓(xùn)練集里可能沒有某些詞,但是如果有一個已經(jīng)學(xué)好的詞嵌入,就可以用遷移學(xué)習(xí),把從互聯(lián)網(wǎng)上免費(fèi)獲得的大量的無標(biāo)簽文本中學(xué)習(xí)到的知識遷移到一個命名實(shí)體識別任務(wù)中。

? ? ? ?如果從某一任務(wù) A 遷移到某個任務(wù) B,只有 A 中有大量數(shù)據(jù),而 B 中數(shù)據(jù)少時,遷移的過程才有用

? ? ? ?用詞嵌入做遷移學(xué)習(xí)的步驟
? ? ? (1)先從大量的文本集中學(xué)習(xí)詞嵌入,或者可以下載網(wǎng)上預(yù)訓(xùn)練好的詞嵌入模型,網(wǎng)上可以找到不少,詞嵌入模型并且都有許可。
? ? ? (2)把這些詞嵌入模型遷移到新的只有少量標(biāo)注訓(xùn)練集的任務(wù)中。
? ? ? (3)考慮是否微調(diào),用新的數(shù)據(jù)調(diào)整詞嵌入。當(dāng)在新的任務(wù)上訓(xùn)練模型時,如命名實(shí)體識別任務(wù)上,只有少量的標(biāo)記數(shù)據(jù)集上,可以自己選擇要不要繼續(xù)微調(diào),用新的數(shù)據(jù)調(diào)整詞嵌入。實(shí)際中,只有第二步中有很大的數(shù)據(jù)集時才會這樣做,如果你標(biāo)記的數(shù)據(jù)集不是很大,通常不建議在微調(diào)詞嵌入上費(fèi)力氣。

? ? ? ?當(dāng)任務(wù)的訓(xùn)練集相對較小時,詞嵌入的作用最明顯。詞嵌入在語言模型、機(jī)器翻譯領(lǐng)域用的少一些,尤其是做語言模型或者機(jī)器翻譯任務(wù)時,這些任務(wù)有大量的數(shù)據(jù)。

1.4 詞嵌入用做類比推理

? ? ? ? ? ? ? ? ??

? ? ? ?我們用一個四維向量來表示 man,稱為,woman 的嵌入向量稱為,對 king 和 queen 也是用一樣的表示方法。在該例中,假設(shè)你用的是4維的嵌入向量,而不是比較典型的 50 到 1000 維的向量。這些向量有一個有趣的特性,就是假如
你有向量和,將它們進(jìn)行減法運(yùn)算,即

? ? ? ? ? ? ? ? ? ? ? ? ? ?

?類似的,假如用和,最后也會得到一樣的結(jié)果,即?

? ?? ? ? ? ? ? ? ? ? ? ??

? ? ? ? 這個結(jié)果表示, man 和 woman 主要的差異是 gender ( 性別)上的差異,而 king 和 queen之間的主要差異,根據(jù)向量的表示,也是 gender( 性別)上的差異,這就是為什么與結(jié)果是相同的。所以得出這種類比推理的結(jié)論的方法就是,當(dāng)算法被問及 man 對 woman 相當(dāng)于 king 對什么時,算法所做的就是計(jì)算,然后找出一個向量也就是找出一個詞,使得,也就是說,當(dāng)這個新詞是 queen時,式子的左邊會近似地等于右邊。

? ? ? ? ? ? ? ? ? ??

? ? ? ?計(jì)算當(dāng) man 對于 woman,那么 king 對于什么,能做的就是找到單詞 w 來使得這個等式成立,就是找到單詞 w 來最大化與的相似度,即

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ?測算?與的相似度,我們最常用的相似度函數(shù)叫做余弦相似度

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

2. 生成詞向量的方式

2.1. 基于統(tǒng)計(jì)方法

1. 共現(xiàn)矩陣

? ? ? ? 通過統(tǒng)計(jì)一個事先指定大小的窗口內(nèi)的word共現(xiàn)次數(shù),以word周邊的共現(xiàn)詞的次數(shù)做為當(dāng)前word的vector。具體來說,我們通過從大量的語料文本中構(gòu)建一個共現(xiàn)矩陣來定義word representation。?
例如,有語料如下:?
? ? ? ? ?I like deep learning.?
? ? ? ? ?I like NLP.?
? ? ? ? ?I enjoy flying.?
則其共現(xiàn)矩陣如下:? ? ? ?

矩陣定義的詞向量在一定程度上緩解了one-hot向量相似度為0的問題,但沒有解決數(shù)據(jù)稀疏性和維度災(zāi)難的問題。

2.?SVD(奇異值分解)

? ? ? ? ?既然基于co-occurrence矩陣得到的離散詞向量存在著高維和稀疏性的問題,一個自然而然的解決思路是對原始詞向量進(jìn)行降維,從而得到一個稠密的連續(xù)詞向量。?對1中矩陣進(jìn)行SVD分解,得到正交矩陣U,對U進(jìn)行歸一化得到矩陣如下:? ? ? ? ?

? ? ? ? SVD得到了word的稠密(dense)矩陣,該矩陣具有很多良好的性質(zhì):語義相近的詞在向量空間相近,甚至可以一定程度反映word間的線性關(guān)系。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

2.2 基于語言模型(language model)

? ? ? ? 語言模型生成詞向量是通過訓(xùn)練神經(jīng)網(wǎng)絡(luò)語言模型NNLM(neural network language model),詞向量作為語言模型的附帶產(chǎn)出。NNLM背后的基本思想是對出現(xiàn)在上下文環(huán)境里的詞進(jìn)行預(yù)測,這種對上下文環(huán)境的預(yù)測本質(zhì)上也是一種對共現(xiàn)統(tǒng)計(jì)特征的學(xué)習(xí)。?較著名的采用neural network language model生成詞向量的方法有Skip-gram、CBOW、LBL、NNLM、C&W、GloVe等。接下來,以word2vec為例,講解基于神經(jīng)網(wǎng)絡(luò)語言模型的詞向量生成。

? ? ? ? ? ? ? ? ? ? ??

3. CBOW與Skip-Gram

3.1 CBOW與Skip-Gram用于神經(jīng)網(wǎng)絡(luò)語言模型

? ? ? ? 在word2vec出現(xiàn)之前,已經(jīng)有用神經(jīng)網(wǎng)絡(luò)DNN來用訓(xùn)練詞向量進(jìn)而處理詞與詞之間的關(guān)系了。采用的方法一般是一個三層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(當(dāng)然也可以多層),分為輸入層,隱藏層和輸出層(softmax層)。

? ? ? ?這個模型是如何定義數(shù)據(jù)的輸入和輸出呢?一般分為CBOW(Continuous Bag-of-Words?與Skip-Gram兩種模型。


1. CBOW模型

? ? ? ? CBOW模型,利用上下文或周圍的單詞來預(yù)測中心詞

? ? ? ? 輸入:某一個特征詞的上下文相關(guān)對應(yīng)的詞向量(單詞的one-hot編碼);輸出:這特定的一個詞的詞向量(單詞的one-hot編碼)。

? ? ? ? 比如下面這段話,我們的上下文大小取值為4,特定的這個詞是"Learning",也就是我們需要的輸出詞向量(單詞Learning的one-hot編碼),上下文對應(yīng)的詞有8個,前后各4個,這8個詞是我們模型的輸入(8個單詞的one-hot編碼)。由于CBOW使用的是詞袋模型,因此這8個詞都是平等的,也就是不考慮他們和我們關(guān)注的詞之間的距離大小,只要在我們上下文之內(nèi)即可。

? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ?這樣我們這個CBOW的例子里,我們的輸入是8個詞向量(8個單詞的one-hot編碼),輸出是所有詞的softmax概率(訓(xùn)練的目標(biāo)是期望訓(xùn)練樣本中心詞對應(yīng)的softmax概率最大);對應(yīng)的CBOW神經(jīng)網(wǎng)絡(luò)模型輸入層有8個神經(jīng)元輸出層有詞匯表大小個神經(jīng)元。隱藏層的神經(jīng)元個數(shù)我們可以自己指定。通過DNN的反向傳播算法,我們可以求出DNN模型的參數(shù),同時得到所有的詞對應(yīng)的詞向量。這樣當(dāng)我們有新的需求,要求出某8個詞對應(yīng)的最可能的輸出中心詞時,我們可以通過一次DNN前向傳播算法并通過softmax激活函數(shù)找到概率最大的詞對應(yīng)的神經(jīng)元即可。    

2. Skip-gram模型

? ? ? ? Skip-gram模型,使用中心詞來預(yù)測上下文詞

? ? ? ? Skip-Gram模型和CBOW的思路是反著來的(互為鏡像),即輸入是特定的一個詞的詞向量(單詞的one-hot編碼),而輸是特定詞對應(yīng)的上下文詞向量(所有上下文單詞的one-hot編碼)。還是上面的例子,我們的上下文大小取值為4,?特定的這個詞"Learning"是我們的輸入,而這8個上下文詞是我們的輸出。

? ? ? ? 這樣我們這個Skip-Gram的例子里,我們的輸入是特定詞輸出是softmax概率排前8的8個詞,對應(yīng)的Skip-Gram神經(jīng)網(wǎng)絡(luò)模型輸入層有1個神經(jīng)元,輸出層有詞匯表大小個神經(jīng)元。隱藏層的神經(jīng)元個數(shù)我們可以自己指定。通過DNN的反向傳播算法,我們可以求出DNN模型的參數(shù),同時得到所有的詞對應(yīng)的詞向量。這樣當(dāng)我們有新的需求,要求出某1個詞對應(yīng)的最可能的8個上下文詞時,我們可以通過一次DNN前向傳播算法得到概率大小排前8的softmax概率對應(yīng)的神經(jīng)元所對應(yīng)的詞即可。

? ? ? ? 所以,只要簡單理解為CBOW與Skip-Gram互為鏡像,輸入/輸出都是詞的one-hot編碼,訓(xùn)練上下文->中心詞/中心詞->上下文詞的關(guān)系權(quán)重就可以了。


? ? ? ? 以上就是神經(jīng)網(wǎng)絡(luò)語言模型中如何用CBOW與Skip-Gram來訓(xùn)練模型與得到詞向量的大概過程。但是這和word2vec中用CBOW與Skip-Gram來訓(xùn)練模型與得到詞向量的過程有很多的不同。

? ? ? ? word2vec為什么不用現(xiàn)成的DNN模型,要繼續(xù)優(yōu)化出新方法呢?最主要的問題:DNN模型的這個處理過程非常耗時。我們的詞匯表一般在百萬級別以上,這意味著我們DNN的輸出層需要進(jìn)行softmax計(jì)算各個詞的輸出概率,計(jì)算量很大。有沒有簡化一點(diǎn)點(diǎn)的方法呢?

3.2 word2vec中的CBOW與Skip-Gram??

? ? ? ? word2vec也使用了CBOW與Skip-Gram來訓(xùn)練模型與得到詞向量,但是并沒有使用傳統(tǒng)的DNN模型,而是對其進(jìn)行了改進(jìn)。最先優(yōu)化使用的數(shù)據(jù)結(jié)構(gòu)是用霍夫曼樹來代替隱藏層和輸出層的神經(jīng)元。

? ? ? ? 葉子節(jié)點(diǎn):起到輸出層神經(jīng)元的作用,葉子節(jié)點(diǎn)的個數(shù)即為詞匯表的大小。

? ? ? ? 內(nèi)部節(jié)點(diǎn):起到隱藏層神經(jīng)元的作用。

? ? ? ? 霍夫曼樹編碼方式:一般對于一個霍夫曼樹的節(jié)點(diǎn)(根節(jié)點(diǎn)除外),可以約定左子樹編碼為0,右子樹編碼為1。

? ? ? ?Word2vec中,約定編碼方式和霍夫曼相反,即約定左子樹編碼為1,右子樹編碼為0,同時約定左子樹的權(quán)重不小于右子樹的權(quán)重。

1. CBOW模型

? ?連續(xù)詞袋模型(Continuous Bag-of-Word Model, CBOW)是一個三層神經(jīng)網(wǎng)絡(luò),輸入已知上下文,輸出對下個單詞的預(yù)測:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? CBOW模型的第一層是輸入層, 輸入已知上下文的詞向量;

? ? ? ? 中間一層稱為線性隱含層, 它將所有輸入的詞向量累加;

? ? ? ? 第三層是一棵哈夫曼樹, 樹的的葉節(jié)點(diǎn)與語料庫中的單詞一一對應(yīng), 而樹的每個非葉節(jié)點(diǎn)是一個二分類器(一般是softmax感知機(jī)等), 樹的每個非葉節(jié)點(diǎn)都直接與隱含層相連.

? ? ? ?將上下文的詞向量輸入CBOW模型, 由隱含層累加得到中間向量,將中間向量輸入哈夫曼樹的根節(jié)點(diǎn), 根節(jié)點(diǎn)會將其分到左子樹或右子樹。每個非葉節(jié)點(diǎn)都會對中間向量進(jìn)行分類, 直到達(dá)到某個葉節(jié)點(diǎn),該葉節(jié)點(diǎn)對應(yīng)的單詞就是對下個單詞的預(yù)測。

訓(xùn)練過程:?

? ? ? ? 首先根據(jù)預(yù)料庫建立詞匯表, 詞匯表中所有單詞擁有一個隨機(jī)的詞向量。我們從語料庫選擇一段文本進(jìn)行訓(xùn)練;

? ? ? ? 將單詞W的上下文的詞向量輸入CBOW, 由隱含層累加, 在第三層的哈夫曼樹中沿著某個特定的路徑到達(dá)某個葉節(jié)點(diǎn), 從給出對單詞W的預(yù)測。

? ? ? ?訓(xùn)練過程中我們已經(jīng)知道了單詞W, 根據(jù)W的哈夫曼編碼我們可以確定從根節(jié)點(diǎn)到葉節(jié)點(diǎn)的正確路徑, 也確定了路徑上所有分類器應(yīng)該作出的預(yù)測.

? ? ? ?我們采用梯度下降法調(diào)整輸入的詞向量, 使得實(shí)際路徑向正確路徑靠攏。在訓(xùn)練結(jié)束后我們可以從詞匯表中得到每個單詞對應(yīng)的詞向量。

2. Skip-gram

? ? ? ? Skip-gram模型同樣是一個三層神經(jīng)網(wǎng)絡(luò),skip-gram模型的結(jié)構(gòu)與CBOW模型正好相反,skip-gram模型輸入某個單詞,輸出對它上下文詞向量的預(yù)測。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????

? ? ? ? ?Skip-gram的核心同樣是一個哈夫曼樹, 每一個單詞從樹根開始到達(dá)葉節(jié)點(diǎn),可以預(yù)測出它上下文中的一個單詞。對每個單詞進(jìn)行N-1次迭代,得到對它上下文中所有單詞的預(yù)測, 根據(jù)訓(xùn)練數(shù)據(jù)調(diào)整詞向量得到足夠精確的結(jié)果。

?

模型實(shí)現(xiàn)代碼:https://gitee.com/hdt3213/NeuralNetDemo/tree/master/Word2Vec


? ? ? ?word2vec有兩種改進(jìn)方法,一種是基于Hierarchical Softmax的,另一種是基于Negative Sampling(負(fù)采樣)。兩種改進(jìn)方式細(xì)節(jié)請?zhí)D(zhuǎn):word2vec的兩種改進(jìn)方法:Hierarchical Softmax(層序softmax)和Negative Sampling(負(fù)采樣)

? ? ? Hierarchical Softmax:對CBOW和Skip-Gram的損失結(jié)構(gòu)進(jìn)行了改進(jìn),

? ? ? Negative Sampling:改進(jìn)了模型訓(xùn)練,之前模型輸出是每個單詞的得分值,使用負(fù)采樣之后輸出是0(非臨近詞)和1(臨近詞),所以效率提高。

? ? ?

參考:

1.?NLP系列(10)_詞向量之圖解Word2vec:圖解

? ? 處理向量時,計(jì)算相似度得分的常用方法是余弦相似度

one-hot編碼——(維度災(zāi)難)——>分布式編碼————>神經(jīng)網(wǎng)絡(luò)語言模型:CBOW、skipgram——(輸出softmax,耗時)——>邏輯回歸模型(標(biāo)簽值:值為0或1的新列,0=“不是鄰居”,1=“鄰居”)——>負(fù)采樣——(在數(shù)據(jù)集中引入負(fù)樣本:不是鄰居的單詞樣本)——>

未完待續(xù)。。。。。。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。