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

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ù)可以簡單表示為:


\gamma^{task}:根據(jù)任務(wù)衡量ELMO的總體效用;
s^{task}: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)的方法[h_T,maxpool(h),meanpool(h)]

近年預(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_k值d_v弥臼。
輸出公式如下:

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

但是這個公式存在一個缺點(diǎn):
當(dāng)d_k變大時径缅,q^{t}k的方差會增加,SoftMax中的一些值會變大烙肺,SoftMax圖形會變得非常尖銳纳猪,進(jìn)而導(dǎo)致它的梯度變小。
因此這里進(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觀察的部分:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末召夹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恕沫,更是在濱河造成了極大的恐慌监憎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婶溯,死亡現(xiàn)場離奇詭異鲸阔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)迄委,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門褐筛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叙身,你說我怎么就攤上這事渔扎。” “怎么了信轿?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵赞警,是天一觀的道長。 經(jīng)常有香客問我虏两,道長愧旦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任定罢,我火速辦了婚禮笤虫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祖凫。我一直安慰自己琼蚯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布惠况。 她就那樣靜靜地躺著遭庶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稠屠。 梳的紋絲不亂的頭發(fā)上峦睡,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天翎苫,我揣著相機(jī)與錄音,去河邊找鬼榨了。 笑死煎谍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的龙屉。 我是一名探鬼主播呐粘,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼转捕!你這毒婦竟也來了作岖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤五芝,失蹤者是張志新(化名)和其女友劉穎鳍咱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體与柑,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谤辜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了价捧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丑念。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖结蟋,靈堂內(nèi)的尸體忽然破棺而出脯倚,到底是詐尸還是另有隱情,我是刑警寧澤嵌屎,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布推正,位于F島的核電站,受9級特大地震影響宝惰,放射性物質(zhì)發(fā)生泄漏植榕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一尼夺、第九天 我趴在偏房一處隱蔽的房頂上張望尊残。 院中可真熱鬧,春花似錦淤堵、人聲如沸寝衫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慰毅。三九已至,卻和暖如春扎阶,著一層夾襖步出監(jiān)牢的瞬間汹胃,已是汗流浹背婶芭。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留统台,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓啡邑,卻偏偏與公主長得像贱勃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谤逼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容