1. 程式人生 > >《Universal Language Model Fine-tuning for Text Classification》翻譯

《Universal Language Model Fine-tuning for Text Classification》翻譯

ULMFiT-用於文字分類的通用語言模型微調

翻譯自《Universal Language Model Fine-tuning for Text Classification》

Jeremy Howard* fast.ai | University of San Francisco | [email protected]

Sebastian Ruder* Insight Centre, NUI Galway |Aylien Ltd., Dublin | [email protected]

摘要

歸納遷移學習對於計算機視覺有很大的影響,但現有的NLP中的方法仍然需要特定任務的修改和從頭開始的訓練。我們提出通用語言模型微調(ULMFiT),一種可以應用NLP中任何任務的遷移學習方法。同時,我們將介紹微調語言模型的關鍵技術。 我們的方法在6個文字分類的任務上顯著優於當前最好模型,並再大多數資料集上減少18-24%的錯誤率。而且,即使只有100個標籤示例,它的表現可以和100倍資料從頭開始訓練的效果相比擬。 我們開放了我們的預訓練模型和程式碼 。

1 簡介

歸納遷移學習對計算機視覺(CV)產生了很大的影響關於。 應用CV模型(包括物件檢測,分類和語義分割)很少從頭開始訓練,而是用已有的模型進行微調,如在ImageNet,MS-COCO等資料集上預訓練的模型。

文字分類是具有現實應用的一個自然語言處理任務類別,如:垃圾郵件,欺詐和機器人檢測等應用程式,應急響應和商業檔案分類,如用於法律發現。

雖然深度學習模型許多NLP任務上達到了最好的效果,但這些模型無一不是從頭開始訓練的,需要大型資料集和漫長的資料收集時間。目前自然語言處理中用到遷移學習的,主要是微調預訓練的詞嵌入,這是一種簡單的遷移技術,它只針對模型的第一層,但在對實際效應有著巨大的影響,並運用於各種最好的模型中。最新的方法將來自其他任務的嵌入與不同層次的輸入相結合,但仍然從頭開始訓練主要任務模型,並將預訓練嵌入視為固定引數,限制了其有用性。

鑑於預訓練的好處,我們應該能比隨機初始化其餘模型引數做得更好。但是,使用微調的遷移學習在NLP領域卻暫時還未獲得成功。 戴和樂 ( 2015年 )首先提出,我們可以微調語言模型(LM),但需要數百萬同領域文字以實現良好的效果,這嚴重限制了它的適用性。

我們表明,有問題的不是LM微調的想法, 而是我們缺乏有效地如何訓練他們的知識,這阻礙了其更廣泛的使用。 LM會過擬合於小型資料集並在微調一個分類器的時候遭受災難性的遺忘。相對於CV而言,NLP模型通常更加淺,因此需要不同的微調方法。

我們提出了一種新方法–通用語言模型微調(ULMFiT),以解決這些問題,並各種NLP任務上實現魯棒的歸納遷移學習,類似於微調ImageNet那樣:相同的3層具有相同的超引數LSTM架構 ,沒有新增除了微調dropout超引數之外的其他東西,並在6個文字分類任務中優於其他工業化的遷移學習方法。在IMDb上,使用100個標註的樣板,ULMFiT可以達到用10倍資料從頭開始訓練的效能,再加上50k未標記的樣例 - 則可以達到100倍以上資料的效果。

**貢獻 **

我們的貢獻如下:1)我們提出通用語言模型微調(ULMFiT),一種可以在任何自然語言處理任務上實現類似CV的轉移學習的方法。 2)我們提出動態微調,傾斜三角學習率,漸進式解凍,等新的技術來保持過往知識和避免微調中的災難性遺忘。 3)我們六個代表性文字分類的達到了最好的效果,並在大多數資料集上減少了18-24%的誤差。 4)我們的方法能夠實現極其樣本有效的遷移學習並進行廣泛的消融分析。 5)我們製作了預訓練模型,我們的程式碼將可以被更廣泛的採用。

2 相關工作

CV中的遷移學習

CV中深度神經網路從第一層到最後一層的特徵被從一般性任務遷移到特殊的任務。 出於這個原因,CV中的大多數工作都集中在轉移模型的第一層.Sharif Razavian et al(2014)使用ImageNet模型的特徵作為簡單分類器的輸入來實現最終結果。 近年來,通過微調預訓練模型的最後一層或幾層,並使剩餘的層凍結的新方法,已經取代了這種方法。

Hypercolumns

