色屁屁www影院免费观看入口,欧美性猛交ⅹxxx乱大交妖精,欧美激情第5页,欧美性猛交xxxx三人,欧美一a级做爰片大开眼界

達(dá)觀動(dòng)態(tài)

達(dá)觀愿與業(yè)內(nèi)同行分享 助力各企業(yè)在大數(shù)據(jù)浪潮來(lái)臨之際一起破浪前行

漫談Word2vec之skip-gram模型
v2-c34d226e88224287954d581d98630460_r
word2vec是Google研究團(tuán)隊(duì)的成果之一,它作為一種主流的獲取分布式詞向量的工具,在自然語(yǔ)言處理、數(shù)據(jù)挖掘等領(lǐng)域有著廣泛的應(yīng)用。達(dá)觀數(shù)據(jù)的文本挖掘業(yè)務(wù)有些地方就使用了該項(xiàng)技術(shù)。本文從以下幾個(gè)方面簡(jiǎn)要介紹Word2vec的skip-gram模型:
?
第一部分對(duì)比word2vec詞向量和one-hot詞向量,引出word2vec詞向量的優(yōu)勢(shì)所在;第二部分給出skip-gram模型的相關(guān)內(nèi)容;第三部分簡(jiǎn)單介紹模型求解時(shí)優(yōu)化方面的內(nèi)容;第四部分通過(guò)例子簡(jiǎn)單給出詞向量模型的效果;第五部分作出總結(jié)。
?

1. 優(yōu)勢(shì)

word2vec詞向量與傳統(tǒng)的one-hot詞向量相比,主要有以下兩個(gè)優(yōu)勢(shì)。

(1)低維稠密

一般來(lái)說(shuō)分布式詞向量的維度設(shè)置成100-500就足夠使用,而one-hot類型的詞向量維度與詞表的大小成正比,是一種高維稀疏的表示方法,這種表示方法導(dǎo)致其在計(jì)算上具有比較低效率。
v2-c9d0a15b7abc6cb4348ca8b408ef0dfe_b
Fig.1. one-hot詞向量

(2) 蘊(yùn)含語(yǔ)義信息

one-hot這種表示方式使得每一個(gè)詞映射到高維空間中都是互相正交的,也就是說(shuō)one-hot向量空間中詞與詞之間沒(méi)有任何關(guān)聯(lián)關(guān)系,這顯然與實(shí)際情況不符合,因?yàn)閷?shí)際中詞與詞之間有近義、反義等多種關(guān)系。Word2vec雖然學(xué)習(xí)不到反義這種高層次語(yǔ)義信息,但它巧妙的運(yùn)用了一種思想:“具有相同上下文的詞語(yǔ)包含相似的語(yǔ)義”,使得語(yǔ)義相近的詞在映射到歐式空間后中具有較高的余弦相似度。
v2-a4296f6e2302a251ebf653e7e0b4e7b9_b
Fig.2. word2vec詞向量

2. skip-gram模型

(1) 訓(xùn)練樣本

怎么把“具有相同上下文的詞語(yǔ)包含相似的語(yǔ)義”這種思想融入模型是很關(guān)鍵的一步,在模型中,兩個(gè)詞是否出現(xiàn)在一起是通過(guò)判斷這兩個(gè)詞在上下文中是否出現(xiàn)在一個(gè)窗口內(nèi)。例如,原始樣本“達(dá)觀數(shù)據(jù)是一家做人工智能的公司”在送入模型前會(huì)經(jīng)過(guò)圖3所示處理(這里為了繪圖簡(jiǎn)單假設(shè)窗口為2,一般窗口是設(shè)置成5)。
?
如圖3所示,skip-gram模型的輸入是當(dāng)前詞,輸出是當(dāng)前詞的上下文,雖然我們訓(xùn)練模型的時(shí)候喂的是一個(gè)個(gè)分詞好的句子,但內(nèi)部其實(shí)是使用一個(gè)個(gè)word pair來(lái)訓(xùn)練。同樣是之前的case“達(dá)觀數(shù)據(jù)是一家做人工智能的公司”,假如窗口改為5,則(達(dá)觀數(shù)據(jù),人工智能)這個(gè)word pair會(huì)成為一個(gè)訓(xùn)練樣本。
?
假如再過(guò)來(lái)一個(gè)case“Google是一家人工智能公司”,則(Google,人工智能)也會(huì)成為一個(gè)訓(xùn)練樣本。如果用來(lái)訓(xùn)練的語(yǔ)料庫(kù)中會(huì)產(chǎn)生多個(gè)(達(dá)觀數(shù)據(jù),人工智能)、(Google,人工智能)這種的訓(xùn)練樣本,則可以推測(cè)“達(dá)觀數(shù)據(jù)”和“Google”會(huì)有較高的相似度,因?yàn)樵谟?xùn)練樣本中這兩個(gè)詞具有相同的輸出,推而廣之,也就是說(shuō)這兩個(gè)詞具有相同的上下文。一言以蔽之“假如兩個(gè)詞具有相同的輸出,則可反推出作為輸入的兩個(gè)詞之間具有較高相似性”,接下來(lái)就是如何使用模型來(lái)實(shí)現(xiàn)上述目標(biāo)。
v2-25b9d7a99644ff94b4a68323f5375f04_b
Fig.3. 訓(xùn)練樣本

