自然語言處理(NLP)基礎概念4:直觀理解Skip-gram演算法過程

此專欄文章隨時更新編輯,如果你看到的文章還沒寫完,那麼多半是作者正在更新或者上一次沒有更新完,請耐心等待,正常的頻率是每天更新一篇文章。

此文章主要是斯坦福大學CS224n課程「深度學習與自然語言處理」的學習筆記,這一篇是關於其中一個簡單的知識點:直觀理解Skip-gram演算法。

歡迎訂閱專欄:深度學習+自然語言處理(NLP)

該專欄的目的在於理清深度學習和自然語言處理領域的一些基本概念。

====================================================================

首先給出文章結構:

  1. 什麼是Skip-gram
  2. 目標是什麼
  3. 定義表示法
  4. 主觀理解演算法過程

1.什麼是Skip-gram演算法

Skip-gram演算法就是在給出目標單詞(中心單詞)的情況下,預測它的上下文單詞(除中心單詞外窗口內的其他單詞,這裡的窗口大小是2,也就是左右各兩個單詞)。

以下圖為例:

圖中的love是目標單詞,其他是上下文單詞,那麼我們就是求 P(w_{you}|w_{love})P(w_{Do}|w_{love})P(w_{deep}|w_{love})P(w_{learning}|w_{love})

2.目標是什麼

理解了Skip-gram演算法的定義,我們很容易得出:我們的目標是計算在給定單詞的條件下,其他單詞出現的概率!

問題來了,在實踐中,怎麼計算這個概率?

接下來讓我們一步一步理解這個過程,首先從定義表示法開始。

3. 定義表示法

one-hot向量

one-hot向量就是利用一個 R^{|V|times1} 向量來表示單詞。

|V|是辭彙表中單詞的數量。

一個單詞在英文辭彙表中的索引位置是多少,那麼相對應的那一行元素就是1,其他元素都是0。

w^{word}=begin{vmatrix} 0 0 0 vdots  1  vdots  0 end{vmatrix}

還是以我們的例句"Do you love deep learning"為例。

love的one-hot向量就是:

w^{love}=begin{vmatrix} 0 0 1  0  0 end{vmatrix}

由於我們只有5個單詞,因此,ong-hot向量的行數是5,love是第3個單詞,因此索引3位置的數是1。

我們用 w_c 來表示目標單詞的one-hot向量。

詞向量(word vector)

詞向量就是用一組d維的向量代表單詞,如下:

v^{c}=begin{vmatrix} 0.2 0.4 1.3 vdots  0.9 end{vmatrix}

注意這是個d維的向量。

這裡我們用 v_c 表示目標單詞的詞向量

單詞矩陣(word matrix)

單詞矩陣是所有單詞的詞向量的集合。

注意,我們這裡要用到兩個單詞矩陣,一個是目標單詞的詞向量組成的矩陣,用 W 表示。

W的尺寸是 dtimes V

另外一個矩陣是由除目標單詞外的其他單詞的詞向量的轉置組成的矩陣,用 W 表示,尺寸是 Vtimes d ,注意這裡與上一個W的尺寸相反,至於為什麼我們後面解釋。

另外需要說明的是,由於每一個單詞都有可能作為目標單詞或其他單詞,因此,實際上這兩個矩陣是分別包含所有單詞的詞向量的。

單詞相似度

我們先考慮這個問題:怎麼表示兩個單詞之間的相似度?

一個簡單方法就是:兩個單詞間的詞向量求內積!

這裡,我們用 v_c代表目標單詞的詞向量,u_x代表除目標單詞外窗口內第x個單詞的詞向量。

那麼求內積: u_x^Tv_c 就是兩個單詞的相似度。

因為兩個單詞的內積越大,說明兩個單詞的相似程度越高。

softmax函數

我們需要知道的是softmax函數就是能夠把輸入轉換為概率分布,也就是說使輸入的實數變成分數。除此之外的內容我們暫不討論。

softmax函數的公式如下:

這裡面的z就是我們的相似度 u_x^Tv_c

最後總結一下,為下一章節做準備:

w_c 表示目標單詞的one-hot向量。

v_c 表示目標單詞的詞向量

u_x 表示除目標單詞外第x個單詞的詞向量

W 表示目標單詞矩陣

W 表示其他單詞矩陣

詞向量的維度是d

辭彙表的維度是V

4. 理解演算法過程

求相似度 u_x^Tv_c 總共分幾步?

第一步:求 v_c

v_c=Ww_c ,這裡W是 dtimes V 的矩陣, w_cV times 1 的矩陣,因此 v_cd times 1 的向量。

直觀理解:矩陣與one-hot向量的內積,相當於把one-hot向量中索引為1在向量矩陣中對應的那一列提取出來。

第二步:求 u_x^Tv_c 組成的向量

這個向量就是Wv_c ,這裡的 WV times d 的矩陣, v_cd times1 的向量。因此 u_x^Tv_cVtimes 1 的向量。

直觀理解:下面要說的很重要!用 Wv_c 相乘,相當於 v_c 和辭彙表中的所有詞向量的轉置都分別求內積,得到的結果組成了一個向量!

下圖是直觀描述。

第三步:求softmax

這步比較簡單,把得到的相似度矩陣代入softmax公式,就得到了一個滿足概率分布的矩陣。

至此,我們的目標已經實現:得到了一個向量。

向量中的數值代表在給定單詞的條件下,其他單詞出現的概率!大功告成!

推薦閱讀:

TAG:机器学习 | 深度学习DeepLearning | 自然语言处理 |