在NLP中,最近才有非詞嵌入的遷移學習方法被提出。 流行的做法是預訓練嵌入,通過其他任務獲取額外的上下文資訊。 然後將不同級別的嵌入用作特徵,與單詞嵌入或中間層的輸入連線。 這種方法就是是CV中已知的hypercolumns,並最近在NLP被彼得斯等人分別使用語言建模,釋義,蘊涵和機器翻譯(MT)進行預訓練。但是,彼得斯等人的方法需要設計定製的架構,而我們在一系列任務中使用相同的基本架構展示出了最先進的效能。 同時,在CV中,hypercolumns也幾乎已經完全被端到端的微調所取代。

CV中畫素的超列(hypercolumns)是該畫素上方所有CNN單元的啟用向量。 類似地,NLP中的單詞或句子的超列是在預訓練模型中的不同層處的嵌入的串聯。

多工學習

還有一個相關的方向是多工學習(MTL)。 這是Rei(2017)和Liu(2018)等人採用的方法。 他們將語言建模目標新增到與主任務模型聯合訓練的模型中。 MTL要求每次都從頭開始訓練任務,這使得效率低下並且通常需要仔細權衡任務特定的目標函式。

微調

微調已經被成功的用於相似任務的遷移,例如, 在QA中,對於遠端監督的情緒分析,或在MT領域,但已被證明在不相關的情緒之間效果不好。 Dai和Le(2015)也對語言模型進行了微調,但過度使用了10k標記的示例,需要數百萬個域內文件才能獲得良好的效能。 相比之下,ULMFiT利用通用域預訓練和新穎的微調技術來防止過度擬合,即使只有100個標記示例,也可以在小資料集上實現最先進的結果。

3 通用語言模型微調

我們對NLP最普遍的歸納遷移學習設定感興趣:給定靜態源任務TS和TS ! = TT的任何目標任務TT,我們希望提高TT的效能。語言建模可以被視為理想的源任務和ImageNet for NLP的對應物:它捕獲了與下游任務相關的語言的許多方面,例如長期依賴,層次關係和情緒。與MT和蘊涵等任務相比,它為大多數域和語言提供接近無限數量的資料。此外,預訓練的LM可以很容易地適應目標任務的特性,我們可以顯著提高效能。此外,語言建模已經是MT和對話建模等現有任務的關鍵組成部分。形式上,語言建模引發了一個假設空間H,它應該對許多其他NLP任務有用。

我們提出通用語言模型微調(ULMFiT),它在大型通用域語料庫中預先訓練語言模型(LM),並使用新技術在目標任務上對其進行微調。 該方法在滿足以下實際標準的意義上是通用的:1)它適用於不同文件大小,數量和標籤型別的任務; 2)它使用單一的架構和訓練過程; 3)它不需要自定義特徵工程或預處理; 4)它不需要額外的域內檔案或標籤。

在我們的實驗中,我們使用最先進的語言模型AWD-LSTM(Merity等,2017a),一個常規LSTM(沒有注意,快捷連線或其他複雜的新增),具有各種調諧dropout超引數。 與CV類似,我們預計未來可以通過使用更高效能的語言模型來提高下游效能。

ULMFiT包括以下步驟,我們在圖1中顯示:a)通用域LM預訓練(x3.1); b)目標任務LM微調(x3.2); c)目標任務分類器微調 (X3.3)。 我們將在以下部分討論這些內容。

圖1:ULMFiT由三個階段組成:a)LM在一般領域語料庫上進行訓練,以捕獲不同層次語言的一般特徵。 b)使用判別性微調(‘Discr’)和傾斜三角學習率(STLR)對目標任務資料進行微調,以學習任務特定的功能。 c)使用逐漸解凍,'Discr’和STLR對目標任務進行微調,以保留低階表示並適應高階表示(陰影:解凍階段;黑色:凍結)。

3.1通用域LM預訓練

類似ImageNet的語言語料庫應該很大並且可以捕獲語言的一般屬性。 我們預測了Wikitext-103上的語言模型,該模型包含28,595個預處理的維基百科文章和1.03億個單詞。 預訓練對於具有小資料集的任務最有利,並且即使使用100個標記示例也能夠進行泛化。 我們將更多樣化的預訓練語料庫的探索留給未來的工作,但期望它們會提升效能。 雖然這個階段是最昂貴的,但它只需要執行一次並改善下游模型的效能和收斂性。

3.2目標任務LM微調

無論用於預訓練的通用域資料多麼多樣,目標任務的資料可能來自不同的分佈。 因此,我們微調LM目標任務的資料。 給定一個預訓練的通用域LM,這個階段收斂得更快,因為它只需要適應目標資料的特性,它允許我們訓練一個強大的LM,即使對於小資料集。 我們提出了用於微調LM的判別微調和傾斜三角學習速率,我們在下面介紹。

