智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

特邀精選發表於2020-01-07

近日,智言科技AI團隊重新整理CommonsenseQA資料集世界紀錄,位列榜單第一。本文介紹來了該團隊的解決方案。智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

CommonsenseQA 任務排名結果:https://www.tau-nlp.org/csqa-leaderboard

長期以來機器常識或機器對開放世界的理解和推理能力一直被認為是自然語言理解的重要組成部分。而機器推理,其目的是使用已有的知識和推斷技術對未見過的輸入資訊作出判斷。常識問答是機器推理上的一個重要的應用方向。

當前對機器而言,如何基於常識和背景知識進行推理以獲得答案仍舊是一個巨大的挑戰。人們在回答問題時,除了特定的上下文外,還經常利用其豐富的世界知識。最近的研究工作主要集中在回答一些給定相關檔案或上下文的問題,並且只需要很少的一般背景。

為了調查具有先驗知識的問答,Talmor等提出了CommonsenseQA:常識性問答的一個富有挑戰性的新資料集。為了捕捉關聯之外的常識,Talmor等從ConceptNet(Speer等人,2017)中提取了多個目標概念,這些目標概念與單個源概念具有相同的語義關係。要求人群工作者提出多項選擇題,提及源概念,並在每個目標概念之間進行區分。這鼓勵工作人員建立具有複雜語義的問題,這些問題通常需要先驗知識。透過此過程,Talmor等建立了12,247個問題,並透過大量可靠的基準模型演示了任務的難度。最佳基準模型是基於BERT-large(Devlin等人,2018),並獲得56%的準確度,遠低於人類的89%的準確度。

資料與任務

  CommonsenseQA是一個新的多項選擇題回答資料集,需要不同型別的常識知識才能預測正確的答案。它包含12247個問題,其中一個正確答案和四個干擾因素答案。資料集分為兩個主要的訓練/驗證/測試集。

資料下載地址:

https://s3.amazonaws.com/commensenseqa/train_rand_split.jsonl

https://s3.amazonaws.com/commensenseqa/dev_rand_split.jsonl

https://s3.amazonaws.com/commensenseqa/dev_rand_split.jsonl

訓練集:訓練資料是以json格式給出。主要欄位是識別符號(id),答案選項(answerKey),問題或題幹(stem),問題選項(choices)智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

測試集:測試資料也是以json格式給出。主要欄位是識別符號(id)問題或題幹(stem),問題選項(choices)智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

評價指標:給出題乾和多項候選答案,要求預測正確答案的準確率(Accuracy)。

實驗方案

1.Baseline

我們選擇BERT作為baseline。關於模型輸入格式,我們原先採取<cls>Q:question<sep>choice1....<sep>choice5,即問題和對應五個答案拼接的單句模式,實驗效果不是很好,後來換用Multiple-Choice的輸入格式。例如question_tokens = 'Q: ' + question,choice_tokens = 'A: ' + choice,每個選項是都是問題和答案的拼接形式,具體如下圖所示:

智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

圖一:基於BERT的Baseline模型

先利用BERT計算問題與五個候選答案的語義關聯程度,然後再用softmax層歸一化得到各個答案的相應機率。

我們的實驗結果如下所示:

智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

圖二:BERT實驗結果

透過實驗結果我們可以看出相對於隨機結果20%,BERT無疑效果好很多,但是,相對於人類水平88.9%,差距還是非常大的。BERT透過MLM預訓練目標得到上下文相關的雙向特徵表示,但是,一是同時也引入噪聲[MASK],訓練過程大量看到[mask]標記,而在微調階段模型並不會看到[MASK]標記。這就造成了預訓練-精調兩階段之間的差異。後面雖然做了改進,但問題依然存在。二是沒有考慮預測[MASK]之間的相關性,是對語言模型聯合機率的有偏估計。

CommonsenseQA任務的關鍵是讓模型學到更多的先驗知識,這樣在一些給定相關檔案或上下文的問題(只需要很少的背景知識)上,模型獲得的先驗知識越多,給出正確預測答案的機率越大。

其實,預訓練本質上是透過設計好一個網路結構來做語言模型任務,然後把大量甚至是無窮盡的無標註的自然語言文字利用起來,預訓練任務把大量語言學知識抽取出來編碼到網路結構中,當手頭任務帶有標註資訊的資料有限時,這些先驗的語言學特徵當然會對手頭任務有極大的特徵補充作用,因為當資料有限的時候,很多語言學現象是覆蓋不到的,泛化能力就弱,整合儘量通用的語言學知識自然會加強模型的泛化能力。[3]

