筆者在學習了吳恩達,以及斯坦福cs224n后,對于Word2Vec有了一些粗淺的理解,如有不合理之處請大家多多指正,這里就記記筆記啦:
一.詞匯表征
在自然語言處理當中,一種是利用one-hot vector(獨熱編碼)進行詞匯表征,假設有30000個單詞,那么hotel是其中的第7889個單詞,那么整個表示hotel的向量,只有在一維向量的索引第7889處,數字為1,其余為0.這樣計算機就可以知道這個單詞是什么了,因為計算機和我們人類并不一樣,他并不會清楚每一個單詞的含義,我們只能夠使用數字來表示單詞,

但是用這種方式我們并不能夠讓計算機知道兩個單詞之間的相似程度,以及對應的關系,比如english和chinese可以歸類為同一類的詞語,而women對應這man,這個時候,單詞的特征表示向量誕生了!
我們的一個單詞,可以用其他不用的單詞來進行表示,如下所示:

我們一個單詞可以用其他單詞不同的權重來表示,比如對于man而言,其gender的特性為-1,royal為0.01說明不太royal,food一般吃得比女性較多,因此food的引數為0.09,而women的food引數為0.01,通過這種方式就可以知道每個單詞的具體語意了,最終,某一個單詞的向量表示會長成這樣;

二.skip-gram演算法
在我們的word2vec當中,分為了兩種演算法,一種是skip-gram,一種是cbow(詞袋模型)演算法,這里講解skip-gram演算法,
假設我們有這樣的兩句話:

在這兩句話當中都同時出現了banking這個單詞,但是這兩句話卻表示的是不同的意思,skip-gram演算法認為,只要知道了中心詞banking,我們就可以去預測這個詞旁邊詞語是什么的概率,
那么這個模型是干啥用的呢?假設有一個詞語,有了word2vec這個模型,我們就可以用于知道這個單詞周圍每一個單詞的概率是多少,(這個是我個人的理解,如有不對,請多多指正)
因此我們定義中心單詞為wt,不是中心單詞的單詞為w-t,這樣我們就可以通過條件概率得到單詞wt周圍其中任何一個詞語的概率,context可以表示wt 旁的任意一個單詞,
其中J是我們的loss function,概率越大,則J越小,我們loss function就擬合得越好,

同樣的,我們可以使用wt+2 來表示距離wt右邊兩個詞距的詞語,wt-2 來表示距離wt左邊兩個詞距的詞語,因此我們有這樣的一個例子:

通過banking這個中心詞,通過神經網路訓練就可以得到其余詞匯的概率啦!而且這些詞匯在訓練開始之前,我們是不知道其概率是啥的.現在我們用更深刻的數學形式來表示整個程序:

用J(theta)這個函式進行梯度下降和優化,就可以得到theta的最優值,從而使得對J(theta)求導的概率值最大,這個概率值也就是中心單詞wt旁邊所有單詞最有可能出現的單詞的概率之和,概率之和最大了,就可以細分出每一個單詞的概率,其中的引數theta其實就是中心單詞的向量表示的引數,
由于在優化的時候,我們借助了神經網路,因此最后一定會有一個根據softmax層用于輸出每一個單詞的概率,softmax整個同時對于我媽呢來說已經非常熟悉了,公式如下:‘

公式當中的Uw表示的是除了center word之外的所有的words,進行遍歷,Vc表示的是center word的特征向量,整個skip-gram的神經網路結構如下:

首先我們會有某個單詞的one-hot vector Wt,然后經過一個引數矩陣,用整個one-hot vector乘以W整個引數矩陣(訓練出來的),是所有單詞的特征表示向量的集合,這樣就可以得到我們想要的單詞的特征表示向量(從one-hot 到feature representation),然后得到的Vc乘上周圍單詞的特征向量,通過softmax得到周圍單詞出現的概率,選取概率最大的那一個變成one-hot vector,經歷這樣的一個程序,我們就會知道周圍單詞有哪些會出現了!
三.skip-gram和CBOW的區別
skip-gram:一個詞語W作為輸入,輸出的單詞數量可以人為規定,且輸出的為最有可能在W旁邊的背景關系
CBOW:多個詞語作為輸入,輸出一個單詞
這兩者的區別可以如下所示的圖來表示;

最后,我們通過word2vec訓練出詞匯表征之后,講訓練完后所有的詞匯的特征表示進行可視化,就會得到這樣的效果,具有相似單詞屬性的單詞將會聚集在一起,形成一簇:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/267327.html
標籤:其他
上一篇:戈登·摩爾
