CS224N筆記——第二講——word vector representations,word2vec

Natural Language Processing with Deep Learning課程代號CS224N,是斯坦福大學的有關自然語言處理的課程,並且是世界上有關神經網絡與自然語言處理方面優秀的課程。找遍了網絡也沒有找到有中文翻譯的,所以我這個英語渣只能強行聽英文課程。因此做一些筆記方便以後複習。記錄得也比較混亂。

第一講是一個總體介紹,就沒有寫了。


以下內容來自課程視頻以及PPT


在處理自然語言的過程中,需要將語言進行表示,無論是什麼學派,一般nlp研究者都將單詞作爲最小的單位。使用one-hot形式,語料越多,維度越大,直到非常大,非常巨大…並且兩個one-hot形式是正交的,無法表示有關兩個單詞的相似度。

因此需要找到其他的辦法來表示單詞。
其中一個很有用的思想是——可以通過一個單詞的上下文了解這個單詞的意思,或者有一些其他的不同說法,但是思想都是統一的,就是在表示一個單詞的時候,你可以根據其上下文得到很多有用的信息。如下圖:

我們按照向量的形式來定義單詞的意思。

每個單詞一個dense vector, 爲了便於預測其上下文出現的其他單詞。這些單詞也是用向量表示。形成一種遞歸。


word2vec

定義一個從某一個單詞來預測上下文的模型,也需要有一個loss function,優化loss function來更好地預測上下文。

(注:-t表示的是除了t的內容,也就是t的上下文。)

如果loss爲0了那就是完美的預測,可是我們無法做到,因此我們的目標是在一個大的語料庫中不同位置得到訓練實例,改變單詞的表示來儘可能的最小化loss function。

word2vec的主要思想

通過上下文預測單詞或者是通過單詞預測上下文。

有兩種算法:
Skip-grams 單詞預測上下文
CBOW 上下文預測單詞

兩種(稍微有效率些的)訓練方法:
Hierarchical Softmax
Negative sampling

以上四個內容,在課程中,將會講到的只是Skip-grams。


這是Skip-grams的模型。我們要做的就是確定一箇中心詞,在圖中是bank,來預測某個window size中的圍繞中心詞的上下文。模型定義了給定中心詞後其上下文中出現某個單詞的概率。我們選擇單詞的向量表示來最大化分佈概率。也就是圖中的P(wt - 2 | wt)這樣的概率。

需要了解的是這裏只有一個概率分佈,而不是每個單詞有一個。對上下文的單詞只有一個作爲output的概率分佈。

word2vec的細節

目標函數

對於每一個t,也就是對於每一箇中心詞語,都要預測一個window size m的上下文。這就是上圖中第一個式子的含義。也就是模型的目標,這個式子作爲目標函數。我們要最大化上下文的概率也就是最大化這個目標函數。
將這個式子取log,因爲這樣會使所有的乘法變成加法,讓計算變得簡單一些。不是計算全部語料庫的概率,而是可以對每一個位置都求平均,從而在某種意義上達到對每一個詞的標準化。最後取負,從而可以最小化這個式子。如上圖中第二個式子所示。我們得到了一個negative log likelihood作爲可以用來最小化的目標函數。

而P( | )又是什麼呢,使用softmax來定義,softmax的公式不再多說,見下圖:

vc和uo分別是中心詞和輸出詞的向量。

兩個向量的點積,可以代表兩者之間的相似度,點積越大越相似。而softmax函數可以得到數字到概率分佈的映射,也就是說可以講數字轉化爲概率。因此這裏使用softmax將一堆相似度轉化爲概率。

(這是一個學生問的問題:)
answer:
你可能會認爲一個單詞應該只有一個向量表示,如果你想這麼做你就可以這麼做,但是如果一個單詞有兩個向量可以相當大地簡化計算,其中一個表示單詞,另一個表示單詞的上下文。不僅簡化了計算,也會在優化的過程中將兩個向量分離,而不會存在聯繫。


Skip-gram模型總體敘述

下圖是Skip-gram模型的樣子。

從左向右看,先是一箇中心單詞的one-hot形式。W是中心詞語representation的矩陣。(上方藕荷色文字已經標註了向量和矩陣的shape)。這兩個相乘,得到我們所需要的那個中心詞語的vector表示。中間的三個紅色的框代表的是存儲上下文單詞的representation的矩陣。(這裏作爲例子只畫出三個)中心詞語的vector表示上下文單詞的representation的矩陣相乘得到每個上下文備選詞語與已經選定的中心詞語的相似度,就是上文中提到的vc·uo。最相似的一個或幾個我們就認爲它們是中心詞語的上下文。使用softmax得到的概率與真實上下文單詞的one-hot形式作比較。還可以看出目前的預測並不準確。
因此我們需要進行對模型進行訓練,讓模型的預測變得儘可能準確。


訓練Skip-gram模型

將模型中所有的參數放到向量θ中。我們這裏是容量爲V的語料庫 * 一個單詞的d維。並且如前文所說,一個單詞有兩個向量表示(一個是上下文表示,一個是中心詞表示)。具體見下圖:

然後,優化:

就是梯度下降,對目標函數求偏導,如下圖所示:
將原式變形成圖中①②兩個部分,然後分別求偏導,具體見圖中。

兩部分分別求完,然後再合到一起:

以上步驟只是對中心單詞求偏導,我們也需要對其他的每一個上下文單詞(window中的)做同樣的計算。

最後,更新參數:

done

發佈了50 篇原創文章 · 獲贊 46 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章