所以,針對CommonsenseQA任務主要有兩大改進方向,一是採用更強大,引用更多高質量、大規模資料集訓練的預訓練模型--xlnet、roberta、albert等。越強大的預訓練語言模型特徵抽取能力越強,能更好的引入大量無監督資料中包含的語言學知識,其推理能力也就越強大。二是引入外部知識。針對常識問答在問題中只給定很少的背景知識,而預訓練模型本身蘊含的知識不足以讓模型“推理”出正確答案,於是,引入跟答案或者問題關聯的外部知識就成了關鍵。

這可以為預訓練模型提供很好的特徵補充,增強模型的推理能力。

接下來,我們依次介紹xlnet,roberta,albert。

XLNET

XLNet是一種廣義自迴歸語言模型,它很好地結合了自迴歸語言模型和自編碼語言模型的優點,在不引入噪聲的同時又能獲得上下文相關的雙向特徵表示。

XLNET相比BERT,它解決了BERT的兩個缺點:預測目標獨立性假設、預訓練階段和微調階段不一致。另外,xlnet加大增加了預訓練階段使用的資料規模;Bert使用的預訓練資料是BooksCorpus和英文Wiki資料,大小13G。XLNet除了使用這些資料外,另外引入了Giga5,ClueWeb以及Common Crawl資料,並排掉了其中的一些低質量資料,大小分別是16G,19G和78G, 這樣加起來一共126G。可以看出,XLNet在預訓練階段極大擴充了資料規模,並對質量進行了篩選過濾。

我們將xlnet應用於CommonsenseQA任務。模型輸入格式、架構與BERT一致。

實驗結果如下:

智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

圖四:XLNET實驗結果

XLNet-Large 與 BERT-Large 擁有相同的結構引數,模型規模相當。實驗結果比BERTLarge(0.6225)高出約13個百分點。這說明改進後的xlnet預訓練模型能得到更好的上下文相關的雙向特徵表示,使用更大規模的高質量資料能讓模型學到更多的先驗知識,因而擁有更強的推理能力。

RoBERTa

RoBERTa 模型是BERT的改進版(A Robustly Optimized BERT,即強力最佳化的BERT方法)。作者發現BERT訓練並不充分,於是在BERT基礎上主要做了四點最佳化:(1)在更多資料上以更大的批次訓練模型更長的時間;(2)刪除下一句預測目標;(3)使用更長序列訓練;(4)使用動態mask。[4] 在GLUE、SQuAD和RACE取得了SO他的結果。

將RoBERTa應用於CommonsenseQA任務。模型輸入格式、架構與前面一致。實驗結果如下:

智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

圖五:RoBERTa實驗結果

RoBERTaLarge的實驗結果0.7740比XLNet-Large(0.7494)高出約2.5個百分點。在微調實驗中,BERTLarge,RoBERTaLarge, XLNETLarge都採用一樣的網格引數:L = 24,H = 1024,A = 16,引數總量大概3.55億。在訓練資料上,Bert使用的預訓練資料是BooksCorpus和英文Wiki資料(13G)。XLNet使用 BooksCorpus 和英文Wiki資料(13G)、Giga5(16G)、ClueWeb 2012-B(19G) 、Common Crawl(78G)語料庫,一共126G。RoBERTa 採用 160G訓練文字,包括BooksCorpus 和英文Wiki資料(13G)、CC-NEWS(76G)、OPENWEBTEXT(38G)、

STORIES(31G)。然後我們對比下三個實驗的結果:

智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

圖六:BERT、XLNET、RoBERTa實驗對比

再對三個預訓練模型做個總結。XLNet透過引入permutation language modeling,解決了BERT預訓練階段和微調階段差異性,消除了BERT的預測目標獨立性假設,同時資料規模擴充到了126G。RoBERTa在BERT基礎上主要做了四點改進:使用動態mask;移除NSP任務;更大的batch size;更長的輸入序列。同時,它使用了更大規模的資料集(160G)。這或許證明不了這三個模型的內部機制誰更為優秀,但至少證明了一點:引入更大規模,更高質量的資料集能更好的提升模型表現。

畢竟,本質上預訓練是透過設計好一個網路結構來做語言模型任務,然後把大量甚至是無窮盡的無標註的自然語言文字利用起來,預訓練任務把大量語言學知識抽取出來編碼到網路結構中。這樣,引入的資料集規模越大,質量越高,模型學到的先驗的語言學特徵越多,整合更多的通用的語言學知識,模型的泛化能力也就越強。[3]

