走進機器閱讀理解的世界,飛槳開源升級版 BiDAF模型解讀

2020-12-22 飛槳深度學習學院

導讀:飛槳(PaddlePaddle)致力於讓深度學習技術的創新與應用更簡單。在重要的機器閱讀領域,基於DuReader數據集,飛槳升級並開源了一個經典的閱讀理解模型 —— BiDAF,相較於DuReader原始論文中的基線,在效果上有了大幅提升,驗證集上的ROUGE-L指標由原來的39.29提升至47.68,測試集上的ROUGE-L指標由原來的45.90提升至54.66。

1. 機器閱讀理解概述

閱讀理解,相信中國學生都不陌生,不管是語文考試還是英語考試,閱讀理解都是非常常規的考試內容。一般形式就是給出一篇文章,然後針對這些文章提出一些問題,問題的類型包括選擇題、填空題或者分析題,學生通過回答這些問題來證明自己理解了文章所要傳達的主旨內容。

而機器閱讀理解,就是指機器自主來完成以上過程。教會機器學會閱讀理解是自然語言處理(NLP)中的核心任務之一,也是機器真正智能化的體現。

在機器閱讀理解任務中,我們會給定一個問題(Q)以及一個或多個段落(P)/文檔(D),然後利用機器在給定的段落中尋找正確答案(A),即Q + P or D => A。

下圖是機器閱讀理解的一個示例:

作為自然語言處理領域的前沿課題,機器閱讀理解近年來一直受到學術界和工業界的廣泛關注。

從學術角度看,機器閱讀理解任務可以用來衡量機器理解人類語言的綜合水平。NLP的很多傳統任務,例如詞性標註、命名實體識別、句法分析、語義角色標註、指代消解等都試圖讓機器從詞法、語義等角度理解人類語言。機器在某一個任務上的效果,僅在一定程度上反應了機器在該方面對語言的理解水平。而在閱讀理解任務中,機器需要在詞法、語義等多方面有較高的理解水平,才能夠正確回答相關問題。因此可以通過讓機器閱讀文本回答相關問題,來評價機器理解人類語言的綜合水平。這與人類參加的語言考試中用閱讀理解題目考察答題者對語言和內容的理解水平是類似的。

從應用角度看,機器閱讀理解也是構建問答系統和對話系統的關鍵技術之一。近些年來,各種智能設備,如智慧型手機、智能音響等迅速普及。這些設備具有小屏化或無屏化的特點,因此用戶亟需能夠精準滿足其信息需求的問答技術。傳統的檢索式問答技術,主要關注段落排序,仍難以完成精準問答的「最後一公裡」,即段落中的精準答案定位。而近兩年機器閱讀理解技術所取得的進展,為精準答案定位提供了有力的技術支持。在百度的搜索問答和小度音箱中,都使用到了機器閱讀理解技術,為數億用戶提供了精準問答。

2. BiDAF模型原理介紹

BiDAF是一個經典的機器閱讀理解模型,包含多階段的層次化過程,通過使用雙向注意流機制,在不進行早期總結的情況下,仍可以在不同的粒度級別上,獲得一個查詢感知的上下文表示。

原始論文名稱:Bidirectional AttentionFlow for Machine Comprehension

BiDAF模型的結構圖如下:

BiDAF模型是一個分階段的多層過程,主要由6層網絡組成。

(1)字符嵌入層:

用字符級CNNs將每個字映射到向量空間。

(2)字嵌入層:

利用預訓練的詞嵌入模型,將每個字映射到向量空間。

(3)上下文嵌入層:

利用周圍單詞的上下文線索來細化單詞的嵌入。這前三層同時應用於問句和原文。

(4)注意力流層:

將問句向量和原文向量進行耦合,並為原文中每個詞生成一個問句相關的特徵向量集合。

(5)建模層:

使用RNN以掃描整個原文。

(6)輸出層:

輸出問句對應的回答。

