高級詞向量表示


本文是在上文自然語言處理——詞的表示基礎上,引入一個更先進的詞向量模型GloVe。然后介紹如何內在和外在地評估詞向量。

1 Global Vectors for Word Representation (GloVe)

1.1 和先前方法的比較

上文介紹了兩類獲取詞向量的方法。第一類基於計數和矩陣分解,比如潛在語義分析(Latent Semantic Analysis,LSA)、語義存儲模型(Hyperspace Analogue to Language,HAL)。這類方法有效地利用全局統計信息,善於捕捉詞匯間的相似之處,但是對諸如詞類比(比如:北京之於中國,相當於東京之於日本。其實就是對對聯嘛:天對地,雨對風,大陸對長空。山花對海樹,赤日對蒼穹。現成的訓練語料^_^)的任務就無能為力了,說明這是欠佳的向量空間結構。另一類基於淺窗口(窗口一般是5到10),通過在局部上下文窗口中做預測來學習詞向量(比如skip-gram和CBOW)。這類方法處理詞匯相似性之外,還能捕捉到復雜的語言模式,但並不能利用全局的共現統計信息。

相比之下,二者的優點GloVe兼而有之。由於包含一個基於詞與詞全局共現次數的最小二乘模型,因此更有效地利用了全局統計信息。該模型生成的詞向量空間具有更豐富的子結構。它在詞類比的任務中達到了最高的水准,在一些詞相似性任務中也勝過了其他的模型。

簡而言之,GloVe利用全局統計信息預測詞$j$出現在詞$i$的上下文環境中的概率。

1.2 共現矩陣

  • $X$:詞與詞的共現矩陣。
  • $X_{ij}$:詞$j$出現在詞$i$的上下文環境中的次數。
  • $X_i = \sum_k X_{ik}$:在詞$i$的上下文環境中出現過的所有詞的總數。
  • $P_{ij} = P(w_j|w_i) = \frac{X_{ij}}{X_i}$:詞$j$出現在詞$i$的上下文環境中的概率。

計算該矩陣需要對整個語料進行一次掃描。對於較大的語料集,這是耗時的,不過也是一勞永逸的。

1.3 最小二乘目標函數

回憶一下,在skip-gram模型中,我們使用softmax來計算詞$j$出現在詞$i$的上下文環境中的概率:

\begin{align*}
Q_{ij} = \frac{\exp(\vec{u}_j^T\vec{v}_i)}{\sum_{w=1}^{W} \exp(\vec{u}_w^T\vec{v}_i)}
\end{align*}

可以通過在線的,隨機的方式進行訓練(這里是隨機梯度下降的意思吧。這種模型可用於在線學習,從而與時俱進,對於新語料、新詞匯的加入很友好,這點要優於GloVe)。但是其中包含的全局交叉熵損失可通過如下方式計算:

\begin{align*}
J = -\sum_{i \in corpus} \sum_{j \in context(i)} \log(Q_{ij})
\end{align*}

由於同樣的詞$i$和詞$j$可能會在語料中共現多次,首先將同樣的$i$和$j$整合到一起:

\begin{align*}
J = -\sum_{i=1}^{W} \sum_{j=1}^{W} X_{ij} \log(Q_{ij})
\end{align*}

交叉熵損失有一個明顯的缺陷:需要對$Q$的分布進行適當的規范化(也就是說,$Q$必須是個概率空間,$\sum Q = 1$),而這涉及到對所有的詞匯求和,計算量巨大(其中,上一節的3.4 Negative Sampling和3.5 分層Softmax也給出了針對這一問題的解決方案)。為了避免這一問題,我們使用最小二乘目標函數,並拋棄掉需要規范化的因子$Q$:

\begin{align*}
\hat{j} = \sum_{i=1}^{W} \sum_{j=1}^{W}X_i(\hat{P}_{ij} - \hat{Q}_{ij})^2
\end{align*}

其中,$\hat{P}_{ij} = X_{ij}$和$\hat{Q}_{ij} = \exp(\vec{u}_j^T\vec{v}_i)$是未規范化分布(unnormalized distributions,可以參考What is an unnormalized measure in probability theory?以及Unnormalized probability: A different view of statistical mechanics)。這一公式有引入了新的問題:$X_{ij}$的值往往都很大,導致難以優化。一個有效的解決方案是取對數:

\begin{align*}
\hat{j} &= \sum_{i=1}^{W} \sum_{j=1}^{W}X_i(\log(\hat{P}_{ij}) - \log(\hat{Q}_{ij}))^2 \\
&= \sum_{i=1}^{W} \sum_{j=1}^{W} X_i(\vec{u}_j^T\vec{v}_i - \log(X_{ij}))^2
\end{align*}

