Categories
程式開發

谷歌借助ELECTRA實現更高效的NLP模型預訓練


最近,在語言預訓練方面的進展使自然語言處理領域取得了巨大進展,這得益於BERT、RoBERTa、XLNet、ALBERT和T5等最先進的模型。儘管這些方法在設計上有所不同,但它們都有一個共同的理念,即在對特定的NLP任務(如情感分析和問答系統)進行調優之前,利用大量未標記的文本來構建語言理解的通用模型。

本文最初發佈於谷歌AI博客,經原作者授權由InfoQ中文站翻譯並分享。

最近,在語言預訓練方面的進展使自然語言處理領域取得了巨大進展,這得益於BERTRoBERTaXLNetALBERTT5等最先進的模型。儘管這些方法在設計上有所不同,但它們都有一個共同的理念,即在對特定的NLP任務(如情感分析問答系統)進行調優之前,利用大量未標記的文本來構建語言理解的通用模型。

現有的預訓練方法通常歸為兩類:語言​​模型(LM),如GPT(從左到右處理輸入文本,根據前面的上下文預測下一個單詞)和遮蔽語言模型(MLM),如BERT、RoBERTa、ALBERT(它可以預測輸入中被遮蔽的一小部分單詞的特徵。)。 MLM具有雙向的優點,它不是單向的,因為它們可以“看到”被預測Token左右兩側的文本,而不是只看到一側的文本。然而,MLM方法(和相關方法,如XLNet)也有一個缺點。與預測每個輸入Token不同,這些模型只預測了一個很小的子集,被遮蔽的那15%,減少了從每個句子中獲得的信息量。

谷歌借助ELECTRA實現更高效的NLP模型預訓練 1

現有的預訓練方法及其不足。箭頭表示使用哪些Token來生成給定的輸出表示(矩形)。左:傳統的語言模型(如GPT)只使用當前單詞左邊的上下文。右:遮蔽語言模型(例如BERT)使用來自左右兩邊的上下文,但是只預測每個輸入的一小部分單詞

在“ELECTRA:將預訓練文本編碼器作為鑑別器而不是生成器”一文中,我們採用了一種不同的方法來進行語言預訓練,它提供了BERT的好處,但學習效率要高得多。ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately )是一種新的預訓練方法,在計算預算相同的情況下,它的性能要優於現有的技術。例如,在GLUE自然語言理解基準下,僅使用不到¼的算力,ELECTRA的性能就堪比RoBERTa和XLNet,並且在SQuAD問答基准上成果領先。 ELECTRA出色的效率意味著它即使在小規模下也能工作得很好——它在一個GPU上進行幾天的訓練,就可以獲得比GPT更高的精度,而GPT使用的算力是前者的30倍。 ELECTRA是TensorFlow上的一個開源模型,包含了一些現成的預先訓練好的語言表示模型。

加速預訓練

ELECTRA使用一種新的預訓練任務,稱為替換Token檢測(RTD),它訓練一個雙向模型(類似MLM),同時學習所有輸入位置(類似LM)。受生成對抗網絡(GANs)的啟發,ELECTRA訓練模型來區分“真實”和“虛假”輸入數據。與在BERT中使用“[MASK]”替換Token來變換(corrupt)輸入不同,我們的方法通過使用不准確(但有些可信的)的偽Token替換一些輸入Token來變換輸入。

例如,在下圖中,單詞“cooked”可以替換為“ate”。雖然這有一定的道理,但它並不能很好地契合整個上下文。預訓練任務需要模型(即鑑別器)判斷原始輸入中的哪些Token已被替換或保持不變。至關重要的是,這個二元分類任務應用於每個輸入Token,而不是只有少數被遮蔽的Token(在BERT類模型中是15%),這使得RTD比MLM更高效——ELECTRA只需要更少的樣本就可以達到同樣的性能,因為它可以從單個樣本中獲取更多的訓練信號。同時,RTD也帶來了強大的表示學習,因為模型必須準確地學習數據分佈的表示才能解決問題。

谷歌借助ELECTRA實現更高效的NLP模型預訓練 2

替換Token檢測訓練了一個雙向模型,同時從所有的輸入位置學習

替換Token來自另一個稱為生成器的神經網絡。雖然生成器可以是任何生成Token輸出分佈的模型,但是我們使用的是一個小型的遮蔽語言模型(即與鑑別器聯合訓練的BERT模型,其hidden size較小)。儘管輸入鑑別器的生成器的結構類似於GAN,但由於將GAN應用於文本比較困難,我們盡最大可能地訓練生成器來預測遮蔽詞,而不是相反。生成器和鑑別器共享相同的輸入詞嵌入。在預訓練之後,生成器被丟棄,鑑別器(ELECTRA模型)會針對下游任務微調。我們的模型都是用的transformer神經結構。

谷歌借助ELECTRA實現更高效的NLP模型預訓練 3

關於替換Token檢測(RTD)任務的詳細信息。偽Token是從與ELECTRA聯合訓練的小型遮蔽語言模型中抽取的

ELECTRA試驗結果

我們將ELECTRA與其他最先進的NLP模型進行了比較,發現在相同的計算預算下,它比以前的方法有了很大的改進,在使用的計算量不到25%的情況下,其性能就與RoBERTa和XLNet相當。

谷歌借助ELECTRA實現更高效的NLP模型預訓練 4

X軸表示用於訓練模型的計算量(以FLOPs為單位),y軸表示dev GLUE得分。 ELECTRA比現有的預訓練NLP模型學習效率更高。請注意,GLUE上當前最好的模型如T5(11B)並不適合放到這副圖上,因為它們比其他模型使用了更多的計算(大約是RoBERTa的10倍)。

為了進一步提高效率,我們試驗了一個小型的ELECTRA模型,它可以在4天內在單GPU上訓練得到良好的精度。雖然沒有達到需要許多TPU來訓練的大型模型的精度,但ELECTRA-Small仍然表現得很好,甚至超過了GPT,而只需要1/30的計算。最後,為了看下這令人鼓舞的結果在大規模時是否能夠保持,我們使用更多的計算來訓練一個大型的ELECTRA模型(與RoBERTa的計算量大致相同,約為T5的10%)。該模型在SQuAD 2.0問答數據集(見下表)上達到了一個新的高度,並且在GLUE排行榜上超過了RoBERTa、XLNet和ALBERT。大型的T5-11b模型在GLUE上的得分更高,但ELECTRA的大小只有T5-11b的1/30,並且只使用10%的算力來訓練。

谷歌借助ELECTRA實現更高效的NLP模型預訓練 5

ELECTRA-Large和其他先進模型的SQuAD 2.0分值(僅顯示非集成模型)

ELECTRA發布

我們發布了對ELECTRA進行預訓練和對下游任務進行調優的代碼,目前支持的任務包括文本分類、問答系統和序列標記。該代碼支持在一個GPU上快速訓練一個小型的ELECTRA模型。我們還發布了ELECTRA-Large、ELECTRA-Base和ELECTRA-Small的預訓練權重。 ELECTRA模型目前只適用於英語,但我們希望將來能發布許多其他語言的預訓練模型。

英文原文:More Efficient NLP Model Pre-training with ELECTRA