Contextual Word Representations and Pretraining
一、Word Representations
在2018年之前揽碘,我們使用的詞向量表征技術(shù)主要有三個:Word2Vec雳刺、Glove掖桦、FastText涌穆。但是這三個方法都普遍存在在一些問題蒲犬,就是無法解決一次多義的問題原叮,即對于同一個詞無論上下文的單詞是否相同,訓(xùn)練出來的詞向量都是一樣的唯欣。
通常我們訓(xùn)練詞向量的時候境氢,首先會初始化所有的詞向量,并且在訓(xùn)練過程中不斷地改變這些向量的值寿桨,需要注意的是訓(xùn)練的目標(biāo)是我們自己定義的任務(wù)亭螟,而詞向量僅僅是副產(chǎn)物而已。
當(dāng)我們手中的語料不足時訓(xùn)練出來的詞向量效果不會很理想扁掸,這是用通常會使用他人已經(jīng)訓(xùn)練好的詞向量,并且以預(yù)訓(xùn)練的詞向量來作為初始值狸剃,在訓(xùn)練過程中凍結(jié)或者微調(diào)。
我們訓(xùn)練好的詞向量是不可能涵蓋所有詞的(這里主要有兩個原因僧凰,一是訓(xùn)練語料中本來就不存在這些詞训措,二是這些詞在訓(xùn)練語料中出現(xiàn)次數(shù)過少),這就會存在一個未登錄詞的問題呀闻,遇到這個問題的時候我們怎么處理呢捡多?
首先,最簡單和最普遍的解決方法就是將所有未登錄的詞映射為<UNK>淫奔,并且為它訓(xùn)練一個詞向量。但是這種方法存在缺點(diǎn)唐责,它把這些未登錄詞都視為相同,不能區(qū)分它們的區(qū)別抄罕。
為了解決上面的方法存在的問題呆贿,人們開始考慮訓(xùn)練字符集別的詞向量森渐。
除此之外還有一些其他的方法:
1.如果測試時的<unk>單詞出現(xiàn)在未受監(jiān)督的單詞嵌入中做入,請使用測試時的向量。
2.對于其他單詞同衣,只需給它們分配一個隨機(jī)向量竟块,將它們添加到詞匯表中即可。
3.將事物折疊成單詞類(如未知數(shù)字耐齐、大寫的事物等)浪秘,并為每個類設(shè)置一個<unk class>
二违帆、ELMO
下面我們來看下這個神經(jīng)網(wǎng)絡(luò):
在一個NLM中,我們快速地通過LSTM層獲得單詞向量(可能只在語料庫上訓(xùn)練)二庵。這些LSTM層被訓(xùn)練來預(yù)測下一個單詞痰憎。但是這些語言模型在每個位置都產(chǎn)生了上下文特定的單詞表示玲躯!
下面來介紹一些經(jīng)典的模型:
1、Peters et al. (2017): TagLM – “Pre-ELMo”
論文地址:https://arxiv.org/pdf/1705.00108.pdf
核心思想:通過上下文中獲取單詞的含義蜗元,但只在task-labeled的小任務(wù)(例如,NER)上使用RNN來進(jìn)行訓(xùn)練。
算法的核心步驟如下:
1.預(yù)訓(xùn)練詞向量和語言模型
2.在輸入序列中準(zhǔn)備好單詞嵌入和語言模型嵌入雅潭。
3.在序列標(biāo)記模型中同時使用單詞嵌入和語言模型嵌入顽染。
該模型結(jié)構(gòu)圖如下:
論文得出的結(jié)論如下:
1振亮、通過對語言模型觀察我們得出:使用有監(jiān)督數(shù)據(jù)集來訓(xùn)練的語言模型效果甚微阶牍,使用雙向語言模型僅對向前有利生宛,網(wǎng)絡(luò)結(jié)構(gòu)越復(fù)雜效果越好。
2痴晦、通過對任務(wù)特定BILSTM觀察可知:僅使用lm嵌入來預(yù)測并不好,僅在標(biāo)簽數(shù)據(jù)上使用bilstm進(jìn)行標(biāo)記
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)過訓(xùn)練的序列模型為其他NLP模型提供上下文。
使用兩層的LSTM來為seq2seq+attention編碼器的提供雙下文
結(jié)果:產(chǎn)生的COVE向量在各種任務(wù)上都優(yōu)于Glove向量。
但是环肘,結(jié)果并不像其他幻燈片中描述的簡單NLM那樣強(qiáng)大驯鳖,因此最后被舍棄伊磺。
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是詞向量或上下文詞向量的突破性算法:它使用長上下文而非上下文窗口學(xué)習(xí)詞向量(此處俱济,整個句子可能更長)亡脑,使用雙向的深層NLM進(jìn)行訓(xùn)練并使用其所有層進(jìn)行預(yù)測。
我們來簡要介紹下這個模型:首先,它訓(xùn)練了一個雙向的語言模型,其次皱埠,其性能很好并且模型不大:使用2個bilstm層,使用字符級的CNN建立初始單詞表示(2048 char n-gram過濾器和2個HighWay層好唯,512 dim投影)竭沫,使用4096 dim hidden/cell lstm狀態(tài)谎势,512dim投影到下一個輸入镊折,使用殘差鏈接级野,連接token輸入和輸出(SoftMax)的參數(shù)潜索,并將這些參數(shù)連接在正向和反向語言模型之間。
ELMO用于學(xué)習(xí)特定任務(wù)的雙向語言模型表示的組合懂酱,這是首次僅使用LSTM堆棧頂層的模型竹习,ELMO的任務(wù)可以簡單表示為:
:根據(jù)任務(wù)衡量ELMO的總體效用;
:Softmax歸一化混合物模型權(quán)重
在使用雙向語言模型獲得詞向量后玩焰,我們在下游任務(wù)中使用詞向量時由驹,凍結(jié)有監(jiān)督模型中的ELMO部分芍锚,并且將EMLO的權(quán)重根據(jù)不同的任務(wù)來連接不同的模型中昔园。
模型中的兩個bilstm nlm層具有不同的用途/含義,
1并炮、較低層學(xué)習(xí)的是較低級別的語法等默刚。
2、高層次學(xué)習(xí)的是語義逃魄。
三荤西、ULMfit
論文名稱及地址:
Howard and Ruder (2018) Universal Language Model Fine-tuning for Text Classification.
https://arxiv.org/pdf/1801.06146.pdf
ULMfit主要是使用遷移學(xué)習(xí)來進(jìn)行文本分類:
遷移學(xué)習(xí)示意圖:
算法的核心思想:
1.在大的通用域語料庫上訓(xùn)練語言模型
2.在目標(biāo)任務(wù)數(shù)據(jù)上調(diào)整語言模型
3.作為目標(biāo)任務(wù)的分類器進(jìn)行微調(diào)
模型結(jié)構(gòu)圖如下:
UMLfit使用大小合理的“1-gpu”語言模型,由于是利用別人預(yù)訓(xùn)練好的模型進(jìn)行遷移學(xué)習(xí),因此模型通常不大邪锌。
在語言模型微調(diào)過程中非常小心勉躺,每層采用不同的學(xué)習(xí)率,即傾斜三角形學(xué)習(xí)率(STLR)策略觅丰,開始學(xué)習(xí)率逐漸增大大饵溅,后面逐漸變小。
在學(xué)習(xí)分類器時逐步解凍并且采用STLR策略,分類時使用串聯(lián)的方法
近年預(yù)訓(xùn)練語言模型發(fā)展歷程:
四妇萄、transformer:
transformer的出現(xiàn)主要是為了利用純attention來解決RNN系列網(wǎng)絡(luò)無法并行的問題蜕企。
transformer網(wǎng)絡(luò)概況:
我們從圖中可以看到:它是一個沒有使用循環(huán)神經(jīng)網(wǎng)絡(luò)的Seq2Seq編碼器解碼器模型。最初應(yīng)用于使用并行語料庫進(jìn)行機(jī)器翻譯并預(yù)測每個單詞的翻譯冠句。
最終的成本/誤差函數(shù)是SoftMax分類器頂部的標(biāo)準(zhǔn)交叉熵誤差轻掩。
如果我們要詳細(xì)地了解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)部乘積和相應(yīng)的鍵計(jì)算拱层,查詢和鍵具有相同的維數(shù)弥臼。
輸出公式如下:
當(dāng)我們遇到多個查詢時,我們將它們使用堆棧的方法組成矩陣Q根灯,那么上面這個公式就變?yōu)槿缦滦问剑?/p>
但是這個公式存在一個缺點(diǎn):
因此這里進(jìn)行了一個縮放處理:
示意圖如下:
2桃笙、self-attention
接下來介紹一下self-attention氏堤,self-attention有什么特點(diǎn)呢?
1.輸入詞向量是查詢搏明、鍵和值鼠锈。
2.詞向量本身相互進(jìn)行選擇。
3.字向量stack=Q=K=V
1.Encoder self-attention
2.Decoder self-attention
缺點(diǎn)在于只有一種詞的相互作用方式星著,下面我們來介紹一下Multi-head attention
3购笆、Multi-head attention
其大概步驟如下:
1.首先通過W矩陣將q,k虚循,v映射到h=8的低維空間
2.然后連接輸出并通過線性層傳輸
其計(jì)算公式如下:
示意圖如下:
與CNN和傳統(tǒng)的Attention相比同欠,Multi-head attention還是有很多特性的样傍。
下面以這句話為例子:
The cat stuck out its tongue and licked its owner
當(dāng)使用CNN處理這段話時,體現(xiàn)的是相對位置的不同線性變換铺遂,其示意圖如下:
當(dāng)使用普通的Attention時衫哥,體現(xiàn)的是權(quán)重的平均:
當(dāng)使用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將輸入更改為每個層和每個訓(xùn)練點(diǎn)的平均值0和方差1(并添加兩個以上參數(shù))笛质,公式表示如下:
在transformer中,encoder部分的每個塊(共6個)中, Q=K=V且Q捞蚂、K妇押、V都來自上一層。并且實(shí)際上詞向量的表示是字節(jié)對編碼姓迅,除此之外敲霍,還添加了位置編碼,因此不同位置的相同單詞具有不同的整體表示丁存。
positional encoding的計(jì)算公式如下:
2.decoder
結(jié)構(gòu)示意圖如下:
相對于encoder部分decoder對子層進(jìn)行了一定的更改肩杈,
1.使用self-attention對先前生成的輸出進(jìn)行masked decoder
2.Encoder-Decoder Attention,查詢來自前一個解碼器層,鍵和值來自編碼器的輸出解寝。
transformer的相關(guān)細(xì)節(jié)如下:
1.字節(jié)對編碼
2.檢查點(diǎn)平均
3.學(xué)習(xí)率變化的Adam優(yōu)化器
4.在每一層訓(xùn)練過程中僅在在添加參擦連接之前使用dropout
5.標(biāo)簽平滑
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.在訓(xùn)練過程中隨機(jī)mask掉15%的token觉增,而不是把像cbow一樣把每個詞都預(yù)測一遍兵拢。最終的損失函數(shù)只計(jì)算被mask掉那個token。
Mask如何做也是有技巧的逾礁,如果一直用標(biāo)記[MASK]代替(在實(shí)際預(yù)測時是碰不到這個標(biāo)記的)會影響模型说铃,所以隨機(jī)mask的時候10%的單詞會被替代成其他單詞,10%的單詞不替換嘹履,剩下80%才被替換為MASK腻扇。要注意的是Masked LM預(yù)訓(xùn)練階段模型是不知道真正被mask的是哪個詞,所以模型每個詞都要關(guān)注植捎。
2.在為了訓(xùn)練一個理解句子的模型關(guān)系衙解,預(yù)先訓(xùn)練一個二進(jìn)制化的下一句測任務(wù)阳柔,這一任務(wù)可以從任何單語語料庫中生成焰枢。具體地說,當(dāng)選擇句子A和B作為預(yù)訓(xùn)練樣本時,B有50%的可能是A的下一個句子济锄,也有50%的可能是來自語料庫的隨機(jī)句子暑椰。
BERT sentence pair encoding
BERT中每個輸入向量由下面幾個組成:
token嵌入是單詞片段
學(xué)習(xí)分段嵌入來表示每個句子
位置嵌入與其他Transformer架構(gòu)是一樣的
BERT model fine tuning
使用BERT訓(xùn)練好模型以后,我們在下游任務(wù)中使用它的時候荐绝,只需要根據(jù)當(dāng)前的任務(wù)對它進(jìn)行微調(diào)即可一汽。
transformer在圖形和語音方面的應(yīng)用
1.transformer在圖像方面的應(yīng)用
總體結(jié)構(gòu)圖如下:
image transformer layer:
2.transformer在語音方面的應(yīng)用
在語言方面,采用的是Multihead Attention和convolution的組合結(jié)構(gòu)relative attention低滩,對于一段音頻來說可得到下面的表示:
傳統(tǒng)anttention觀察的部分:
relative anttention觀察的部分: