NLP教程(2) | GloVe及詞向量的訓練與評估

ShowMeAI發表於2022-05-01

作者:韓信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/36
本文地址http://www.showmeai.tech/article-detail/232
宣告:版權所有,轉載請聯絡平臺與作者並註明出處

收藏ShowMeAI檢視更多精彩內容


GloVe及詞向量的訓練與評估
本系列為史丹佛CS224n《自然語言處理與深度學習(Natural Language Processing with Deep Learning)》的全套學習筆記,對應的課程視訊可以在 這裡 檢視。

詞向量進階
ShowMeAI為CS224n課程的全部課件,做了中文翻譯和註釋,並製作成了GIF動圖!點選 這裡 檢視“第2講-詞向量進階”的課件註釋與帶學解讀。更多資料獲取方式見文末。


引言

CS224n是頂級院校史丹佛出品的深度學習與自然語言處理方向專業課程,核心內容覆蓋RNN、LSTM、CNN、transformer、bert、問答、摘要、文字生成、語言模型、閱讀理解等前沿內容。

這組筆記首先介紹了訓練詞向量的Glove模型。然後,它擴充套件了我們對詞向量(或稱詞嵌入)的討論,看看它們是如何通過內部和外部來評估的。我們討論了以詞類比作為一種內在評價技術的例子,以及它如何被用來調整詞嵌入技術。然後我們討論了訓練模型的權重/引數和詞向量的外部任務。最後,我們將人工神經網路作為一種自然語言處理任務的模型。

內容要點

  • Global Vectors for Word Representation (GloVe詞向量)
  • 詞向量內部與外部評估方法
  • 類比任務中的詞向量訓練超引數影響
  • 相關度評估任務中詞向量與人工表現差異
  • 基於上下文處理一詞多義問題
  • 窗分類

1.GloVe詞向量構建方法

1.1 對比前序方法

(GloVe方法的總結也可以參考ShowMeAI的對吳恩達老師課程的總結文章深度學習教程 | 自然語言處理與詞嵌入

到目前為止,我們已經研究了兩類主要的詞嵌入方法:

  • 第一類方法是基於統計並且依賴矩陣分解(例如LSA,HAL)。雖然這類方法有效地利用了全域性的資訊,它們主要用於捕獲單詞的相似性,但是對例如單詞類比的任務上表現不好。
  • 第二類方法是基於淺層視窗(例如,Skip-Gram和CBOW 模型),這類模型通過在區域性上下文視窗通過預測來學習詞向量。

這些模型除了在單詞相似性任務上表現良好外,還展示了捕獲複雜語言模式能力,但未能利用到全域性共現統計資料。

相比之下,GloVe 由一個加權最小二乘模型組成,基於全域性word-word共現計數進行訓練,從而有效地利用全域性統計資料。模型生成了包含有意義的子結構的單詞向量空間,在詞類比任務上表現非常出色。

❐ Glove利用全域性統計量,以最小二乘為目標,預測單詞 \(j\) 出現在單詞 \(i\) 上下文中的概率。

1.2 共現矩陣

我們用 \(X\) 表示word-word共現矩陣,其中 \(X_{ij}\) 表示詞 \(j\) 出現在詞 \(i\) 的上下文的次數。令 \(X_i=\sum_{k}X_{ik}\) 為任意詞 \(k\) 出現在詞 \(i\) 的上下文的次數。最後,令 \(P_{ij}=P(w_{j}\mid w_{i})=\frac{X_{ij}}{X_{i}}\) 是詞 \(j\) 出現在詞 \(i\) 的上下文的概率。

計算這個矩陣需要遍歷一次整個語料庫獲得統計資訊。對龐大的語料庫,這樣的遍歷會產生非常大的計算量,但是這只是一次性的前期投入成本。

共現矩陣 / Co-occurrence Matrix

  • \(X\) :word-word共現矩陣

  • \(X_{ij}\) :詞 \(j\) 出現在詞 \(i\) 的上下文的次數

  • \(X_i=\sum_k X_{ik}\) :任意詞 \(k\) 出現在詞 \(i\) 的上下文的次數

  • \(P_{ij}=P(w_j \mid w_i) = \frac{X_{ij}}{X_i}\) :詞 \(j\) 出現在詞 \(i\) 的上下文的概率

1.3 最小二乘目標函式

回想一下Skip-Gram模型,我們使用softmax來計算詞 \(j\) 出現在詞 \(i\) 的上下文的概率。

\[Q_{ij}=\frac{\exp(\vec{u}_{j}^{T} \vec{v}_{i})}{\sum_{w=1}^{W} \exp (\vec{u}_{w}^{T} \vec{v}_{i})} \]

訓練時以線上隨機的方式進行,但是隱含的全域性交叉熵損失可以如下計算:

\[J=-\sum_{i\in corpus} \sum_{j\in context(i)}log\;Q_{ij} \]

同樣的單詞 \(i\)\(j\) 可能在語料庫中出現多次,因此首先將 \(i\)\(j\) 相同的值組合起來更有效:

\[J=-\sum_{i=1}^{W}\sum_{j=1}^{W}X_{ij}log\;Q_{ij} \]

  • 上面公式中,共現頻率的值是通過共現矩陣 \(X\) 給定。

交叉熵損失的一個顯著缺點是要求分佈 \(Q\) 被正確歸一化,因為對整個詞彙的求和的計算量是非常大的。因此,我們使用一個最小二乘的目標函式,其中 \(P\)\(Q\) 的歸一化因子被丟棄了:

\[\widehat{J}=\sum_{i=1}^{W}\sum_{j=1}^{W}X_{i}(\widehat{P}_{ij}-\widehat{Q}_{ij})^{2} \]

其中 \(\widehat{P}_{i j}=X_{i j}\)\(\widehat{Q}_{i j}=\exp (\vec{u}_{j}^{T} \vec{v}_{i})\) 是未歸一化分佈。這個公式帶來了一個新的問題, \(X_{ij}\) 經常會是很大的值,從而難以優化。一個有效的改變是最小化 \(\widehat{P}\)\(\widehat{Q}\) 對數的平方誤差:

\[\begin{aligned} \widehat{J} &=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\log (\widehat{P})_{i j}-\log \left(\widehat{Q}_{i j}\right)\right)^{2} \\ &=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{i j}\right)^{2} \end{aligned} \]

