1. 程式人生 > 實用技巧 >Spring的註解作用總結1

Spring的註解作用總結1

點選左上方藍字關注我們

開放域問答(Open-domain QA)一直是自然語言處理領域的重要研究課題。百度從面向端到端問答的檢索模型出發,提出了RocketQA訓練方法,大幅提升了對偶式檢索模型的效果,為實現端到端問答邁出了重要的一步。RocketQA已逐步應用在百度搜索、廣告等核心業務中,並將在更多場景中發揮作用。

近日,百度提出了面向端到端問答的檢索模型訓練方法RocketQA,該方法針對模型訓練中存在的問題,通過跨批次負取樣(cross-batch negatives)、去噪的強負例取樣(denoised hard negative sampling)與資料增強(data augmentation)等技術,大幅提升了對偶式檢索模型的效果。RocketQA不僅在多個問答相關資料集中取得了SOTA,同時也重新整理了微軟MSMARCO資料集段落排序任務的榜單,超越谷歌、微軟、Facebook、阿里、美團、卡內基梅隆大學、清華大學、滑鐵盧大學等企業和高校位居第一,為實現“端到端問答”邁出了重要的一步。

論文名稱:RocketQA: An Optimized Training Approach to Dense Passage Retrieval for Open-Domain Question Answering

論文地址:

https://arxiv.org/abs/2010.08191

開放域問答系統

開放域問答(Open-domain QA)是自然語言處理領域的重要研究課題。它的任務是,基於使用者用自然語言提出的問題,從海量候選文字中快速、精準地找出答案。開放領域問答在智慧搜尋、智慧助手、智慧客服等多個場景下,都發揮著重要作用。特別是近些年,隨著各種智慧手機、智慧音箱的普及,智慧搜尋快速進化,通過開放域問答系統直接給出唯一的精準答案(如圖 1 所示),可以幫助使用者在這些小屏和無屏裝置上更快速、準確地獲取有用資訊。

圖1:百度搜索的TOP1結果:將問題的答案展現在搜尋結果的首位,提升使用者體驗


傳統的開放域問答主要採用級聯的檢索式問答系統,包含了段落檢索、段落排序、答案定位等多個步驟。隨著近些年預訓練語言模型的發展,研究人員開始探索基於深度語義表示的對偶式檢索模型(dual-encoder),希望其能夠替代傳統的檢索式問答系統中級聯的檢索和排序等模組,與基於機器閱讀理解模型的答案定位一起實現“端到端問答”。


不同於傳統的級聯式問答系統,“端到端問答”摒棄了傳統系統中繁雜的構件,系統複雜性大大降低,並且其中每個模組(段落檢索和答案定位)都是可學習的,這樣的設計能夠讓整個系統實現端到端訓練。這意味著問答系統可以基於使用者實時的反饋實現線上訓練,而不是隻在封閉的資料集上閉門造車。這是智慧問答技術的發展趨勢,可能會引發問答系統的新一代技術變革。

基於此,百度從面向端到端問答的檢索模型出發,針對對偶式檢索模型訓練中存在的問題,提出了RocketQA訓練方法,並基於百度自研的預訓練模型ERNIE進行訓練,大幅提升了對偶式檢索模型的效果,為實現端到端問答邁出了重要的一步。

圖2:基於稠密向量表示的對偶模型

RocketQA:一種對偶式

檢索模型增強訓練方法

不同於傳統的檢索模型使用基於關鍵詞的稀疏表示對問題和候選段落進行建模,基於深度語義表示的對偶式檢索模型(如圖 2 所示)通過兩個對稱的網路分別對問題和候選段落進行編碼並計算語義相似度。這樣能夠利用強大的網路結構進行更深層次的學習,同時基於預訓練語言模型,使語義理解更加豐富。在過去的工作中,對偶模型大多采用批次內負取樣 (in-batch negatives) 的方式進行訓練,將批次內其他問題的正確答案作為當前問題的錯誤答案(負例),從而減少重複計算和提高訓練效率。然而,由於檢索場景不同於常見的分類問題,對偶式檢索模型的訓練仍然存在如下的挑戰:


訓練場景和預測場景中樣本數量存在較大差異

在開放域問答的應用場景中,模型需要從大規模的候選集合中找出問題的答案。但是按照批次內負取樣的方法訓練時,每個問題的候選段落個數與批次大小相同。受到單GPU視訊記憶體大小的限制,訓練過程中見到的候選段落遠小於預測時的候選段落,從而導致模型即使在訓練時表現良好,在實際應用當中卻差強人意。