(2)skip-gram模型

skip-gram模型與自編碼器(Autoencoder)類似,唯一的區(qū)別在于自編碼器的輸出等于輸入,而skip-gram模型的輸出是輸入的上下文。那么,作為訓(xùn)練樣本的word pair應(yīng)該以什么樣的方式輸入給模型? 答案是one-hot向量,為了得到one-hot向量,必須首先知道訓(xùn)練語(yǔ)料中包含了多少詞。因此,在訓(xùn)練之前會(huì)首先對(duì)語(yǔ)料進(jìn)行統(tǒng)計(jì),得到詞表。假設(shè)詞表長(zhǎng)度為10000,詞向量為300維,則skip-gram模型可表示為圖4。
v2-a01d4b9a142ce50582d4039dcce837b6_b
Fig.4. skip-gram 模型

如圖4所示,假設(shè)輸入的word pair為(ants, able),則模型擬合的目標(biāo)是

Max P(able|ants)

,同時(shí)也需要滿足

Min P (other words 丨ants)

,這里利用的是對(duì)數(shù)似然函數(shù)作為目標(biāo)函數(shù)。上述表述中

P(able 丨ants)

可表示為:

v2-0151c7ebd7c17686b097740bb98ee656_b

根據(jù)

P(able丨ants)

P(other words丨ants)

,可構(gòu)建似然函數(shù):

v2-a2c77dfd42d9d009f62aef0928b6f224_b
則:
v2-03f1cb09739bb886ae786825e02189b4_b

P(word_{i}丨ants)
代入有:
v2-a178135ce29430165fc4427aba10dc3a_b
式中{*}表示如果表達(dá)式*為true,則{*}=1,否則{*}=0。接下來(lái)要做的是最大化似然函數(shù),也即:
Max LogL(W)
要實(shí)現(xiàn)上述目標(biāo),可利用梯度上升法,首先對(duì)參數(shù)求偏導(dǎo):
v2-28fec02f2ce3b951a612e452887c0a9e_b
接下來(lái)根據(jù)學(xué)習(xí)率對(duì)進(jìn)行更新:
v2-c20682811aba4e9aeb63d9e17c964a49_b

現(xiàn)在問(wèn)題來(lái)了,模型訓(xùn)練完成后詞向量在哪呢?隱藏層的參數(shù)矩陣

W_{10000×300}

就包含了所有詞的詞向量,該矩陣的行為詞表長(zhǎng)度,列為詞向量維度,矩陣中的每一行表示一個(gè)詞的詞向量。由于輸入層

X_{ants1×10000}

是one-hot向量,與隱藏層

W_{10000×300}

點(diǎn)乘后其實(shí)是選中了該矩陣中的一行,如圖5所示,這一行表示的是ants的詞向量,而輸出層其實(shí)是以ants的詞向量為特征,以ants的上下文詞作為類別來(lái)訓(xùn)練softmax分類器。

v2-9e49c547e3ba5910b27fca742a0c48bc_b
Fig.5.詞的one-hot向量點(diǎn)乘隱藏層權(quán)值矩陣得到該詞的詞向量