另外一個問題是權值因子 \(X_{i}\) 不能保證是最優的。因此,我們引入更一般化的權值函式,我們可以自由地依賴於上下文單詞:

\[\widehat{J}=\sum_{i=1}^{W}\sum_{j=1}^{W}f(X_{ij})(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{ij})^{2} \]

1.4 GloVe模型結論

GloVe模型僅對單詞共現矩陣中的非零元素訓練,從而有效地利用全域性統計資訊,並生成具有有意義的子結構向量空間。給出相同的語料庫,詞彙,視窗大小和訓練時間,它的表現都優於 word2vec,它可以更快地實現更好的效果,並且無論速度如何,都能獲得最佳效果。

2.詞向量評估

前面的內容介紹了Word2Vec和GloVe模型來訓練和發現語義空間中的自然語言詞語的潛在向量表示。下面我們來看看如何量化評估詞向量的質量。

2.1 詞向量內部評估

詞向量的內部評估是對一組由如Word2Vec或GloVe生成的詞向量在特定的中間子任務(如詞類比)上的評估。這些子任務通常簡單而且計算速度快,從而能夠幫助我們理解生成的的詞向量。內部評估通常應該返回給我們一個數值,來表示這些詞向量在評估子任務上的表現。

  • 對特定的中間任務進行評估
  • 可以很快的計算效能
  • 幫助理解子系統
  • 需要和真實的任務正相關來確定有用性

在下圖中,左子系統(紅色)訓練的計算量大,因此更改為一個簡單的子系統(綠色)作內部評估。

詞向量內部評估

動機:我們考慮建立一個問答系統,其中使用詞向量作為輸入的例子。一個方法是訓練一個機器學習系統:

  • 1.輸入詞語
  • 2.將輸入詞語轉換為詞向量
  • 3.對一個複雜的機器學習系統,使用詞向量作為輸入
  • 4.將輸出的詞向量通過系統對映到自然語言詞語上。
  • 5.生成詞語作為答案

當然,在訓練這樣的一個問答系統的過程中,因為它們被用在下游子系統(例如深度神經網路),我們需要建立最優的詞向量表示。在實際操作中,我們需要對 Word2Vec 子系統中的許多超引數進行調整(例如詞向量的維度)。