資料集中存在大量漏標註的正確答案
開放域問答場景下候選段落的數量往往非常大,標註出問題的全部正確答案几乎是不可能的。在MSMARCO資料集中,候選段落的總數為880萬,但每個問題平均只標註了1.1個正確答案。研究人員發現,在使用對偶模型檢索出的首條結果中,70% 的錯誤結果其實是漏標的正確答案。這種情況下,構造訓練資料中的強負例時很容易引入假負例(false negative),給模型訓練帶來負面影響。


相對於開放域全集,人工標註訓練資料的規模小、成本大
儘管目前已有較多大規模的問答資料集,但是相較於開放域的使用者問題來說,仍然是冰山一角。有限的標註資料集無法覆蓋到全面的領域和型別,導致模型泛化性差。想要增大標註資料的規模和質量,需要很高的人工成本。


因此百度提出了一種對偶式檢索模型的增強訓練方法RocketQA,通過跨批次負取樣、去噪的強負例取樣與資料增強三項技術,解決上述挑戰。接下來將對這三個技術進行詳細的介紹。


2.1 跨批次負取樣(cross-batch negatives)


採用傳統的批次內負取樣方法訓練時,每個問題的候選段落個數與批次大小相同。為了進一步增加訓練過程中候選段落的數量,百度提出了跨批次負取樣方法(如圖 3 所示)。該方法能夠在使用多GPU並行訓練時,將其它GPU批次內的全部段落作為當前問題的負樣本。這樣可以直接複用各個GPU上已經計算好的段落表示,不額外增加計算量;同時基於飛槳分散式訓練擴充套件工具包FleetX的all-gather運算元實現,只需要使用很少的通訊量和記憶體開銷,就達到了增加每個問題候選段落的目的。隨著GPU個數的增加,每個問題的候選段落個數線性增加,訓練場景中的任務難度也更加接近真實場景。百度在MSMARCO資料集上進行了實驗,在使用跨批次負取樣後,隨著訓練時候選段落數量增加,模型的效果穩步提升(如圖 4 所示)。

圖3:批次內負取樣(上)和跨批次負取樣(下)的對比

圖4:MSMARCO資料集中,訓練階段候選段落的個數對模型效果的影響

2.2 去噪的強負例取樣(denoised hard negative sampling)


在對偶模型的訓練中,適當增加訓練資料中的強負例的難度,有助於提升模型效果。一般的做法是,從一個排序的候選段落中進行取樣,越靠前的負例對模型來說難度越大。但是由於難以避免的漏標註情況,直接取樣很大概率會引入假負例。為了解決這一問題,百度使用互動模型(cross-encoder)的打分作為監督資訊進行去噪。在選擇強負例時,避開互動模型給出高置信度的樣例。相較於對偶模型,互動模型具有結構上的優勢,能夠編碼更多的互動資訊,從而給出可靠的監督訊號,幫助對偶模型選取更可靠的強負例。如表1的第三行和第四行所示,去噪的強負例取樣可以顯著提升模型效果。


2.3 資料增強(data augmentation)


互動模型可以過濾強負例中的噪聲,也可以用來選取未標註的正確答案。因此,當引入大量無標註的問題時,便可以利用互動模型以極低的成本得到大量弱監督資料,進一步增強對偶模型的能力。在MSMARCO資料集的實驗中,百度引入了Yahoo!Answers和ORCAS資料集中的150萬未標註問題,用互動模型在對偶模型檢索出的候選段落上進行打分,並根據置信度選取正負樣本。如表1第四行和第五行所示,通過這種方式,對偶模型的效果得到進一步提升。

表1:MSMARCO資料集中,去噪的強負例取樣與資料增強策略對模型效果的影響

2.4 訓練流程和實驗結果


上述三項技術是層層遞進的關係,將它們整合成一套完整的訓練方法,類比多級火箭,稱之為RocketQA,其完整實現流程如圖5所示。在實現中,使用了百度研發並開源的大規模英文預訓練模型ERNIE初始化模型引數,然後使用標註資料進行微調。

圖5:RocketQA訓練流程

如表2所示,最終的實驗結果表明,RocketQA在微軟MSMARCO和谷歌Natural Question資料集的效果均大幅超過了已經發表的最好的檢索模型。同時,百度也在答案抽取任務上驗證了RocketQA檢索結果的有效性。如表3所示,在RocketQA做檢索的基礎上,使用訓練好的閱讀理解模型,百度在Natural Questions的答案抽取任務上取得了42.0的EM值,超過了已有的相關工作,而這其中的增益來自檢索效果的提升。

表2:RocketQA在微軟MSMARCO和谷歌Natural Questions資料集上段落檢索的效果

表3:RocketQA在Natural Questions資料集上做閱讀理解任務的效果

RocketQA在MSMARCO

段落排序任務中奪得第一

