最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

干貨|Word2Vec原理詳解

2023-02-22 17:14 作者:七月在線-julyedu  | 我要投稿

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

01 詞向量基礎(chǔ)

詞向量:用來(lái)表示單詞的向量空間為什么不用簡(jiǎn)單的one-hot來(lái)表征詞向量了?

One-hot representation(稀疏向量)用來(lái)表示詞向量非常簡(jiǎn)單,但是卻有很多問(wèn)題。最大的問(wèn)題是我們的詞匯表一般都非常大,比如達(dá)到百萬(wàn)級(jí)別,這樣每個(gè)詞都用百萬(wàn)維的向量來(lái)表示簡(jiǎn)直是內(nèi)存的災(zāi)難。這樣的向量其實(shí)除了一個(gè)位置是1,其余的位置全部都是0,表達(dá)的效率不高。

能不能把詞向量的維度變小呢?

Distributed representation (分布式表示)可以解決One hot representation的問(wèn)題,它的思路是通過(guò)訓(xùn)練,將每個(gè)詞都映射到一個(gè)較短的詞向量上來(lái)。所有的這些詞向量就構(gòu)成了向量空間,進(jìn)而可以用普通的統(tǒng)計(jì)學(xué)的方法來(lái)研究詞與詞之間的關(guān)系。這個(gè)較短的詞向量維度是多大呢?這個(gè)一般需要我們?cè)谟?xùn)練時(shí)自己來(lái)指定。

分布式表示的基本思路是通過(guò)訓(xùn)練將每個(gè)詞映射成一個(gè)固定長(zhǎng)度的短向量,所有這些向量就構(gòu)成一個(gè)詞向量空間,每一個(gè)向量可視為該空間上的一個(gè)點(diǎn)。此時(shí)向量長(zhǎng)度可以自由選擇,與詞典規(guī)模無(wú)關(guān)。

02CBOW與Skip-Gram

CBOW 模型:輸入是某一個(gè)特征詞的上下文相關(guān)的詞對(duì)應(yīng)的詞向量,而輸出就是這特定的一個(gè)詞的詞向量。(Continuous Bag-of-Word)Skip-Gram 模型:輸入是特定的一個(gè)詞的詞向量,而輸出是特定詞對(duì)應(yīng)的上下文詞向量。

傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)詞向量語(yǔ)言模型(DNN)

在 word2vec 出現(xiàn)之前,已經(jīng)有用神經(jīng)網(wǎng)絡(luò) DNN 來(lái)用訓(xùn)練詞向量進(jìn)而處理詞與詞之間的關(guān)系了。采用的方法一般是一個(gè)三層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(當(dāng)然也可以多層),分為輸入層,隱藏層和輸出層( softmax 層)。一般有三層, 輸入層 (詞向量),, 隱藏層和輸出層(softmax層) 。里面最大的問(wèn)題在于從隱藏層 到輸出的softmax層的計(jì)算量很大, 因?yàn)橐?jì)算所有詞的softmax概率,再去找概率最大的值。這個(gè)模型如下圖所示。其中 是詞匯表的大小


維度理解:Input layer 是經(jīng) one-hot 處理后的,因此 Input Layer 的緯度是 ,第一個(gè) 的維度為 ,得到 Hidden layer 的緯度為 ,經(jīng)過(guò)第二個(gè) 的緯度為 ,得到 Output layer 的緯度為 。得到的詞向量可以是,也可以是 與 拼接得到的結(jié)果。需要明確的幾個(gè)概念:

  • 單詞

  • 詞典 由單詞組成的集合;

  • 語(yǔ)料庫(kù)C,由單詞組成的文本序列 ;

單詞 的上下文是語(yǔ)料庫(kù)中由單詞 的前 個(gè)單詞和后 個(gè)單詞組成的文本序列, 稱(chēng)為中心詞。Skip-Gram:


使用log的原因:

  • 防止溢出,也就是防止結(jié)果趨近于0

  • log是單調(diào)函數(shù),取log對(duì)結(jié)果無(wú)影響

交叉熵表示的是預(yù)測(cè)真實(shí)分布和模型分布的相近程度CBOW?求導(dǎo):