雖然最理想的方法是在 Word2Vec 子系統中的任何引數改變後都重新訓練,但從工程角度來看是不實際的,因為機器學習系統(在第3步)通常是一個深層神經網路,網路中的數百萬個引數需要很長的時間訓練。

在這樣的情況下,我們希望能有一個簡單的內部評估技術來度量詞向量子系統的好壞。顯然的要求是內部評價與最終任務的表現有正相關關係。

內部評估

  • 對特定的中間任務進行評估
  • 可以很快的計算效能
  • 幫助理解子系統
  • 需要和真實的任務正相關來確定有用性

2.2 詞向量外部評估

詞向量的外部評估是對一組在實際任務中生成的詞向量的評估。這些任務通常複雜而且計算速度慢。對我們上面的例子,允許對問題答案進行評估的系統是外部評估系統。通常,優化表現不佳的外部評估系統我們難以確定哪個特定子系統存在錯誤,這就需要進一步的內部評估。

  • 對真實任務的評估
  • 計算效能可能很慢
  • 不清楚是子系統出了問題,還是其他子系統出了問題,還是內部互動出了問題
  • 如果替換子系統提高了效能,那麼更改可能是好的

2.3 內部評估示例:詞類比

一個比較常用的內部評估的方法是詞向量的類比。在詞向量類比中,給定以下形式的不完整類比:

\[a:b::c:? \]

然後內部評估系統計算詞向量的最大餘弦相似度:

\[d=arg\max_i\frac{(x_b-x_a+x_c)^{T}x_i}{\left \| x_b-x_a+x_c \right \| } \]

❐ 注:我們看到單詞向量包含單詞間餘弦距離的意義。它們還包含不同維度的含義:例如,“諾基亞”在某些維度上可能接近“三星”,因為它們都是電子公司,但在另一個維度上可能接近“芬蘭”,因為不同的原因,諾基亞是芬蘭公司。

❐ 注:當單詞向量向下轉換到2維(使用PCA)並用圖形表示時,可以看到有趣的結果:相似的單詞聚集在一起。然而,重要的是要記住,在降維過程中有相當一部分空間資訊丟失了;因此,上面諾基亞示例中描述的單詞之間的複雜關係可能不會出現。

這個指標有直觀的解釋。理想的情況下,我們希望 \(x_b-x_a=x_{d}-x_c\) (例如,queen-king=actress-actor)。這就暗含著我們希望 \(x_b-x_a+x_c=x_d\) 。因此,我們確定可以最大化兩個詞向量之間的歸一化點積的向量 \(x_d\) 即可(即餘弦相似度)。使用諸如詞向量類比的內部評估技術應該小心處理(要考慮到預訓練的語料庫的各個方面)。

例如,考慮以下的類比形式:

\[City\;1:State\;containing\;City\;1:\;:City\;2:State\;containing\;City\;2 \]

語義詞向量類比(內在評價),可能會受到不同城市同名的影響

上圖是可能受到具有相同名稱的不同城市的語義詞向量類比(內在評估)。在上面很多的例子,美國有很多同名的城市/城鎮/村莊。因此,很多州都符合正確的答案。例如,在美國至少有10個地方的名稱是Phoenix,所以Arizona不是唯一的正確答案。在考慮以下的類比形式:

\[Capital\;City\;1:\;Country\;1:\;:Capital\;City\;2:\;Country\;2 \]

在不同的時間點擁有不同首都的國家,可能會產生語義詞向量類比(內在評價)

上圖是可能在不同時間點有不同首都的國家的語義詞向量類比(內在評估)。上面很多的例子,這個任務中生成的城市僅僅是近期的國家首都,可能會受到不同國家在不同時間點擁有不同首都的影響。例如,1997年之前Kazakhstan的首都是Almaty。因此,如果我們的語料庫過時就會出現問題。

之前的兩個例子說明如何使用詞向量進行語義測試。我們也可以使用詞向量類似進行語法測試。下面是測試形容詞最高階概念的句法詞向量類比(內在評價),如下圖所示:

測試最高階形容詞概念的,句法詞向量類比(內在評價)

類似地,下圖的內部評估展示了測試詞向量捕獲過去時態概念的能力

測試過去時概念的句法詞向量類比(內在評價)

