第三講 cs224n系列之skip-pram優化 & Global Vector by Manning & 詞向量評價

本系列是一個基於深度學習的NLP教程,2016年以前叫作CS224d: Deep Learning for Natural Language Processing,以後更名爲CS224n: Natural Language Processing with Deep Learning。新版主講人是泰斗Chris Manning和Richard Socher(這是舊版的講師),兩人分別負責不一樣的章節。博主在學習的同時,對重點內容作成系列教程,與你們分享!html

系列目錄(系列更新中)

第二講 cs224n系列之word2vec & 詞向量
第三講 cs224n系列之skip-pram優化 & Global Vector by Manning & 詞向量評價算法

1 skip-pram回顧

圖片描述

(1) J t ( θ ) = log σ ( u o T v c ) + i = 1 k E j P ( w ) [ log ( 1 σ ( u j T v c ) ) ]

根據公式 1 σ ( λ ) = σ ( λ )
(2) J t ( θ ) = log σ ( u o T v c ) + i = 1 k E j P ( w ) [ log σ ( u j T v c ) ]

PS:這裏的 J t 裏的t是第t步或者是第t個窗口
到此爲止,就能夠用tensorflow實現如下skip-pram了,關於skip-pram的tensorflow實現方法教程詳見markdown

參考鏈接連接網絡


問答:
若是不是凸函數,這可能會陷入局部最優解,那麼初始化就比較關鍵,可是在實踐中,只要是用一個小的隨機化初始化,通常不會出現問題。 iphone

2 skip-pram優化

在第一部分講解完成後,咱們會發現Word2Vec模型是一個超級大的神經網絡(權重矩陣規模很是大)。
舉個栗子,咱們擁有10000個單詞的詞彙表,咱們若是想嵌入300維的詞向量,那麼咱們的輸入-隱層權重矩陣和隱層-輸出層的權重矩陣都會有 10000 x 300 = 300萬個權重,在如此龐大的神經網絡中進行梯度降低是至關慢的。更糟糕的是,你須要大量的訓練數據來調整這些權重而且避免過擬合。百萬數量級的權重矩陣和億萬數量級的訓練樣本意味着訓練這個模型將會是個災難(太兇殘了)。
相關解決方法就是在skip-pram的基礎上優化,主要有以下兩種:機器學習

  • 對高頻次單詞進行抽樣來減小訓練樣本的個數。
  • 對優化目標採用「negative sampling」方法,這樣每一個訓練樣本的訓練只會更新一小部分的模型權重,從而下降計算負擔。

對於這兩種方法,我本身的理解是第一種是解決詞向量的個數的,也就是one-hot對應詞向量矩陣的維數,採用的方法是隻構建高頻詞,換另一種方式說是減小中心詞的個數,也就是對應的 V c 的個數,而第二種我認爲是從隱層到輸出層不會對每一個其餘的詞向量點乘,也就是最後的結果不是和輸出對應的那麼多維數的向量了,這樣就減小了,應該對吧!函數

以上兩種方法詳見學習

參考鏈接 優化

這裏寫圖片描述

3 Global Vector by Manning

global vector: Manningui

背景

Cbow 或者Skip-Gram取得了很大的成功,無論在訓練效率仍是在詞向量的計算效果上面。
可是考慮到Cbow/Skip-Gram 是一個local context window的方法,好比使用NS來訓練,缺少了總體的詞和詞的關係,負樣本採用sample的方式會缺失詞的關係信息。
另外,直接訓練Skip-Gram類型的算法,很容易使得高曝光詞彙獲得過多的權重

Global Vector融合了矩陣分解Latent Semantic Analysis (LSA)的全局統計信息和local context window優點。融入全局的先驗統計信息,能夠加快模型的訓練速度,又能夠控制詞的相對權重。

機率及表示

首先用符號X來表示詞和詞之間的表示:
X i j :詞i在詞j的window context裏面的次數,一樣也是j出如今i window context的次數
X i = k X i k :詞i的window context裏面的詞的總次數
P i j = P ( j | i ) = X i j / X i : 詞j出如今詞i 的context裏面的機率


這裏寫圖片描述
咱們看這個Pij的case:

咱們知道solid是ice的形狀,gas是steam的狀態,若是用機率表示,咱們但願
p ( s o l i d | i c e ) > p ( s o l i d | s t e a m )
p ( g a s | i c e ) < p ( g a s | s t e a m )
爲了數值化這個相對大小,咱們引入他們的比例:p(k|ice)/p(k|steam), 這個比例值越大,表明詞和ice更加相關,比例的值越小,表明和steam更加相關。

下一步: P i k P j k = p ( k | i ) / p ( k | j ) 在機器學習裏面怎麼計算?

這裏寫圖片描述

最終的公式是:

(3) J ( θ ) = 1 2 i , j = 1 W f ( P i j ) ( u i T v j log P i j ) 2

這裏的 P i j 是兩個詞共現的頻次,至關於上面的 X i j f是一個max函數,
這裏寫圖片描述
優勢是訓練快,能夠拓展到大規模語料,也適用於小規模語料和小向量。
相對於word2vec只關注窗口內的共現,GloVe這個命名也說明這是全局的(我以爲word2vec在所有語料上取窗口,也不是那麼地local,特別是負採樣)。

4 詞向量評價(Evaluate word vectors)

有了上面的一些算法,可是如何評價運行結果,模型中咱們有不少超參數,好比窗口設置多大?詞向量的大小如何設置?咱們該如何選擇這些參數讓咱們的模型運行的更好

有兩種方法:Intrinsic(內部) vs extrinsic(外部)

Intrinsic:專門設計單獨的試驗,由人工標註詞語或句子類似度,與模型結果對比。好處是是計算速度快,但不知道對實際應用有無幫助。有人花了幾年時間提升了在某個數據集上的分數,當將其詞向量用於真實任務時並無多少提升效果,想一想真悲哀。

Extrinsic:經過對外部實際應用的效果提高來體現。耗時較長,不能排除是不是新的詞向量與舊系統的某種契合度產生。須要至少兩個subsystems同時證實。這類評測中,每每會用pre-train的向量在外部任務的語料上retrain。

Intrinsic word vector evaluation

也就是詞向量類推,或說「A對於B來說就至關於C對於哪一個詞?」。這能夠經過餘弦夾角獲得:
這裏寫圖片描述
這種方法可視化出來,會發現這些類推的向量都是近似平行的:

這裏寫圖片描述

下面這張圖說明word2vec還能夠作語法上的類比:
這裏寫圖片描述

我感受上面的這種就相似於下面的這種運算,頗有意思:
這裏寫圖片描述

4.1 調參

幾個參數的對比:
這裏寫圖片描述

兩種模型間的對比:
這裏寫圖片描述

視頻中還有很對其餘的對比,目前感受做用不大。

這是是評估,但不是最小化。

參考資料

相關文章
相關標籤/搜索