NLP預訓練模型
目錄
- 開題
- 預訓練模型介紹
- 詞向量 word2vec
- 帶上下文語義的詞向量 (ELMo && Bert)
開題
-
ImageNet 預訓練模型在計算機視覺領域成功 (ResNet)
ImageNet是斯坦福教授李飛飛組裡標註的一個很大的資料集,有超過100萬張的圖片,然後他都標標出了各種各樣的類別。並由此衍生了基於此的比賽。ImageNet
- 是一個超過15 million的影象資料集,大約有22,000類。
- 是由李飛飛團隊從2007年開始,耗費大量人力,通過各種方式(網路抓取,人工標註,亞馬遜眾包平臺)收集製作而成,它作為論文在CVPR-2009釋出。當時人們還很懷疑通過更多資料就能改進演算法的看法。
- 深度學習發展起來有幾個關鍵的因素,一個就是龐大的資料(比如說ImageNet),一個是GPU的出現。(還有更優的深度模型,更好的優化演算法,可以說資料和GPU推動了這些的產生,這些產生繼續推動深度學習的發展)。
有一個相關的大賽,是做幾千分類的任務,然後還有基於ImageNet的更加複雜的任務,比如說是物體識別、影象分類之類的,在這個任務上面就誕生了一大批的深度學習的模型,比如說非常有代表性的叫做ResNet.
-
ResNet
ResNet呢是一個超有152層的這樣的一個非常深度的卷積神經網路。ResNet的作者何凱明也因此摘得CVPR2016最佳論文獎。深度殘差網路(Deep residual network, ResNet)的提出是CNN影象史上的一件里程碑事件,可以看下ResNet在ILSVRC和COCO 2015上的戰績:ResNet在ILSVRC和COCO 2015上的戰績
令人驚喜的是,該模型不止於在ImageNet上的優秀表現,人們發現他還可以做其他的Downstream Task,也就是其他的下游任務。其效果可以遷移。
這就是種預訓練模型,它並不僅僅是說應用在它本身訓練的任務上面,它可以作為一個遷移學習的方法遷移到一些別的任務當中去。
-
Collobert et al.,Natural Language Processing(Almost)from Scratch,2011很多人NLP領域的研究者認為這是一篇劃時代的文章。
這是一篇非常重量級的文章,在這個NLP領域有一篇叫做Natural Language Processing(Almost)from Scratch。前幾年的時候有一個採訪,我記得是採訪20位NLP領域裡面的專家,都是一些各個大公司的研究員或者是一些學校的教授,然後他們就有人就採訪他們說問你認為就是當今這10年來或者這幾十年來,最重要的一篇LP的文章是什麼?然後有很多人提了這篇文章,natural language processing from scratch。
這篇文章的厲害之處在於:
- 在11年的時候創新性的用了很多深度學習的方法來解決NLP的問題。-- 這在三年後引起了大量關注。
- 在NLP中引入了詞向量的概念。-- 單詞轉成詞向量,我們後續很多操作都是基於這些詞向量做的一些模型的架構。
總結:在之前的一些imagenet的比賽中,alexNet的文章等用了深度學習取得了冠軍,讓大家認識到深度學習是個非常厲害的東西,後來ResNet有152層神經網路後,人們就更加關注DL,然後這篇文章就把DL引入到了NLP領域。
詞向量
最開始的語言表示
文字的向量表示
word2vec
文字:非結構化資料/不可計算 轉換》 向量:結構化資料/可計算
那word embedding實際上可以做到通過讀海量的文件內容,然後理解單詞的意思。比如 The cat sat on the pat和The dog sat on the pat這兩句話,cat和dog是接近的。
評估方法:單詞相似度,詞向量的幾何規律
word2vec 還發現有趣的單詞類比推理現象,即 V(king) - V(man) + V(woman) ≈ V(queue)
詞向量基本思想是通過訓練將每個詞對映成 K 維實數向量後,可通過詞之間的距離(比如 cosine 相似度、歐氏距離等)來判斷它們之間的語義相似度。
先對詞隨機初始化為N維向量,然後Word2vec通過兩種種訓練模式,使其學習到一些上下文含義。
- 如果是用一個詞語作為輸入,來預測它周圍的上下文,那這個模型叫做『Skip-gram 模型』
- 而如果是拿一個詞語的上下文作為輸入,來預測這個詞語本身,則是 『CBOW 模型』
3.帶上下文語義的詞向量
3.1 ELMO
- 三層雙向LSTM語言模型 Peters et al.,Deep contextualized
word representations
方法
在EMLo中,他們使用的是一個雙向的LSTM語言模型,由一個前向和一個後向語言模型構成,目標函式就是取這兩個方向語言模型的最大似然。
- 詞向量擁有了Context 資訊
在預訓練好這個語言模型之後,ELMo就是根據下面的公式來用作詞表示,其實就是把這個雙向語言模型的每一中間層進行一個求和。最簡單的也可以使用最高層的表示來作為ELMo。
然後在進行有監督的NLP任務時,可以將ELMo直接當做特徵拼接到具體任務模型的詞向量輸入或者是模型的最高層表示上。總結一下,不像傳統的詞向量,每一個詞只對應一個詞向量,ELMo利用預訓練好的雙向語言模型,然後根據具體輸入從該語言模型中可以得到上下文依賴的當前詞表示(對於不同上下文的同一個詞的表示是不一樣的),再當成特徵加入到具體的NLP有監督模型裡。
實驗
這裡我們簡單看一下主要的實驗,具體實驗還需閱讀論文。首先是整個模型效果的實驗。他們在6個NLP任務上進行了實驗,首先根據目前每個任務搭建了不同的模型作為baseline,然後加入ELMo,可以看到加入ELMo後6個任務都有所提升,平均大約能夠提升2個多百分點,並且最後的結果都超過了之前的先進結果(SOTA)。
在下面的分析實驗中,我們可以看到使用所有層的效果要比只使用最後一層作為ELMo的效果要好。在輸入還是輸出上面加EMLo效果好的問題上,並沒有定論,不同的任務可能效果不一樣。
3.2 BERT
《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。這篇論文把預訓練語言表示方法分為了基於特徵的方法(代表ELMo)和基於微調的方法(代表OpenAI GPT)。而目前這兩種方法在預訓練時都是使用單向的語言模型來學習語言表示。
這篇論文中,作者們證明了使用雙向的預訓練效果更好。其實這篇論文方法的整體框架和GPT類似,是進一步的發展。具體的,他們BERT是使用Transformer的編碼器來作為語言模型,在語言模型預訓練的時候,提出了兩個新的目標任務(即遮擋語言模型MLM和預測下一個句子的任務),最後在11個NLP任務上取得了SOTA。
方法
在語言模型上,BERT使用的是Transformer編碼器,並且設計了一個小一點Base結構和一個更大的Large網路結構。
對比一下兩種語言模型結構,BERT使用的是Transformer編碼器,由於self-attention機制,所以模型上下層直接全部互相連線的。而而ELMo使用的是雙向LSTM,雖然是雙向的,但是也只是在兩個單向的LSTM的最高層進行簡單的拼接。所以作者們任務只有BERT是真正在模型所有層中是雙向的。
而在模型的輸入方面,BERT做了更多的細節,如下圖。他們使用了WordPiece embedding作為詞向量,並加入了位置向量和句子切分向量。並在每一個文字輸入前加入了一個CLS向量,後面會有這個向量作為具體的分類向量。
在語言模型預訓練上,他們不在使用標準的從左到右預測下一個詞作為目標任務,而是提出了兩個新的任務。第一個任務他們稱為MLM,即在輸入的詞序列中,隨機的擋上15%的詞,然後任務就是去預測擋上的這些詞,可以看到相比傳統的語言模型預測目標函式,MLM可以從任何方向去預測這些擋上的詞,而不僅僅是單向的。但是這樣做會帶來兩個缺點:1)預訓練用[MASK]提出擋住的詞後,在微調階段是沒有[MASK]這個詞的,所以會出現不匹配;2)預測15%的詞而不是預測整個句子,使得預訓練的收斂更慢。但是對於第二點,作者們覺得雖然是慢了,但是效果提升比較明顯可以彌補。
對於第一點他們採用了下面的技巧來緩解,即不是總是用[MASK]去替換擋住的詞,在10%的時間用一個隨機詞取替換,10%的時間就用這個詞本身。
而對於傳統語言模型,並沒有對句子之間的關係進行考慮。為了讓模型能夠學習到句子之間的關係,作者們提出了第二個目標任務就是預測下一個句子。其實就是一個二元分類問題,50%的時間,輸入一個句子和下一個句子的拼接,分類標籤是正例,而另50%是輸入一個句子和非下一個隨機句子的拼接,標籤為負例。最後整個預訓練的目標函式就是這兩個任務的取和求似然。
在微調階段,不同任務的模型如下圖,只是在輸入層和輸出層有所區別,然後整個模型所有引數進行微調。
實驗
下面我們列出一下不同NLP上BERT的效果。
GLUE結果:
QA結果:
實體識別結果:
可以看到在這些所有NLP任務上,BERT都取得了SOTA,而且相比EMLo和GPT的效果提升還是比較大的。
在預訓練實驗分析上,可以看到本文提出的兩個目標任務的作用還是很有效的,特別是在MLM這個目標任務上。
總結
最後進行簡單的總結,和傳統的詞向量相比,使用語言模型預訓練其實可以看成是一個句子級別的上下文的詞表示,它可以充分利用大規模的單語語料,並且可以對一詞多義進行建模。而且從後面兩篇論文可以看到,通過大規模語料預訓練後,使用統一的模型或者是當成特徵直接加到一些簡單模型上,對各種NLP任務都能取得不錯的效果,說明很大程度上緩解了具體任務對模型結構的依賴。在目前很多評測上也都取得了SOTA。ELMo也提供了官網供大家使用。但是這些方法在空間和時間複雜度上都比較高,特別是BERT,在論文中他們訓練base版本需要在16個TGPU上,large版本需要在64個TPU上訓練4天,對於一般條件,一個GPU訓練的話,得用上1年。還有就是可以看出這些方法裡面都存在很多工程細節,一些細節做得不好的話,效果也會大大折扣。