1. 程式人生 > >深度學習筆記之自然語言處理(word2vec)

深度學習筆記之自然語言處理(word2vec)

1.1 自然語言處理的應用

拼寫檢查,關鍵詞搜尋
文字挖掘
文字分類
機器翻譯
客服系統
複雜對話系統

1.2 語言模型

舉個例子:
這裡有一句話:“我今天下午打籃球。”

這裡寫圖片描述

p(S)是稱為語言模型,即用來計算一個句子概率的模型。
如下的語言模型,會造成資料過於稀疏,引數空間太大

這裡寫圖片描述

用下述的方式可以解決上面的問題。如下:
假設下一個詞的出現依賴於它前面的一個詞

這裡寫圖片描述

假設下一個詞的出現依賴於它前面的兩個詞

這裡寫圖片描述

我們以下面的一個簡單的詞庫表來講解。如下所示是一個詞庫表。

這裡寫圖片描述

下方的數字是每一個詞在詞庫中 出現的次數。
將該詞頻轉化為n*n的矩陣,其中n-gram=1。

這裡寫圖片描述

我們可以從該矩陣得知單詞 “i”後面接“want”的次數為827次,“i”後面接“eat”的次數為9次,以此類推。
然後將上述矩陣轉化為概率轉移矩陣。如下所示:

這裡寫圖片描述

如下即為“I want chinese food”概率計算公式:

這裡寫圖片描述

下圖是模型引數數量和n-gram引數個數的關係:

這裡寫圖片描述

1.3 兩個基礎模型(CBOW and skip-gram)

模型結構如下:

這裡寫圖片描述

我們首先看CBOW模型,它是根據上下文來預測當前詞,而Skip-gram模型則是根據當前詞,預測上下文。
CBOW是Continuous Bag-of-Words Model的縮寫,是一種根據上下文的詞語預測當前詞語的概率模型。將其轉化為極大似然估計,如下:

L=wclogp(w|Context(w))
我們看其訓練步驟,如下所示:
這裡寫圖片描述

輸入層是上下文的詞語的詞向量,在訓練CBOW模型,詞向量只是個副產品,確切來說,是CBOW模型的一個引數。訓練開始的時候,詞向量是個隨機值,隨著訓練的進行不斷被更新。
投影層對其求和,所謂求和就是簡單的向量加法。
輸出層輸出最可能的w。由於語料庫中詞彙向量是固定的,所以上述問題可以看成是一個多分類問題,給定特徵,從多個之中挑一個。

  1. pw從根節點w對應葉子節點的路徑
  2. lw路徑中節點的個數
  3. pw1,pw2,pw3...pwn路徑pw中的各個節點
  4. dw1,dw2,...dwn{0,1}
    詞w的編碼,dwj表示路徑pw第j個節點對應的編碼(根節點無編碼)
  5. θw1,θw2,...,θwlw1pw路徑pw中非葉節點對應的引數向量

1.4 負取樣

任何取樣演算法應該保證頻次越高的樣本越容易被取樣出來。基本思路是對於長度為1的線段,根據詞語的詞頻將其公平的分配給每個詞語:

len(w)=counter(w)uDcounter(u)

counter就是w的詞頻。
於是我們將該線段公平的分配了:

這裡寫圖片描述

接下來,我們只要生成0-1之間的隨機數,看看落在哪個區間,就能取樣到該區間對應的單詞了。