NLP-CS224n學習講義PART 2——Word Vector 2: GloVe, Evaluation and Training

NLP-CS224n學習講義PART 2——Word Vector 2: GloVe, Evaluation and Training

1 Global Vectors for Word Representation(GloVe)

1.1 方法間的比較

我們之前提到兩種查找詞彙嵌入的方式。第一種就是基於計數且依賴於矩陣分解的方式,這種方式可以有效地利用了全局統計信息,但是它們未能很好捕捉單詞相似性。第二種基於window方式,即skip-gram和CBOW的方式,這種方式能夠很好的捕獲單詞之間的相關性,但是未能利用全局共現統計信息。可見這兩種方式是一種互補的,爲了能夠同時獲得兩種方式的優點。

1.2 共現矩陣

在這裏插入圖片描述

生成這個矩陣需要一次遍歷整個語料庫來收集統計信息。

1.3 最小二乘目標

在skip-gram模型中,使用softmax來計算 wordjword_j 出現在上下文 wordiword_i 的概率爲:
Qij=exp(ujTvi)w=1Wexp(uwTvi)Q_{ij} = \frac{exp(u_j^Tv_i)}{\sum_{w=1}^Wexp(u_w^Tv_i)}
最後的cross-entropy loss爲:

J=icorpusjcontext(i)logQijJ = -\sum_{i\in corpus}\sum_{j\in context(i)} logQ_{ij}

因爲相同的單詞i和j可以在語料庫中出現多次,所以首先將相同的值i和j組合在一起會更有效率:

J=i=1Wj=1WXijlogQijJ = -\sum_{i=1}^W\sum_{j=1}^W X_{ij}logQ_{ij}

交叉熵損失的一個顯著缺點是,它需要對分佈Q進行適當的規範化,這涉及到對整個詞彙表進行昂貴的求和。相反,我們使用最小二乘法作爲目標:
J^=i=1Wj=1WXi(P^ijQ^ij)2\hat J = \sum_{i=1}^W \sum_{j=1}^W X_i(\hat P_{ij} - \hat Q_{ij})^2

然而P^ij=Xij\hat P_{ij} = X_{ij}Q^ij=exp(ujTvi)\hat Q_{ij} = exp(u_j^Tv_i)是非規範化分佈 。新的問題是XijX_{ij}往往值很大會使得優化困難,所以我們使用log:

J^=i=1Wj=1WXi(log(P^)ijlog(Q^)ij)2=i=1Wj=1WXi(ujTvilogXij)2\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(u_j^Tv_i - logX_{ij})^2


2 Word Vectors的評估

將討論定量地評估Word2Vec和GloVe等技術生成的word vectors的性能。

2.1 內部評估

詞向量的內部評估是對一組詞向量的評估,這些詞向量是由嵌入技術(如Word2Vec或GloVe)在特定的中間子任務上生成的。一個內在的評價通常應該返回一個數字給我們,這個數字表示那些詞向量在評價子任務上的表現。

內部評估直接衡量單詞之間的句法和語義關係

  1. 相關性度量
  2. 類比度量

2.2 外部評估

而詞向量的外部評估是對一組通過嵌入技術在手頭的實際任務上生成的詞向量的評價。通常,對錶現不佳的外部評估系統進行優化是不能讓我們確定是哪個子系統出了問題,這就激發了對內部評估的需求。

比如進行可視化評估。


3 Training for Extrinsic Tasks

3.1 問題定義

大多數NLP 外部任務都可以定義爲分類任務。

訓練集通常定義爲 {x(i),y(i)}1N\{x^{(i)}, y^{(i)}\}_1^N 的形式,其中x(i)x^{(i)} 爲d維詞向量,y(i)y^{(i)} 爲C維one-hot向量,即我們最後想要預測的標籤(比如句子的情感、命名實體、其他詞等)

我們知道在傳統的機器學習任務中,基本上都固定input和output,然後我們去訓練模型的weight,但是在NLP任務中,要注意,當我們訓練外部任務時,我們引入了重新訓練input詞向量的概念。

3.2 重新訓練詞向量

我們用於外部評估的詞向量是通過一個簡單的內部評價來進行優化並初始化的。在許多情況下,這些預訓練的詞向量在外部評價中表現良好。但是,這些預訓練的詞向量在外部評價的表現仍然有提高的可能。然而,重新訓練詞向量存在着一定的風險,需要保證訓練集足夠大並能覆蓋詞彙表中大部分的單詞。

3.3 Softmax分類和正則化

這塊是個非常重要的知識點,因爲基本上機器學習很多任務都需要用到softmax,softmax就是一種計算概率的函數,而這個往往和多分類問題相關。它的形式如下:

p(yj=1x)=exp(Wj.x)c=1Cexp(Wc.x)p(y_j = 1|x) = \frac{exp(W_j.x)}{\sum_{c=1}^Cexp(W_c.x)}

上面的式子是在計算詞向量x是第 j 類的概率,然後使用Cross-entropy 作爲訓練的損失函數:

j=1Cyjlog(p(yj=1x))=j=1Cyjlog(exp(Wj.x)c=1Cexp(Wc.x)))-\sum_{j=1}^C y_jlog(p(y_j=1|x)) = -\sum_{j=1}^Cy_jlog(\frac{exp(W_j.x)}{\sum_{c=1}^Cexp(W_c.x)}))

我們一定要理解這個Cross-entropy loss,這裏再做一下解釋:

yjy_j表示真實結果,而 p(yj=1x)p(y_j=1|x) 表示計算的結果,刻畫的便是通過計算的結果來表達真實結果的困難程度,其實換句話說就是loss越小,這計算結果和真實結果就越接近。

當然,整個求和$ -\sum_{j=1}Cy_jlog(\frac{exp(W_j.x)}{\sum_{c=1}Cexp(W_c.x)}))$ 會有 (C-1) 個0值,這是因爲只有在某個下標時yjy_j 才爲1,這表示 xx 只屬於某一個類別。這樣loss可以簡化爲:

log(Wk.xc=1Cexp(Wc.x))-log(\frac{W_k.x}{\sum_{c=1}^Cexp(W_c.x)})

我們知道訓練不僅僅要訓練model weights,同時還要訓練input word vectors,所以需要更新的參數數量爲 Cd+VdC \cdot d + |V| \cdot d 個,即

θJ(θ)=[W.1:W.dxaardvark:xzebra]\bigtriangledown_\theta J(\theta) = \begin{bmatrix} \bigtriangledown_{W.1}\\:\\\bigtriangledown_{W.d}\\\bigtriangledown_{x_{aardvark}}\\:\\\bigtriangledown_{x_{zebra}} \end{bmatrix} \quad

這個數量是非常大的,而如此多的參數很容易過度擬合,所以我們需要加一個正則項來減少過擬合的風險:

log(Wk.xc=1Cexp(Wc.x))+λk=1Cd+Vdθk2-log(\frac{W_k.x}{\sum_{c=1}^Cexp(W_c.x)}) + \lambda \sum_{k=1}^{C\cdot d+|V|\cdot d}\theta_k^2

3.4 window classification

實際上我們不會以一個單詞作爲輸入的,這是因爲語言處理基本都是根據上下文進行的,所以我們要以一段序列作爲輸入,而這個序列就包括中心詞和其上下文詞,而上下文詞的個數就作爲window的大小。比如:

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

然後我們對其進行求導來更新參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章