1. 程式人生 > >CS224n筆記二:word2vec

CS224n筆記二:word2vec

更新 神經網絡 另一個 實例 alt 計算 方法 layer crete

如何表示詞語的意思

語言學中meaning近似於“指代,代指,符號”。

計算機中如何處理詞語的意思

過去一直采用分類詞典,計算語言學中常見的方式時WordNet那樣的詞庫,比如NLTK中可以通過WordNet查詢熊貓的上位詞(hypernums),得到“食肉動物”,“動物”之類的上位詞。也可以查詢“good”的同義詞,如“just”。

離散表示(discrete representation)的問題

  • 這種離散表示並不準確,丟失了些許韻味。如以下同義詞的意思還是有微妙不同的:adept, expert, good, practiced, proficient, skillful

  • 缺少新詞

  • 耗費人力

  • 無法準確計算詞語相似度

    大多數NLP學者將詞語作為最小的單位,事實上,詞語只是詞表長度的one-hot向量,這是一種局部表示(localist representation)。在不同的語料中,詞表大小不同,如Google的1TB詞料詞匯量是1300w,這個向量實在過長了。

從符號表示(symbolic representation)到分布式表示(distributed representation)

詞語在符號表示上體現不出意義的相似性,如“motel”和“hotel”,其one-hot向量是正交的,無法通過計算獲得相似度。

技術分享圖片

Distributional similarity based representations

語言學家J. R. Firth提出,通過一個單詞的上下文可以得到它的意思。J. R. Firth甚至建議,日過能將單詞放到正確的上下文中,才說明掌握了它的意義。這是現代統計自然語言處理最成功的思想之一:

技術分享圖片

通過向量定義詞語的含義

通過調整一個單詞機器上下文單詞的向量,使得根據兩個向量可以推測兩個單詞的相似度;或者根據兩個向量可以推測詞語的上下文。這種手法是遞歸的,根據向量調整向量。

學習神經網絡word embedings的基本思路

  • 定義一個用來預測某個單詞上下文的模型:

    p(context|wt)=…

  • 損失函數定義如下:

    J=1-p(w-t|wt)

    這裏的w-t表示wt的上下文(-t表示“除了t之外”),如果完美預測,及p(wt

    )=1,損失函數等於0。

  • 在一個大型的語料庫中的不同位置得到訓練實例,調整詞向量,最小化損失函數。

word2vec的主要思路

通過單詞和上下文預測彼此。

  • 兩個算法
    • Skip-grams(SG):預測上下文
    • Continuous Bag of Words(CBOW):預測目標單詞
  • 兩種高效的訓練方法:
    • Hierarchical softmax
    • Negative sampling

Hierarchical Softmax

模型共同點

無論是哪種模型,其基本網絡結構都是在下圖的基礎上(省略掉hidden layer):

技術分享圖片

為什麽要去掉hidden layer層呢?因為word2vec的作者認為hidden layer到output layer的矩陣運算太多了,所以兩種模型的網絡結構是:

技術分享圖片

其中w(t)代表當前詞語位於句子中的位置t,同理定義其他符號,在窗口內(上圖中的窗口大小為5),除了當前詞語之外的其它詞語共同構成上下文。

CBOW

原理:CBOW是一種根據上下文的詞語預測當前詞語出現概率的模型。

CBOW是已知上下文,估算當前詞語的語言模型,其學習目標是最大化對數似然函數:

技術分享圖片

其中,w表示語料庫C中任意一個次。從上圖可以看出,對於CBOW:

  • 輸入層是上下文詞語的詞向量(詞向量只是訓練CBOW模型的副產物,是CBOW模型的一個參數。訓練開始時,詞向量是隨機值,隨著訓練的進行不斷被更新)

  • 投影層對其求和,就是簡單的向量加法。

  • 輸出層輸出最可能的w。由於語料庫中的詞匯量是固定的|C|個,所以上述過程可以看作是一個多分類的問題。給定特征,從|C|個分類中挑一個。

    對於神經網絡模型的多分類,最樸素的做法是softmax回歸:

    技術分享圖片

    softmax回歸需要對語料庫中每個詞語(類)都計算一遍輸出概率並進行歸一化,在幾十萬詞匯量的語料上無疑是令人頭疼的。

    如果使用SVM中的多分類:

    技術分享圖片

    這是一種二叉樹結構,應用到word2vec中被作者稱為Hierarchical Softmax:

    技術分享圖片

    上圖輸出層的樹形結構即為Hierarchical Softmax。

    非葉子節點相當於一個神經元(感知機,我認為邏輯斯諦回歸就是感知機的輸出代入f(x)=1/(1+e^x)),二分類決策輸出1或0,分別代表向下左轉或向下右轉;每個葉子節點代表語料庫中的一個詞語,於是每個詞語都可以被01唯一地編碼,並且其編碼序列對應一個事件序列,於是我們可以計算條件概率:技術分享圖片

    在開始計算之前,還是得引入一些符號:

    1. 技術分享圖片從根結點出發到達w對應葉子結點的路徑.

    2. 技術分享圖片路徑中包含結點的個數

    3. 技術分享圖片路徑技術分享圖片中的各個節點

    4. 技術分享圖片詞w的編碼,技術分享圖片表示路徑技術分享圖片第j個節點對應的編碼(根節點無編碼)

    5. 技術分享圖片路徑技術分享圖片中非葉節點對應的參數向量

      可以給出w的條件概率:

      ?

    技術分享圖片

Skip-gram預測

技術分享圖片

這裏雖然有四條線,但模型中只有一個條件分布(因為這只是個詞袋模型而已,與位置無關)。學習就是要最大化這些概率。

word2vec細節

目標函數定義為所有位置的預測結果的乘積:

技術分享圖片

要最大化目標函數。對其取個負對數,得到損失函數——對數似然的相反數:

技術分享圖片

對於softmax來講,常用的損失函數為交叉熵。

Softmax function:從實數空間到概率分布的標準映射方法

技術分享圖片

指數函數可以把實數映射成正數,然後歸一化得到概率。

softmax之所叫softmax,是因為指數函數會導致較大的數變得更大,小數變得微不足道;這種選擇作用類似於max函數。

Skipgram

技術分享圖片

這兩個矩陣都含有V個詞向量,也就是說同一個詞有兩個詞向量,哪個作為最終的、提供給其他應用使用的embeddings呢?有兩種策略,要麽加起來,要麽拼接起來。在CS224n的編程練習中,采取的是拼接起來的策略:

# concatenate the input and output 
word vectorswordVectors = np.concatenate(    
(wordVectors[:nWords,:], wordVectors[nWords:,:]),    
axis=0)
# wordVectors = wordVectors[:nWords,:] + wordVectors[nWords:,:]

他們管W中的向量叫input vector,W‘中的向量叫output vector。從左到右是one-hot向量,乘以center word的W於是找到詞向量,乘以另一個context word的矩陣W‘得到對每個詞語的“相似度”,對相似度取softmax得到概率

訓練模型:計算參數向量的梯度

把所有參數寫進向量θ,對d維的詞向量和大小V的詞表來講,有:

技術分享圖片

由於上述兩個矩陣的原因,所以θ的維度中有個2。

CS224n筆記二:word2vec