飛槳此次開源的BiDAF模型,是基於DuReader閱讀理解數據集來訓練的。

數據集地址:

https://ai.baidu.com/broad/subordinate?dataset=dureader

DuReader是一個大規模、面向真實應用、由人類生成的中文閱讀理解數據集。DuReader聚焦於真實世界中的不限定領域的問答任務。相較於其他閱讀理解數據集,DuReader的優勢包括:

問題來自於真實的搜索日誌文章內容來自於真實網頁答案由人類生成面向真實應用場景標註更加豐富細緻更多關於DuReader數據集的詳細信息可在DuReader官網找到。

飛槳團隊在實現並升級BiDAF的過程中,去掉了char級別的embedding,在預測層中使用了pointer network,並且參考了R-NET中的一些網絡結構,從而達到了比原始論文中更好的模型效果。

在DuReader2.0驗證集、測試集的表現如下:

3. 飛槳BiDAF快速上手

3.1.基礎環境

(1)安裝飛槳

關於飛槳框架的安裝教程,可以參考飛槳官方網站。

官網地址:https://www.paddlepaddle.org.cn

(2)安裝代碼

克隆工具集代碼庫到本地

git clone https://github.com/PaddlePaddle/models.gitcd models/PaddleNLP/reading_comprehension/

cd models/PaddleNLP/reading_comprehension/

(3)下載第三方依賴

在本基線系統中,我們採用了Bleu以及Rouge-L指標作為模型的評估標準。這些指標的計算腳本可以通過運行以下命令進行下載

cd utils && bash download_thirdparty.sh

3.2.數據準備

為了方便開發者進行測試,我們提供了預處理(分詞、計算answer span等)過後的DuReader 2.0數據集、訓練好的模型參數以及詞表。通過運行以下命令即可下載:

cd data && bash download.sh

此外,用戶還可以利用paddlehub的方式下載模型參數,例如:

hub download dureader_machine_reading-bidaf

3.3.段落抽取

我們採用了一種新的段落抽取策略以提升模型在DuReader2.0數據集上的表現(策略內容詳見src/UPDATES.md)。該段落抽取策略可通過運行以下命令執行:

sh run.sh --para_extraction

請注意,在運行上面命令之前,需要先下載預處理之後的DuReader 2.0數據 (見」下載數據集以及模型「章節)。段落抽取得到的結果會存放在 data/extracted/文件夾中。

3.4.模型評估

通過運行以下命令,開發者可以利用上面提供的模型在DuReader 2.0驗證集進行評估:

sh run.sh --evaluate

--load_dir ../data/saved_model

--devset ../data/extracted/devset/zhidao.dev.json ../data/extracted/devset/search.dev.json

在評估結束後,程序會自動計算ROUGE-L指標並顯示最終結果。

3.5.模型預測

通過運行以下命令,開發者可以利用上面提供的模型在DuReader 2.0測試集進行預測:

sh run.sh --predict

--load_dir ../data/saved_model

--testset ../data/extracted/testset/zhidao.test.json ../data/extracted/testset/search.test.json

模型預測的答案將被保存在data/results文件夾中。

3.6.訓練自己的模型

如果開發者希望重新訓練模型參數,可以參考本章節步驟。

在模型訓練開始之前,需要先運行以下命令來生成詞表以及創建一些必要的文件夾,用於存放模型參數等:

sh run.sh --prepare

--trainset ../data/extracted/trainset/zhidao.train.json ../data/extracted/trainset/search.train.json

--devset ../data/extracted/devset/zhidao.dev.json ../data/extracted/devset/search.dev.json

--testset ../data/extracted/testset/zhidao.test.json ../data/extracted/testset/search.test.json

建立好的詞表會存放在data/vocab文件夾中。

然後運行下面的命令,即可開始訓練:

sh run.sh --train

--pass_num 5

--trainset ../data/extracted/trainset/zhidao.train.json ../data/extracted/trainset/search.train.json --devset ../data/extracted/devset/zhidao.dev.json ../data/extracted/devset/search.dev.json