判別微調
由於不同的層捕獲不同型別的資訊,它們應該在不同程度上進行微調。 為此,我們提出了一種新穎的微調方法,即辨別性的微調。

不是對模型的所有層使用相同的學習速率,而是區分性微調允許我們以不同的學習速率調整每個層。 對於上下文,時間步長t處模型引數θ的常規隨機梯度下降(SGD)更新如下所示:
θ t = θ t 1 η θ J ( θ ) \theta_t = \theta_{t-1} - \eta \cdot \nabla_\theta J(\theta)
其中η是學習率, θ J ( θ ) \nabla_\theta J(\theta) 是關於模型目標函式的梯度。 對於判別性微調,我們將引數θ分成{ θ 1 , . . . , θ L \theta^1,...,\theta^L }其中 θ l \theta^l 包含第l層模型的引數,L是模型的層數。 同樣,我們得到{ η 1 , . . . , η L \eta^1,...,\eta^L }其中 η l \eta^l 是第l層的學習速率。

具有判別性微調的SGD更新如下:
θ t l = θ t 1 l η l θ l J ( θ ) \theta_t^l = \theta_{t-1}^l - \eta^l \cdot \nabla_{\theta^l} J(\theta)
我們憑經驗發現,首先選擇最後一層的學習率 η L η^L ,僅微調最後一層, 然後通過使用 η l 1 = η l / 2.6 \eta^{l-1}=\eta^l / 2.6 作為較低層的學習率,是最有效的。

傾斜的三角學習率

為了使其引數適應任務特定的特徵,我們希望模型在訓練開始時快速收斂到引數空間的合適區域,然後細化其引數。 在整個訓練過程中使用相同的學習率(LR)或退火學習率並不是實現此行為的最佳方法。 相反,我們提出傾斜的三角學習率(STLR),它首先線性地增加學習率,然後根據以下更新時間表線性衰減它,如圖2所示:

c u t = T c u t _ f r a c p = { t / c u t , i f   t < c u t 1 t c u t c u t ( r a t i o 1 ) , o t h e r w i s e η t = η m a x 1 + p ( r a t i o 1 ) r a t i o \begin{aligned} cut &= \lfloor T \cdot cut\_frac \rfloor \\ p &= \begin{cases} t/cut,&if \ t < cut \\ 1 - \frac{t-cut}{cut \cdot (ratio -1)}, &otherwise \end{cases}\\ \eta_t &= \eta_{max} \cdot \frac{1+p \cdot (ratio-1)}{ratio} \end{aligned}

其中T是訓練迭代的次數,cut_frac是我們增加LR的迭代的分數,cut是當我們從增加切換到減少LR時的迭代,p是我們增加或將減少的迭代次數的分數, ration指定最小LR與最大LR ηmax相比小多少,ηt是迭代t時的學習速率。 我們通常使用cut_frac = 0.1,ratio = 32和ηmax= 0:01。

STLR修改了三角學習率(Smith,2017),具有短期增長和長衰減期,這是我們發現良好效能的關鍵。在第5節中,我們將比較積極的餘弦退火,一種最近用於在CV中實現最先進效能的類似計劃

3.3 目標任務分類器微調

最後,為了微調分類器,我們使用兩個額外的線性塊來增強預訓練語言模型。 遵循CV分類器的標準實踐,每個塊使用批量標準化和dropout,中間層的ReLU啟用和softmax啟用,在最後一層輸出目標類的概率分佈。 請注意,這些特定於任務的分類器層中的引數是從頭開始學習的唯一引數。 第一個線性層將合併的最後隱藏層狀態作為輸入。

pooling拼接

文字分類任務中的訊號通常包含在幾個單詞中,這些單詞可能出現在文件中的任何位置。 由於輸入文件可能包含數百個單詞,如果我們只考慮模型的最後隱藏狀態,資訊可能會丟失。 出於這個原因,我們將文件的最後一個步驟hT的隱藏狀態與各時間步長的隱藏狀態的max-pooled和mean-pooled表示拼接,獲得一個gpu視訊記憶體相對合適的文字表示:H ={$ h_1, …, h_T$}:
h c = [ h T , m a x p o o l ( H ) , m e a n p o o l ( H ) ] h_c = [h_T, maxpool(H), meanpool(H)]

微調目標分類器是轉移學習方法中最關鍵的部分。 過於激進的微調將導致災難性的遺忘,消除通過語言建模捕獲的資訊的好處; 過於謹慎的微調會導致收斂緩慢(以及由此導致的過度擬合)。 除了差別性微調和三角學習率之外,我們還建議逐步解凍以微調分類器.

逐漸解凍

我們建議從最後一層開始逐漸解凍模型,而不是一次微調所有層,這會導致災難性的遺忘,因為這包含最少的一般知識:我們首先解凍最後一層, 在一個時期內微調所有未凍結的層。 然後我們解凍下一個較低的凍結層並重復,直到我們微調所有層,直到最後一次迭代收斂。 這類似於’鏈解凍’,不過我們一次向一組’解凍’層新增一層,而不是一次只訓練一層。

區別性微調,傾斜三角學習率和逐漸解凍都是有益的,我們在第5節中表明它們相互補充並使我們的方法能夠在不同的資料集中表現良好。

用於文字分類的BPTT(BPT3C)

通過時間反向傳播(BPTT)訓練語言模型,以實現大輸入序列的梯度傳播。 為了使大型文件的分類器微調可行,我們提出了BPTT for Text Classification(BPT3C):我們將文件劃分為大小為b的固定長度批次。 在每個批次的開頭,模型初始化為前一批次的最終狀態; 我們跟蹤平均值和最大池的隱藏狀態; 梯度反向傳播到批次,其隱藏狀態有助於最終預測。 在實踐中,我們使用可變長度反向傳播序列。

雙向語言模型

與現有工作類似(Peters等,2017,2018),我們不僅限於微調單向語言模型。 對於我們所有的實驗,我們預先訓練前向和後向LM。 我們使用BPT3C獨立微調每個LM的分類器並平均分類器預測。

4 實驗

雖然我們的方法同樣適用於序列標記任務,但由於其重要的真實世界應用,我們專注於此工作中的文字分類任務。

4.1 實驗設定

資料集和任務

我們在六個廣泛研究的資料集上評估我們的方法,這些資料集具有不同數量的文件和不同的文件長度,由最先進的文字分類和轉移學習方法使用(Johnson和Zhang,2017; McCann等,2017) 作為三個常見文字分類任務的例項:情感分析,問題分類和主題分類。 我們顯示錶1中每個資料集和任務的統計資料。

Dataset Type #classes #examples
TREC-6 Question 6 5.5k
IMDb Sentiment 2 25k
Yelp-bi Sentiment 2 560k
Yelp-full Sentiment 5 650k
AG Topic 4 120k
DBpedia Topic 14 560k

文字分類資料集和任務類別數量和資料量

情感分析

對於情緒分析,我們評估我們對二元電影評論IMDb資料集(Maas等,2011)以及Zhang等人(2015)編制的Yelp評論資料集的二元和五類版本的方法。

問題分類

我們使用小型TREC資料集的6類別版本,該資料由開放域的、基於事實的問題按廣泛語言分類標準制作而成。

主題分類

對於主題分類,我們評估了Zhang等人建立的大型AG新聞和DBpedia本體資料集。

預處理

我們使用與早期工作相同的預處理。 此外,為了使語言模型能夠捕獲可能與分類相關的方面,我們為大寫單詞,伸長和重複添加了特殊標記。

超引數

我們感興趣的是一個能夠在各種任務中執行的模型。 為此,如果沒有另外提及,我們在任務中使用相同的一組超引數,我們在IMDb驗證集上進行調整。 我們使用AWD-LSTM語言模型(Merity等,2017a),嵌入大小為400,3層,每層隱藏啟用1150次,BPTT批量大小為70.我們將0.4的dropout應用於最後一層, 0.3應用於RNN層,0.4應用於輸入嵌入層,0.05應用於嵌入層,0.5的權重dropout到RNN的hidden-to-hidden矩陣。 分類器有一個大小為50的隱藏層。我們使用Adam的β1= 0.7而不是預設的β1= 0.9和β2= 0.99。 我們使用批量大小為64,基本學習率為0.004和0.01分別對LM和分類器進行微調,並調整每個任務的驗證集上的epoch數量。 我們使用和(Merity et al., 2017a)相同的做法。

baselines和比較模型

對於每項任務,我們都會與當前的狀態進行比較。 對於IMDb和TREC-6資料集,我們與CoVe(McCann等,2017)進行比較,這是一種先進的NLP轉移學習方法。 對於AG,Yelp和DBpedia資料集,我們與Johnson和Zhang(2017)的最新文字分類方法進行了比較。

4.2 結果

參考文獻

Universal Language Model Fine-tuning for Text Classification