(Stanford CS224d) Deep Learning and NLP課程筆記(三):GloVe與模型的評估


本節課繼續講授word2vec模型的算法細節,並介紹了一種新的基於共現矩陣的詞向量模型——GloVe模型。最后,本節課重點介紹了word2vec模型評估的兩種方式。

Skip-gram模型

上節課,我們介紹了一個十分簡單的word2vec模型。模型的目標是預測word \(o\)出現在另一個word \(c\)的上下文語境里的條件概率:

\[p(o|c) = \frac{exp(u_o^Tv_c)}{\sum_{w=1}^W{exp(u_w^Tv_c)}} \]

其中,向量\(u_o\)被稱為word \(o\)的outside vector;向量\(v_c\)被稱為word \(c\)的inside vector。

模型的損失函數是一個對數似然概率:

\[J(\theta) = \frac{1}{T}{\sum_{t=1}^T\sum_{-m \leq j \leq m, j \neq 0} \log{p(w_{t+j}|w_t)}} \]

后面我們會看到這個損失函數的物理意義。

我們通常用一個向量\(\theta\)表示模型的所有參數(這里是詞典中每個word的\(u\)\(v\)向量)。顯然這是一個維度巨大的長向量(\(\theta \in \mathbf{R}^{2dV}\))。然而,在用SGD(隨機梯度下降法)求解模型的參數時,對於每一個時間窗口,我們至多僅有\(2c-1\)個單詞需要計算。因此,\(\theta\)的梯度\(\nabla_\theta{J_t(\theta)}\)是一個極其稀疏的向量!

為此,在word2vec模型里,我們通常用一個叫做embedding matrix的矩陣存儲模型的參數。該矩陣的大小為\(d \times V\),每一列對應着詞典中一個word的詞向量。借助這個hash詞表,我們可以只對當前訓練時出現的詞向量進行更新。

然而,這個簡單的word2vec模型的訓練卻並不簡單。原因在於計算損失函數的梯度時需要用到歸一化的條件概率——而正是這個歸一化成為了模型訓練的瓶頸。想象一個百萬量級的詞典,每一步訓練我們都需要計算上百萬次詞向量的內積——顯然,這是無法容忍的。

因此,Mikolov在2013年那篇著名的論文里提出了一種負采樣(Negative Sampling)的似然函數,避免了歸一化概率的計算:

\[J_t(\theta) = \log \sigma(u_o^Tv_c) + \sum_{i=1}^K E_{j \sim P(w)} [\log \sigma(-u_j^Tv_c)] \]

其本質是訓練一個二分類的邏輯回歸函數,用於判斷一對詞是來自真實語料環境還是采樣自一個隨機的噪聲分布。\(K\)是模型的超參數,決定負采樣的個數。\(\sigma(x) = \frac{1}{1 + e^{-x}}\)是邏輯回歸函數,也被稱為Sigmoid函數。注意到\(\sigma(-x) = 1 - \sigma(x)\)\(P(w)\)通常取為\(U(w)^{\frac{3}{4}}\)。冪次項對超高頻的word起到了下采樣的作用。

基於這個似然函數,Mikolov在他的word2vec工具包里提供了兩種模型:Skip-gram和CBoW。這兩個模型都是一個log-bilinear的淺層神經網絡結構。區別在於,Skip-gram是用一個center word預測其context里的word;而CBoW是用context里的所有word去預測一個center word。顯然,前者對訓練數據的利用更高效,因此,對於較小的語料庫,Skip-gram是更好的選擇。

GloVe模型

在上節課最后,我們比較了基於統計的詞向量模型和基於預測的詞向量模型。前者以基於SVD分解技術的LSA模型為代表,通過構建一個共現矩陣得到隱層的語義向量,充分利用了全局的統計信息。然而這類模型得到的語義向量往往很難把握詞與詞之間的線性關系(例如著名的King、Queen、Man、Woman等式)。后者則以基於神經網絡的Skip-gram模型為代表,通過預測一個詞出現在上下文里的概率得到embedding詞向量。這類模型的缺陷在於其對統計信息的利用不充分,訓練時間與語料大小息息相關。不過,其得到的詞向量能夠較好地把握詞與詞之間的線性關系,因此在很多任務上的表現都要略優於SVD模型。

既然兩種模型各有優劣,那么能不能二者各取其長,構造一個更強大的詞向量模型呢?這就是接下來要介紹的GloVe模型。

在GloVe的原始論文里,作者首先分析了Skip-gram模型能夠挖掘出詞與詞之間線性關系的背后成因,然后通過在共現矩陣上構造相似的條件,得到一個基於全局信息的詞向量模型——GloVe模型。

GloVe模型的損失函數是:

\[J(\theta) = \frac{1}{2} \sum_{i,j = 1}^W {f(P_{ij})(u_i^Tv_j - \log{P_{ij}})^2} \]

其中,\(f(x)\)是一個截斷函數,以降低高頻詞對模型的干擾。

與Skip-gram模型相比,GloVe在充分利用了語料庫的全局統計信息的同時,也提高了詞向量在大語料上的訓練速度(一個共現矩陣的遍歷要比整個語料庫的遍歷容易的多)。而與傳統的SVD技術相比,SGD的訓練也更加簡單高效。同時,GloVe得到的詞向量更能把握住詞與詞之間的線性關系。

模型的評估

在NLP的研究領域里,一個模型的評估通常有兩種方式:Intrinsic和Extrinsic。

Intrinsic評估關注的是模型在一個特定子任務上的表現。子任務的設計使得Intrinsic的評估快速便捷,同時有助於我們更好地理解模型內在的性質。不過,要注意的是,除非子任務被設計為與我們的最終目標有一定的聯系,否則,模型在子任務上的評估結果並不具有太大的意義。

Extrinsic評估則關注的是模型在一個具體任務上的表現。比如情感分析或是機器翻譯。此時,我們關注的模型通常只是一個更復雜模型里的一部分。因此,Extrinsic評估一般比較耗時。但是相比於Intrinsic評估更具有參考意義。

Intrinsic評估

對於詞向量模型,一個常用的Intrinsic評估是向量類比(word vector analogies)。它評估了一組詞向量在語義和句法上表現出來的線性關系。具體來說,給定一組詞(a, b, c, d),我們要驗證的是:\(d=\arg\max_i{\frac{(x_b-x_a+x_c)^Tx_i}{||x_b-x_a+x_c||}}\),即\(d\)是與向量\((x_b-x_a+x_c)\)的cosine距離最近的詞。

Mikolov在他的word2vec開源工具包里也提供了用於word analogy評估的數據集。例如國家與首都的類比數據,時態或是比較級的類比數據。

借助於Intrinsic評估,我們也可以方便快捷地對模型的超參數(Hyperparameters)進行選擇。例如向量的維度,context window的大小,甚至是模型的選擇。

Extrinsic評估

值得注意的是,即使一些模型在人為設定的Intrinsic任務上表現較弱,並不能說明它們在具體的真實任務中毫無優勢。Intrinsic評估的主要作用是對模型的超參數進行初步的調整和選擇(這種模型選擇在Extrinsic任務上往往極為耗時)。而評估模型的優劣還是要看它在Extrinsic任務上的表現。

對於詞向量模型,常見的Extrinsic任務是對詞向量進行分類。例如命名實體識別(NER)和情感分析。理論上,如果我們習得的詞向量足夠精確,那么語義或句法上相近的詞必然分布在同一片向量空間。這就使得基於詞向量的分類更加准確。

為此,我們引入專門處理多分類問題的Softmax函數。這個函數是Sigmoid函數的一般形式;它給出了每個類別在輸入特征\(x\)下的歸一化條件概率。在后面的課程中,我們會經常用到這個函數:

\[p(y|x) = \frac{exp(W_yx)}{\sum_{c=1}^C exp(W_cx)} \]

(這其實就是上節課我們介紹word2vec模型時提到的條件概率\(p(o|c)\)!因此,矩陣\(W\)也可以被認為是分類label \(y\)的主題向量。)

由於Softmax的輸出是一個概率分布,因此,我們通常用交叉熵(Cross Entropy)來定義Softmax的損失函數。

交叉熵可以用兩個分布的\(KL\)散度表達:

\[H(p, q) = H(p) + D_{KL}(p||q) \]

其中,\(p\)是真實的概率分布,\(q\)是我們估計的概率分布。\(D_{KL}(p||q)\)是一個非對稱的變量,它定義了這兩個分布的“距離”:

\[D_{KL}(p||q) = \sum_{c=1}^Cp(c)\log{\frac{p(c)}{q(c)}} \]

因此,最小化兩個分布的交叉熵,等價於最小化這兩個分布的\(KL\)散度距離。

對上式化簡,我們得到交叉熵一個更直接的定義:

\[H(p, q) = -\sum_{c=1}^C{p(c)\log{q(c)}} \]

在單分類問題中,一條訓練樣本對應的\(p\)是一個one-hot向量。因此,\(H(p, q)\)可以進一步簡化為:

\[H(p, q) = -\log{q(y=c|x)} \]

其中,\(p(c) = 1\)。(對這個損失函數可以直觀地理解為最大化目標label的對數似然概率)

最后,在用Extrinsic任務訓練Softmax權重\(W\)時,有一個問題值得考慮:我們是否也要同時對embedding的詞向量進行調整?答案是,it depends。微調embedding的詞向量固然使得模型能夠更好地擬合訓練數據,但如果訓練數據不是足夠多,對部分詞向量的微調可能會破壞整個向量空間原有的幾何結構,而使得模型的泛化能力反而變差了。


免責聲明!

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



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