Word from vocabulary

: Input word matrix

-th column of , the input vector representation of word

Output word matrix

-th row of , the output vector representation of word

:中心詞上下文的平均向量

word2vec為什么不用現(xiàn)成的DNN模型,要繼續(xù)優(yōu)化出新方法呢?

最主要的問(wèn)題是DNN模型的這個(gè)處理過(guò)程非常耗時(shí)。我們的詞匯表一般在百萬(wàn)級(jí)別以上,這意味著我們DNN的輸出層需要進(jìn)行softmax計(jì)算各個(gè)詞的輸出概率的的計(jì)算量很大。

用什么方法來(lái)取代DNN更簡(jiǎn)單呢?

霍夫曼樹(shù)

用霍夫曼樹(shù)來(lái)代替隱藏層和輸出層的神經(jīng)元,霍夫曼樹(shù)的葉子節(jié)點(diǎn)起到輸出層神經(jīng)元的作用,葉子節(jié)點(diǎn)的個(gè)數(shù)即為詞匯表的小大。而內(nèi)部節(jié)點(diǎn)則起到隱藏層神經(jīng)元的作用。

輸入:權(quán)值為 的 個(gè)節(jié)點(diǎn)

輸出:對(duì)應(yīng)的霍夫曼樹(shù)

1) 將 看做是有 棵樹(shù)的森林, 每個(gè)樹(shù)僅有一個(gè)節(jié)點(diǎn)。

2)在森林中選擇根節(jié)點(diǎn)權(quán)值最小的兩棵樹(shù)進(jìn)行合并,得到一個(gè)新的樹(shù),這兩顆樹(shù)分布作為新樹(shù)的左右子樹(shù)。新樹(shù)的根節(jié)點(diǎn)權(quán)重為左右子樹(shù)的根節(jié)點(diǎn)權(quán)重之和。

3) 將之前的根節(jié)點(diǎn)權(quán)值最小的兩棵樹(shù)從森林刪除,并把新樹(shù)加入森林。

4)重復(fù)步驟2)和3)直到森林里只有一棵樹(shù)為止。

霍夫曼樹(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)路徑最短,也符合我們的信息論,即我們希望越常用的詞擁有更短的編碼。

如何編碼呢?

一般對(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)重。(Word2Vec中的權(quán)重為單詞在語(yǔ)料庫(kù)中的詞頻

03word2vec的兩種改進(jìn)方法

一種是基于Hierarchical Softmax的,另一種是基于Negative Sampling的。

Hierarchical Softmax

基于Hierarchical Softmax(層序softmax)的模型

傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)詞向量語(yǔ)言模型,里面一般有三層,輸入層(詞向量),隱藏層和輸出層( 層)。里面最大的問(wèn)題在于從隱藏層到輸出的softmax層的計(jì)算量很大,因?yàn)橐?jì)算所有詞的 概率,再去找概率最大的值。

改進(jìn)一:采用簡(jiǎn)單的對(duì)所有輸入詞向量求和并取平均的方法

改進(jìn)二:從隱藏層到輸出的 層這里的計(jì)算量個(gè)改進(jìn)。為了避免要計(jì)算所有詞的 概率,word2vec采樣了霍夫曼樹(shù)來(lái)代替從隱藏層到輸出softmax層的映射。從輸出 層的概率計(jì)算變成了一顆二叉霍夫曼樹(shù),那么我們的 概率計(jì)算只需要沿著樹(shù)形結(jié)構(gòu)進(jìn)行就可以了。霍夫曼樹(shù)的所有內(nèi)部節(jié)點(diǎn)就類(lèi)似之前神經(jīng)網(wǎng)絡(luò)隱藏層的神經(jīng)元,其中,根節(jié)點(diǎn)的詞向量對(duì)應(yīng)我們的投影后的詞向量,而所有葉子節(jié)點(diǎn)就類(lèi)似于之前神經(jīng)網(wǎng)絡(luò) 輸出層的神經(jīng)元,葉子節(jié)點(diǎn)的個(gè)數(shù)就是詞匯表的大小。在霍夫曼樹(shù)中,隱藏層到輸出層的 映射不是一下子完成的,而是沿著霍夫曼樹(shù)一步步完成的。