回到上文,為什么說(shuō)(達(dá)觀數(shù)據(jù),人工智能)、(Google,人工智能)這種樣本多了之后會(huì)得出達(dá)觀數(shù)據(jù)和Google的相似度會(huì)比較高?當(dāng)時(shí)解釋的是因?yàn)檫@兩個(gè)詞有相同的輸出,更深一步講是因?yàn)檩敵鰧訁?shù)矩陣

W_{300×10000}

是所有詞向量共享的。具體來(lái)說(shuō),模型訓(xùn)練完成后會(huì)達(dá)到類似下面的效果:

v2-bea12b03bc619a2933e173db396f5672_b

由上面可直接看出來(lái)

wv(達(dá)觀數(shù)據(jù))≈wv(google)

,其中

wv(*)

表示*的詞向量,約等于是指兩個(gè)向量所指的方向在空間中比較接近。

3. 模型優(yōu)化

(1)欠采樣 subsample

圖3中的例子中“是”、“的”這種詞在任何場(chǎng)景中都可能出現(xiàn),它們并不包含多少語(yǔ)義,而且出現(xiàn)的頻率特別高,如果不加處理會(huì)影響詞向量的效果。欠采樣就是為了應(yīng)對(duì)這種現(xiàn)象,它的主要思想是對(duì)每個(gè)詞都計(jì)算一個(gè)采樣概率,根據(jù)概率值來(lái)判斷一個(gè)詞是否應(yīng)該保留。概率計(jì)算方法為:
v2-445a5c7981469eaaaef969689797f376_b
其中f(*)表示*出現(xiàn)的概率,0.001為默認(rèn)值,具體函數(shù)走勢(shì)如圖6所示,可以看出,詞語(yǔ)出現(xiàn)的概率越高,其被采樣到的概率就越低。這里有一點(diǎn)IDF的味道,不同的是IDF是為了降低詞的特征權(quán)重,欠采樣是為了降低詞的采樣概率。
v2-db58375c6842680f31c9c25f94bc00ad_b

(2) 負(fù)采樣 negative sample

以圖4所示的模型為例,對(duì)每一個(gè)訓(xùn)練樣本需要更新的參數(shù)個(gè)數(shù)有三百萬(wàn)(準(zhǔn)確的說(shuō)是三百萬(wàn)零三百,由于輸入是one-hot,隱藏層每次只需要更新輸入詞語(yǔ)的詞向量),這還是假設(shè)詞表只有一萬(wàn)的情況下,實(shí)際情況會(huì)有五十萬(wàn)甚至更多,這時(shí)候參數(shù)就達(dá)到了億級(jí)。訓(xùn)練過(guò)程中要對(duì)每個(gè)參數(shù)計(jì)算偏導(dǎo),然后進(jìn)行更新,這需要很大的計(jì)算資源。
?
負(fù)采樣是加快訓(xùn)練速度的一種方法,這里的負(fù)可以理解為負(fù)樣本。針對(duì)訓(xùn)練樣本(ants, able),able這個(gè)詞是正樣本,詞表中除able外的所有詞都是負(fù)樣本。負(fù)采樣是對(duì)負(fù)樣本進(jìn)行采樣,不進(jìn)行負(fù)采樣時(shí),對(duì)每一個(gè)訓(xùn)練樣本模型需要擬合一個(gè)正樣本和九千九百九十九個(gè)負(fù)樣本。加入負(fù)采樣后,只需要從這九千九百九十九個(gè)負(fù)樣本中挑出來(lái)幾個(gè)進(jìn)行擬合,大大節(jié)省了計(jì)算資源。那么應(yīng)該挑幾個(gè)負(fù)樣本,根據(jù)什么進(jìn)行挑呢?Google給出的建議是挑5-20個(gè),怎么挑是根據(jù)詞在語(yǔ)料中出現(xiàn)的概率,概率越大越有可能被選中,具體計(jì)算公式為:
v2-fe4b75424a63335847bab10f3ae1816c_b
其中f(*)表示*出現(xiàn)的概率。

(3)層次softmax

