万能的Seq2Seq:基于Seq2Seq的阅读理解问答
作者丨蘇劍林
單位丨追一科技
研究方向丨NLP,神經網絡
個人主頁丨kexue.fm
今天給 bert4keras [1] 新增加了一個例子:閱讀理解式問答(task_reading_comprehension.py [2]),語料跟之前一樣,都是用 WebQA 和 SogouQA [3],最終的得分在 0.75 左右(單模型,沒精調)。
方法簡述
由于這次主要目的是給 bert4keras 增加 demo,因此效率就不是主要關心的目標了。這次的目標主要是通用性和易用性,所以用了最萬能的方案——seq2seq 來實現做閱讀理解。
用 seq2seq 做的話,基本不用怎么關心模型設計,只要把篇章和問題拼接起來,然后預測答案就行了。此外,seq2seq 的方案還自然地包括了判斷篇章有無答案的方法,以及自然地導出一種多篇章投票的思路。總而言之,不考慮效率的話, seq2seq 做閱讀理解是一種相當優雅的方案。
這次實現 seq2seq 還是用 UNILM 的方案,如果還不了解的讀者,可以先閱讀從語言模型到Seq2Seq:Transformer如戲,全靠Mask了解相應內容。
模型細節
用 UNILM 方案搭建一個 seq2seq 模型在 bert4keras 中基本就是一行代碼的事情,所以這個例子的主要工作在并不在模型的建立上,而是在輸入輸出的處理上面。?
輸入格式
首先是輸入,輸入格式很簡單,一張圖可以表達清楚:
▲?用seq2seq做閱讀理解的模型圖示
輸出處理
如果輸入單個篇章和單個問題進行回答,那么直接按照 seq2seq 常規的處理方案——即 beam search——來解碼即可。?
但是,WebQA 和 SogouQA 面對的是搜索場景,即同時存在多篇文章來對同一個問題進行回答,這就涉及到投票方案的選擇了。一種樸素的思路是:每個篇章結合問題單獨用 beam search 解碼,并且給出置信度,最后再按照基于CNN的閱讀理解式問答模型:DGCNN的投票方式進行。這種方式的困難之處在于對每個答案給出一個合理的置信度,它相比我們后面給出的思路則顯得不夠自然,并且效率也稍低些。?
這里我們給出一種跟 beam search 更加“契合”的方案:先排除沒有答案的篇章,然后在解碼答案的每一個字時,直接將所有篇章預測的概率值(按照某種方式)取平均。?
具體來說,所有篇章分別和問題拼接起來,然后給出各自的第一個字的概率分布。那些第一個字就給出 [SEP] 的篇章意味著它是沒有答案的,排除掉它們。排除掉之后,將剩下的篇章的第一個字的概率分布取平均,然后再保留 topk(beam search 的標準流程)。預測第二個字時,每個篇章與 topk 個候選值分別組合,預測各自的第二個字的概率分布,然后再按照篇章將概率平均后,再給出 topk。依此類推,直到出現 [SEP]。其實就是在普通的 beam search 基礎上加上按篇章平均,如果實在弄不明白,那就只能去看源碼了。
此外,生成答案的方式應該有兩種,一種是抽取式的,這種模式下答案只能是篇章的一個片段,另外一種是生成式的,即不需要考慮答案是不是篇章的片段,直接解碼生成答案即可。這兩種方式在本文的解碼中都有相應的判斷處理。
實驗代碼
代碼鏈接:
https://github.com/bojone/bert4keras/blob/master/examples/task_reading_comprehension.py
最終在 SogouQA 自帶的評估腳本 [4]?上,valid 集的分數大概是 0.75,單模型成績輕松超過了之前的《開源一版DGCNN閱讀理解問答模型(Keras版)》[3] 模型。當然,提升是有代價的——預測速度大大降低,每秒只能預測 2 條數據左右。
模型沒精細調優,估計還有提升空間,當前還是以 demo 為主。
文章小結
本文主要是給出了一個基于 bert 和 seq2seq 思路的閱讀理解例子,并且給出了一種多篇章投票的 beam search 策略,供讀者參考和測試。
相關鏈接
[1]?https://github.com/bojone/bert4keras
[2]?https://github.com/bojone/bert4keras/blob/master/examples/task_reading_comprehension.py?
[3] https://kexue.fm/archives/6906
[4]?https://github.com/bojone/dgcnn_for_reading_comprehension
點擊以下標題查看作者其他文章:?
當Bert遇上Keras:這可能是Bert最簡單的打開姿勢
玩轉Keras之Seq2Seq自動生成標題 | 附開源代碼
一文讀懂「Attention is All You Need」| 附代碼實現
基于CNN的閱讀理解式問答模型:DGCNN
基于DGCNN和概率圖的輕量級信息抽取模型
ICLR 2019最佳論文 | 用有序神經元表達層次結構
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
???? 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 查看作者博客
總結
以上是生活随笔為你收集整理的万能的Seq2Seq:基于Seq2Seq的阅读理解问答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 想开个零食店怎么找货源 学会这些是关键
- 下一篇: 博士学位论文 | 机器阅读理解与文本问答