科技

【如何評價在20個任務上超越BERT的XLNet?】

謝 @henryWang 邀。(不知道為啥我又 at 不上人。被知乎針對了?)

剛看完文章。效果就不比了,屠榜了沒什麼好說的。

BERT 有兩個目標,Masked Language Model 和 Next Sentence Prediction,前者用於提取單詞之間的關係,後者用來提取句子之間的關係。前者帶來的問題在於, 訓練時引入 [MASK] token 使得 train/test 不一致,於是又用了很多亂七八糟的方法來補救(以一定概率保留原詞,一定概率換成別的單詞等等)。

新的目標 Permutation Language Model 就沒這個問題。PLM 的大意是把輸入的句子鏈式分解一下,然後用最大似然來訓練。只不過這裡的分解不是通常語言模型的 left-to-right factorization,而是以任意順序排列進行 factorization,最後求期望。當然,具體實現的時候只是取樣一個排列進行計算,不會求全部排列的期望。PLM 通過對原序列隨機 shuffle 來實現雙向的資訊提取(理論上需要 shuffle,實踐中調整 attention mask 即可),例如將 1 -> 2 -> 3 -> 4 調整為 2 -> 4 -> 3 -> 1,然後進行鏈式分解,預測單詞 3 時可以觀測到單詞 2 和 4 的資訊。另外,PLM 和 Grover 訓練時 shuffle metadata 的做法不謀而合,可能是大勢所趨吧。

XLNet 上只有 PLM 這一個訓練目標,實驗部分提到 NSP 對於大多數任務都是有害的。而 BERT 的文獻雖然沒有做 NSP 的 ablation study,但有些研究發現 BERT 更適合做句子間關係的判斷,即便是單句的任務也可以構建出一個輔助句然後用 BERT 進行分類(如 "BERT for Aspect-Based Sentiment Analysis via Constructing Auxiliary Sentence"),這可能是 NSP 帶來的好處。另外關於 BERT 的使用場景可以參考Bert時代的創新:Bert在NLP各領域的應用進展,文末有總結。

普通語言模型的訓練目標(例如 GPT)是 Causal Language Model,BERT 的訓練目標是 MLM,在此基礎上通過改進 mask 又有了 Whole Word Masking/N-gram Masking/ERNIE 等。把 Transformer 的 encoder 和 decoder 都用上又有了 MASS。現如今,又多了一個 PLM 的目標,很高興看到這樣的進步(雖然 PLM 和 NSP 兩個目標一起用似乎有一些矛盾),期待能看到更多的訓練目標,能夠從語料裡無監督地提取到更多的知識。但不管怎麼說,這都是土豪的遊戲了,一般人玩不起。

XLNet 在 GLUE benchmark 的幾乎所有任務上都比先前最優水平得到了提升,但是 CoLA 這一項的表現似乎不盡如人意。CoLA 是判斷一個句子是否在語法上合理的,是不是說明這個任務較為依賴單詞順序?

文章中還說,XLNet-Large 依然是欠擬合訓練資料的,但是再訓練對於 downstream task 已經沒有用了。這一點有些奇怪,可以進一步探究的是,存在於這些資料中、但是對下游任務沒有幫助的到底是什麼資訊?也許是跟語言生成(而非判別)有關的?也許我們應該尋找新的、能夠從這些資訊中獲益的下游任務——可能是介於 GLUE benchmark 和文字生成之間的任務。今天 GLUE 已經接近解決,這些任務也許可以作為更好的 NLP 領域風向標。

XLNet-Base 和 Bert-Base 資料集是一樣的,效果也有比較明顯的提高,說明 XLNet-Base 確實更好。其提升可能有兩部分,一是來源於 Transformer-XL 對更長的上文資訊的提取,二是來源於 PLM 訓練目標與下游任務的一致性(沒有 train-test skewness)。可惜關於這點沒有 ablation study,不知道到底哪個更重要。

但是 XLNet-Large 除了放大模型之外還用了更多的資料,在 BERT 所用的 BooksCorpus & English Wikipedia 的基礎上還增加了 Giga5, ClueWeb 2012-B, and Common Crawl,擴大到了原先的 10 倍。不知道 BERT-Large 在這樣的資料上表現如何?預期應該會變好(@霍華德 在這個回答裡也說了騰訊 AI Lab 用 200G 語料訓出的 BERT-Large 又變強了一大截),不過應該不會超過 XLNet。

XLNet-Large 用 512 TPU v3 chips 訓了 2.5 天,而 BERT-Large 用 64 TPU chips 訓了 4 天。也就是說,XLNet 訓練時總的計算量是 Bert 5 倍。再考慮到 XLNet 計算量和啟用值大約是 BERT 的 2 倍(因為要給每個位置維護兩套隱狀態,一套是包含當前 token 資訊的 content stream h,另一套是不包含當前 token 資訊的 query stream g,詳見論文 2.3 節 Two-Stream Self-Attention 的相關描述,大意如下圖),語料規模是 BERT-Large 的 10 倍,總的來說可以近似認為訓練效率是 BERT 的 4 倍。

這一訓練效率的提高源自於 XLNet 理論上可以訓練輸入序列所有的 token,而 BERT 的 MLM 使得每個序列只能訓練 15% 的 token。雖然實際操作中只訓練了 permutation 最後 1/K(K=6 或 7)的 token,因為這些 token 的上下文最長,更有利於模型提取上下文資訊(不過我覺得所有 token 全部訓練應該效率更高,僅當訓練接近結束時切換成只訓練上下文最長的 1/K token 即可)。這種設定讓人想起來 MASS,也花式減少了冗餘計算,提升訓練效率。

Reference:科技日報

看更多!請加入我們的粉絲團

轉載請附文章網址

不可錯過的話題