層次softmax的目的和負(fù)采樣一樣,也是為了加快訓(xùn)練速度,但它相對(duì)復(fù)雜,沒(méi)有負(fù)采樣這種來(lái)的簡(jiǎn)單粗暴。具體來(lái)說(shuō),使用層次softmax時(shí)圖4中的模型輸出層不再是使用one-hot加softmax回歸,而是使用Huffman樹加softmax回歸。在模型訓(xùn)練的時(shí)候首先統(tǒng)計(jì)語(yǔ)料中詞語(yǔ)的詞頻,然后根據(jù)詞頻來(lái)構(gòu)建Huffman樹,如圖7所示,樹的根節(jié)點(diǎn)可理解為輸入詞的詞向量,葉子節(jié)點(diǎn)表示詞表中的詞,其它節(jié)點(diǎn)沒(méi)有什么實(shí)際含義,僅起到輔助作用。
v2-f2fa9f4f035f481d272902d490993e21_b
Fig.7.Huffman樹
為什么使用Huffman樹可以加快訓(xùn)練速度?答案是輸出層不使用one-hot來(lái)表示,softmax回歸就不需要對(duì)那么多0(也即負(fù)樣本)進(jìn)行擬合,僅僅只需要擬合輸出值在Huffman樹中的一條路徑。假設(shè)詞表大小為N,一條路徑上節(jié)點(diǎn)的個(gè)數(shù)可以用來(lái)估計(jì),就是說(shuō)只需要擬合次,這給計(jì)算量帶來(lái)了指數(shù)級(jí)的減少。此外,由于Huffman編碼是不等長(zhǎng)編碼,頻率越高的詞越接近根節(jié)點(diǎn),這也使計(jì)算量有所降低。
?

怎么對(duì)樹中的節(jié)點(diǎn)進(jìn)行擬合呢?如圖7所示,假設(shè)訓(xùn)練樣本的輸出詞是

w_{2}

,則從根節(jié)點(diǎn)走到

w_{2}

經(jīng)過(guò)了

n(w_{2},2),n(w_{3},3)

這兩個(gè)節(jié)點(diǎn)。由于Huffman樹是二叉樹,這意味著只需要判斷向左還是向右就可以從根節(jié)點(diǎn)走到

w_{2}

,判斷向左還是向右其實(shí)就是進(jìn)行二分類。圖7中的例子,“root(input)->left->left->right()”這條路徑的概率可表示為:

v2-d15907b19b7d2d5ef80028f63aa56c98_b

其中

θ_{i}

表示路徑中第i個(gè)節(jié)點(diǎn)的權(quán)值向量。注意一點(diǎn),softmax regression 做二分類的時(shí)候就退化為了logistic regression,因此雖然叫層次softmax但公式中其實(shí)用的是logistic function。根據(jù)上述公式就可構(gòu)建根據(jù)Huffman樹來(lái)進(jìn)行softmax回歸的cost function,進(jìn)而根據(jù)梯度下降對(duì)模型進(jìn)行訓(xùn)練求解。

4. word2vec應(yīng)用

Google開源了word2vec源碼,可以很方便的訓(xùn)練詞向量,這里不再贅述。簡(jiǎn)單看個(gè)例子:
v2-dc425753274f7722764239e45e90926a_b
可以看出,當(dāng)輸入北京這個(gè)詞時(shí),與之相似的詞語(yǔ)有“上海、廣州、杭州、深圳…”,模型幾乎學(xué)習(xí)到了一線城市的概念,效果還是可以的。
?

達(dá)觀應(yīng)用案例

特征降維:特征維度過(guò)高的時(shí)候,很容易出現(xiàn)特征之間具有較高的相關(guān)性。這種情況下可以利用詞向量工具對(duì)特征進(jìn)行聚類,將相關(guān)的特征歸到一個(gè)維度里面。
特征擴(kuò)展針對(duì)短文本分析處理時(shí),一個(gè)case往往提不出很多表意較強(qiáng)的特征,導(dǎo)致類別間區(qū)分度不強(qiáng)。這種情況下可以利用詞向量工具對(duì)主要特征進(jìn)行擴(kuò)展,在不損失精度的前提下提高召回。

5. 總結(jié)

本文從例子出發(fā),簡(jiǎn)單介紹了Word2vec的skip-gram模型,只作拋磚引玉。文中若有不當(dāng)之處,歡迎指正。