1. 程式人生 > >斯坦福cs224d(深度學習在自然語言處理上的應用)Lecture 2 note2

斯坦福cs224d(深度學習在自然語言處理上的應用)Lecture 2 note2

說明:本文為斯坦福大學CS224d課程的中文版內容筆記,已得到斯坦福大學課程@Richard Socher教授的授權翻譯與發表

課堂筆記:第2部分

——————————————————————————————————–

關鍵詞:內部任務評價(Intrinsic Evaluation)和 外部任務評價(extrinsic evaluations)。超引數影響下的類比評價任務。人類決策和詞向量距離的相關性。結合上下文處理歧義。視窗分類。

這個課堂筆記我們將會對詞向量(也就是詞嵌入)的內部任務評價和外部任務評價方法進行討論。主要的內容是單詞類比(word analogies)技術,我們會把它當做內部任務評價的技術並展示其相關示例,它會在詞向量的調諧(tune)中發揮重要作用。我們還會討論如何訓練模型的權重/引數,並關注用來進行外部任務評價的詞向量。最後,我們會簡單地提到人工神經網路,它在自然語言處理中表現極好。

1、詞向量的評價

在前面的Lecture1中,我們討論了Word2Vec和GloVe等詞嵌入的方法。它們用來訓練和發現詞彙在語義空間中的向量表示。今天我們來探討如何對詞向量的效果進行評價。

1.1 內部任務評價

內部任務評價是對在特定子任務(如完成單詞類比)中生成的詞向量進行的評價,這些詞向量可以由詞嵌入技術(如Word2Vec和GloVe)生成。這些子任務往往很簡單,計算速度很快,可以幫助我們理解生成這些詞向量的系統。一個內部任務評價往往返回一個數值,來表示這些詞向量在子任務上的表現。



圖1:左側子系統(紅)訓練消耗較大,通過替換為一個簡單的內部任務評價子系統(綠)來優化。

內部任務評價的特點如下

  • 一般是在一個特定的子任務中進行評測
  • 計算很快
  • 有助於理解相關的系統
  • 在實際的NLP任務中表現好壞,可能需要外部關聯實際應用

咱們考慮一個例子,比如我們的目標是要建立一個以詞向量為輸入,能夠回答問題的系統。一種方法是訓練一個機器學習的模型,主要步驟如下:

  1. 輸入詞語
  2. 將詞語轉換成詞向量
  3. 將詞向量作為一個複雜的機器學習系統的輸入
  4. 把系統的輸出對映到自然語言詞彙
  5. 生成詞語組成答案

顯然,為了訓練這樣一個問答系統,我們需要為下游機器學習系統(比如深度神經網路)建立一個最優的詞向量表示。這在實際操作中,就需要我們調節Word2Vec 子系統中的許多超引數(如向量維度)。 儘管最理想的方法是每次調整引數後重新訓練整個系統,但這在工程上是不現實的。因為這裡的機器學習系統(第3步)一般都是一個含有幾百萬引數的深度神經網路,需要極長時間去訓練。等得花兒都謝了。 所以,我們希望有一個簡單的內部任務評價方法來評價詞向量生成系統的好壞。顯然,其中一個要求是內部任務評價結果和整個系統的最終精度是正相關的。

 1.2 外部任務評價

外部任務評價是對在實際任務中產生的詞向量進行的評價。這些任務通常是很複雜的,且它們的計算過程比較緩慢。在我們前面使用的例子中,允許基於問題對答案進行評估的系統是一種外部任務評價系統。一般來講, 優化外部評價系統的時候我們無從知曉是哪個子系統除了問題,所以需要進一步進行內部任務評價。

外部任務評價的特點如下

  • 在一個實際任務中進行評測
  • 需要花很長的時間來計算精度
  • 不太清楚是否是某個子系統或者其他子系統,又或是幾個子系統互相作用引起的問題
  • 如果替換原有的子系統後獲得精度提升,則說明替換很可能是有效的

1.3內部任務評價示例: 詞向量類比

一個比較流行的內部任務評價是詞向量類比的。 在詞向量類比中,我們先輸入一組不完整的類比:

a:b::c:?

內部任務評價系統找出最大化餘弦相似度的詞向量

d=argmaxi(xbxa+xc)Txixbxa+xc

我們可以直觀地解釋這個衡量指標。理想情況下,我們想得到xbxa=xdxc(例如,王后–國王 = 女演員 – 男演員)。於是xbxa+xc=xd, 所以我們只需要找出一個與xbxa+xc的標準化內積(比如餘弦相似度)取最大值的詞向量就可以了 。
使用內部任務評價的時候需要比較謹慎,要考慮到訓練文集的各個方面。例如,如下形式的類比