2.4 詞類比-不同方法表現

我們現在探討使用內在評估系統(如類比系統)來調整的詞向量嵌入技術(如Word2Vec和GloVe)中的超引數。我們首先來看看在類比評估任務中,在相同的超引數下,由不同方法建立的詞向量表現效果:

比較不同模型在使用,不同超引數和引數下的效能資料集

根據上表,我們可以看到3點:

模型的表現高度依賴模型所使用的詞向量的模型

  • 這點是可以預料到的,因為不同的生成詞向量方法是基於不同的特性的(例如共現計數,奇異向量等等)。

語料庫更大模型的表現更好

  • 這是因為模型訓練的語料越大,模型的表現就會更好。例如,如果訓練的時候沒有包含測試的詞語,那麼詞類比會產生錯誤的結果。

對於極高或者極低維度的詞向量,模型的表現較差

  • 低維度的詞向量不能捕獲在語料庫中不同詞語的意義。這可以被看作是我們的模型複雜度太低的高偏差問題。例如,我們考慮單詞“king”、“queen”、“man”、“woman”。直觀上,我們需要使用例如“性別”和“領導”兩個維度來將它們編碼成2位元組的詞向量。維度較低的詞向量不會捕獲四個單詞之間的語義差異,而過高的維度的可能捕獲語料庫中無助於泛化的噪聲-即所謂的高方差問題。

超高維向量:直觀地說,這些向量似乎會在語料庫中捕獲不允許泛化的噪聲,即導致高方差。但是Yin等人在On the Dimensionality of Word Embedding上表明,skip-gram和Glove對這種過擬合具有魯棒性。

詞類比 - 訓練時間對模型表現的影響

詞類比 - 如何隨著資料大小而提高效能

GloVe 的精確度,隨向量維數和上下文視窗大小而變化

2.5 內部評估示例:相似度/關聯度

另外一個評估詞向量質量的簡單方法是,讓人去給兩個詞的相似度在一個固定的範圍內(例如0-10)評分,然後將其與對應詞向量的餘弦相似度進行對比。這已經在包含人為評估的各種資料集上嘗試過。

下圖是使用不同的詞嵌入技術與不同的人類判斷資料集的詞向量相似性之間的相關性

內部評估:相似度/關聯度

2.6 擴充閱讀:多義詞

我們想知道如何處理在不同的自然語言處理使用場景下,用不同的的詞向量來捕獲同一個單詞在不同場景下的不同用法。例如,“run”是一個名詞也是一個動詞,在不同的語境中它的詞性也會不同。論文 Improving Word Representations Via Global Context And Multiple Word Prototypes 提出上述問題的的解決方法。該方法的本質如下:

  • 收集所有出現的單詞的固定大小的上下文視窗(例如前5個和後5 個)。
  • 每個上下文使用上下文詞向量的加權平均值來表示(使用idf加權)。
  • spherical k-means 對這些上下文表示進行聚類。
  • 最後,每個單詞的出現都重新標籤為其相關聯的類,同時對這個類,來訓練對應的詞向量。

要對這個問題進行更嚴謹的處理,可以參考原文。

3.詞向量應用於外部任務

到目前為止,我們一直都關注於內在任務,並強調其在開發良好的詞向量技術中的重要性。但是大多數實際問題的最終目標是將詞向量結果用於其他的外部任務。接下來會討論處理外部任務的方法。

3.1 外部任務正規化

很多 NLP 的外部任務都可以表述為分類任務。例如,給定一個句子,我們可以對這個句子做情感分類,判斷其情感類別為正面,負面還是中性。相似地,在命名實體識別(NER),給定一個上下文和一箇中心詞,我們想將中心詞分類為許多類別之一。對輸入,張三在2022年購買了300股騰訊的股票,我們希望有這樣的一個分類結果:

\[[張三]_{Person} 在[2022年]_{Time}\ 購買了 \ 300 \ 股 [騰訊]_{Organization} 的股票 \]

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

\[\{x^{(i)},y^{(i)}\}_{1}^{N} \]

其中 \(x^{(i)}\) 是一個 \(d\) 維的詞向量, \(y^{(i)}\) 是一個 \(C\) 維的one-hot向量,表示我們希望最終預測的標籤(情感,其他詞,專有名詞,買/賣決策等)。

我們可以使用諸如邏輯迴歸和SVM之類的演算法對2-D詞向量來進行分類,如下圖所示

外部任務正規化

在一般的機器學習任務中,我們通常固定輸入資料和目標標籤,然後使用優化演算法來訓練權重(例如梯度下降,L-BFGS,牛頓法等等)。然而在NLP應用中,我們引入一個新的思想:在訓練外部任務時對輸入字向量進行再訓練。下面我們討論何時使用以及為什麼要這樣做。

3.2 詞向量再訓練

在許多情況下,我們會基於內部任務去訓練得到詞向量,進而再用於外部任務,很多時候這些預訓練的詞向量在外部評估中表現良好。但是,這些預訓練的詞向量在外部評估中的表現仍然有提高的可能。當然,重新訓練也存在著一定的風險。

如果我們在外部評估中重新訓練詞向量,這就需要保證訓練集足夠大並能覆蓋詞彙表中大部分的單詞。這是因為Word2Vec或GloVe會生成語義相關的單詞,這些單詞位於單詞空間的同一部分。

假設預訓練向量位於二維空間中,如下圖所示。在這裡,我們看到在一些外部分類任務中,單詞向量被正確分類。

詞向量再訓練

現在,如果我們因為有限的訓練集大小而只對其中兩個向量進行再訓練,那麼我們在下圖中可以看到,其中一個單詞被錯誤分類了,因為單詞向量更新導致邊界移動。

詞向量再訓練

因此,如果訓練資料集很小,就不應該對單詞向量進行再訓練。如果訓練集很大,再訓練可以提高效能。

實現技巧:對於大型訓練資料集,應考慮字向量再訓練。對於小資料集,重新訓練單詞向量可能會降低效能。

3.3 Softmax分類與正則化

我們繼續使用Softmax分類函式,其形式如下公式所示:

\[p(y_{j}=1\mid x)=\frac{exp(W_{j.}x)}{\sum_{c=1}^{C}exp(W_{c.}x)} \]

這裡我們計算詞向量 \(x\) 是類別 \(j\) 的概率。使用交叉熵損失函式計算一個樣本的損失如下所示:

\[ -\sum_{j=1}^{C}y_{j}\,log(p(y_{j}=1\mid x))=-\sum_{j=1}^{C}y_{j}\,log\bigg(\frac{exp(W_{j.}x)}{\sum_{c=1}^{C}exp(W_{c.}x)}\bigg) \]

當然,上述求和是對 \((C-1)\) 個零值求和,因為 \(y_j\) 僅在單個索引為1,這意味著 \(x\) 僅屬於1個正確的類別。現在我們定義 \(k\) 為正確類別的索引。因此,我們現在可以簡化損失函式:

\[ -log\bigg(\frac{exp(W_{k.}x)}{\sum_{c=1}^{C}exp(W_{c.}x)}\bigg) \]

然後我們可以擴充套件為有 \(N\) 個單詞的損失函式:

\[-\sum_{i=1}^{N}log\bigg(\frac{exp(W_{k(i).}x^{(i)})}{\sum_{c=1}^{C}exp(W_{c.}x^{i})}\bigg) \]

上面公式的唯一不同是 \(k(i)\) 現在一個函式,返回 \(x^{(i)}\) 對應的每正確的類的索引。

現在我們來估計一下同時訓練模型的權值 \((W)\) 和詞向量 \((x)\) 時需要更新的引數的數量。我們知道一個簡單的線性決策模型至少需要一個 \(d\) 維的詞向量輸入和生成一個 \(C\) 個類別的分佈。因此更新模型的權值,我們需要 \(C \cdot d\) 個引數。如果我們也對詞彙表 \(V\) 中的每個單詞都更新詞向量,那麼就要更新 \(\left | V \right |\) 個詞向量,每一個的維度是 \(d\) 維。因此對一個簡單的線性分類模型,總共的引數數目是 \(C \cdot d + \left | V \right |\)

\[\begin{aligned} \nabla_{\theta}J(\theta) = \begin{bmatrix} \nabla_{W_{.1}} \\ \vdots \\ \nabla_{W_{.d}} \\ \nabla_{aardvark} \\ \vdots \\ \nabla_{zebra} \end{bmatrix} \end{aligned} \]