此外,根據觀察發現,我們並不能保證權重因子$X_i$是最優的。因此,我們使用一個更一般的權重函數,可以根據上下文詞匯自由選擇:

\begin{align*}
\hat{j} &= \sum_{i=1}^{W} \sum_{j=1}^{W} f(X_{ij})(\vec{u}_j^T\vec{v}_i - \log(X_{ij}))^2
\end{align*}

2 詞向量評估

到目前為止,我們已經介紹了諸如Word2Vec、GloVe的方法,來訓練和發現自然語言詞語在語義空間潛在的詞向量表示。接下來,我們介紹如何評估這些由不同模型所產生的詞向量。

2.1 內在評估

內在評估就是通過明確的中間子任務(一個媒介任務,並不是最終的任務,比如詞匯類比的表現)對各種技術產生的詞向量進行評估。這些子任務一般都很簡單,並且可以很快得到計算,因此幫助我們理解生成這些詞向量的系統。內在評估方法一般都會返回一個數字,來說明詞向量在這些子任務中的表現。

使用內在評估方法的動機是什么呢?比如我們的最終目標是創建一個以詞向量為輸入的問答系統。可以用如下方法訓練一個機器學習系統:

  1. 以詞作為輸入
  2. 將詞轉換成詞向量
  3. 使用詞向量作為一個機器學習系統的輸入
  4. 將輸出的詞向量映射為相應的自然語言詞匯
  5. 將詞作為答案輸出

在構建對話系統的過程中,需要創建盡可能理想的詞向量表示,因為這會用於下游的子系統(比如一個深度神經網絡)。為達到這一目的,需要調整Word2Vec子系統中的許多超參數(比如詞向量的維度)。最理想的方法是,每調整一個Word2Vec的超參數,就對整個系統重新訓練一次。但這在工程實踐中是不可能的,因為下游的機器學習系統(第3步)很可能是個深度神經網絡,具有成千上萬個參數,訓練起來很費時間。在這種情形下,就需要一個內在的評估手段,來鑒別所生成詞向量的優劣。

簡而言之,內在評估有如下特點:

  • 在一個明確的中間任務上評估
  • 可以快速算得結果
  • 有助於理解子系統(也就是生成詞向量的系統)
  • 和最終的任務正相關

2.2 外在的評估

  • 使用真實的任務進行評估
  • 計算時間較長
  • 不容易確定,到底是哪個子系統出了問題,或者交叉影響
  • 替換掉一個子系統,看一下性能是否提升。 

2.3 內在評估案例:詞向量類比

在詞向量類比中,首先給出如下不完整的類比形式:

a : b : : c : ?

然后內在評估系統求得使下面余弦相似度最大的詞向量:

\begin{align*}
d = \mathop{\arg\max}\limits_{i} \frac{(x_b - x_a + x_c)^T x_i}{\left \| x_b - x_a + x_c \right \|}
\end{align*}

這一度量標准有一個直觀上的解釋。理想的情況下,我們希望$x_b - x_a = x_d - x_c$(比如,后 - 王 = 女演員 - 男演員)。

考慮如下形式的詞類比:

城市1:所在州1::城市2:所在州2

表1 語義上的詞向量類比

由於美國大量的城市/城鎮/鄉村存在同名的情況(其實中國也一樣。比如吉林省市同名,廣州市和貴陽市都有一個白雲區,全國有無數個城關鎮),所以有些答案可能不唯一。例如,全美至少有10個地方叫做Phoenix,因此Arizona不需要是唯一的正確答案。我們再來看另一個形式的類比:

首都1:國家1::首都2:國家2

在很多情況下,以上形式產生的都是該國家最近的首都。這也有一個問題,比如,在1997年以前,哈薩克斯坦的首都是阿拉木圖(現在是阿斯塔納)。因此,如果語料過時的話,我們會得到不同的答案。

上面兩個例子,都是詞向量在語義上的類比,當然也可以在語法上類比。例如,形容詞與其最高級的類比:

表2 語法上的詞向量類比

2.4 內在評估調整案例

可供內在評估技術調整的幾個詞向量模型超參數:

  • 詞向量維度
  • 語料大小
  • 語料來源/種類
  • 上下文窗口大小
  • 上下文對稱性

表3 不同模型在不同語料和超參數下的表現

從表3中,我們可以總結出3點主要的信息:

  • 效果嚴重依賴於所使用的模型。
  • 大語料集可以取得剛好的效果。
  • 詞向量維度過高或過低,效果都不理想。維度過低捕捉的信息不全,從而欠擬合。維度過高,容易捕捉到語料中的噪聲,從而過擬合。

實現細節:窗口選擇8時,GloVe的效果最好。

