【2019斯坦福CS224N筆記】(13)Contextual Word Representations and Pretraining
csdn:https://blog.csdn.net/abcgkj
github:https://github.com/aimi-cn/AILearners
[toc]
詞向量的表示
目前為止,我們已經(jīng)學(xué)過(guò)了one-hot編碼辐益、word2vec站削、glove等詞向量的表示。但是這三個(gè)方法都普遍存在在一些問(wèn)題秉撇,就是無(wú)法解決一詞多義的問(wèn)題市殷。即對(duì)于同一個(gè)詞無(wú)論上下文的單詞是否相同,訓(xùn)練出來(lái)的詞向量都是一樣的篡撵。
當(dāng)我們手中的語(yǔ)料不足時(shí)訓(xùn)練出來(lái)的詞向量效果不會(huì)很理想褐着,這時(shí)我們可以使用他人已經(jīng)訓(xùn)練好的詞向量坷澡,并且以預(yù)訓(xùn)練的詞向量來(lái)作為初始值,在訓(xùn)練過(guò)程中進(jìn)行微調(diào)含蓉。下圖是2011年Collobert, Weston等人使用預(yù)訓(xùn)練的詞向量進(jìn)行NLP任務(wù)的精度和F1值频敛,模型使用了預(yù)訓(xùn)練詞向量之后,得分得到了提升:
但是馅扣,我們訓(xùn)練好的詞向量是不可能涵蓋所有詞的(這里主要有兩個(gè)原因斟赚,一是訓(xùn)練語(yǔ)料中本來(lái)就不存在這些詞,二是這些詞在訓(xùn)練語(yǔ)料中出現(xiàn)次數(shù)過(guò)少)差油,這就會(huì)存在一個(gè)未登錄詞(unknown words)的問(wèn)題汁展,遇到這個(gè)問(wèn)題的時(shí)候我們?cè)趺刺幚砟兀砍R?jiàn)的解決方案是:
- 首先厌殉,最簡(jiǎn)單和最普遍的解決方法就是將所有未登錄的詞映射為,并且為它訓(xùn)練一個(gè)詞向量侈咕。但是這種方法存在缺點(diǎn)公罕,它把這些未登錄詞都視為相同,不能區(qū)分它們的區(qū)別耀销。
- 訓(xùn)練字符級(jí)的詞向量
- 此外楼眷,你可以將其視為新的單詞,并為其分配一個(gè)隨機(jī)向量熊尉,將它們添加到你的詞匯表罐柳。
不過(guò),對(duì)于這樣的解決方案存在著一定的問(wèn)題狰住,即:我們沒(méi)有辦法區(qū)分不同的unknown words张吉。此外,到目前為止催植,對(duì)于每一個(gè)單詞肮蛹,我們都只擁有一個(gè)詞向量,因此很難解決一詞多義的問(wèn)題创南。接下來(lái)伦忠,我們介紹一些經(jīng)典模型。
經(jīng)典模型
1.Peters et al. (2017): TagLM – “Pre-ELMo”
核心思想:通過(guò)上下文中獲取單詞的含義稿辙,但只在task-labeled的任務(wù)(例如昆码,NER)上使用RNN來(lái)進(jìn)行訓(xùn)練。算法的核心步驟如下:
- 在未標(biāo)記的數(shù)據(jù)上預(yù)訓(xùn)練詞向量和語(yǔ)言模型
- 在輸入序列中準(zhǔn)備好單詞嵌入和語(yǔ)言模型嵌入。
- 在序列標(biāo)記模型中同時(shí)使用單詞嵌入和語(yǔ)言模型嵌入赋咽。
模型結(jié)構(gòu)圖如下:
論文得出的結(jié)論如下:
- 通過(guò)對(duì)語(yǔ)言模型觀察我們得出:使用有監(jiān)督數(shù)據(jù)集來(lái)訓(xùn)練的語(yǔ)言模型效果甚微旧噪,使用雙向語(yǔ)言模型僅對(duì)向前有利,網(wǎng)絡(luò)結(jié)構(gòu)越復(fù)雜效果越好冬耿。
- 通過(guò)對(duì)任務(wù)特定BILSTM觀察可知:僅使用lm嵌入來(lái)預(yù)測(cè)并不好
2.Peters et al. (2018): ELMo: Embeddings from Language Models
在下一年舌菜,Peters等人提出的ELMo模型在非常多的NLP task上都提高了state-of-the-art 方法的performance, 被一些人稱為新的word2vec. 這文章同時(shí)被ICLR 2018 和NAACL 2018 接收, 后來(lái)獲得了NAACL best paper award。
ELMO是第一個(gè)使用雙向語(yǔ)言模型來(lái)獲得詞向量的方法亦镶。這里使用長(zhǎng)上下文而不是上下文窗口學(xué)習(xí)單詞標(biāo)記向量日月,使用雙向的深層NLM進(jìn)行訓(xùn)練并使用其所有層進(jìn)行預(yù)測(cè)。
我們來(lái)簡(jiǎn)要介紹下這個(gè)模型:首先缤骨,它訓(xùn)練了一個(gè)雙向的語(yǔ)言模型爱咬,其次,其性能很好并且模型不大:使用2個(gè)bilstm層绊起,使用字符級(jí)的CNN建立初始單詞表示(2048 char n-gram過(guò)濾器和2個(gè)HighWay層精拟,512 dim投影),使用4096 dim hidden/cell lstm狀態(tài)虱歪,512dim投影到下一個(gè)輸入蜂绎,使用殘差網(wǎng)絡(luò)連接token輸入和輸出(SoftMax)的參數(shù),并將這些參數(shù)連接在正向和反向語(yǔ)言模型之間笋鄙。
ELMO用于學(xué)習(xí)特定任務(wù)的雙向語(yǔ)言模型表示的組合师枣,這是首次僅使用LSTM堆棧頂層的模型,ELMO的任務(wù)可以簡(jiǎn)單表示為:
在使用雙向語(yǔ)言模型獲得詞向量后萧落,我們?cè)谙掠稳蝿?wù)中使用詞向量時(shí)践美,凍結(jié)有監(jiān)督模型中的ELMO部分,并且將EMLO的權(quán)重根據(jù)不同的任務(wù)來(lái)連接不同的模型中找岖。模型中的兩個(gè)bilstm nlm層具有不同的用途/含義:較低層學(xué)習(xí)的是較低級(jí)別的語(yǔ)法等,比如詞性標(biāo)注陨倡,句法依賴,NER等任務(wù)许布;高層次學(xué)習(xí)的是語(yǔ)義兴革,可用于情感,語(yǔ)義角色標(biāo)注蜜唾,問(wèn)題回答等任務(wù)帖旨。
3.ULMfit
Howard and Ruder (2018)提出了 Universal Language Model Fine-tuning for Text Classification。ULMfit主要是使用遷移學(xué)習(xí)來(lái)進(jìn)行文本分類灵妨。遷移學(xué)習(xí)示意圖如下:
該模型的核心思想是:
- 在大的通用域語(yǔ)料庫(kù)上訓(xùn)練神經(jīng)語(yǔ)言模型
- 在目標(biāo)任務(wù)數(shù)據(jù)上微調(diào)語(yǔ)言模型
- 采用該模型解阅,將其從語(yǔ)言模型轉(zhuǎn)化
- 為分類器
模型結(jié)構(gòu)圖如下:
該模型在訓(xùn)練時(shí)有一些細(xì)節(jié):
- 每層使用不同的學(xué)習(xí)率,即Slanted triangular learning rate (STLR) schedule泌霍,開(kāi)始學(xué)習(xí)率逐漸增大货抄,后面逐漸變小
- 在學(xué)習(xí)分類器時(shí)逐步解凍并且采用STLR策略
- 分類時(shí)使用下圖拼接的方法:
4.Transformer
transformer的出現(xiàn)主要是為了利用純attention來(lái)解決RNN系列網(wǎng)絡(luò)無(wú)法并行計(jì)算的問(wèn)題述召。模型結(jié)構(gòu)圖如下所示:
我們從圖中可以看到:和大多數(shù)seq2seq模型一樣,transformer的結(jié)構(gòu)也是由encoder和decoder組成蟹地。最初應(yīng)用于使用并行語(yǔ)料庫(kù)進(jìn)行機(jī)器翻譯并預(yù)測(cè)每個(gè)單詞的翻譯积暖。
1.Encoder
Encoder由N=6個(gè)相同的layer組成,layer指的就是上圖左側(cè)的單元怪与,最左邊有個(gè)“Nx”夺刑,這里是x6個(gè)。每個(gè)Layer由兩個(gè)sub-layer組成分别,分別是multi-head self-attention mechanism和fully connected feed-forward network遍愿。其中每個(gè)sub-layer都加了residual connection和normalisation,因此可以將sub-layer的輸出表示為:
首先我們先看一下Multi-head self-attention耘斩。對(duì)于普通的attention機(jī)制沼填,可以用以下形式表示:
multi-head attention則是通過(guò)h個(gè)不同的線性變換對(duì)Q,K括授,V進(jìn)行投影坞笙,最后將不同的attention結(jié)果拼接起來(lái)并通過(guò)線性層傳輸,荚虚,可以用以下公式表達(dá):
與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層,如下圖所示:
其次是Position-wise feed-forward networks简十。這層主要是提供非線性變換檬某。
2.Decoder
Decoder和Encoder的結(jié)構(gòu)差不多,但是多了一個(gè)attention的sub-layer螟蝙,這里先明確一下decoder的輸入輸出和解碼過(guò)程:
- 輸入:encoder的輸出和對(duì)應(yīng)i-1位置decoder的輸出恢恼。所以中間的attention不是self-attention,它的K胰默,V來(lái)自encoder场斑,Q來(lái)自上一位置decoder的輸出
- 輸出:對(duì)應(yīng)i位置的輸出詞的概率分布
- 解碼:這里要特別注意一下,編碼可以并行計(jì)算牵署,一次性全部encoding出來(lái)漏隐,但解碼不是一次把所有序列解出來(lái)的,而是像rnn一樣一個(gè)一個(gè)解出來(lái)的奴迅,因?yàn)橐蒙弦粋€(gè)位置的輸入當(dāng)作attention的query
明確了解碼過(guò)程之后最上面的圖就很好懂了青责,這里主要的不同就是新加的另外要說(shuō)一下新加的attention多加了一個(gè)mask,因?yàn)橛?xùn)練時(shí)的output都是ground truth,這樣可以確保預(yù)測(cè)第i個(gè)位置時(shí)不會(huì)接觸到未來(lái)的信息脖隶。
3.Positional Encoding
截止目前為止扁耐,我們介紹的Transformer模型并沒(méi)有捕捉順序序列的能力,也就是說(shuō)無(wú)論句子的結(jié)構(gòu)怎么打亂产阱,Transformer都會(huì)得到類似的結(jié)果婉称。換句話說(shuō),Transformer只是一個(gè)功能更強(qiáng)大的詞袋模型而已构蹬。
為了解決這個(gè)問(wèn)題王暗,論文中在編碼詞向量時(shí)引入了位置編碼(Position Embedding)的特征。具體地說(shuō)怎燥,位置編碼會(huì)在詞向量中加入了單詞的位置信息瘫筐,這樣Transformer就能區(qū)分不同位置的單詞了。那么怎么編碼這個(gè)位置信息呢铐姚?常見(jiàn)的模式有:a. 根據(jù)數(shù)據(jù)學(xué)習(xí)策肝;b. 自己設(shè)計(jì)編碼規(guī)則。在這里作者采用了第二種方式隐绵。那么這個(gè)位置編碼該是什么樣子呢之众?通常位置編碼是一個(gè)特征向量,這樣便于和詞向量進(jìn)行單位加的操作依许。論文給出的編碼公式如下:
在上式中,pos表示單詞的位置棺禾,i表示單詞的維度。關(guān)于位置編碼的實(shí)現(xiàn)可在Google開(kāi)源的算法中get_timing_signal_1d()函數(shù)找到對(duì)應(yīng)的代碼峭跳。
作者這么設(shè)計(jì)的原因是考慮到在NLP任務(wù)重膘婶,除了單詞的絕對(duì)位置,單詞的相對(duì)位置也非常重要蛀醉。根據(jù)公式sin(α+β)=sinαcosβ+cosαsinβ以及cos(α+β)=cosαcosβ-sinαsinβ悬襟,這表明位置k+p的位置向量可以表示為位置k的特征向量的線性變化,這為模型捕捉單詞之間的相對(duì)位置關(guān)系提供了非常大的便利拯刁。
Transformer是第一個(gè)用純attention搭建的模型脊岳,算法的并行性非常好,并且在翻譯任務(wù)上也獲得了更好的結(jié)果垛玻,因此Transformer也可以用在NLP的其他任務(wù)上割捅。但是,Transformer一味的去除掉了RNN帚桩,因此RNN和Transformer的結(jié)合也許會(huì)更好亿驾。
5.BERT
Bert模型是Google在2018年10月發(fā)布的語(yǔ)言表示模型,Bert在NLP領(lǐng)域橫掃了11項(xiàng)任務(wù)的最優(yōu)結(jié)果账嚎,可以說(shuō)是最近NLP中最重要的突破颊乘。Bert模型的全稱是Bidirectional Encoder Representations from Transformers参淹,BERT模型的目標(biāo)是利用大規(guī)模無(wú)標(biāo)注語(yǔ)料訓(xùn)練、獲得文本的包含豐富語(yǔ)義信息的Representation乏悄,即:文本的語(yǔ)義表示浙值,然后將文本的語(yǔ)義表示在特定NLP任務(wù)中作微調(diào),最終應(yīng)用于該NLP任務(wù)檩小。
BERT模型的主要輸入是文本中各個(gè)字/詞的原始詞向量开呐,該向量既可以隨機(jī)初始化,也可以利用Word2Vector等算法進(jìn)行預(yù)訓(xùn)練以作為初始值规求;輸出是文本中各個(gè)字/詞融合了全文語(yǔ)義信息后的向量表示筐付。
BERT將多個(gè)transformer編碼器堆疊在一起。BERT卓越的性能基于兩點(diǎn)阻肿。首先創(chuàng)新預(yù)訓(xùn)練任務(wù)Masked Language Model (MLM)以及Next Sentence Prediction (NSP). 其次訓(xùn)練BERT使用了大量數(shù)據(jù)和算力瓦戚。
MLM使得BERT能夠從文本中進(jìn)行雙向?qū)W習(xí),也就是說(shuō)這種方式允許模型從單詞的前后單詞中學(xué)習(xí)其上下文關(guān)系丛塌。此前的模型這是做不到的较解。此前最優(yōu)的算法稱為Generative Pre-training (GPT) 該方法采用了從左到右的訓(xùn)練方式,另外ELMo 采用淺雙向?qū)W習(xí)(shallow bidirectionality)赴邻。
而近日印衔,百度提出知識(shí)增強(qiáng)的語(yǔ)義表示模型 ERNIE(Enhanced Representation from kNowledge IntEgration),并發(fā)布了基于 PaddlePaddle 的開(kāi)源代碼與模型姥敛,在語(yǔ)言推斷奸焙、語(yǔ)義相似度、命名實(shí)體識(shí)別彤敛、情感分析与帆、問(wèn)答匹配等自然語(yǔ)言處理(NLP)各類中文任務(wù)上的驗(yàn)證顯示,模型效果全面超越 BERT墨榄。由此可以看出玄糟,預(yù)訓(xùn)練模型已成為近來(lái)NLP領(lǐng)域的潮流。
本文使用 文章同步助手 同步