CS224N(13)-詞向量的上下文表征及預訓練

Contextual Word Representations and Pretraining

一、Word Representations

在2018年之前,我們使用的詞向量表征技術(shù)主要有三個:Word2Vec、Glove、FastText。但是這三個方法都普遍存在在一些問題,就是無法解決一次多義的問題,即對于同一個詞無論上下文的單詞是否相同,訓練出來的詞向量都是一樣的。

通常我們訓練詞向量的時候,首先會初始化所有的詞向量,并且在訓練過程中不斷地改變這些向量的值,需要注意的是訓練的目標是我們自己定義的任務(wù),而詞向量僅僅是副產(chǎn)物而已。

當我們手中的語料不足時訓練出來的詞向量效果不會很理想,這是用通常會使用他人已經(jīng)訓練好的詞向量,并且以預訓練的詞向量來作為初始值,在訓練過程中凍結(jié)或者微調(diào)。

我們訓練好的詞向量是不可能涵蓋所有詞的(這里主要有兩個原因,一是訓練語料中本來就不存在這些詞,二是這些詞在訓練語料中出現(xiàn)次數(shù)過少),這就會存在一個未登錄詞的問題,遇到這個問題的時候我們怎么處理呢?

首先,最簡單和最普遍的解決方法就是將所有未登錄的詞映射為<UNK>,并且為它訓練一個詞向量。但是這種方法存在缺點,它把這些未登錄詞都視為相同,不能區(qū)分它們的區(qū)別。

為了解決上面的方法存在的問題,人們開始考慮訓練字符集別的詞向量。
除此之外還有一些其他的方法:

1.如果測試時的<unk>單詞出現(xiàn)在未受監(jiān)督的單詞嵌入中,請使用測試時的向量。
2.對于其他單詞,只需給它們分配一個隨機向量,將它們添加到詞匯表中即可。
3.將事物折疊成單詞類(如未知數(shù)字、大寫的事物等),并為每個類設(shè)置一個<unk class>

二、ELMO

下面我們來看下這個神經(jīng)網(wǎng)絡(luò):


在一個NLM中,我們快速地通過LSTM層獲得單詞向量(可能只在語料庫上訓練)。這些LSTM層被訓練來預測下一個單詞。但是這些語言模型在每個位置都產(chǎn)生了上下文特定的單詞表示!

下面來介紹一些經(jīng)典的模型:

1、Peters et al. (2017): TagLM – “Pre-ELMo”

論文地址:https://arxiv.org/pdf/1705.00108.pdf
核心思想:通過上下文中獲取單詞的含義,但只在task-labeled的小任務(wù)(例如,NER)上使用RNN來進行訓練。

算法的核心步驟如下:

1.預訓練詞向量和語言模型
2.在輸入序列中準備好單詞嵌入和語言模型嵌入。
3.在序列標記模型中同時使用單詞嵌入和語言模型嵌入。

該模型結(jié)構(gòu)圖如下:


論文得出的結(jié)論如下:

1、通過對語言模型觀察我們得出:使用有監(jiān)督數(shù)據(jù)集來訓練的語言模型效果甚微,使用雙向語言模型僅對向前有利,網(wǎng)絡(luò)結(jié)構(gòu)越復雜效果越好。
2、通過對任務(wù)特定BILSTM觀察可知:僅使用lm嵌入來預測并不好,僅在標簽數(shù)據(jù)上使用bilstm進行標記

2、Also in the air: McCann et al. 2017: CoVe

論文地址:https://arxiv.org/pdf/1708.00107.pdf

網(wǎng)絡(luò)結(jié)構(gòu)示意圖如下:


核心思想是使用經(jīng)過訓練的序列模型為其他NLP模型提供上下文。
使用兩層的LSTM來為seq2seq+attention編碼器的提供雙下文
結(jié)果:產(chǎn)生的COVE向量在各種任務(wù)上都優(yōu)于Glove向量。
但是,結(jié)果并不像其他幻燈片中描述的簡單NLM那樣強大,因此最后被舍棄。

3、Peters et al. (2018): ELMo: Embeddings from Language

Models
ELMO是第一個使用雙向語言模型來獲得詞向量的方法。
論文名稱及地址:
Deep contextualized word representations. NAACL 2018.
https://arxiv.org/abs/1802.05365

網(wǎng)絡(luò)結(jié)構(gòu)圖:


ELMO是詞向量或上下文詞向量的突破性算法:它使用長上下文而非上下文窗口學習詞向量(此處,整個句子可能更長),使用雙向的深層NLM進行訓練并使用其所有層進行預測。

我們來簡要介紹下這個模型:首先,它訓練了一個雙向的語言模型,其次,其性能很好并且模型不大:使用2個bilstm層,使用字符級的CNN建立初始單詞表示(2048 char n-gram過濾器和2個HighWay層,512 dim投影),使用4096 dim hidden/cell lstm狀態(tài),512dim投影到下一個輸入,使用殘差鏈接,連接token輸入和輸出(SoftMax)的參數(shù),并將這些參數(shù)連接在正向和反向語言模型之間。

ELMO用于學習特定任務(wù)的雙向語言模型表示的組合,這是首次僅使用LSTM堆棧頂層的模型,ELMO的任務(wù)可以簡單表示為:


\gamma^{task}:根據(jù)任務(wù)衡量ELMO的總體效用;
s^{task}:Softmax歸一化混合物模型權(quán)重

在使用雙向語言模型獲得詞向量后,我們在下游任務(wù)中使用詞向量時,凍結(jié)有監(jiān)督模型中的ELMO部分,并且將EMLO的權(quán)重根據(jù)不同的任務(wù)來連接不同的模型中。

模型中的兩個bilstm nlm層具有不同的用途/含義,

1、較低層學習的是較低級別的語法等。
2、高層次學習的是語義。

三、ULMfit

論文名稱及地址:
Howard and Ruder (2018) Universal Language Model Fine-tuning for Text Classification.
https://arxiv.org/pdf/1801.06146.pdf

ULMfit主要是使用遷移學習來進行文本分類:
遷移學習示意圖:


算法的核心思想:

1.在大的通用域語料庫上訓練語言模型
2.在目標任務(wù)數(shù)據(jù)上調(diào)整語言模型
3.作為目標任務(wù)的分類器進行微調(diào)

模型結(jié)構(gòu)圖如下:


UMLfit使用大小合理的“1-gpu”語言模型,由于是利用別人預訓練好的模型進行遷移學習,因此模型通常不大。
在語言模型微調(diào)過程中非常小心,每層采用不同的學習率,即傾斜三角形學習率(STLR)策略,開始學習率逐漸增大大,后面逐漸變小。
在學習分類器時逐步解凍并且采用STLR策略,分類時使用串聯(lián)的方法[h_T,maxpool(h),meanpool(h)]

近年預訓練語言模型發(fā)展歷程:


四、transformer:

transformer的出現(xiàn)主要是為了利用純attention來解決RNN系列網(wǎng)絡(luò)無法并行的問題。

transformer網(wǎng)絡(luò)概況:


我們從圖中可以看到:它是一個沒有使用循環(huán)神經(jīng)網(wǎng)絡(luò)的Seq2Seq編碼器解碼器模型。最初應用于使用并行語料庫進行機器翻譯并預測每個單詞的翻譯。
最終的成本/誤差函數(shù)是SoftMax分類器頂部的標準交叉熵誤差。

如果我們要詳細地了解transformer,可以參考下面地資源:
http://nlp.seas.harvard.edu/2018/04/03/attention.html
這是一個使用pytorch在jupyter notebook上來解釋transformer的教程。

接下來我們首先了解transformer中的attention部分。

1、attention:

inputs:一個查詢q和一組鍵值(k-v)對。
Query, keys, values, and output都是向量。
輸出是值的加權(quán)和,其中每個值的權(quán)重由查詢的內(nèi)部乘積和相應的鍵計算,查詢和鍵具有相同的維數(shù)d_k值d_v。
輸出公式如下:

當我們遇到多個查詢時,我們將它們使用堆棧的方法組成矩陣Q,那么上面這個公式就變?yōu)槿缦滦问剑?/p>

但是這個公式存在一個缺點:
當d_k變大時,q^{t}k的方差會增加,SoftMax中的一些值會變大,SoftMax圖形會變得非常尖銳,進而導致它的梯度變小。
因此這里進行了一個縮放處理:

示意圖如下:


2、self-attention

接下來介紹一下self-attention,self-attention有什么特點呢?

1.輸入詞向量是查詢、鍵和值。
2.詞向量本身相互進行選擇。
3.字向量stack=Q=K=V

1.Encoder self-attention

2.Decoder self-attention

缺點在于只有一種詞的相互作用方式,下面我們來介紹一下Multi-head attention

3、Multi-head attention

其大概步驟如下:

1.首先通過W矩陣將q,k,v映射到h=8的低維空間
2.然后連接輸出并通過線性層傳輸

其計算公式如下:


示意圖如下:


與CNN和傳統(tǒng)的Attention相比,Multi-head attention還是有很多特性的。
下面以這句話為例子:
The cat stuck out its tongue and licked its owner
當使用CNN處理這段話時,體現(xiàn)的是相對位置的不同線性變換,其示意圖如下:

當使用普通的Attention時,體現(xiàn)的是權(quán)重的平均:


當使用Multi-Attention時,在輸入和輸出上具有不同線性變換的并行行Attention層:


4、transformer block

1.encoder

encoder結(jié)構(gòu)部分的示意圖如下:


在transformer中,每個塊有兩層,每層由一個Multihead attention和一個兩層的采用ReLU激活函數(shù)的前饋神經(jīng)網(wǎng)絡(luò)組成。

其結(jié)構(gòu)可以由下圖表示:


這兩個步驟中的每一個還具有:
Residual (short-circuit) connection 和 LayerNorm
LayerNorm(x + Sublayer(x))
layerNorm將輸入更改為每個層和每個訓練點的平均值0和方差1(并添加兩個以上參數(shù)),公式表示如下:


在transformer中,encoder部分的每個塊(共6個)中, Q=K=V且Q、K、V都來自上一層。并且實際上詞向量的表示是字節(jié)對編碼,除此之外,還添加了位置編碼,因此不同位置的相同單詞具有不同的整體表示。
positional encoding的計算公式如下:


2.decoder

結(jié)構(gòu)示意圖如下:


相對于encoder部分decoder對子層進行了一定的更改,
1.使用self-attention對先前生成的輸出進行masked decoder


2.Encoder-Decoder Attention,查詢來自前一個解碼器層,鍵和值來自編碼器的輸出。


transformer的相關(guān)細節(jié)如下:

1.字節(jié)對編碼
2.檢查點平均
3.學習率變化的Adam優(yōu)化器
4.在每一層訓練過程中僅在在添加參擦連接之前使用dropout
5.標簽平滑
6.使用帶有beam search和長度懲罰的自動回歸解碼

五、BERT: Devlin, Chang, Lee, Toutanova (2018)

BERT (Bidirectional Encoder Representations from Transformers):
Pre-training of Deep Bidirectional Transformers for Language
Understanding

ELMO、GPT、BERT結(jié)構(gòu)對比圖:


BERT主要解決的是傳統(tǒng)語言模型只使用左上下文或右上下文,但語言理解是雙向的這一問題。圖例如下:


BERT在工程上采用的技巧是:

1.在訓練過程中隨機mask掉15%的token,而不是把像cbow一樣把每個詞都預測一遍。最終的損失函數(shù)只計算被mask掉那個token。
Mask如何做也是有技巧的,如果一直用標記[MASK]代替(在實際預測時是碰不到這個標記的)會影響模型,所以隨機mask的時候10%的單詞會被替代成其他單詞,10%的單詞不替換,剩下80%才被替換為MASK。要注意的是Masked LM預訓練階段模型是不知道真正被mask的是哪個詞,所以模型每個詞都要關(guān)注。

2.在為了訓練一個理解句子的模型關(guān)系,預先訓練一個二進制化的下一句測任務(wù),這一任務(wù)可以從任何單語語料庫中生成。具體地說,當選擇句子A和B作為預訓練樣本時,B有50%的可能是A的下一個句子,也有50%的可能是來自語料庫的隨機句子。


BERT sentence pair encoding
BERT中每個輸入向量由下面幾個組成:


token嵌入是單詞片段
學習分段嵌入來表示每個句子
位置嵌入與其他Transformer架構(gòu)是一樣的

BERT model fine tuning
使用BERT訓練好模型以后,我們在下游任務(wù)中使用它的時候,只需要根據(jù)當前的任務(wù)對它進行微調(diào)即可。


transformer在圖形和語音方面的應用

1.transformer在圖像方面的應用

總體結(jié)構(gòu)圖如下:

image transformer layer:

2.transformer在語音方面的應用

在語言方面,采用的是Multihead Attention和convolution的組合結(jié)構(gòu)relative attention,對于一段音頻來說可得到下面的表示:


傳統(tǒng)anttention觀察的部分:


relative anttention觀察的部分:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容