nlp中的詞向量對比:word2vec/glove/fastText/elmo/GPT/bert

本文以QA形式對自然語言處理中的詞向量進行總結:包含word2vec/glove/fastText/elmo/bert。

目錄

一、文本表示和各詞向量間的對比 
1、文本表示哪些方法?
2、怎麼從語言模型理解詞向量?怎麼理解分佈式假設?
3、傳統的詞向量有什麼問題?怎麼解決?各種詞向量的特點是什麼?
4、word2vec和NNLM對比有什麼區別?(word2vec vs NNLM)
5、word2vec和fastText對比有什麼區別?(word2vec vs fastText)
6、glove和word2vec、 LSA對比有什麼區別?(word2vec vs glove vs LSA)
7、 elmo、GPT、bert三者之間有什麼區別?(elmo vs GPT vs bert)
二、深入解剖word2vec
1、word2vec的兩種模型分別是什麼?
2、word2vec的兩種優化方法是什麼?它們的目標函數怎樣確定的?訓練過程又是怎樣的?
三、深入解剖Glove詳解
1、GloVe構建過程是怎樣的?
2、GloVe的訓練過程是怎樣的?
3、Glove損失函數是如何確定的?
四、深入解剖bert(與elmo和GPT比較)
1、爲什麼bert採取的是雙向Transformer Encoder,而不叫decoder?
2、elmo、GPT和bert在單雙向語言模型處理上的不同之處?
3、bert構建雙向語言模型不是很簡單嗎?不也可以直接像elmo拼接Transformer decoder嗎?
4、爲什麼要採取Marked LM,而不直接應用Transformer Encoder?
5、bert爲什麼並不總是用實際的[MASK]token替換被“masked”的詞彙?

一、文本表示和各詞向量間的對比

1、文本表示哪些方法?

下面對文本表示進行一個歸納,也就是對於一篇文本可以如何用數學語言表示呢?

  • 基於one-hot、tf-idf、textrank等的bag-of-words;
  • 主題模型:LSA(SVD)、pLSA、LDA;
  • 基於詞向量的固定表徵:word2vec、fastText、glove
  • 基於詞向量的動態表徵:elmo、GPT、bert

2、怎麼從語言模型理解詞向量?怎麼理解分佈式假設?

上面給出的4個類型也是nlp領域最爲常用的文本表示了,文本是由每個單詞構成的,而談起詞向量,one-hot是可認爲是最爲簡單的詞向量,但存在維度災難和語義鴻溝等問題;通過構建共現矩陣並利用SVD求解構建詞向量,則計算複雜度高;而早期詞向量的研究通常來源於語言模型,比如NNLM和RNNLM,其主要目的是語言模型,而詞向量只是一個副產物。

NNLM

所謂分佈式假設,用一句話可以表達:相同上下文語境的詞有似含義。而由此引申出了word2vec、fastText,在此類詞向量中,雖然其本質仍然是語言模型,但是它的目標並不是語言模型本身,而是詞向量,其所作的一系列優化,都是爲了更快更好的得到詞向量。glove則是基於全局語料庫、並結合上下文語境構建詞向量,結合了LSA和word2vec的優點。

3、傳統的詞向量有什麼問題?怎麼解決?各種詞向量的特點是什麼?

上述方法得到的詞向量是固定表徵的,無法解決一詞多義等問題,如“川普”。爲此引入基於語言模型的動態表徵方法:elmo、GPT、bert。

各種詞向量的特點:

(1)One-hot 表示 :維度災難、語義鴻溝;

(2)分佈式表示 (distributed representation) :

  • 矩陣分解(LSA):利用全局語料特徵,但SVD求解計算複雜度大;
  • 基於NNLM/RNNLM的詞向量:詞向量爲副產物,存在效率不高等問題;
  • word2vec、fastText:優化效率高,但是基於局部語料;
  • glove:基於全局預料,結合了LSA和word2vec的優點;
  • elmo、GPT、bert:動態特徵;

4、word2vec和NNLM對比有什麼區別?(word2vec vs NNLM)

1)其本質都可以看作是語言模型;

2)詞向量只不過NNLM一個產物,word2vec雖然其本質也是語言模型,但是其專注於詞向量本身,因此做了許多優化來提高計算效率:

  • 與NNLM相比,詞向量直接sum,不再拼接,並捨棄隱層;
  • 考慮到sofmax歸一化需要遍歷整個詞彙表,採用hierarchical softmax 和negative sampling進行優化,hierarchical softmax 實質上生成一顆帶權路徑最小的哈夫曼樹,讓高頻詞搜索路勁變小;negative sampling更爲直接,實質上對每一個樣本中每一個詞都進行負例採樣;

5、word2vec和fastText對比有什麼區別?(word2vec vs fastText)

1)都可以無監督學習詞向量, fastText訓練詞向量時會考慮subword;

2) fastText還可以進行有監督學習進行文本分類,其主要特點:

  • 結構與CBOW類似,但學習目標是人工標註的分類結果;
  • 採用hierarchical softmax對輸出的分類標籤建立哈夫曼樹,樣本中標籤多的類別被分配短的搜尋路徑;
  • 引入N-gram,考慮詞序特徵;
  • 引入subword來處理長詞,處理未登陸詞問題;

6、glove和word2vec、 LSA對比有什麼區別?(word2vec vs glove vs LSA)

1)glove vs LSA

  • LSA(Latent Semantic Analysis)可以基於co-occurance matrix構建詞向量,實質上是基於全局語料採用SVD進行矩陣分解,然而SVD計算複雜度高;
  • glove可看作是對LSA一種優化的高效矩陣分解算法,採用Adagrad對最小平方損失進行優化;

2)word2vec vs glove

  • word2vec是局部語料庫訓練的,其特徵提取是基於滑窗的;而glove的滑窗是爲了構建co-occurance matrix,是基於全局語料的,可見glove需要事先統計共現概率;因此,word2vec可以進行在線學習,glove則需要統計固定語料信息。
  • word2vec是無監督學習,同樣由於不需要人工標註;glove通常被認爲是無監督學習,但實際上glove還是有label的,即共現次數log(X_{ij})
  • word2vec損失函數實質上是帶權重的交叉熵,權重固定;glove的損失函數是最小平方損失函數,權重可以做映射變換。
  • 總體來看,glove可以被看作是更換了目標函數和權重函數的全局word2vec

elmo vs GPT vs bert

7、 elmo、GPT、bert三者之間有什麼區別?(elmo vs GPT vs bert)
之前介紹詞向量均是靜態的詞向量,無法解決一次多義等問題。下面介紹三種elmo、GPT、bert詞向量,它們都是基於語言模型的動態詞向量。下面從幾個方面對這三者進行對比:

(1)特徵提取器:elmo採用LSTM進行提取,GPT和bert則採用Transformer進行提取。很多任務表明Transformer特徵提取能力強於LSTM,elmo採用1層靜態向量+2層LSTM,多層提取能力有限,而GPT和bert中的Transformer可採用多層,並行計算能力強。

(2)單/雙向語言模型

  • GPT採用單向語言模型,elmo和bert採用雙向語言模型。但是elmo實際上是兩個單向語言模型(方向相反)的拼接,這種融合特徵的能力比bert一體化融合特徵方式弱。
  • GPT和bert都採用Transformer,Transformer是encoder-decoder結構,GPT的單向語言模型採用decoder部分,decoder的部分見到的都是不完整的句子;bert的雙向語言模型則採用encoder部分,採用了完整句子。

二、深入解剖word2vec

1、word2vec的兩種模型分別是什麼?

word2Vec 有兩種模型:CBOW 和 Skip-Gram:

  • CBOW 在已知 context(w) 的情況下,預測 w
  • Skip-Gram在已知 w 的情況下預測 context(w) ;

word2vec

與NNLM相比,word2vec的主要目的是生成詞向量而不是語言模型,在CBOW中,投射層將詞向量直接相加而不是拼接起來,並捨棄了隱層,這些犧牲都是爲了減少計算量,使訓練更加

2、word2vec的兩種優化方法是什麼?它們的目標函數怎樣確定的?訓練過程又是怎樣的?

不經過優化的CBOW和Skip-gram中 ,在每個樣本中每個詞的訓練過程都要遍歷整個詞彙表,也就是都需要經過softmax歸一化,計算誤差向量和梯度以更新兩個詞向量矩陣(這兩個詞向量矩陣實際上就是最終的詞向量,可認爲初始化不一樣),當語料庫規模變大、詞彙表增長時,訓練變得不切實際。爲了解決這個問題,word2vec支持兩種優化方法:hierarchical softmax negative sampling。此部分僅做關鍵介紹,數學推導請仔細閱讀《word2vec 中的數學原理詳解》。

(1)基於hierarchical softmax 的 CBOW 和 Skip-gram

基於hierarchical softmax 的 CBOW 和 Skip-gram

hierarchical softmax 使用一顆二叉樹表示詞彙表中的單詞,每個單詞都作爲二叉樹的葉子節點。對於一個大小爲V的詞彙表,其對應的二叉樹包含V-1非葉子節點。假如每個非葉子節點向左轉標記爲1,向右轉標記爲0,那麼每個單詞都具有唯一的從根節點到達該葉子節點的由{0 1}組成的代號(實際上爲哈夫曼編碼,爲哈夫曼樹,是帶權路徑長度最短的樹,哈夫曼樹保證了詞頻高的單詞的路徑短,詞頻相對低的單詞的路徑長,這種編碼方式很大程度減少了計算量)。

CBOW中的目標函數是使條件概率 P(w|context(w)) 最大化,其等價於:

Skip-gram中的目標函數是使條件概率 P(context(w)|w) 最大化,其等價於:

(2)基於negative sampling的 CBOW 和 Skip-gram

negative sampling是一種不同於hierarchical softmax的優化策略,相比於hierarchical softmax,negative sampling的想法更直接——爲每個訓練實例都提供負例。

對於CBOW,其目標函數是最大化:

對於Skip-gram,同樣也可以得到其目標函數是最大化:

負採樣算法實際上就是一個帶權採樣過程,負例的選擇機制是和單詞詞頻聯繫起來的。

具體做法是以 N+1 個點對區間 [0,1] 做非等距切分,並引入的一個在區間 [0,1] 上的 M 等距切分,其中 M >> N。源碼中取 M = 10^8。然後對兩個切分做投影,得到映射關係:採樣時,每次生成一個 [1, M-1] 之間的整數 i,則 Table(i) 就對應一個樣本;當採樣到正例時,跳過(拒絕採樣)。

三、深入解剖Glove詳解

GloVe的全稱叫Global Vectors for Word Representation,它是一個基於全局詞頻統計(count-based & overall statistics)的詞表徵(word representation)工具。

1、GloVe構建過程是怎樣的?

(1)根據語料庫構建一個共現矩陣,矩陣中的每一個元素 X_{ij} 代表單詞 i 和上下文單詞 j 在特定大小的上下文窗口內共同出現的次數。

(2)構建詞向量(Word Vector)和共現矩陣之間的近似關係,其目標函數爲: J = \sum_{i,j=1}^V f\Big(X_{ij}\Big)\Big(w_i^T\tilde{w_j} + b_i + b_j -\log{X_{ij}} \Big)^2 
這個loss function的基本形式就是最簡單的mean square loss,只不過在此基礎上加了一個權重函數 f(x_{ij}) :
f(x) =  \begin{cases} (x/x_{\max})^\alpha & \text{if } x<x_{\max} \\ 1 & \text{otherwise.} \end{cases}

根據實驗發現 x_{\max} 的值對結果的影響並不是很大,原作者採用了 x_{\max}=100 。而 \alpha=3/4 時的結果要比 \alpha=1 時要更好。下面是 \alpha=3/4時 f(x) 的函數圖象,可以看出對於較小的 X_{ij} ,權值也較小。這個函數圖像如下所示:


2、GloVe的訓練過程是怎樣的?

  1. 實質上還是監督學習:雖然glove不需要人工標註爲無監督學習,但實質還是有label就是 log(X_{ij}) 。
  2. 向量 w 和 \tilde{w}爲學習參數,本質上與監督學習的訓練方法一樣,採用了AdaGrad的梯度下降算法,對矩陣 X 中的所有非零元素進行隨機採樣,學習曲率(learning rate)設爲0.05,在vector size小於300的情況下迭代了50次,其他大小的vectors上迭代了100次,直至收斂。
  3. 最終學習得到的是兩個詞向量是 \tilde{w} 和 w ,因爲 X 是對稱的(symmetric),所以從原理上講\tilde{w} 和 w ,是也是對稱的,他們唯一的區別是初始化的值不一樣,而導致最終的值不一樣。所以這兩者其實是等價的,都可以當成最終的結果來使用。但是爲了提高魯棒性,我們最終會選擇兩者之和 w+\tilde{w} 作爲最終的vector(兩者的初始化不同相當於加了不同的隨機噪聲,所以能提高魯棒性)。

3、Glove損失函數是如何確定的?(來自GloVe詳解

四、深入解剖bert(與elmo和GPT比較)

bert的全稱是Bidirectional Encoder Representation from Transformers,bert的核心是雙向Transformer Encoder,提出以下問題並進行解答:

1、爲什麼bert採取的是雙向Transformer Encoder,而不叫decoder?

BERT Transformer 使用雙向self-attention,而GPT Transformer 使用受限制的self-attention,其中每個token只能處理其左側的上下文。雙向 Transformer 通常被稱爲“Transformer encoder”,而左側上下文被稱爲“Transformer decoder”,decoder是不能獲要預測的信息的。

2、elmo、GPT和bert在單雙向語言模型處理上的不同之處?

在上述3個模型中,只有bert共同依賴於左右上下文。那elmo不是雙向嗎?實際上elmo使用的是經過獨立訓練的從左到右和從右到左LSTM的串聯拼接起來的。而GPT使用從左到右的Transformer,實際就是“Transformer decoder”。

3、bert構建雙向語言模型不是很簡單嗎?不也可以直接像elmo拼接Transformer decoder嗎?

BERT 的作者認爲,這種拼接式的bi-directional 仍然不能完整地理解整個語句的語義。更好的辦法是用上下文全向來預測[mask],也就是用 “能/實現/語言/表徵/../的/模型”,來預測[mask]。BERT 作者把上下文全向的預測方法,稱之爲 deep bi-directional。

4、bert爲什麼要採取Marked LM,而不直接應用Transformer Encoder?

我們知道向Transformer這樣深度越深,學習效果會越好。可是爲什麼不直接應用雙向模型呢?因爲隨着網絡深度增加會導致標籤泄露。如下圖:

雙向編碼與網絡深度的衝突

深度雙向模型比left-to-right 模型或left-to-right and right-to-left模型的淺層連接更強大。遺憾的是,標準條件語言模型只能從左到右或從右到左進行訓練,因爲雙向條件作用將允許每個單詞在多層上下文中間接地“see itself”。

爲了訓練一個深度雙向表示(deep bidirectional representation),研究團隊採用了一種簡單的方法,即隨機屏蔽(masking)部分輸入token,然後只預測那些被屏蔽的token。論文將這個過程稱爲“masked LM”(MLM)。

5、bert爲什麼並不總是用實際的[MASK]token替換被“masked”的詞彙?

NLP必讀 | 十分鐘讀懂谷歌BERT模型: 雖然這確實能讓團隊獲得雙向預訓練模型,但這種方法有兩個缺點。首先,預訓練和finetuning之間不匹配,因爲在finetuning期間從未看到[MASK]token。爲了解決這個問題,團隊並不總是用實際的[MASK]token替換被“masked”的詞彙。相反,訓練數據生成器隨機選擇15%的token。例如在這個句子“my dog is hairy”中,它選擇的token是“hairy”。然後,執行以下過程:
數據生成器將執行以下操作,而不是始終用[MASK]替換所選單詞:
80%的時間:用[MASK]標記替換單詞,例如,my dog is hairy → my dog is [MASK]
10%的時間:用一個隨機的單詞替換該單詞,例如,my dog is hairy → my dog is apple
10%的時間:保持單詞不變,例如,my dog is hairy → my dog is hairy. 這樣做的目的是將表示偏向於實際觀察到的單詞。
Transformer encoder不知道它將被要求預測哪些單詞或哪些單詞已被隨機單詞替換,因此它被迫保持每個輸入token的分佈式上下文表示。此外,因爲隨機替換隻發生在所有token的1.5%(即15%的10%),這似乎不會損害模型的語言理解能力。
使用MLM的第二個缺點是每個batch只預測了15%的token,這表明模型可能需要更多的預訓練步驟才能收斂。團隊證明MLM的收斂速度略慢於 left-to-right的模型(預測每個token),但MLM模型在實驗上獲得的提升遠遠超過增加的訓練成本。

bert模型的主要創新點都在pre-train方法上,即用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的representation。

下面給出了Transformer Encoder模型的整體結構:

Transformer Encoder

multi-head attention

 

Reference

  1. word2vec 中的數學原理詳解
  2. GloVe詳解
  3. 從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史
  4. NLP必讀 | 十分鐘讀懂谷歌BERT模型
  5. 谷歌BERT解析----2小時上手最強NLP訓練模型
  6. https://zhuanlan.zhihu.com/p/56382372
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章