斯坦福CS224N深度學習自然語言處理(三)

國內視頻地址:斯坦福CS224N深度學習自然語言處理課程(三)GloVe詞向量表示

Lecture 3: More Word Vectors

AtDeepertLooktattWordtVectors :

?? Finishtword2vect

?? Whattdoestword2vectcapture?t

?? HowtcouldtwetcapturetthistessencetmoreteffecRvely?t

?? Howtcantwetanalyzetwordtvectors?t n

(了解w2c的本質,以及如何對其進行分析。)

(稀疏問題)

(做正則時非常消耗時間,因為要對全量詞表做exp操作。這裡引入negative sampling方法)

(主要思想就是使用窗口裡的word作為正樣本pair,但不再用全量窗口外的數據,而是使用一個窗口內的word和一個隨機word組成隨機noise pair。

兩種樣本的比例將是非常關鍵的地方,注意。)

(skip-gram model 和 negative sampling在下面這個paper中有介紹。)

(這裡值得細說一下我的理解:

這裡的是objective function並非loss function,不需要求其最小值,而是求J(theta )最大值。

J(theta )是在語料中逐步移動的每一個窗口的objective function J_t(theta )的平均值。

J_t(theta )又分成兩部分,由於log和sigma 都是正相關函數,u_o^{T}v_c表示的是與窗口中word的相關度,因此需要最大化該項。

後一部分表示隨機按照某種抽樣方法抽取k個word,得到隨機noise pair,需要使其最小,又由於log和sigma 都是正相關函數,因此添加了負號。

這裡P(w)=U(w)^{3/4},相當於對頻次過高的query進行一些打壓。

視頻課程中老師說k通常取10,不用太大。但下面這段話有些不解,是不是寫錯了?

Summary of word2vec

? Go through each word of the whole corpus

? Predict surrounding words of each word

? This captures cooccurrence of words one at a time(其實本質上就是獲得words間的共現信息。)但是:

(假如我們把窗口擴大到doc的大小,此時獲取到的是topic話題信息~潛在語義分析,而之前使用的窗口,會得到句法語法的信息。

再回到上面的問題,為什麼不直接統計語料中words的共現頻次?)

(統計出來的共現頻次表確實可以表徵出來word之間的關聯信息。但也存在著某些問題。)

Problems with simple co-occurrence vectors

  • Increase in size with vocabulary

  • Very high dimensional: require a lot of storage

  • Subsequent classification models have sparsity issues

  • Models are less robust

(每當語料擴充或是有新詞時,需要刷新並且該表的規模也隨之增長。需要N*N的高維存儲,N為辭彙量,通常都很大。對於一些情況下有稀疏問題,因為沒統計到就為0。同時,缺少魯棒性。)

解決方案就是將高維空間壓縮到低維空間:

(第一個方法就是使用SVD,逐個正交的找到重要的方向,這裡簡單了解即可。)

一些小的技巧:

(一些有意思的語義pattern以及句法pattern上的merge,怎麼merge的?論文中應該有寫。)

SVD的缺點:計算開銷太大,同時處理新詞/文檔效果不佳(因為就是基於單純的共現統計嘛,只要是以這個為基礎都會遇到這個問題。)

基於共現統計與直接預測兩大類的比較:

(前者訓練速度快,(因為就是統計操作)同時有些利用統計信息。後者是有較強的泛化能力和處理複雜pattern的能力。)

能不能將兩者的優點進行聯合?因此有了GloVe。

(我的理解:和skip-gram不同,sg是通過窗口遍歷整個語料庫,而glove是先統計整個語料庫的共現矩陣,然後再在這個基礎上計算所有共現pair的loss

Pij是共現次數,f(Pij)是控制該pair的權重,貢獻次數越大,權重越高。當高於某個閾值後,權重均為1,不再變化。

後面的square loss,目的是希望頻次高時,兩者的相似度(即兩個向量點乘結果)也大,這樣使得整體loss變小。)

(具體的在上述標亮的paper中。然後又介紹了另外一篇paper,由於不屬於課程主線,這裡先跳過,後續會對該paper做一個單獨的摘要。有關word語義的線性結構,用於多義詞方面)

How to evaluate word vectors?

給出了一些經驗上的參數,當然得具體問題具體分析。

(glove和sg的對比效果。

為什麼sg會抖動的那麼明顯?)

(關於多義,相當於把一個word,在不同的cluster中保存了多份。)

(word vector一個很好的應用就是實體識別。)

Next lecture:

? Word classificaRon

? With context

? Neural networks


推薦閱讀:

記憶網路之Gated End-to-End Memory Networks
聊聊文本的分散式表示: Distributional Representation和Distributed Representation的區別
理解樸素貝葉斯分類的拉普拉斯平滑
隱馬爾可夫模型的預測問題----維特比演算法

TAG:自然语言处理 | 深度学习DeepLearning | 世界名校公开课推荐 |