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

Contextual Word Representations and Pretraining

一、Word Representations

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

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

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

我們訓(xùn)練好的詞向量是不可能涵蓋所有詞的(這里主要有兩個(gè)原因,一是訓(xùn)練語料中本來就不存在這些詞,二是這些詞在訓(xùn)練語料中出現(xiàn)次數(shù)過少),這就會(huì)存在一個(gè)未登錄詞的問題,遇到這個(gè)問題的時(shí)候我們?cè)趺刺幚砟兀?/p>

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

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

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

二、ELMO

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


在一個(gè)NLM中,我們快速地通過LSTM層獲得單詞向量(可能只在語料庫上訓(xùn)練)。這些LSTM層被訓(xùn)練來預(yù)測(cè)下一個(gè)單詞。但是這些語言模型在每個(gè)位置都產(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)記模型中同時(shí)使用單詞嵌入和語言模型嵌入。

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


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

1、通過對(duì)語言模型觀察我們得出:使用有監(jiān)督數(shù)據(jù)集來訓(xùn)練的語言模型效果甚微,使用雙向語言模型僅對(duì)向前有利,網(wǎng)絡(luò)結(jié)構(gòu)越復(fù)雜效果越好。
2、通過對(duì)任務(wù)特定BILSTM觀察可知:僅使用lm嵌入來預(yù)測(cè)并不好,僅在標(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é)果并不像其他幻燈片中描述的簡(jiǎn)單NLM那樣強(qiáng)大,因此最后被舍棄。

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

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

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


ELMO是詞向量或上下文詞向量的突破性算法:它使用長(zhǎng)上下文而非上下文窗口學(xué)習(xí)詞向量(此處,整個(gè)句子可能更長(zhǎng)),使用雙向的深層NLM進(jìn)行訓(xùn)練并使用其所有層進(jìn)行預(yù)測(cè)。

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

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


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

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

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

1、較低層學(xué)習(xí)的是較低級(jí)別的語法等。
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í)分類器時(shí)逐步解凍并且采用STLR策略,分類時(shí)使用串聯(lián)的方法[h_T,maxpool(h),meanpool(h)]

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


四、transformer:

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

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


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

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

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

1、attention:

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

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

但是這個(gè)公式存在一個(gè)缺點(diǎn):
當(dāng)d_k變大時(shí),q^{t}k的方差會(huì)增加,SoftMax中的一些值會(huì)變大,SoftMax圖形會(huì)變得非常尖銳,進(jìn)而導(dǎo)致它的梯度變小。
因此這里進(jìn)行了一個(gè)縮放處理:

示意圖如下:


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處理這段話時(shí),體現(xiàn)的是相對(duì)位置的不同線性變換,其示意圖如下:

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


當(dāng)使用Multi-Attention時(shí),在輸入和輸出上具有不同線性變換的并行行Attention層:


4、transformer block

1.encoder

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


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

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


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


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


2.decoder

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


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


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


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

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

五、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)對(duì)比圖:


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


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

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

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


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


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

BERT model fine tuning
使用BERT訓(xùn)練好模型以后,我們?cè)谙掠稳蝿?wù)中使用它的時(shí)候,只需要根據(jù)當(dāng)前的任務(wù)對(duì)它進(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,對(duì)于一段音頻來說可得到下面的表示:


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


relative anttention觀察的部分:


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

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

  • 本文上兩篇系列 NLP的巨人肩膀(上) NLP的巨人肩膀(中) 4.6 Bidirectional Encoder...
    weizier閱讀 6,838評(píng)論 1 22
  • 本文另兩篇系列 NLP的巨人肩膀(上) NLP的巨人肩膀(下) 3. 梯子的一級(jí)半 除了在word級(jí)別的embed...
    weizier閱讀 6,855評(píng)論 0 18
  • 哦,剛才扯遠(yuǎn)了,是這么回事兒,我下了班心血來潮想去蹦迪,也是新手到了現(xiàn)場(chǎng),我只能在那里站著,看著他們玩的挺歡,...
    南川青緹閱讀 220評(píng)論 0 2
  • 簡(jiǎn)介 《Apache Drill學(xué)習(xí)筆記一:環(huán)境搭建和簡(jiǎn)單試用》提到過Apache Drill是受Google的D...
    陌辭寒閱讀 1,971評(píng)論 0 6
  • 今天是個(gè)特殊的日子 祝天下所有女人節(jié)日快樂 也祝天下所有女人永遠(yuǎn)快樂! 關(guān)于女性,談?wù)勛罱X子里走過的幾件事。 0...
    一粒塵埃__閱讀 1,031評(píng)論 0 5

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