哈佛、賓大等多所機構研究者聯合綜述:大規模預訓練語言模型進展
本文介紹了一篇基于大規模預訓練語言模型(PLM)來做 NLP 的綜述論文。讀者將從這篇論文中找到適合不同 NLP 任務的方法。
近年來,基于大規模語言模型的方法在很多 NLP 任務上都取得了比傳統方法更好的性能。近日來自 Raytheon BBN、哈佛大學、賓夕法尼亞大學等學校和研究機構的知名 NLP 學者聯合編寫了一篇綜述論文,介紹了基于大規模預訓練語言模型的自然語言處理領域進展。
論文鏈接:https://arxiv.org/abs/2111.01243
這篇論文歸納總結了3類使用大規模預處理模型來做 NLP 的方法:
方法一:對大規模預處理模型進行任務相關的微調(pre-train then fine-tune)。這是目前最常用的一種方法。
方法二:使用 prompt 把 NLP 任務轉換成一個更接近預訓練的任務,以更好地利用大規模預處理模型里的知識做自然語言處理。這是最近日漸流行的一種新方法。
方法三:把 NLP 任務轉換成 text to text 的語言生成任務。這是目前嶄露頭角的一種新方法。
另外,該論文還介紹了利用大規模預訓練模型來生成數據,以更好地訓練和解釋 NLP 模型。
此外,這篇論文還是一篇前瞻性的綜述文章。第 6 章指出了目前利用大規模語言模型來做 NLP 的方法存在的問題,并指出一些未來的方向。
方法一:預訓練語言模型并對每個 NLP 任務進行微調
這是 BERT,ELMo 和 GPT 論文中提出的方法, 也是目前為止最流行的一種方法。這種模式首先會預訓練一個大規模語言模型, 然后對每個任務利用任務相關的標注數據進行模型微調(fine-tuning),從而得到一個任務相關的 PLM 來完成相關任務。
作者首先回顧了預訓練 + 微調這種方法的歷史并解釋了幾種常見的語言模型與預訓練方法, 然后介紹了各種微調預訓練模型的方法。
圖1:三種常見的 Pre-Trained Language model:模型示意圖、訓練目標和示例。
圖1總結了幾種不同的預訓練方法。總的來說, 有三種語言模型:autoregressive language model(例如 GPT),masked language model(例如 BERT), encoder-decoder language model(例如 T5)。
圖2:常見的 pre-train then fine-tune 的策略和模型結構。
圖2總結了對任務進行微調的幾種方法:
1. 使用 PLM 對輸入的句子抽取語境詞嵌入。這種方法只使用 PLM 來抽取特征而并不對 PLM 參數進行微調。這種方法主要適用于以下幾種情況:
任務相關的標注數據很少, 不足以用來微調整個 PLM 的參數。
很復雜的 NLP 任務:例如語義/句法分析。在這種情況下,微調 PLM 帶來的好處很少,所以可能更有效的方法是改進分析(parsing)模型而不是 PLM 本身。
無監督的學習,例如詞義消歧(WSD)/詞義歸納(WSI)。例如利用 BERT 嵌入空間里的最近鄰( nearest neighbor)來進行 WSD 或 WSI。
2. 微調整個 PLM 中的參數, 然后直接利用 PLM 或者簡單的前饋層(feedforward layer)來進行任務相關的預測。這種方式適用于文本分類、自然語言推理等不需要復雜算法的任務。
3. 調整個 PLM 中的參數和任務相關的模型(在 PLM 之上)來完成NLP任務。這種方式適用于分析,共指消解(coreference resolution)等需要在 PLM 之外加一個復雜模型或者算法的任務。
4. 高效的微調方法。因為 PLM 往往有動輒上億的參數需要微調,這無疑有很高的計算復雜度。有幾種方法可以更高效地進行微調:
只微調一個小的,局部的子網絡,例如微調 adapter 模塊而不是整個 PLM,只需要微調 5% 的參數;
只微調一部分參數,例如 BitFit 只微調PLM 中的偏置項(bias term),只需要微調 0.1% 的參數。
方法二:基于 Prompt 的方法
這是最近一年來引起學界廣泛關注的一種新方法。前面提到的預訓練并微調的方法有一個很大的問題:微調的訓練目標(training objective)跟預訓練的訓練目標很不一樣,所以可能并沒有很好地利用預訓練任務(例如掩碼語言建模)學得的知識。基于 prompt 的方法的中心思想是通過設計巧妙的模板或者 prompt,來把 NLP 任務轉換成一個更接近語言模型的預訓練任務,從而更好地利用預訓練學得的知識。圖 3 描述了三種典型的基于 prompt 的方法。
圖3:幾類常見的基于 prompt 的方法。
第一類是最簡單的方式:基于任務指令(instruction)的方法。這種方法最早出現于 GPT-3 和 T5 的論文中。使用這種方法的時候, 一般會使用能進行文本生成的語言模型(例如 GPT-3,T5):輸入會提供任務的描述和一些例子,接著提供一個想要讓 PLM 來處理的輸入文本,讓 GPT-3/T5 來生成答案。這種方法也被稱為語境學習(In-context learning)或 priming。這種方式往往需要一個非常大的,類似于 GPT-3 的模型,才能有不錯的性能。因為 PLM 模型并不一定能理解任務描述或者通過例子來「理解」任務需求, 所以最近一些來自 Google 和 AI2 的工作(詳情參見論文 3.1)利用一些 NLP 任務的任務描述來微調 PLM,這樣 PLM 在看到全新的任務描述時會有更好的效果。
第二類方法的基本想法是通過設計一個模板來把 NLP 任務轉換成一個語言模型的預訓練任務(例如掩碼語言建模,下一個詞預測)。圖 3(中)給出了三個分別針對情感分類、話題分類和文本蘊含任務設計的模板。論文的 3.2 小節介紹了設計模板和自動生成模板的方法、數值的(continuous) 或者自然語言文字的模板、使用多個模板的方法以及如何把語言模型預測的結果轉換成任務相關的標簽等。此外,3.2 小節還給出了針對各種 NLP 任務的應用和例子。
第三類方法的基本想法是通過設計 prompt 把 NLP 任務轉換成一個更接近 PLM 預訓練任務的任務,例如問答(QA)或 文本蘊含(TE)。這種方式有幾個好處:(a)QA 或 TE 是更直接的自然語言理解任務,因此能更好地利用 PLM 中的知識,(b)QA 和 TE 有比其他 NLP 任務更多的訓練數據,所以微調用 QA/TE 模型訓練過的 PLM 可能會有更好的效果,(c)很多 NLP 任務的標注數據可以被轉換成 QA/TE 的格式,這樣可以很容易地針對這些任務進一步微調 PLM。一般這一類方法在需要大量知識的任務(比如 IE)上效果會比前面的方法更好。
方法三:利用文本生成模型來解決 NLP 問題
這是一種嶄露頭角的新方法。前面提到自回歸 PLM 或者編碼器-**** PLM 可以用于生成文本,所以研究人員在嘗試另一種方法:把 NLP 任務都轉換成「text in text out」的文本轉換任務。這種方法使用的模型一般都是編碼器-**** PLM(也有少數使用自回歸 PLM)。如果想使用這種方法來做 NLP 任務,就需要設計好相應的輸入輸出的格式,從而把 NLP 任務轉換成「text in text out」的任務,進而能利用語言生成模型來解決這些 NLP 任務。
圖 4 總結了幾種常見的把 NLP 任務轉換成文本生成任務的方法和它們的應用實例。其中把這些方法按照輸出類型來分類:
產生包含標注的文本
產生詞的位置(索引)
產生答案
按照固定的模板來生成輸出(模板填充)
產生線性化的結構化輸出
對輸入輸出對進行排序
詳情請參考論文第四章。
圖4:常見的把 NLP 任務轉換成文本生成任務的方法。
利用語言模型來生成 NLP 任務相關的數據
PLM 不僅可以用來解決 NLP 問題,還可以用來生成跟任務相關的數據。論文第 5 章主要介紹了以下兩類方法:
利用 PLM 自動生成標注數據。這些數據可以被加到現有的手工標注數據集來增大訓練數據集,從而取得更好的效果。
利用 PLM 來生成輔助數據,這類數據可以被用來解釋機器學習模型的行為,步驟,生成反例,推理規則等。
該論文按照任務來組織并論述這兩類方法(對應于論文中的 5.1 和 5.2)。
目前存在的問題和討論
雖然利用 PLM 來做 NLP 在很多任務上取得了很好的結果,但目前還存在很多有待解決的問題。論文第六章對現有的方法進行了一些討論, 然后提出了一些目前尚未解決的問題和研究方向。主要有以下幾點:
不需要拘泥于一類方法。比如很多基于 prompt 的方法和文本生成的方法也使用了微調,一些基于文本生成的方法也會使用 prompt。同樣,不是所有方法都只能基于一種 PLM。例如 ACE(Wang et al., 2021c)就同時使用了 ELMo、BERT、mBERT、XLM-R 等多個 PLM。
數據量似乎在很大程度上決定了性能:到底需要多大的無標注數據集來訓練 PLM?同樣,需要多大的標注數據集來微調 PLM, 才能在 NLP 任務上有好的結果呢?
有沒有好的方法來減少使用 PLM 的計算量?
PLM 在理解語義方面如何,是否只是記住見過的文本?
是否需要顯式的基于語言學的標注?
基于 prompt 的方法需要有意義的,人可讀的 prompt 嗎?
NLP 領域還需要更多的理論研究。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。