日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Chapter7-11_Deep Learning for Question Answering (2/2)

發(fā)布時間:2024/7/5 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chapter7-11_Deep Learning for Question Answering (2/2) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 1 Simple Question: Match & Extract
  • 2 Complex Question: Reasoning
  • 3 Dialogue QA

本文為李弘毅老師【Deep Learning for Question Answering (2/2)】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。

下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權(quán),必定刪除。

文章索引:

上篇 - 7-10 Deep Learning for Question Answering (1/2)

下篇 - 7-12 Controllable Chatbot

總目錄

1 Simple Question: Match & Extract

Simple Question指的就是可以從給定的source中通過Match和Extract的方法找到答案的問題。比如SQuAD中的問題就是Simple Question。下圖中的第一個問題,我們可以通過"precipitation"和"fall"這兩個關(guān)鍵詞定位到答案在source中的第一句話中(Match),然后從中抽取出答案"gravity"(Extract)。

解決這樣的問題的模型架構(gòu)如下圖所示,通常被稱為"Query-to-context Attention"。我們自底向上來看,首先我們會把source輸入到"module for source"中,然后輸出每個token對應(yīng)的embedding,這里每個token會輸出兩個embedding,一個相當(dāng)于attention中的key,另一個相當(dāng)于attention中的value。同時,也會把問題輸入到"module for answer"中,得到一個embedding,這個就相當(dāng)于attention中的query。我們會把右下角得到的黃色的query和左下角得到的藍色的key進行match,歸一化后,每個綠色的value會得到一個權(quán)重。加權(quán)求和得到上方深藍色的特征向量,將其輸入到"module for answer"當(dāng)中,得到最終的結(jié)果。如果答案只有一個token,就是一個分類問題;如果答案是其中的一串span,那就預(yù)測頭尾token的位置。

這種架構(gòu)最經(jīng)典的模型就是2015年的End-To-End Memory Networks。

上面的架構(gòu)可以做一個變形。就是當(dāng)"module for question"輸出的embedding有多個的時候,也就是有多個query的時候,我們該怎么辦?我們可以把每個query和key去做一個match,那樣每個value就會得到多個權(quán)重,我們?nèi)∑渲凶畲蟮哪莻€就可以了。

這種方法的一個典型例子就是2016年的Ask, Attend and Answer: Exploring Question-Guided
Spatial Attention for Visual Question Answering。

還有一種架構(gòu),叫做"context-to-query attention"。這種attention是把source每個token對應(yīng)的embedding當(dāng)作query,question每個token對應(yīng)的embedding當(dāng)作key,然后這兩者做attention。最后會得到一個向量,再把這個向量和query時的attention結(jié)合,變成下圖中綠色的向量,每個藍色的token都會得到一個綠色的向量,然后把所有綠色的向量輸入"module for answer"中,得到答案。

上圖的架構(gòu)在實際操作時,可能還會對context做self-attention,比較經(jīng)典的有Gated Self-Matching Networks for Reading Comprehension and Question Answering

那么query-to-context和context-to-query這兩者到底是誰好呢?既然分不清楚,我們不妨兩者都用。Bidirectional Attention Flow for Machine Comprehension, Dynamic Coattention Networks
For Question Answerin,QANet: Combining Local Convolution
with Global Self-Attention for Reading Comprehension這幾篇文章都是兩者都用的。

不過在今天看來,上面講到的一切,BERT里都有了,這也是BERT強大的原因,我們只要一個BERT就夠了。

2 Complex Question: Reasoning

complex question的問題在今天看來也是一個尚未找到合適的辦法的問題,所以這里只是大概介紹一下什么是complex question以及現(xiàn)有的解決辦法。

complex question和simple question的區(qū)別在于,simple question的答案必然在source的某一段話中可以直接找到,而complex question需要在多個source之間反復(fù)跳躍,綜合多個信息來得出答案。Qangaroo就是一個complex question的數(shù)據(jù)集。比如下面圖中的這個問題是問"Hanging gardens of Mumbai"在哪個國家,根據(jù)第一個source只能知道在"Arabian Sea",但Arabian Sea并不是國家,我們還要再根據(jù)后面的source才能知道在India。

屬于complex question的數(shù)據(jù)集還有Hoppot QA,DROP等等。其中的一些問題甚至需要機器根據(jù)source的內(nèi)容去做加減乘除的操作。

這種在source之間跳來跳去的做法可以表示成下圖這樣。先根據(jù)問題match到一句話,然后根據(jù)extract的內(nèi)容更新query,再進行一次match和extract以及更新,直到找到我們需要的答案為止。一般跳幾次是人為預(yù)先設(shè)定好的超參數(shù)。

在網(wǎng)絡(luò)架構(gòu)中,就可以表示成下圖這樣。source中的每個token可以變成兩個embedding(藍和橙),分別表示key和value。用query的embedding去做attention,結(jié)合之前的query得到新的query。如此反復(fù),反復(fù)次數(shù)由人預(yù)先設(shè)定。

當(dāng)然也有讓模型自己去學(xué)習(xí)要跳多少次的模型,可參見ReasoNet。

這種跳躍的方式非常適合用圖網(wǎng)絡(luò)來做,于是也有人做了用圖網(wǎng)絡(luò)來解決complex question的嘗試,可參見 Dynamically Fused Graph Network for Multi-hop Reasoning。但也有人發(fā)現(xiàn),當(dāng)在訓(xùn)練時,把BERT也進行finetune時,用不用圖網(wǎng)絡(luò)的效果時差不多的,因為BERT里的self-attention就是一個密集的圖網(wǎng)絡(luò),可參見Is Graph Structure Necessary for Multi-hop Reasoning?。

3 Dialogue QA

Dialogue QA與之前兩類問題的區(qū)別在于,Dialogue QA會會有多個連續(xù)的問題,當(dāng)前問的問題會需要用到之前問的問題的信息,比較典型的有CoQA。答案必然是在source當(dāng)中的。

也有問問題的人完全沒有看過source的情況,這種情況下,可能就會問到一些沒有答案的問題,可參見QuAC。

解這類問題的時候,問題的embedding通常需要對之前的問題的embedding也做attention。

目前針對Dialogue QA各個模型在SQuAD上的效果如下圖所示,最上面一行時人類的表現(xiàn),下面的時排名前5的模型的表現(xiàn),可以看見前5的模型都超過了人類。但是,模型真的已經(jīng)這么厲害了嗎?

事實并非如此,模型的泛化能力非常差,在SQuAD上訓(xùn)練的模型,在bAbI上的表現(xiàn)非常差。

甚至有人發(fā)現(xiàn),當(dāng)把問題從"What did Tesla spend Astor’s money on"縮減為"did"時,模型竟然也能答對,而且置信度還變高了。可見模型并不是真正學(xué)到了語義,只是訓(xùn)練集和驗證集的分布很像,模型學(xué)到了某個分布而已。

當(dāng)有人把訓(xùn)練集和驗證集的分布改了一下之后,模型就慘敗了。

看來在研究QA的地方,人類還有很長的路要走。

總結(jié)

以上是生活随笔為你收集整理的Chapter7-11_Deep Learning for Question Answering (2/2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。