對於一個簡單的模型來說,這是相當大的引數量——這樣的引數量很可能會出現過擬合的問題。

為了降低過擬合的風險,我們引入一個正則項,從貝葉斯派的思想看,這個正則項是對模型的引數加上一個先驗分佈,讓引數變小(即接近於 \(0\) ):

\[ -\sum_{i=1}^{N}log\bigg(\frac{exp(W_{k(i).}x^{(i)})}{\sum_{c=1}^{C}exp(W_{c.}x^{i})}\bigg)+\lambda\sum_{k=1}^{C \cdot d + \left | V \right |\cdot d} \theta_{k}^{2} \]

如果調整好目標權重 \(\lambda\) 的值,最小化上面的函式將會降低出現很大的引數值的可能性,同時也提高模型的泛化能力。在我們使用更多引數更復雜的模型(例如神經網路)時,就更加需要正則化的思想。

3.4 窗內容分類

下圖是我們有一箇中心詞和一個長度為2的對稱視窗。這樣的上下文可以幫助分辨Paris是一個地點還是一個名字。

窗內容分類

目前為止,我們主要探討了使用單個單詞向量 \(x\) 預測的外部評估任務。在現實中,因為自然語言處理的性質,這幾乎不會有這樣的任務。在自然語言處理中,常常存在著一詞多義的情況,我們一般要利用詞的上下文來判斷其不同的意義。

例如,如果你要某人解釋“to sanction”是什麼意思,你會馬上意識到根據“to sanction”的上下文其意思可能是“to permit”或者“to punish”。在更多的情況下,我們使用一個單詞序列作為模型的輸入。這個序列是由中心詞向量和上下文詞向量組成。上下文中的單詞數量也被稱為上下文視窗大小,並根據解決的問題而變化。

一般來說,較窄的視窗大小會導致在句法測試中更好的效能,而更寬的視窗會導致在語義測試中更好的效能

為了將之前討論的Softmax模型修改為使用單詞的視窗來進行分類,我們只需要按照下面形式將 \(x^{(i)}\) 替換為 \(x_{window}^{(i)}\)

\[\begin{aligned} x_{window}^{(i)} = \begin{bmatrix} x^{(i-2)} \\ x^{(i-1)} \\ x^{(i)} \\ x^{(i+1)} \\ x^{(i+2)}\ \end{bmatrix} \end{aligned} \]

因此,當我們計算單詞的損失梯度如下所示,當然需要分配梯度來更新相應的詞向量:

\[\begin{aligned} \delta_{window} = \begin{bmatrix} \nabla_{x^{(i-2)}} \\ \nabla_{x^{(i-1)}} \\ \nabla_{x^{(i)}} \\ \nabla_{x^{(i+1)}} \\ \nabla_{x^{(i+2)}} \end{bmatrix} \end{aligned} \]

當然,梯度將需要分發來更新相應的詞向量。

3.5 非線性分類器

我們現在介紹非線性分類模型,如神經網路。我們看到即使是最優的線性分類平面,也有許多樣例都被錯誤的分類。這是因為線性模型在這個資料集上的分類能力有限。

在下圖中,我們看到非線性分類模型可以對上面的資料集的樣例有著更好的分類結果,這個簡答的例子可以初步的說明我們為什麼需要非線性模型。

非線性分類器

非線性分類器

4.擴充閱讀

4.1 Improving Distributional Similarity with Lessons Learned from Word Embeddings

實際應用中如何獲得更好的詞向量

1) Abstract

近年來的研究趨勢表明,基於神經網路的詞嵌入模型在詞相似性和相似性檢測任務上優於傳統的基於計數的分佈模型。我們發現,詞嵌入的效能提高在很大程度上是由於某些系統設計選擇和超引數優化,而不是嵌入演算法本身。此外,我們證明這些修改可以轉移到傳統的分配模型,產生類似的收益。與以前的報告相比,我們觀察到的方法之間的效能差異主要是區域性的或不顯著的,沒有任何一種方法比其他方法具有全域性優勢。

2) Introduction

然而,最先進的嵌入方法都是基於相同的 bag-of-contexts 的單詞。此外,分析表明,word2vec的 SGNS 隱含地分解了單詞上下文的PMI矩陣。也就是說,其數學目標和可用的資訊來源實際上與傳統方法所使用的非常相似。那麼其優勢來源於什麼呢?