以上參數配置會對模型進行5輪訓練,並在每輪結束後利用驗證集自動進行評估。每輪過後,程序會自動將模型參數保存到data/models文件夾當中,並以該輪的ID命名。

如果開發者需要改變模型訓練時的超參數,例如初始學習率、隱層維度等,可以通過指定以下參數來實現:

sh run.sh --train

--pass_num 5

--learning_rate 0.00001

--hidden_size 100

--trainset ../data/extracted/trainset/zhidao.train.json ../data/extracted/trainset/search.train.json

--devset ../data/extracted/devset/zhidao.dev.json ../data/extracted/devset/search.dev.json

更多參數配置可在paddle/args.py中找到。

3.7.提交測試集結果

當開發者通過調參、修改模型結構得到更好的結果後,可以將DuReader 2.0測試集的預測結果提交到DuReader 官網來進行評測。在提交結果之前,請確保以下幾點:

訓練已經全部結束;通過訓練日誌在data/models文件夾中選擇在驗證集表現最佳的模型;通過上面章節描述的方法在測試集上進行預測,並得到完整結果。

趕快自己動手嘗試下吧!

想與更多的深度學習開發者交流,請加入飛槳官方QQ群:432676488。

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

官網地址:https://www.paddlepaddle.org.cn

項目地址:

https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleNLP/reading_comprehension

