【NLP】预训练时代下的文本生成|模型技巧
今天推薦一篇人大出品的37頁文本生成綜述:
雖然綜述讀起來累些,但多讀綜述有利于知識體系的梳理。而且NLP領域的綜述讀多了會發現,很多優化方法都是想通的,也能提供一些新的思路。
這篇文章從把文本生成的方法分成了三類:輸入編碼、模型設計、優化方法。同時也從數據、模型、優化層面給出了下面我們就順著文章的思路,梳理一下最近幾年文本生成領域的進展。
如何編碼輸入
這部分其實跟NLU任務都是一樣的,想要做好預測,首先要對輸入進行充分理解。本文主要從輸入形態進行了劃分。
非結構化文本
Paragraph-level
Hierarchy-based:先對句子進行編碼,再用一個編碼器進行對句子表示進行聚合
Graph-based:相比于上面的序列化層次編碼,圖學習的方法可以更好地對不相鄰的句子進行聚合
Document-level
同樣使用層次化的方法
抽取關鍵信息:層次化方法自下而上,難免引入噪聲,而更重要的是抓住整個文檔的主題信息,可以用topic model或者設置更高級別的目標去做
提升效率:當文本過長時,可以使用局部注意力、稀疏注意力去提升效率,編碼更長的內容
多語言
Cross-lingual:跨語言的思想是在整個語料上生成subword,并用一套embedding和encoder去編碼多種語言,可以參考XLM
Multi-lingual:多語言的思想是多套embedding共用一個encoder,可以參考mBART、mT5
結構化輸入
結構化輸入在知識圖譜的應用場景下很常見,編碼器主要面臨著三個問題。
預訓練是用非結構化文本,而當前輸入的是結構化文本,如何消除這個Gap?
預處理:把結構化數據拼成序列輸入,比如「胡歌-職業-演員」變成「胡歌的職業是演員」
通過圖學習或其他編碼器,把輸入變成embedding在喂給預訓練模型,比如清華ERNIE
上述方法消除了Gap,但也喪失了結構帶來的重要信息,如何保持這些特征呢?
通過加入新的目標,比如表格化的輸入,讓模型去預測每個數據的字段名,強迫模型編碼進這些信息
直接把結構化信息加到輸入里,比如上面的三元組例子,可以變成「<\S>胡歌</S><\P>職業</P><\O>演員</O>」
利用可以編碼結構信息的encoder,比如圖神經網絡
一些場景下(比如報表生成),如何保持輸出數據與輸入的一致性?
加入額外的訓練目標,去檢測輸入輸出的一致性
使用Copy機制:pointer-generator是比較經典的方法
在輸入側加入更多限制,讓模型學習到這些強pattern
多模態輸入
多模態輸入可玩的就多了,在這方面也有不少的研究,這里的難點主要是通過各種任務,讓文本和多模態輸入對齊。或者在無監督的情況下,讓多模態的表示和文本表示在同一個空間。
如何設計預訓練模型
經典結構
Masked Language Model
MLM模型和生成任務的預訓練目標不一致,所以很少被用在生成任務上,當然也有研究[1]把BERT、RoBERTa、GPT2三個模型混合起來去做生成,用BERT初始化encoder和decoder,效果竟然還不錯。
在MLM任務的啟發下,整個19年里生成模型也曾出不窮,變化不同的結構去做類似MLM的自監督任務。
Causal Language Model
單向語言模型就不用多說了,GPT系列是經典中的經典,當然還有CTRL等條件生成模型也不錯。但由于這類模型本身從左到右的限制,在文本摘要、翻譯這種需要雙向信息的任務上表現欠佳。
Prefix Language Model
這類模型十分優雅,兼具雙向編碼和單向解碼,比如UniLM系列、GLM。不過研究顯示[](https://arxiv.org/abs/1910.10683 “Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer”),比起經典的encoder-decoder結構還是稍稍遜色。
Encoder-Decoder Language Model
這類模型各個都比較能打,比如MASS、ProphNet、BART,不過我用下來還是覺得T5比較強。
結構擴展
生成式預訓練模型的結構基本局限于上述四種,但他們本身還存在一些問題,文中列舉了兩類,跟NLU任務的優化點差不多:
附加Embedding:位置編碼一直都是Transformer的一個小弱項,針對這個問題,T5、UniLMv2都加入了相對位置編碼。另外在詩歌生成任務中,還可以升華成層次位置編碼[2],去指示句子內或者句子間的位置。還可以參考segment編碼,在對話場景去區分不同說話人,或者多語言場景區分不同語言
注意力機制:在encoder-decoder結構中,存在著用來連接它們的cross-attention,這個模塊也能進行優化,可以加入圖神經網絡、門控機制等
如何優化生成模型
Fine-tuning
精調最主要的問題就是監督數據太少了,作者提供了一些通用trick迅速幫忙提升效果,對NLG和NLU都很有用。
Intermediate Fine-tuning:利用一個中間任務,先對預訓練模型進行精調。這個方法又分為兩種,第一種是Domain adaption,先在與目標相同的領域上進行精調,最簡單的就是直接MLM,如果有標注數據更好。但如果任務簡單(比如二分類)就要小心了,別太過擬合,可能會降低表示的質量。第二種是Task adaption,在與目標相同的任務上進行精調,這個方法我一直用,在文本匹配上百發百中
Multi-task Fine-tuning:也是GLUE刷榜的場景技巧,防止過擬合十分有效,任務目標可以和最終的相同也可以不同,也可以當做一個intermediate任務,不過效果不是一直都好,需要耐心調教
Parameter-Efficient Fine-tuning:在當今的大模型時代下,別說預訓練了,可能精調都調不起。尤其是生成任務需要更強的預訓練模型。所以作者就提供了這種優化思路,第一種是在結構里增加一些adapter,比如在Transformer里增加一個FFN,映射到很低的維度再映射回去,精調時只更新adapter的參數。第二種是freeze掉部分子網絡,比如有研究發現cross-attention很重要,那就只更新這部分參數。第三種是蒸餾。
Prompt-tuning
Prompt是今年最熱的NLP方向了,最初是GPT2發起的,在輸入中加入對任務的描述,比如「把下面的句子翻譯成英文:XX」,這樣一個生成模型就可以同時做過個任務。不過最初這種形式很依賴人工設計的prompt,所以之后的研究者也提出了AutoPrompt等自動發現模版的方法。
再演變到后來就是參數化的Continuous Prompt,利用這些模版初始化一些token,然后直接精調這些token的embedding。參數化模版的優點是:
解除了手工自然語言模版的限制
讓模版變得可以調節優化,不受預訓練模型embedding的限制
這類研究可以參考Prompt-tuning、P-tuning等。
Property-Tuning
文本生成由于其任務的天性,使得文本可控變得十分重要。Property-tuning的目的就是限制生成結果的一些性質:
Relevance:一方面可以通過增加其他目標函數去提升相關性,另一方法也可以從訓練入手,比如有的方法會通過TF-IDF選擇mask哪些詞,強迫模型生成更相關的結果
Faithfulness:在文本摘要任務中比較重要,避免生成結果與輸入相差太大,可以加入主題模型等loss進行約束
Order:在翻譯、復述中比較重要,可以設計特殊的任務,讓模型學習如何對齊輸入與輸出
其他挑戰
除了上述的優化方法外,作者還從數據、模型、優化三個層面列出了文本生成的一些其他挑戰,解決方案很多上面都提到了:
評價指標
N-Gram Overlap:BLEU、ROUGE、METEOR、ChrF++
Divesity:Distinct
Semantic Similarity:BERTScore
總結
本文主要分享了預訓練時代下的文本生成方法,當然還有一些方向沒有涉及,比如跟decoder更相關的解碼策略、非自回歸生成等。整體讀下來體系還是挺清晰的,也推薦同學們沒事兒多讀讀綜述,即使是已經熟悉的領域,也還可能有一些模型、方法不太熟悉,知識體系完善后對平時的思路會有很多幫助。
參考資料
[1]
Leveraging Pre-trained Checkpoints for Sequence Generation Tasks: https://aclanthology.org/2020.tacl-1.18.pdf
[2]Rigid Formats Controlled Text Generation: https://aclanthology.org/2020.acl-main.68.pdf
往期精彩回顧適合初學者入門人工智能的路線及資料下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載本站qq群955171419,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【NLP】预训练时代下的文本生成|模型技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xp电脑怎么取消开机密码
- 下一篇: 腾讯视频客户端如何设置快进速度