MSMARCO(Microsoft Machine Reading Comprehension)是微軟提出的大規模閱讀理解資料集,包含約100萬問題、880萬相關段落以及人工標註的問題答案。資料集的問題來自Bing搜尋引擎的日誌, 是真實搜尋場景中使用者提出的問題,段落來自Bing的搜尋結果。基於MSMARCO資料集,微軟舉辦了包括閱讀理解、段落排序在內的多個問答相關任務的評測任務。由於資料集規模大、貼近真實場景,MSMARCO的各項任務已經吸引了包括Google、微軟、Facebook、阿里巴巴等知名企業,以及清華、CMU等國內外著名高校的參與。如圖6所示,百度基於 RocketQA檢索模型的結果進一步訓練了段落重排序模型,在MSMARCO的段落排序(Passage Ranking)任務中排名第一,超越了谷歌、微軟、Facebook、阿里、美團、卡內基梅隆大學、清華大學、滑鐵盧大學等企業和高校。

圖6:微軟MSMARCO Passage Ranking資料集leaderboard截圖

飛槳分散式訓練

加持RocketQA

四、了


飛槳框架通過持續迭代升級,在分散式訓練方面真正做到了從產業實踐中來,回到開源社群和產業實踐中去。在飛槳框架最新版本中,分散式訓練繼承了之前版本高效能、高擴充套件的能力,在易用性方面進行了精心的優化。


paddle.distributed.fleet是飛槳框架2.0新API體系下通用分散式訓練API,千億規模稀疏引數伺服器和大規模GPU多機多卡訓練都可以通過幾行程式碼輕鬆配置完成。DistributedStrategy作為使用者配置並行策略的統一入口,支援大規模非同步訓練、自動混合精度、深度梯度壓縮、重計算、梯度累計、計算運算元自動融合、通訊梯度智慧融合以及自動並行等功能,極大的滿足了研究人員日常訓練的加速需求。飛槳框架的最新版本同時也開放了能夠面向高階程式設計使用者的分散式底層通訊介面paddle.distrbuted,使使用者能夠自主構建諸如自動並行、模型並行等高階並行訓練功能。目前,飛槳大規模分散式訓練已經在百度日常業務中進行過深入錘鍊,並每天都在根據業務的痛點進行改進和優化。


RocketQA的實現完全基於飛槳深度學習框架,特別在研發演算法的過程中飛槳的高效能並行訓練助力了各種想法的快速嘗試。研究人員在使用飛槳官方提供的paddle.distributed.fleet進行訓練的同時,也採用了飛槳分散式訓練擴充套件工具 FleetX。FleetX作為飛槳框架分散式訓練擴充套件工具,提供資料分片併發下載,快速定義模型,快速提交叢集任務等功能,極大的提升了研發人員的使用效率。RocketQA採用paddle.distributed.fleet API提供的經典資料並行訓練方案,並採用自動混合精度、運算元融合進行縱向擴充套件性的提升,同時採用梯度融合,計算與通訊自動併發等策略提升橫向的擴充套件性,從而大幅度提升實驗效率。


為了實現RocketQA的跨批次負取樣,對單卡能夠見到的負樣本規模有較大的需求,研究人員使用了飛槳paddle.distributed提供的底層集合通訊操作all-gather運算元,將資料並行訓練中各塊卡的隱層向量進行彙總,擴大單卡可以見到的負例數量達到GPU卡數倍;為了進一步增加每塊卡可以見到的全域性負例樣本,研究人員還使用了重計算(recompute)策略,該策略以20%左右的計算開銷將整個模型的訓練使用的視訊記憶體佔用從O(N)降低到O(LogN),在該模型中使用Recompute使訓練資料批次大小提升5倍以上,對訓練計算圖的改寫結果如圖7所示。這樣,跨批次負取樣方法與傳統的純資料並行方法相比,實現了負例數量5xGPU卡數的倍數增長,從而加快了收斂速度和收斂效果。

圖7:Multi-Head Self Attention利用重計算後的計算圖

總結


百度提出的RocketQA訓練方法,通過對經典對偶模型進行優化訓練,顯著提升了模型的檢索能力,為實現端到端問答邁出了重要一步。目前,RocketQA已逐步應用在百度搜索、廣告等核心業務中,並將在更多場景中發揮作用。

如在使用過程中有問題,可加入飛槳官方QQ群進行交流:1108045677。

如果您想詳細瞭解更多飛槳的相關內容,請參閱以下文件。

·飛槳開源框架專案地址·

GitHub: https://github.com/PaddlePaddle/Paddle

Gitee: https://gitee.com/paddlepaddle/Paddle

·飛槳官網地址·

https://www.paddlepaddle.org.cn/


掃描二維碼 |關注我們

微訊號 : PaddleOpenSource

END

精彩活動