相關焦點

  • 史上最全解讀|飛槳模型庫重大升級,主流算法模型全覆蓋
    語義表示庫新增 XLNet 預訓練模型;開源 EMNLP 2019 閱讀理解競賽冠軍模型 D-NET,同時支持 18 個不同抽取式閱讀理解數據集打榜。發布飛槳多任務學習庫 PALM (PAddLe Multi-task learning),更便捷支持多任務機器學習調研。 1.3.
  • 機器閱讀理解(基於BiDAF實現片段抽取)
    為了解決這個問題,研究者提出了許多改進的方式,不斷提高模型理解對話與文章的能力。而且,一大批閱讀理解數據集的發布強有力地推動了技術的發展。    機器閱讀除了研究價值之外,還有很多有意義的應用,比如文本摘要可以省去人們閱讀全文的時間,問答系統可以從海量文檔中精確地找到用戶問題的答案。機器閱讀也是翻譯和對話的基礎,這對計算機輔助人工服務有重大價值。
  • 強化學習、聯邦學習、圖神經網絡,飛槳全新工具組件詳解
    下面帶來飛槳深度學習平臺工具組件詳細解讀,核心內容 3993 字,預計閱讀時間 4 分鐘。PaddleHub 遷移學習PaddleHub 是預訓練模型管理和遷移學習工具。開發者通過使用預訓練模型,可以更便捷地開展遷移學習工作。
  • 深度學習唯一中文開源平臺!百度飛槳(PaddlePaddle)開發能力究竟如何
    比如在作為人工智慧領域之一的深度學習領域中,通過開源平臺,可以較為簡易地創造自己的人工智慧作品,好比在ps上製作圖片,在pr上剪輯視頻。百度飛槳(PaddlePaddle),是深度學習領域中目前國內唯一的中文開源平臺,依靠百度堅實的AI技術,不斷降低學習門檻,為AI產業化大規模落地貢獻了源源不斷的技術技能與解決方案。
  • 「CCF傑出工程師獎」花落百度飛槳總架構師於佃海
    於佃海獲此殊榮,彰顯著他本人為AI領域貢獻的認可,也讓業界對他所致力的百度開源開放平臺飛槳有了更深刻認知。「飛槳平臺,作為國內唯一功能完備的開源開放深度學習平臺,它的使命和意義已不局限於一個公司。」現場於佃海發表獲獎感言,「作為一名中國的AI工程師,我認為有責任有義務把中國人自己的深度學習平臺做到最好。聞說雙飛槳,AI當自強。」
  • 百度人工智慧開源大賽即將開啟
    在此背景之下,百度將於2020中國人工智慧產業發展聯盟開發者大會(以下簡稱:2020AIIA開發者大會)的預熱賽事中,聚焦於預測答案段落摘要中所表述的是非觀點極性,舉辦百度人工智慧開源大賽。本次大賽旨在為研究者和開發者提供學術和技術交流的平臺,鼓勵初創企業、企業開發者、高校科研人員及學生進一步提升機器閱讀理解的研究水平,推動語言理解和人工智慧領域技術和應用的發展。
  • 機器閱讀理解簡述
    機器閱讀理解技術即機器自動從給定的文本中回答用戶所提出的問題的技術[1],近幾年已經成為了研究熱點之一。閱讀理解大致可以分為四個任務,即填空型閱讀理解任務、選擇型閱讀理解任務、片段抽取型閱讀理解任務以及自由格式閱讀理解任務。隨著以BERT為代表的預訓練模型的發展,四種閱讀理解任務都有著飛速的發展,主要體現為從關注限定文本到結合外部知識,從關注特定片段到對上下文的全面理解。本文對上述幾種主流的機器閱讀理解任務從任務描述、相關數據集、解決方法等幾方面逐一展開介紹。1.
  • 2018機器閱讀理解技術競賽開始報名 百度提供中文閱讀理解數據集
    閱讀不僅是人類獲取知識、提高心智的重要途徑,對於機器而言,擁有閱讀能力同樣也能夠實現持續學習和進化。機器閱讀理解讓機器閱讀文本,然後回答和閱讀內容相關的問題,其中涉及到的理解、推理、摘要等複雜技術,對機器而言頗具挑戰。該任務的研究對於智能搜索、智能推薦、智能交互等人工智慧應用具有重要意義,是自然語言處理和人工智慧領域的重要前沿課題。
  • 【ACL】深度融合模型KT-NET增強機器閱讀理解
    該技術可以使機器具備從文本數據中獲取知識並回答問題的能力,是構建通用人工智慧的關鍵技術之一,長期以來受到學術界和工業界的廣泛關注。近兩年,預訓練語言表示模型在機器閱讀理解任務上取得了突破性進展。通過在海量無標註文本數據上預訓練足夠深的網絡結構,當前最先進的語言表示模型能夠捕捉複雜的語言現象,更好地理解語言、回答問題。
  • 飛槳博士會:40多位博士齊聚西二旗,共話AutoDL自動深度學習建模技術及應用
    飛槳博士會是百度開源深度學習平臺飛槳(PaddlePaddle)發起的中國深度學習技術俱樂部,旨在打造深度學習核心開發者交流圈,助力會員拓展行業高端人脈、交流前沿技術。俱樂部成員均為博士及以上學歷。目前飛槳博士會線下技術沙龍已成功舉辦三期。 本期技術沙龍的主講嘉賓為百度大數據實驗室主任浣軍博士,主講AutoDL自動深度學習建模技術和應用。
  • 定製化服務降低模型部署門檻 百度AI快車道解析飛槳EdgeBoard軟硬...
    百度多位技術大咖在本次活動中擔任講師,詳細解讀了飛槳 Paddle Lite、及其相關的服務工具EasyEdge、硬體產品EdgeBoard的技術特點、使用方法和相關應用。談到此次課程,一位從事出境遊產品研發的學員表示:「在AI落地的情況下,需要很多應用部署,包括各種設備的兼容性、適配性方面,聽了這次課後覺得百度在這方面確實做得比較好的,」具體來說,他談到,「比如在模型裁剪方面,我們自己本身也在摸索,今天聽到百度已經做出了開源工具可以直接使用,對開發者而言比較友好。」
  • 飛槳開源8.6M超輕量中英文OCR模型PaddleOCR
    近日,百度飛槳正式開源了業界最小的超輕量8.6M中英文識別OCR模型套件PaddleOCR,在模型大小、精度和預測速度上,甚至超過了之前一度登上GitHub熱榜的chineseocr_lite(5.1k stars),簡單場景下OCR效果更是能媲美收費軟體。
  • 飛槳框架高層API,一起輕鬆玩轉AI
    機器之心發布機器之心編輯部嚮往深度學習技術,可是深度學習框架太難學怎麼辦?百度傾心打造飛槳框架高層 API,零基礎也能輕鬆上手深度學習,一起來看看吧?目前,飛槳框架內置的模型都是 CV 領域領域的模型,都在 paddle.vision.models 目錄下,包含了常見的 vgg 系列、resnet 系列等模型。
  • 百度飛槳躍居世界第二、國內第一!看中國AI領頭雁百度的開源進擊之路
    近日,權威科技媒體通過分析GitHub上的開源項目數據集GitHubArchive,得出2020和2019年度全球深度學習框架排名榜單,其中,百度飛槳PaddlePaddle均力壓谷歌TensorFlow,緊隨Facebook PyTorch之後,其搶眼的數據表現意味著在開發者積極貢獻代碼和項目、社區活躍、代碼迭代速度上一直保持著強勁的競爭力,已經成為了國內第一、世界第二的深度學習開源框架
  • 重磅發布開源框架、生物計算平臺螺旋槳,百度飛槳交了年終成績單
    該平臺先期將開源螺旋槳生物計算開源工具集,提供包括 RNA 二級結構預測、大規模的分子預訓練、DTI 藥物靶點親和力預測以及 ADMET 成藥性預測等在內的新藥研發和疫苗設計環節的核心能力,幫助生物信息學、計算機交叉學科背景的學習者、研究者和合作夥伴,更便利地構建 AI 算法模型。
  • 百度ERNIE語義理解開源套件動靜合一全新升級 速來「嘗鮮」
    如此簡潔易用,得益於本次ERNIE語義理解開源開發套件的全新升級。  為了兼顧兩種優勢,ERNIE開源套件進行了全新升級,推出了動靜合一的ERNIE語義理解開發套件。  動靜合一的ERNIE開源套件  新版ERNIE開源套件突顯了模型易取易用性,簡單幾行代碼就可以把ERNIE跑起來。
  • 麻省理工科技評論千字長文點讚百度飛槳:推動產業智能化大爆發
    百度飛槳應用不斷落地,MIT發文盛讚MIT報導稱,基於百度飛槳深度學習模型開發出的森林無人機,已經幫助東南亞155個林業局將森林檢查範圍由原來的40%擴張至100%,並且執行效率比人工檢查高出200%,有效預防森林火災的發生。事實上,助力森林巡檢只是百度飛槳諸多落地應用中的一個縮影。
  • 最新中文NLP開源工具箱來了!支持6大任務,面向工業應用|資源
    比如基於百度海量搜索數據,PaddleNLP訓練了的語義匹配模型在真實FAQ問答場景中,比基於字面的相似度方法AUC提升5%以上。無論你在聊天機器人、智能客服、新聞推薦、信息檢索、閱讀理解還是機器翻譯等場景,PaddleNLP都能一次性滿足你的需求。
  • 百度飛槳助力鐵路車號核對快準穩
    問我能不能像汽車車牌識別一樣,做一個鐵路貨車車號識別的設備,讓機器代替人工,減少人為錯誤。」李桑鬱知道車號核對失誤問題不容忽視,於是便開始嘗試學習計算機識別相關的技術。在國內首個開源開放、功能完備的產業級深度學習平臺飛槳(PaddlePaddle)上,李桑鬱使用了目標檢測算法(PP-YOLO),對車號區域進行檢測定位,對車號字符逐個匹配;將字符定位和匹配結合起來計算出車號,整個識別過程快速且精準。「就目前使用飛槳的目標檢測算法對單個數字的識別效果來看,既不會錯誤地把車型識別進來,也不會過多受拍攝角度的影響。通過測試、驗證,識別準確率高達97%。」