在CommonsenseQA任務上,目前由於並沒有引入外部資料,並且需要正確預測只需要很少背景知識的問答,所以預訓練模型本身蘊含的知識就成了關鍵。相比之下,RoBERTa引用了最大規模、更高質量的資料集(160G),故而目前效果最好。

ALBERT 

通常而言,在預訓練自然語言表徵時增加模型大小可以提升模型在下游任務中的效能。但在某些情況下,由於 GPU/TPU 記憶體限制、訓練時間延長以及意外的模型退化等原因,進一步增加模型大小的難度也隨之增加。為了解決這些問題,

谷歌提出了ALBERT(A Lite BERT),透過兩種引數精簡技術來降低記憶體消耗,提高BERT的訓練速度。[5]

ALBERT主要有三點改進:

  1. Factorized Embedding Parameterization研究者透過將大的詞彙嵌入矩陣分解為兩個小的矩陣,從而將隱藏層的大小與詞彙嵌入的大小分離開來。這種分隔使得在不顯著增加詞彙表嵌入引數大小的情況下更容易增加隱藏層的大小。
  2. Cross-layer Parameter Sharing。研究者共享了所有層的引數,這一技術可以避免引數量隨著網路深度的增加而增加。
  3. 為了進一步提升 ALBERT 的效能,研究者還引入了一個自監督損失函式,用於句子級別的預測(SOP)。SOP 主要聚焦於句間連貫,用於解決原版 BERT 中下一句預測(NSP)損失低效的問題。

我們將ALBERT應用於CommonsenseQA任務。還是以前的輸入格式和模型架構。

1.拼接ALBERT最後四層輸出

BERT的不同層編碼非常不同的資訊,因此適當的池化策略將根據應用的不同而改變,因為不同的層池化編碼不同的資訊。BERT的作者透過將不同的向量組合作為輸入特徵輸入到一個用於命名實體識別任務的BiLSTM中,並觀察得到的相應的F1分數。如下所示:智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

可以看出,最好的效果是拼接最後四層的隱藏層向量。

ALBERT預設輸出最後一層隱狀態的序列中的CLS (classification token)向量,然後再經過一個線性變換和Tanh啟用函式,最後再輸出。經過我們實驗,取最後四層拼接的方式,模型收斂更快,更穩定,效果最好。

  1. 引入wiki資料

前文我們提到,常識問答旨在回答需要背景知識的問題,而背景知識並未在問題中明確表達。關鍵是讓模型學到更多的先驗知識。所以針對CommonsenseQA任務主要有兩大改進方向,一是採用更強大,引用更多高質量、大規模資料集訓練的預訓練模型--xlnet、roberta、albert等。越強大的預訓練語言模型特徵抽取能力越強,能更好的引入大量無監督資料中包含的語言學知識,其推理能力也就越強大。二是從結構化或非結構化知識庫引入外部知識。

第一個方向我們已經做過實驗。接下來探索第二個方向:引入外部知識。我們從排行榜注意到比較有用的是結構化知識庫(ConceptNet)和Wikipedia純文字資料。考慮到Talmor等製作資料集時用到的就是結構化知識庫(ConceptNet),

並且規定使用ConceptNet的暫時不列入正式排行榜。所以,我們放棄了使用ConceptNet,只使用了Wikipedia純文字資料進行實驗。

使用的 Wikipedia 版本資訊:enwiki-20190101

下載地址為:https://dumps.wikimedia.org/enwiki/latest/

下載後的檔案有70.5G,然後使用ElementTree解析xml檔案,清洗整理為131M的句子,對於每個訓練樣例,我們以"<s> Q:question </s> choice </s>"拼接問題和選項作為檢索查詢,使用bm25演算法對檢索查詢和所有句子之間進行排序,

召回前10個句子返回,每個句子的形式是 "word: definition"。

模型輸入:我們之前的輸入格式是

question_tokens = 'Q: ' + question ,choice_tokens = 'A: ' + choice

引入Wikipedia後的輸入格式:

question_tokens = 'Q: ' + question 

choice_tokens = 'A: '+ choice + Cancat 10 recalled word of definition。

下面是我們總的實驗結果:

智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

圖六:ALBET實驗結果

之前的實驗結果:智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

