CS224n學習筆記(二)

Global Vectors for Word Representation (GloVe)

GloVe 模型包含一個訓練在單詞-單詞的共同出現次數上的加權的最小二乘模型。算法

什麼是Co-occurrence Matrix

假設單詞與單詞的 co-occurrence matrix 矩陣用 X 表示,\(X_{i j}\)表示單詞 \(j\) 出如今單詞 i 的上下文中的次數, \(X_{i}=\sum_{k} X_{i k}\)表示任何一個單詞 k 出如今單詞 i 的上下文中的次數,
\[ P_{i j}=P\left(w_{j} | w_{i}\right)=\frac{X_{i j}}{X_{i}} \]
就表示單詞 j 出如今單詞 i 上下文中的機率。因此填充這個矩陣須要遍歷一次語料庫。函數

Least Squares Objective

在 skip-gram算法中,咱們在輸出層使用的是 \(softmax\) 函數計算單詞 j 出如今單詞 i 上下文的機率:
\[ Q_{i j}=\frac{\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right)}{\sum_{w=1}^{W} \exp \left(\vec{u}_{w}^{T} \vec{v}_{i}\right)} \]
所以,若是咱們將這個用於全局的數據的話,那麼交叉熵損失函數就能夠這麼算:
\[ I=-\sum_{i \in \text {corpus}}\sum_{j \in \text { context }(i)} \log Q_{i j} \]
這個公式的本質就是在上一節講的一句話的skip-gram上上升到對整個文本的處理。若是咱們考慮單詞上下文大小以及文本大小爲 \(W\).那麼交叉熵損失函數能夠寫成:
\[ J=-\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i j} \log Q_{i j} \]優化

上面公式面臨的一個問題是,在計算整個文本的時候,計算 \(Q\)\(softmax\) 函數,這個計算量太大了。因此下面想辦法優化一下:因此咱們根本就不使用交叉熵損失函數,而是使用最小二乘法,那麼損失函數就是下面這樣:
\[ \hat{\jmath}=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\hat{P}_{i j}-\hat{Q}_{i j}\right)^{2} \]
其中 \(\hat{P}_{i j}=X_{i j}\) and \(\hat{Q}_{i j}=\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right)\) 是非正態分佈的. 這裏的 \(X_{i j}\) 等價於 j 出如今 i 的上下文的次數, 而 \(\hat{Q}_{i j}\) 是咱們經過 skip-gram 預測的次數,因此是最小二乘法。這樣的計算量仍是很大,習慣上取個對數,公式就變成下面這樣了:
\[ \begin{aligned} \hat{J} &=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\log (\hat{P})_{i j}-\log \left(\hat{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}\) 不必定可以達到最優,所以咱們選擇 \(f\left(X_{i j}\right)\),使用上下文來表示以提升準確率:
\[ \hat{\jmath}=\sum_{i=1}^{W} \sum_{j=1}^{W} f\left(X_{i j}\right)\left(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{i j}\right)^{2} \]lua

Evaluation of Word Vectors

Intrinsic Evaluation

內部評估的思想,在一個較大的系統中,不能直接校準結果,而是對中間的一些結果進行評估:spa

  • 內部評估應用於特殊的一箇中間任務
  • 能夠很快地計算出效果
  • 有助於瞭解內部系統
  • 在輸出端須要於實際的任務相連用來判斷準確率

Intrinsic Evaluation 的例子:

咱們使用計算單詞語義上的類比性來表示模型的準確率:那麼咱們能夠用下面的式子來求出咱們最佳的預測:
\[ d=\underset{i}{\operatorname{argmax}} \frac{\left(x_{b}-x_{a}+x_{c}\right)^{T} x_{i}}{\left\|x_{b}-x_{a}+x_{c}\right\|} \]
能夠這樣考慮上面的式子,從語義上分析單詞的類似性的話,那麼咱們但願有 \(x_{b}-x_{a}=\) \(x_{d}-x_{c}\) 。因此對於單詞 \(x_{c}\) 咱們但願獲得最優的 \(x_{i}\)。可是這裏還要注意一些問題,從訓練數據的角度考慮的話就是訓練數據的語義之間的類似性決定了預測數據的類似性,另外一方面,咱們每每會對原始的訓練數據進行 PCA降維,降維在這裏能夠提取出原訓練數據最相關的特徵,可是也會損失一些訓練數據的信息。ip

從 Intrinsic Evaluation 看影響模型的因素

主要是三個方面:io

  • 使用的模型的種類
  • 數據集越大表現越好
  • 單詞向量的維度,維度過小,結果很差,太好會引入噪聲

Training for Extrinsic Tasks

Retraining Word Vectors

通常狀況下,咱們使用內部的小任務優化單詞向量,而後將單詞向量用於整個任務。這是預訓練的好處,可是在咱們訓練好模型以後,若是再繼續加入數據的話,數據量不大的狀況下不能夠從新訓練,而是保持原來的訓練模型。ast

Softmax Classification and Regularization

咱們使用 \(softmax\) 分類的時候,每每但願的是預測出數據對應的一種類別,這是 \(softmax\) 函數於交叉熵損失函數能夠寫成
\[ p\left(y_{j}=1 | x\right)=\frac{\exp \left(W_{j} \cdot x\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x\right)} \]class

\[ -\sum_{j=1}^{C} y_{j} \log \left(p\left(y_{j}=1 | x\right)\right)=-\sum_{j=1}^{C} y_{j} \log \left(\frac{\exp \left(W_{j} \cdot x\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x\right)}\right) \]dva

交叉熵損失函數就是目標函數取反獲得的。上面狀況的,假設咱們預測的數據只能處於一種類別,那麼若是能夠處於多種類別該怎麼計算呢?咱們假設 K 種類別都是正確的,那麼能夠寫成這樣:
\[ -\sum_{i=1}^{N} \log \left(\frac{\exp \left(W_{k(i)} \cdot x^{(i)}\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x^{(i)}\right)}\right) \]
也就是 \(k(i)\)\(x^{(i)}\) 對應的不一樣類別。

引入正則化

上面的方法是能夠的,可是參數太多了,容易過擬合,參數主要是:
\[ \nabla_{\theta} J(\theta)=\left[ \begin{array}{c}{\nabla w_{.1}} \\ {\vdots} \\ {\nabla_{W_{\cdot d}}} \\ {\nabla_{x_{\text {aardvark}}}} \\ {\vdots} \\ {\nabla_{x_{z e b r a}}}\end{array}\right] \]
正則化的思想就是,過擬合的緣由就是參數太多了,那麼咱們在最小化損失函數的時候引入參數,同時最小化參數,就能夠避免徹底只考慮最小化損失函數,而不考慮參數,
\[ -\sum_{i=1}^{N} \log \left(\frac{\exp \left(W_{k(i)}, x^{(i)}\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x^{(i)}\right)}\right)+\lambda \sum_{k=1}^{C \cdot d+|V| \cdot d} \theta_{k}^{2} \]

相關文章
相關標籤/搜索