如何“沿著霍夫曼樹(shù)一步步完成”呢?在word2vec中,我們采用了二元邏輯回歸的方法,即規(guī)定沿著左子樹(shù)走,那么就是負(fù)類(lèi)(霍夫曼樹(shù)編碼1),沿著右子樹(shù)走,那么就是正類(lèi)(霍夫曼樹(shù)編碼0)。判別正類(lèi)和負(fù)類(lèi)的方法是使用sigmoid函數(shù),即:

其中 是當(dāng)前內(nèi)部節(jié)點(diǎn)的詞向量, 而 是我們需要從訓(xùn)練樣本求出的邏輯回歸的模型參數(shù)。

使用霍夫曼樹(shù)優(yōu)點(diǎn)

  1. 由于是二叉樹(shù), 之前計(jì)算量為V,現(xiàn)在變成了log 2V。

  2. 由于使用霍夫曼樹(shù)是高頻的詞靠近樹(shù)根,這樣高頻詞需要更少的時(shí)間會(huì)被找到,這符合我們的貪心優(yōu)化思想。

目標(biāo)就是找到合適的所有節(jié)點(diǎn)的詞向量和所有內(nèi)部節(jié)點(diǎn) θ, 使訓(xùn)練樣本達(dá)到最大似然。

哈夫曼樹(shù)的權(quán)值是由單詞的詞頻(重要程度決定的)

基于Hierarchical Softmax的模型梯度計(jì)算

我們使用最大似然法來(lái)尋找所有節(jié)點(diǎn)的詞向量和所有內(nèi)部節(jié)點(diǎn)。先拿上面的w_例子來(lái)看。我們期望最大化下面的似然函數(shù):

對(duì)于所有的訓(xùn)練樣本,我們期望最大化所有樣本的似然函數(shù)乘積。為了便于我們后面一般化的描述,我們定義輸入的詞為 其從輸入層詞向量求和平均后的霍夫曼樹(shù)根節(jié)點(diǎn)詞向量為 從根節(jié)點(diǎn)到 所在的葉子節(jié)點(diǎn),包含的節(jié)點(diǎn)總數(shù)為 在霍夫曼樹(shù)中從根節(jié)點(diǎn)開(kāi)始, 經(jīng)過(guò)的第 個(gè)節(jié)點(diǎn)表示為?對(duì)應(yīng)的霍夫曼編碼為 ,其中?而該節(jié)點(diǎn)對(duì)應(yīng)的模型參數(shù)表示為 其中?沒(méi)有 是因?yàn)槟P蛥?shù)僅僅針對(duì)于霍夫曼樹(shù)的內(nèi)部節(jié)點(diǎn)。定義 經(jīng)過(guò)的霍夫曼樹(shù)某一個(gè)節(jié)點(diǎn)的邏輯回歸概率為 其表達(dá)式為:

那么對(duì)于某一個(gè)目標(biāo)輸出詞 其最大似然為:

要得到模型中 詞向量和內(nèi)部節(jié)點(diǎn)的模型參數(shù), 我們使用梯度上升法即可。首先我們求模型參數(shù) 的梯度:
同樣的方法,可以求出 的梯度表達(dá)式如下:

基于Hierarchical Softmax的CBOW模型

首先我們要定義詞向量的維度大小 以及 的上下文大小 ,這樣我們對(duì)于訓(xùn)練樣本中的每一個(gè)詞, 其前面的 個(gè)詞和后面的 個(gè)詞作為了 模型的輸入,該詞本身作為樣本的輸出,期望 概率最大。

  1. 先將詞匯表按照詞頻建立成一顆霍夫曼樹(shù)。

  2. 從輸入層到隱藏層(投影層),對(duì) 周?chē)?個(gè)詞向量求和取平均即可

  3. 通過(guò)梯度上升法來(lái)更新 和 注意這里的 是由 2c 個(gè)詞向量相加而成,故梯度更新完畢后會(huì)用梯度項(xiàng)直接更新原始的各個(gè) 即 :

4. 如果梯度收斂,則結(jié)束梯度迭代,算法結(jié)束,否則回到步驟3繼續(xù)迭代輸入:基于CBOW的語(yǔ)料訓(xùn)練樣本,詞向量的維度大小 CBOW的上下文大小 步長(zhǎng) 輸出:霍夫曼樹(shù)的內(nèi)部節(jié)點(diǎn)模型參數(shù) 所有的詞向量基于Hierarchical Softmax的Skip-Gram模型輸入的只有一個(gè)詞 輸出的為 個(gè)詞向量 ,期望這些詞的softmax概率比其他的詞大。1. 先將詞匯表按照詞頻建立成一顆霍夫曼樹(shù)。2. 從輸入層到隱藏層(投影層),由于只有一個(gè)詞,所以, 即 就是詞 對(duì)應(yīng)的詞向量。3. 通過(guò)梯度上升法來(lái)更新我們的 和 注意這里的 周?chē)?個(gè)詞向量, 此時(shí)如果我們期望 最大。此時(shí)我們注意到由于上下文是相互的, 在期望 最大化的同時(shí), 反過(guò)來(lái)我們也期望 最大。那么是使用 好還是 好呢, 使用了后者, 這樣做的好處就是在一個(gè)選代窗口內(nèi), 我們不是只更新 一個(gè)詞, 而是 共 個(gè)詞。這樣整體的迭代會(huì)更加的均衡。因?yàn)檫@個(gè)原因, 模型并沒(méi)有和 模型一樣對(duì)輸入進(jìn)行迭代更新,而是對(duì) 個(gè)輸出進(jìn)行迭代更新。故梯度更新完畢后會(huì)用梯度項(xiàng)直接更新原始的各個(gè) 即 :

5. 如果梯度收斂,則結(jié)束梯度迭代,算法結(jié)束,否則回到步驟3繼續(xù)迭代輸入:基于Skip-Gram的語(yǔ)料訓(xùn)練樣本,詞向量的維度大小 Skip-Gram的上下文大小 步長(zhǎng) 輸出:霍夫曼樹(shù)的內(nèi)部節(jié)點(diǎn)模型參數(shù) 所有的詞向量Hierarchical Softmax 的缺點(diǎn)使用霍夫曼樹(shù)來(lái)代替?zhèn)鹘y(tǒng)的神經(jīng)網(wǎng)絡(luò), 可以提高模型訓(xùn)練的效率。但是如果我們的訓(xùn)練樣本里的中心詞 是一個(gè)很生僻的詞,那么就得在霍夫曼樹(shù)中辛苦的向下走很久了。能不能不用搞這么復(fù)雜的一顆霍夫曼樹(shù),將模型變的更加簡(jiǎn)單呢? Negative Sampling 就是一種改進(jìn)方法。

04Negative Sampling

基于Negative Sampling的模型比如我們有一個(gè)訓(xùn)練樣本, 中心詞是 它周?chē)舷挛墓灿?個(gè)詞,記為context 。由于這個(gè)中心詞 的確和 相關(guān)存在, 因此它是一個(gè)真實(shí)的正例。通過(guò)Negative Sampling采樣, 我們得到neg個(gè)和 不同的中心詞 , 這樣 和 就組成了 個(gè)并不真實(shí)存在的負(fù)例。利用這一個(gè)正例和neg個(gè)負(fù)例,我們進(jìn)行二元邏輯回歸,得到負(fù)采樣對(duì)應(yīng)每個(gè)詞 對(duì)應(yīng)的模型參數(shù) 和每個(gè)詞的詞向量。Negative Sampling負(fù)采樣方法現(xiàn)在我們來(lái)看看如何進(jìn)行負(fù)采樣, 得到neg個(gè)負(fù)例。 采樣的方法并不復(fù)雜, 如果詞匯表的大小為 ,那么我們就將一段長(zhǎng)度為1的線段分成 份,每份對(duì)應(yīng)詞匯表中的一個(gè)詞。當(dāng)然每個(gè)詞對(duì)應(yīng)的線段長(zhǎng)度是不一樣的,高頻詞對(duì)應(yīng)的線段長(zhǎng),低頻詞對(duì)應(yīng)的線段短。每個(gè)詞 的線段長(zhǎng)度由下式?jīng)Q定:


在 中,分子和分母都取了3/4次冪如下:


在采樣前,我們將這段長(zhǎng)度為1的線段劃分成 M 等份,這里 M >> V,這樣可以保證每個(gè)詞對(duì)應(yīng)的線段都會(huì)劃分成對(duì)應(yīng)的小塊。而M份中的每一份都會(huì)落在某一個(gè)詞對(duì)應(yīng)的線段上。在采樣的時(shí)候,我們只需要從M個(gè)位置中采樣出neg個(gè)位置就行,此時(shí)采樣到的每一個(gè)位置對(duì)應(yīng)到的線段所屬的詞就是我們的負(fù)例詞。


05一些經(jīng)驗(yàn)

neg的默認(rèn)值是 5,一般我們?nèi)?3-10 即可。樣本量非常少取 3,達(dá)到億的超大級(jí)別可以選擇10. 不過(guò)默認(rèn)的5可以滿足絕大多數(shù)情況。

一般數(shù)據(jù)量少的時(shí)候 Hierarchical Softmax可能會(huì)好一些。如果數(shù)據(jù)量非常大,則一般使用Negative Sampling 。

Skip-Gram和CBOW相比,多了一層循環(huán)(2c次),所以的確是計(jì)算量大約為CBOW的2c倍。

鑒于skip-gram學(xué)習(xí)的詞向量更細(xì)致,但語(yǔ)料庫(kù)中有大量低頻詞時(shí),使用skip-gram學(xué)習(xí)比較合適。

Skip-Gram模型相當(dāng)于是“家教學(xué)習(xí)模式”,即一個(gè)學(xué)生請(qǐng)了多個(gè)家教對(duì)其進(jìn)行一對(duì)一輔導(dǎo)。表現(xiàn)為每個(gè)輸入的中心詞(學(xué)生)從多個(gè)上下文詞標(biāo)簽(家教老師)那里獲得知識(shí)。

CBOW模型則相當(dāng)于“大班教學(xué)模式”,即多個(gè)學(xué)生在一個(gè)大班老師那里上課學(xué)習(xí),表現(xiàn)為每個(gè)輸入的多個(gè)上下文詞(多個(gè)學(xué)生)從中心詞標(biāo)簽(大班老師)那里獲得知識(shí)。

使用gensim訓(xùn)練詞向量:

size?:?int, optional

Dimensionality of the word vectors.

window?: int, optionalMaximum distance between the current and predicted word within a sentence.

min_count?: int, optional (出現(xiàn)頻次特別小的詞就不要了)Ignores all words with total frequency lower than this.

workers?: int, optional (表示線程,是核數(shù)的兩倍)Use these many worker threads to train the model (=faster training with multicore machines).

sg?: {0, 1}, optional (一般使用 skip-gram好一些)Training algorithm: 1 for skip-gram; otherwise CBOW.

hs?: {0, 1}, optional (使用負(fù)采樣的話,這里就取0

If 1, hierarchical softmax will be used for model training.If 0, and negative is non-zero, negative sampling will be used.

negative?: int, optional (比較多使用負(fù)采樣的方法

If > 0, negative sampling will be used, the int for negative specifies how many "noise words"should be drawn (usually between 5-20).

If set to 0, no negative sampling is used.

NLP等方向課程均限時(shí)福利秒殺!

搶秒殺移步→?julyedu.com





干貨|Word2Vec原理詳解的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
巢湖市| 即墨市| 大石桥市| 社会| 重庆市| SHOW| 惠州市| 孟州市| 博兴县| 宿州市| 武陟县| 湛江市| 庆安县| 和静县| 德格县| 东阳市| 靖边县| 当阳市| 东丰县| 米脂县| 达日县| 宜阳县| 盘锦市| 洛隆县| 盐城市| 江川县| 嘉善县| 剑川县| 巴彦淖尔市| 青阳县| 宜兰市| 泗水县| 商南县| 健康| 进贤县| 鲁甸县| 邯郸县| 南乐县| 滦南县| 阳曲县| 板桥市|