以下三幅圖分布是對訓練次數、語料規模、詞向量維度和窗口大小的調整:

圖1 迭代次數對性能的影響

 

 

圖2 語料規模如何影響詞向量的性能

 

圖3 詞向量維度、窗口大小對GloVe性能的影響

2.5 內在評估案例:相似性評估

另一個內在評估方法是,人工標注兩個詞之間的相似度(在一定范圍內,比如0-1),然后和兩個詞向量之間的余弦相似度進行比較。

表4 通過相似度評估不同模型的性能

3 外在任務的訓練

下面討論使用詞向量處理真實的外在任務的一般方法。 

3.1 問題界定

大多數NLP任務都可以被定義為分類任務。例如,給一個句子,分析其情感是積極的還是消極的。類似的,對於命名實體識別(named-entity recognition,NER), 給出一個上下文環境和一個中心詞,我們需要將中心詞歸為很多類別中的一個。例如,"Jim bought 300 shares of Acme Corp. in 2006",分類后的輸出結果為:"[Jim]Person bought 300 shares of [Acme Corp.]Organization in [2006]Time."。對於這類問題,我們一般都是從如下形式的訓練集開始:

\begin{align*}
\{ x^{(i)}, y^{(i)} \}_1^N
\end{align*}

其中,$x^{(i)}$是一個d維詞向量。$ y^{(i)}$是代表某個類別的one-hot向量(比如情感信息,別的詞語,命名實體,買入/賣出信號,等等)。

在一般的機器學習任務中,我們通常都是使用輸入數據和目標標簽,通過一些優化技術(比如梯度下降,L-BFGS,牛頓法,等等)來訓練模型。但是在NLP任務中,我們引入一個新的思想:在訓練外在任務時,再次訓練詞向量。下面將討論為什么以及什么時候需要這樣做。

3.2 再次訓練詞向量

正如上面所討論的,外在任務所使用的詞向量,是通過簡單的內在任務進行優化的。在很多情況下,這種詞向量應用於外在任務都能有良好的表現。詞向量可以通過外在任務進一步訓練,以便達到更好的效果。不過,再次訓練也是有風險的,如果訓練語料太少,返回會使情況更糟糕。

3.3 Softmax分類和正則化

讓我們分析一下Softmax分類函數的形式:

\begin{align*}
p(y_j=1|x) = \frac{\exp(W_j \cdot x)}{\sum_{c=1}^{C}\exp(W_c \cdot x)}
\end{align*}

上式計算了詞向量$x$是類別$j$的概率。使用交叉熵損失函數,對一個訓練樣本計算如下的損失:

\begin{align*}
-\sum_{j=1}^C y_j \log(p(y_j=1|x)) = -\sum_{j=1}^C y_j \log(\frac{\exp(W_j \cdot x)}{\sum_{c=1}^{C}\exp(W_c \cdot x)})
\end{align*}

事實上,上面的求和,$(C-1)$個都是0,只有$y_j$是1。假設$k$是正確類別的索引,上式可以簡化為:

\begin{align*}
-\log(\frac{\exp(W_k \cdot x)}{\sum_{c=1}^{C}\exp(W_c \cdot x)})
\end{align*}

將上面的損失函數擴展到訓練集的$N$個點:

\begin{align*}
-\sum_{i=1}^{N} \log(\frac{\exp(W_{k(i)} \cdot x^{(i)})}{\sum_{c=1}^{C}\exp(W_c \cdot x^{(i)})})
\end{align*}

其中,$k(i)$是一個函數,返回實例$x^{(i)}$所對應的正確類別的索引。

讓我們來估計一下,如果同時訓練模型權重$W$和詞向量$x$,需要更新的參數個數。對於一個簡單的線性決策邊界,模型至少需要一個$d$維的輸入詞向量,並且產生$C$個類別的分布。因此,更新模型參數至少是更新$C \cdot d$個參數。如果同時更新詞庫$V$中的每一個詞,那就需要更新$\left | V \right |$個詞向量,這是$\left | V \right | \cdot d$個參數。所以總共需要更新的參數個數是$C \cdot d + \left | V \right | \cdot d$。這是數量是巨大的,很容易造成過擬合。解決方案也很簡單,增加正則項:

\begin{align*}
-\sum_{i=1}^{N} \log(\frac{\exp(W_{k(i)} \cdot x^{(i)})}{\sum_{c=1}^{C}\exp(W_c \cdot x^{(i)})})
+ \lambda \sum_{k=1}^{C \cdot d + \left | V \right | \cdot d} \theta_k^2
\end{align*}

 

 

本文翻譯自CS224n課程的官方筆記2,對應該課程的第3、4節。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM