本將概要:

一、負採樣

二、窗口統計VS.全文統計

三、詞向量評估


複習:

SG演算法的核心思想是:

  1. 選定一個單詞為中心單詞,以此單詞為中心,m為半徑建立一個窗口,計算窗口內其他單詞的概率,其中概率計算公式為:
  1. 滑動窗口,遍歷語料庫中的每一個單詞,需要更新的參數即為中心矩陣V和外部矩陣U
  2. 採用隨機梯度下降方纔來更新參數

對於每一個窗口而言,我們只有2m+1個單詞(其中m表示窗口的半徑),因此我們計算出來的梯度向量是十分稀疏的。

因此解決辦法有兩個:

  1. 每次只更新詞嵌入矩陣中的某些列
  2. 保留詞向量的哈希映射

同時如果你有百萬級別的詞向量並進行分散式計算,最好不要執行巨大的更新

一、負採樣

根據softmax公式可知,當我們計算分母時,我們需要遍歷整個語料庫,去計算中心單詞和周圍單詞的詞向量的內積,顯然,這種計算代價時很昂貴的。

因此我們可以使用負採樣來解決這個問題。負採樣的中心思想是:訓練一個二元邏輯回歸,其中包含一對真正的中心詞和上下文詞,以及一些噪音對(包含中心詞和一個隨機的單詞)。這種方法來源於這篇文獻:「Distributed Representations of Words and Phrases and their Compositionality」 (Mikolov et al. 2013)。具體的目標函數如下,其中k表示的是負樣本的個數,σ表示sigmoid函數。第二行第一項是正樣本,第二項是負樣本。換而言之,目標函數表示我們希望真正的上下文單詞出現的概率盡量大,而在中心詞外部周圍的隨機單詞出現的概率盡量小。

這裡有個小知識點:σ(-x) = 1 – σ(x) ,k是隨機選區的負樣本,因此有可能會取到真正的上下文單詞(正樣本),但是對於一個大的語料庫來說,這種概率非常小,忽略即可

我們假設隨機選取的噪音單詞是遵循下面的公式,其中U(W)表示一元模型的分佈,之所以加上一個3/4的冪是因為,我們希望減少那些常用的單詞被選中的概率。

word2vec的另外一種演算法是CBOW,主要的觀點是:從上下文向量的和來預測中心詞,正好與skip-grams相反。

word2vec通過對目標函數的優化,把相似的單詞在空間中投射到鄰近的位置。

通過word2vec的原理的觀察,我們可以發現實際上word2vec抓住的是兩個單詞同時出現(cooccurrence)的情況進行的建模。而我們也可以直接進行單詞同時出現(cooccurrence)的統計。

二、窗口統計VS.全文統計

窗口統計:像word2vec一樣利用一個窗口來進行同時出現(cooccurrence)情況的統計,來抓住語義和句法上面的信息。

全文共詞矩陣可以給出一般的主題信息,這就是所說的LSA方法

以窗口統計為例:窗口長度是1,一般窗口長度是5-10;左右兩邊的窗口長度是對稱的,語料庫示例:

  • I like deep learning.
  • I like NLP.
  • I enjoy ?ying.

共詞矩陣如下所示:

這個矩陣存在的問題是:

  1. 詞表大小會不斷增長
  2. 高維空間需要大量的空間存儲
  3. 數據稀疏
  4. 不夠健壯(魯棒性差,魯棒=robust)

解決的方法便是產生一些低維稠密的向量,將大部分重要的詞儲存在其中

方法一:對矩陣X進行降維

對矩陣進行奇異值分解(SVD)。奇異值來源於積分方程(設A為mn階矩陣,q=min(m,n),AA的q個非負特徵值的算術平方根叫作A的奇異值。)。最初不是這個名字,而是為標準乘子(canonical multipliers),也就是標準型上的對角元素。奇異值分解方法如下下:

其中∑為半正定m×n階對角矩陣,對角線上的值即為奇異值。一般的,我們規定對角線的值按照從大到小排列。其目的一是為了保證對角矩陣的唯一性,目的二為儘可能保留原有信息量。U和V是正交的。

我們可以利用python來完成

取U中奇異值最大的前兩列作為坐標,將單詞繪製在二維圖中:

一些改進:

  • the、he、has等這些單詞出現的頻率太高了,但他們幾乎出現在每個單詞的上下文中的時候,它本身也就無法給出一些更有用的信息了。解決方法是有兩個,一是對單詞同時出現的次數設定一個上限,min(X,t),t~100;或者乾脆無視這些單詞。
  • 給那些距離中心詞更近的單詞更多的權重
  • 利用皮爾森相關係數來替代計數,用0來替代負數

同時出現(cooccurrence)矩陣在句法和語義上的體現:

SVD存在的問題:

  • 計算代價是O(mn2),對於大量的文本和單詞而言,計算代價就會變得很大
  • 很難把新的單詞和矩陣整合進矩陣中,往往會需要重新計算

基於統計和基於直接預測兩種方法比較:

方法二:計數與直接預測的結合Glove

這個方法的目標函數如下:

其中f如下圖,目的是控制出現次數比較多的單詞對的權重。該方法的特點:

  • 訓練起來很快
  • 可以擴展成更大的語料庫
  • 在小的語料庫和小的向量的情況下,表現也很好

這個方法的訓練結果是u和v兩個矩陣,都代表了相似的同時出現(cooccurrence)的信息。最終,最好的X是U+V。

從Glove的訓練結果來看,這個模型對比較稀有的單詞也有比較好的效果。

三、詞向量評估

NLP的評估分為兩種,Intrinsic 和extrinsic

  • 內部的(Intrinsic)
    • 基於一個特定的中間的子任務
    • 計算起來很快
    • 幫助我們理解系統
    • 但是我們無法確定評估出來比較好的詞向量是否真的可以在實際任務中發揮作用
  • 外部的(extrinsic)
    • 基於一個實際任務進行評估
    • 可能需要花費很長的時間來計算正確率
    • 無法判斷是這個子系統的作用,還是交互作用,還是其他子系統的作用
    • 如果只是替換了一個子系統,而正確率提升了的話,就說明這個子系統是有效的

1. 內部評估

利用詞向量類比詞類進行評估,如下圖,比如b代表woman,a代表man,c表示king,那麼在剩下的單詞中,正確的類比單詞應該是cosine相似度最高的。在實際中應該是queen,通過判斷d是不是queen可以用來評估這個詞向量的構造情況。

但有一個問題是,如果存在這個單詞,但是並非線性結構該怎麼辦?

詞向量類比詞的一些例子:Word Vector Analogies: Syntactic and Semantic examples from code.google.com/p/word2

利用詞向量類比詞進行評估和超參的選擇:

其他內部的詞向量評估方法:計算詞向量的距離以及人工判斷之間的相關性(correlation)

這裡存在一詞多義的問題:你可能想用一個向量獲得一個單詞所有的信息,但是一個單詞往往具有不同的含義。其中一個解決方法是增加標號,同一個詞使用不同的標號表示不同的含義。

2. 外部評估

一個比較直接的例子是使用詞向量進行命名實體識別(named entity recognition)

從下面的比較中可以看到,即使是在外部評估方法下,GloVe的表現也是很好的

推薦閱讀:

相關文章