2019年8月12日,MRQA2019閱讀理解國際評測比賽結束。本屆測評中,得益於自研開源深度學習平臺飛槳(PaddlePaddle)的強勢助攻,百度團隊以平均 F1 值 72.55%的成績奪得本次機器閱讀理解測評的冠軍,超過了第二名近兩個百分點,同時,在全部12個測試資料集中的10個排名第一。據悉,參與本次測評的有蘋果公司、艾倫人工智慧研究院(AI2)、哈工大訊飛聯合實驗室、香港科技大學等知名企業和高校研究所。
MRQA是什麼比賽?
MRQA 全稱 Machine Reading for Question Answering,是一個機器問答閱讀理解方面的測評比賽。比賽要求參賽隊伍設計一個統一的模型,閱讀提供的文字內容,然後回答和閱讀內容相關的問題。自去年開始,ACL 以MRQA 為主題設立了相應的workshop,今年則增加了模型測評。
賽題
和其他僅聚焦單個資料集的閱讀理解測評相比,本次測評中參賽隊伍面臨的挑戰更大,主要有以下兩點:
1. 本次測評從多種角度考察模型對自然語言的理解能力。測評中包括了18個閱讀理解資料集,從來源上,包括專業文字,如維基百科、新聞、教科書、生物醫藥資料等,但也有較為口語化和日常化的文字輸入,如電影、搜尋引擎結果、兒童故事和演講的文字。參賽模型需要適應不同場景下語言的變化。
從應用任務來看,測評不僅選擇了面向問答情景設計的資料集,還包含了面向資訊抽取和語義解析等任務設計的資料集,模型需要能夠適應任務場景的變化。此外,模型的推理能力也會受到考驗。本次測評不僅包含了簡單的抽取式問答資料集,模型可以直接從文字中抽取出需要的資訊,但測評也包含了需要模型根據上下文進行推理和計算的資料集。
從賽題的難度來看,這樣的測評會全方面的考驗模型在不同語境、語言形式、任務場景和理解能力方面的表現,幾乎是「十項全能賽」了。
2. 也許主辦方認為以上的要求還不夠苛刻,他們在這樣的基礎上進一步提升了賽題的難度。本次測評時,主辦方要求參賽隊伍只能使用18個資料集中指定的6個資料集進行訓練,而測試則是在剩餘的12個資料集上進行的,其中6個資料集是參賽隊伍從未見過的。這樣需要模型具有很強的泛化能力。
此外,訓練集和測試集有很大的差異。雖然前文提到,本次賽題使用的資料集型別是多種多樣的,但是指定的訓練集卻非常單一——他們基本上都是較為正式的文字,面向的都是問答任務。而在測試階段,參賽隊伍需要將訓練好的模型在其餘12個資料集上進行測試,剩餘的資料集則差異很大,明顯的任務都不同,而且有些資料集是參賽者完全不知道的。這樣的測試極大的考驗著模型的泛化能力,需要模型對未知的資料進行準確地預測。
雖然測評條件如此苛刻,但百度團隊依然取得了最佳的平均成績,並在12個資料集中的10個碾壓了所有對手。這樣的模型是怎樣實現的呢?
百度的技術創新
在比賽中,為了提升模型的泛化能力,使其能夠適應多種語境、多工場景,百度參賽團隊在模型設計上進行了多種創新。
預訓練模型提升泛化能力
從模型架構上來看,百度採用了現在最為流行的「預訓練-微調」方法訓練了參賽的問答模型。目前預訓練-微調方法已經是自然語言處理領域一種被廣泛採用的學習正規化。首先,需要構建一個預訓練語言模型,用於學習自然語言中豐富的表徵資訊。當預訓練語言模型訓練完畢後,即可將模型用於特定的自然語言任務中,並進行模型微調,使其達到最佳效能。
在D-NET中,使用了多個預訓練語言模型提升模型的泛化能力,每個預訓練模型都從不同角度、不同語料中學習到豐富的語言表徵。這樣一來,即使某個預訓練語言模型未能學習到的表徵也可以被其他模型所彌補,因此進一步提升了模型的泛化效能。
多領域的預訓練資料
和以往僅預訓練一次不同,在微調之前,百度團隊引入了更多領域資料,對模型進行了進一步的預訓練。由於不同領域的語言學特徵、詞彙分佈、句法結構等存在很大的差異,在大量通用資料集上預訓練的語言模型不一定在特定語境下表現更好,因此,D-NET中的各個預訓練語言模型還會進一步在特定領域的語料上進行二次預訓練,從而提升模型在不同語境中的泛化能力,這樣也可以彌補賽題中訓練集不足,無法將從訓練集中學習到的表徵泛化到測試集上的問題。
當模型預訓練完成後,就可以輸入比賽提供的訓練集,進行模型的微調了。
多工微調學習
在微調階段,團隊基於飛槳框架讓模型進行了多工學習,從而近一步提升模型學習到的語言表徵能力,達到提升模型泛化能力的目的。
多工學習是指:讓模型同時學習多個任務的資料,最終學習到一個統一的表示,可以在給定的多個任務中都適用。具體的,多工學習首先會訓練一個共享的表示層。當學習到了任務資料的表示後,模型增加私有層,在特定任務上進一步增強模型表現。通過多工學習到的表示層,因為適應到了多種任務,因此其具有更好的泛化能力。
同時,在多工學習的過程中,百度利用了其他非問答類的自然語言處理資料集,包括一些自然語言推斷和段落排序等方面的資料集,用於提升問答效果。最後,在微調過程還引入了防止災難性遺忘的機制。
知識蒸餾形成統一模型
由於D-NET整合了多個預訓練語言模型,且單個模型的引數量已足夠龐大,因此整體模型在推斷過程中無法滿足本次評測對系統速度的要求。為了提升預測速度,團隊採用了知識蒸餾的方法,將所有的預訓練模型融合為一個知識蒸餾模型,從而實現了模型輕量化的目標。
知識蒸餾是一種將知識從「教師」模型遷移到「學生」模型的方法,其執行方式為訓練學生模型模仿教師模型的預測。在D-NET中,團隊將多個預訓練語言模型進行模型整合,從而獲得優於單個模型的預測能力。有趣的是,給定這樣一個強大的演算法整合,往往可以找到一個更簡單的模型(至少不比整合模型更復雜)來仿效此整合並實現接近的效果。
由於之前已有多個預訓練模型進行了大量的一般語料、特定語料和多工學習,每一個模型都具有很好的效能,因此知識蒸餾後的單一模型會學習到所有模型的知識,表現出接近其他多個「教師」模型的效果。
從結果上來說,百度提出的D-NET框架訓練出了高效能、泛化能力強、適應多工、適應多領域語境、輕量化的模型。因此,在MRQA測評中奪得了冠軍。
比賽結果
從測評結果來看,百度的結果是最好的,超越了其他企業和研究機構的模型結果。
奪冠意義
能夠在條件苛刻,高手如林的MRQA2019比賽中奪冠,足以說明百度在這一領域的技術積累。機器閱讀理解是構建文件和對話系統的關鍵技術之一,在語音助手、智慧客服、搜尋問答等領域均有廣泛應用。目前,百度的機器閱讀理解技術已經廣泛應用於各類產品和應用中,包括搜尋業務、小度音響等。
從技術角度而言,百度提出的D-NET框架融合了目前綜合效能最好的多種預訓練語言模型,提出了在多個任務上對預訓練語言模型進行訓練,使其適應了多個任務場景。最後,使用知識蒸餾的方式,不僅獲得了多個預訓練語言模型最強大的效能優勢,還減少了模型的引數量,因此從研究上可以啟發很多關於多工預訓練模型學習相關的研究。
飛槳在大賽中的作用
據百度方面提供的資料,D-NET模型是完全基於飛槳深度學習框架搭建、訓練、微調的。能夠實現這樣的結果,離不開百度自研深度學習框架飛槳的支援。飛槳在比賽中起到了以下作用:
豐富的預訓練語言模型庫和多工學習庫
D-NET是建立在多個預訓練語言模型的基礎上的,因此需要大量的預訓練語言模型庫作為模型支撐。飛槳本身自帶豐富且效能優秀的預訓練模型庫,方便開發者僅使用幾行程式碼,即可呼叫各種預訓練模型。正是得益於飛槳中的多種預訓練模型庫,D-NET融合了各種預訓練模型的優勢,獲得了更好的效果。
專案地址:https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleNLP
此外,飛槳還提供了靈活高效的多工學習演算法庫PALM(PAddLe Multi-task,預計在Paddle Fluid 1.6版本中開源),這一多工學習庫可以讓使用者只使用少量的程式碼,讓模型同時學習多種自然語言處理任務,使得模型從不同型別任務中學習到的知識相互融合,提升模型在多種任務上的泛化能力。
大規模分散式訓練框架
由於MRQA 2019閱讀理解比賽需要處理18個資料集,其所需的資料規模較大。而飛槳提供了高效能分散式訓練框架,可以讓開發者簡單快速地將模型在數百節點上進行分散式學習。
為了克服多節點通訊的效能瓶頸,飛槳在梯度壓縮、動態混合精度訓練、梯度同步演算法等方面進行了優化,使得訓練大規模複雜模型的多機加速比提高至77%,極大地縮短了MRQA2019評測策略調研的週期,提高了實驗的效率。
專案地址:https://github.com/PaddlePaddle/Fleet
高效能預測引擎和模型壓縮庫
為了提升模型在推斷方面的效能和執行速度,飛槳提供了PaddleSlim,實現了目前主流的網路量化、剪枝、蒸餾三種壓縮策略,並可快速配置多種壓縮策略組合使用。在保持已有精度的前提下將網路壓縮到非常簡單的結構中,從而提升了預測速度並減少了資源消耗。
專案地址:https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleSlim
機器閱讀理解任務,是衡量機器理解人類語言綜合水平的重要方式。MRQA閱讀量理解評測取得的進展,將有力推動機器閱讀理解技術的發展。同時在產業中,機器閱讀理解是構建問答和對話系統的關鍵技術之一。百度機器閱讀理解技術已廣泛應用於百度內外,包括搜尋、小度音響等一系列產品中,為數億使用者提供精準問答。
參考連結
官網地址:https://www.paddlepaddle.org.cn
更多示例與Benchmark請參考專案地址:
https://github.com/PaddlePaddle/Paddle