對比兩表的實驗結果我們可以看出,ALBERT_base(0.4734)相比BERTBase(0.5242),XLNETBa-se(0.6061),RoBERTaBase(0.6577)效果是最差的。這說明,ALBERT_base經過三大改造(嵌入向量引數化的因式分解、跨層引數共享、以SOP替換NSP),雖然引數量大大減小(從108M降至12M),但是模型效能也下降了。即使加大模型規模-ALBERT_xlarge(隱藏層H從768增至2048)的結果(0.6904)也比XLNETLarge(0.7494)、RoBERTaLarge(0.7740)效果更差。直到更進一步加大模型規模,即ALBERT_xxlarge(隱藏層H增至4096),得到結果0.8124,才超過RoBERTaLarge(0.7740)。

ALBERT為什麼能超越BERT、XLNET、Roberta呢?這幾年深度學習圈子裡一直出現了一些“怪象”,就是堆資料,讓模型更復雜,訓練出來的效果更好。但真正的智慧應該是用更簡單的模型,用更少量的資料,得到更好的結果。回顧

我們之前實驗過的模型引入資料規模的大小,BERT(13G)、XLNET(126G)、

RoBERTa(160G),還有引數規模,BERT、RoBERT、XLNET都採用了BERTLarge的網路引數:L=24,H=1024,A=16, 引數總量大約3.55億。這些模型雖然都做了各式各樣的改進,但是,模型複雜度並沒有改變,而且引入的資料規模越來越大,很難不讓人懷疑模型效果全是靠堆資料堆出來的。

在ALBERT的論文中,其實剛開始也試著增大模型規模(BERT-xlarge),但模型效果反而下降,出現某種degradation(退化)。智言科技重新整理常識問答資料集記錄:ALBERT技術解決方案解讀

當前的 SOTA模型常常包含數億甚至數十億引數,擴充套件模型時便很容易受到可用硬體的記憶體的限制,從而出現退化現象。ALBERT透過兩大引數削減技術(嵌入向量引數化的因式分解、跨層引數共享)可以充當某種形式的正則化,使訓練更加穩定,而且有利於泛化。然後為了進一步提升 ALBERT 的效能,研究者還引入了一個自監督損失函式,用於句子級別的預測(SOP)。SOP 主要聚焦於句間連貫,用於解決原版 BERT 中下一句預測(NSP)損失低效的問題。[5]正是由於這些改造技術,能讓ALBERT在很大程度上降低記憶體消耗,從而能夠擴充套件為更大的版本。尤其要注意到ALBERT_xxlarge的隱藏層已經擴充套件到4096規模了(BER-TLarge隱藏層H為1024),這是模型能夠進一步提升的重要原因。同時,由於所有層共享一樣的引數,不斷加深ALBERT的網路結構,無法獲得持續的效能提升,所以ALBERT_xxlarge只有12層(BERTLarge為24層)。

ALBERT透過一系列改造,大大降低了記憶體消耗,從而能夠擴充套件為更大版本-

ALBERT-xxlarge,成功地提升了模型的規模並且減少了引數(規模為BERTLarge的70%)。ALBERT_xxlarge超過RoBERTa也不奇怪了,畢竟,這兩者“規模”不一樣。

另外,我們再來看看引入wiki資料的情況。引入wiki資料結果為0.8157,

相比不引入的結果0.8124,提升了約3個千分點。提升幅度並不是很大。我們之後在驗證集做了實驗,引入wiki資料的和不引入wiki資料的分為兩組,採用圖六ALBERT_xxlarge的引數,分別跑一樣的5個隨機種子,再對比下實驗結果,發現兩者區別不大。考慮到引入wiki資料記憶體消耗太大且推理時間也更長(引入wiki資料句子長度為256,不引入為80),而且提升不明顯,我們後面放棄加入wiki資料。

所以,我們最後採取的方案是隻用ALBERT_xxlarge模型,沿用表六相應的引數,在驗證資料集上,具有單個模型的五個不同種子的準確率分別為80.9%、80.0%、 80.5%、 81.2%、 80.4%。最後進行模型融合,在驗證/測試集的準確率是83.7%/76.5%。具體也可訪問https://github.com/ZhiyunLab/CsQA/blob/master/desc.md

參考文獻:

[1]CommonsenseQA: A Question Answering Challenge Targeting Commonsense Knowledge

  1. Ming Zhou, Nan Duan, Shujie Liu, Heung-Yeung Shum. Progress in Neural NLP: Modeling, Learning and Reasoning. Accepted by Engineering, 2019.
  2. 從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史
  3. RoBERTa: A Robustly Optimized BERT Pretraining Approach
  4. ALBERT: A Lite BERT for Self-supervised Learning of Language Representations

相關文章