雖然模型和優化的目標函式是主要因素,但是其他因素也會影響結果

  • 超引數優化:負取樣的樣本個數,平滑的負取樣分佈,動態大小的上下文視窗

在這項工作中,我們將這些超引數顯式化,並展示瞭如何將它們應用到傳統的基於計數器的方法中。為了評估每個超引數對演算法效能的影響,我們進行了實驗,比較了四種不同的表示方法,同時控制了不同的超引數

3) Practical Recommendations

通常建議為手頭的任務調優所有超引數,以及特定於演算法的超引數。然而,這可能是計算昂貴的。因此我們提供一些“經驗法則”,我們發現它們在我們的設定中工作得很好:

  • 始終使用上下文分佈平滑( \(cds = 0.75\) )來修改PMI,並且適用於 PPMI、SVD 和 SGNS,不斷提高效能

不要使用 SVD “correctly” (eig = 1) 。使用對稱變體之一

SGNS是健壯的基線。雖然它可能不是每個任務的最佳方法,但它在任何情況下都不會表現得很差。此外,SGNS是最快的訓練方法,而且在磁碟空間和記憶體消耗方面(到目前為止)也是最便宜的。

SGNS適合更多的負樣本

對於SGNS和GloVe而言,值得對 \(\vec{w}+\vec{c}\) 做實驗,因為這是容易應用(不需要重新訓練)並且帶來可觀收益(以及可觀損失)的。

4) Conclusion

最近的嵌入方法引入了大量的網路結構以外的設計選擇和優化演算法。我們揭示了這些看似微小的變化對單詞表示方法的成功有很大的影響。通過展示如何在傳統方法中適應和調整這些超引數,我們對錶示進行適當的比較,並從詞嵌入文獻中挑戰各種優勢。

本研究還揭示了對更多控制變數實驗的需要,並將“變數”的概念從明顯的任務、資料和方法擴充套件到經常忽略的預處理步驟和超引數設定。我們還強調了需要進行透明和可重複的實驗,並讚揚諸如Mikolov、Pennington等作者,以及其他人公開提供他們的程式碼。本著這種精神,我們也公佈我們的程式碼

4.2 Evaluation methods for unsupervised word embeddings

1) Abstract

我們介紹了一種無監督嵌入技術的評估方法,該方法可以從文字中獲取有意義的表示。嵌入方法的順序不同,評價結果也不同,這就對通常認為只有一個最優向量表示的假設提出了質疑。我們提供了一種新的評估技術,可以直接通過特定查詢比較詞嵌入。這些方法減少了偏差,提供了更大的洞察力,並允許我們通過眾包快速準確地徵求資料驅動的相關性判斷。

2) Discussion

超引數優化會導致明顯的效能差異。

實際上,不同的演算法編碼的資訊出奇地不同,這些資訊可能與我們想要的用例一致,也可能與我們想要的用例不一致。例如,我們發現詞嵌入將關於詞頻的資訊的編碼程度不同,即使在長度歸一化後也是如此。

這個結果令人驚訝

  • 首先,許多演算法保留了不同的攔截引數來吸收基於頻率的效果。
  • 其次,我們希望嵌入空間的幾何形狀主要由語義驅動:頻率相對較小的詞應該均勻地分佈在空間中,而大量罕見的、特定的單詞應該圍繞相關但更頻繁的單詞聚集。

我們訓練了一個邏輯迴歸模型來預測基於詞向量的詞頻類別。訓練線性分類器將單詞分類為常見或罕見類別,閾值從100到50000不等。在每個閾值頻率下,我們對訓練集進行取樣以確保標籤分佈在所有頻率上的一致性平衡。我們使用了長度歸一化的嵌入,因為罕見的單詞在訓練期間更新較少,可能具有更短的向量(Turian et al., 2010)。在下圖中,我們報告了在每個閾值頻率下使用五倍交叉驗證的平均準確度和標準偏差( \(1 \sigma\) )。

所有單詞嵌入都比隨機的好,這表明它們包含一些頻率資訊。GloVe和TSCCA在接近1000的詞頻上達到近100%的準確性。與其他所有嵌入不同,C&W嵌入的更大的詞頻的準確性增加了。進一步的調查顯示,權重矩陣的方向是隨詞頻閾值改變的,這表明詞頻似乎在嵌入空間中以平滑的方式被編碼。