城市1 : 城市 1所屬州 : : 城市2 : 城市2所屬州

表1:語義詞向量類比(內部評價)會因為同名城市而產生問題

美國有許多同名村鎮,所以很多州都符合正確答案。比如在美國至少有十個地方叫Phonix,所以Arizona不一定是唯一的正確答案。 再看以下類比形式:


首都城市1 : 國家1 : : 首都城市2 : 國家2

表2: 這些是語義詞向量類比(內部任務評價),此類比存在的問題在於國家在不同時期會有不同的首都

上面這個例子中的城市只是近期的國家首都。比如,1997年之前Kazakhstan的首都是Almaty。如果我們用來訓練的文集比較舊,就很容易出現問題。
之前的兩個例子說明了如何使用詞向量進行語義測試。我們還可以使用詞向量類比進行語法測試。下面的內部任務評價能夠評估詞向量獲取形容詞最高階的能力。



表3:語法詞向量類比(內部評價)在形容詞最高階上的測試

類似的,下面的內部任務評價能夠測試詞向量捕捉過去式的能力



表 4: 這些是語法詞向量類比(內部任務評價),此類比可評估獲取過去式的能力

1.4 內部任務評價調節示例: 類比評測

我們在內部任務評價任務中調整(tuning)一個詞嵌入技術時,可能會考慮一些引數:

• 詞向量的維度
• 資料庫的大小
• 資料源/型別
• 上下文視窗的大小
• 上下文的對稱性

大家還能想到其他在這個階段可以調整的超引數嗎?
我們現在探索一些詞向量生成技術(如Word2Vec和GloVe)中可以用內部任務評價調節的引數。我們先看一下在超引數相同的情況下,詞向量生成方法在類比評測中的表現。



表5:比較不同引數和資料集情況下各種模型的效能

我們從上表中主要可以看到3點:

  • 精度和使用的模型高度相關:
    這一點並不意外,因為這些生成詞向量的方法所依據的特性是完全不同的(如同時出現的次數,奇異向量等。)
  • 文集量越大,精度越高:
    這是因為,例子越多,生成的系統學習到的經驗就更豐富。比如在完成詞彙類比的例子中,系統如果之前沒有接觸測試詞,就可能會生成錯誤的結果。
  • 如果維度特別低或特別高,精度就會比較低
    低維度詞向量無法捕捉文集中不同詞語的不同意義。這可以視為我們模型複雜度過低而導致的高偏差。比如 “king”, “queen”, “man”, “woman” 這幾個詞,我們需要至少2個維度像”gender” 如 “leadership” 來把它們編譯成 2-位元組 詞向量。 過低的維度將無法捕捉四個詞之間的語義差別,而過高的維度將捕捉到一些對泛化能力沒有用的噪音– 即高方差的問題。

tip3: GloVe 一般在使用中間詞的兩側大小為8的視窗時表現較好

圖2:圖中能看出訓練時間對訓練精度的幫助



圖3:我們可以看到隨著文集增大精度的改善



圖4:我們可以看到GloVe的精度隨著向量維度及上下文視窗大小的改變而改變

1.5 內在評價的例子:相關性評價

另外一個評測詞向量質量的簡單方法是人為對兩個詞的相似度在一個固定區間內打分(比如說 0-10),再跟對應向量的餘弦相適度進行對比。這個方法曾在多個包含人為評價的資料集上實施過。



表6:這裡我們看到不同生成方法產生的詞向量的相似度,與人為評價的相關性。

1.6 延伸閱讀:處理多義性

可能有些同學也想到了,有時候我們會遇到一些特殊的情況:在我們生活中,有時候同一個單詞在它的不同上下文和語境下,有著不同的含義/用法,這時候我們希望我們希望用不同的詞向量來捕捉到這個單詞的不同用法。舉個例子說,“跑(run)”既是一個名詞又是一個動詞,在不同語境中,它可能是不同的詞性。Huang等人(2012)在論文《Improving Word Representations Via Global Context And Multiple Word Prototypes》中描述瞭如何在自然語言處理中解決上面提到的問題。他們提出的方法本質在於以下幾點:

  1. 針對目標單詞出現的所有位置,收集固定大小的語境視窗(例如,此單詞之前的5個單詞至此單詞之後的5個單詞)
  2. 用上下文中詞向量的加權平均(用idf-weighting)來表示每段上下文(當前語境) 。
  3. 應用球面k均值演算法對第二步中的結果進行聚類。
  4. 最後,每一次的單詞出現都被重新標籤成它所屬的類,並且針對這個類,來訓練相對應的詞向量

2 對外在性任務進行訓練

前面我們著重討論了內在性任務,並且強調了它們在生成優質詞嵌入技術(詞向量)中的重要性。當然,最終目的是利用詞向量解決外部的實際問題。 這裡我們討論處理外部任務的一般方法。

2.1 問題描述

大多數的NLP外部任務都可以被描述成分類任務。比如說,我們可以對句子做情感分類,判斷其指代的情況是褒義,貶義還是中性的。 類似的,在命名實體識別(NER)中,我們需要找出上下文中的中心詞所屬的類別。例如輸入為“Jim bought 300 shares of Acme Corp. in 2006”, 我們期望分類完成後的輸出是, “”[Jim]人名bought 300 shares of [Acme Corp.]機構名in [2006]時間.”



圖5:針對詞向量的分類問題,上圖是一個二維詞向量分類問題,用簡單的線性分類器,比如邏輯迴歸和支援向量機完成分類

對於這樣的問題,我們一般有以下形式的訓練集:

{x(i),y(i)}N1

其中x(i)是用某種方法生成的d緯詞向量。y(i) 是一個C維 one-hot 編碼向量(譯者注:one-hot,“獨熱”,意為只有一個元素為1,其餘元素均為0),用來表示我們最終要預測的標籤(感情色彩, 其他詞, 專名, 買/賣決策, 等)。在一般的機器學習任務中, 我們通常固定輸入資料和目標標籤,然後用最優化技術(諸如梯度下降法,L-BFGS法,牛頓法等)訓練權重。在自然語言處理中,我們引入了重訓練的想法,也就是針對外在性任務時,重新訓練輸入的詞向量。接下來我們討論何時需要進行這樣的操作,以及為什麼考慮這麼做。

2.2 重訓練詞向量

應用貼士:在訓練集比較大的時候,才需要進行詞向量重訓練,否則反而會影響精度。

我們一般先用一個簡單的內部任務評價來初始化用於外部任務評價的詞向量。在很多情況下,這些預訓練的詞向量的在外部任務中的表現已經非常好了。 然而,一些情況下,這些詞向量在外部任務中的表現仍然有提升空間。不過,重訓練詞向量是由風險的。



圖6:我們看到”Telly”, “TV”, 和 “Television” 在重訓練之前的分類是準確的。”Telly” 和 “TV” 在外部任務訓練集中,而”Television”只出現在測試集中。

如果要在外部任務上重新訓練詞向量,我們需要保證訓練集的大小足夠覆蓋詞庫中的大多數單詞。因為Word2Vec或GloVe 生成的語義相關的詞會在詞空間中落在同一部分位置。如果我們用一個比較小的訓練集去重訓練,這些詞在詞空間中的位置就會發生變化,在最終任務上的精確度反而可能降低。我們看一個例子。圖6中預訓練的2維詞向量在某個外部分類任務重被正確分類了。 我們如果只重新訓練其中兩個詞向量,因為訓練集較小,從圖7中我們可以看到,由於詞向量的更新,分類邊界的變化,其中一個單詞被錯誤的分類了。

因此,如果訓練集較小,則最好不好重訓練詞向量。如果訓練集很大,重訓練也許能夠提升精度。



圖7:我們看到”Telly”和”TV”在重訓練之後的分類是準確的。而”Television”的分類錯了,因為它只出現在測試集中,訓練集中沒見著。

2.3 Softmax分類與正則化

我們知道Softmax分類函式形式大概是下面這個樣子:

p(yj=1|x)=exp(Wj.x)C(c=1)exp(Wc.x)

上面我們計算了詞向量x屬於類別j的概率。然後根據互熵損失函式,一個單詞在模型中的損失如下:

j=1Cyjlog(p(yj=1|x))=j=1Cyjlog(exp(Wj.x)C(c=1)exp(Wc.x))

因為上式中的yj只有在x屬於正確的類時才等於1,其他均為0。如果我們假設k是那個正確的類,那上式可以簡化為:

log(exp(Wk.x)C(c=1)exp(Wc.x))

當然,我們資料集內不止這一個單詞,假設我們的訓練集是有N個數據點的資料集,那總損失應該有如下的形式:

i=1Nlog(exp(Wk(i).x(i))C(c=1)exp(