雖然GloVe和CBOW是內在任務上最佳的兩種嵌入,但它們在其編碼的頻率資訊量上有很大的差異。因此,我們可以斷定,不同的頻率預測並不是因為自然語言的內在性質:並不是說頻繁的單詞自然只有頻繁的鄰居。

嵌入空間中的詞頻資訊也會影響詞的相似性。對於WordSim-353資料集,我們查詢了k = 1000 個最近鄰居。然後,我們查詢其在訓練集語料庫中頻率的排名,平均了所有的查詢詞。在我們的實驗中,我們發現一個單詞的頻率和它在最近鄰中的排名位置有很強的相關性。下圖顯示了C&W詞嵌入中一個詞的最近鄰排名(關於一次查詢)和其詞頻在訓練集語料庫中的排名之間的冪律關係 (nn-rank ∼ 1000 · \(\text{corpus-rank}^{0.17}\) )。這是一個值得關注的問題:語言中單詞的頻率在人類的文書處理過程中也起著至關重要的作用(Cattell, 1886)。因此,在實驗設計中,我們需要明確地把詞頻作為一個因素來考慮。同時,上述結果也表明,常用的餘弦相似度在嵌入空間內的固有任務時,會受到頻率效應的影響。我們認為,進一步的研究應該解決如何更好地衡量詞與嵌入空間之間的語言關係的問題,例如通過學習自定義度量。

Mikolov et al. (2013b) 說明嵌入空間存在特定的語言規律。通過在嵌入空間中進行簡單的向量運算,可以解決各種句法和語義類比問題。這與之前的工作不同,之前的工作將類比任務描述為一個分類問題(Turney, 2008)。令人驚訝的是,詞嵌入似乎捕捉到了更復雜的語言特性。Chen等人(2013)的研究表明,單詞嵌入甚至包含了區域拼寫(英式與美式)、名詞性別和情感極性等資訊。

以往的詞嵌入評價工作可分為內部評價和外部評價。內在評價通過直接測量語義關聯和幾何關聯之間的相關性來衡量詞向量的質量,通常通過查詢術語的的庫存來實現。Baroni等人(2014)以內在度量為重點,在各種查詢清單和任務上比較詞嵌入和分佈詞向量。Faruqui and Dyer (2014)提供了一個網站,該網站允許對一些查詢清單的嵌入進行自動評估。Gaoetal.(2014)發表了一份改進的類比推理任務查詢清單。最後,Tsvetkov等人(2015)提出了一種新的內在度量方法,該方法可以更好地關聯外部效果。然而,所有這些評估都是在預先收集的清單上進行的,並且大多侷限於本地指標,如相關性。

外部評估使用嵌入作為其他任務模型中的特徵,例如語義角色標記或詞性標記(Collobert etal., 2011),並提高現有系統的效能(Turianetal.,2010)。然而,他們在其他任務上,如解析,則不太成功(Andreas和Klein, 2014)。

在主題模型的上下文中,無監督語義建模方面做了更多的工作。一個例子是單詞入侵任務(Chang et al., 2009),其中註釋器被要求識別插入到給定主題的一組高概率單詞中的隨機單詞。詞嵌入不產生可解釋的維度,因此我們不能直接使用這個方法,但是我們提出了一個基於最近鄰居的相關任務。手工評估是昂貴和耗時的,但其他研究表明,自動化評估可以緊密地模擬人類的直覺(Newman et al., 2010)。

4) Conclusion

影響嵌入質量的因素很多。標準的綜合評價雖然有用,但不能提供完整或一致的情況。詞彙頻率等因素在其中扮演著重要的角色,而這在以前是不為人知的。詞頻也會干擾常用的餘弦相似性度量。我們提出了一個新的評估框架,該框架基於嵌入之間的直接比較,為這些嵌入提供了更精細的分析,並支援簡單的眾包相關性判斷。我們還提出了一個新的一致性任務,它測量了我們的直覺,即嵌入空間中的鄰域應該在語義或語法上相關。我們發現,外部評估雖然有助於突出嵌入效能的特定方面,但不應該用作通用質量的代理。

5.參考資料

ShowMeAI系列教程推薦

NLP系列教程文章

史丹佛 CS224n 課程帶學詳解

相關文章