back to index
[DLHLP 2020] Deep Learning for Question Answering (1/2) (重新上傳)

link |
好,我們就來講Question Answering
link |
其實這個圖是那個Office 365自動配的啦
link |
我現在很厲害了,都會自動配這個會動的圖,太厲害了
link |
好,那這個是Question Answering
link |
好,那我們接下來呢,就來進入Question Answering這個主題
link |
那Question Answering裡面呢,有兩個input跟一個輸出
link |
那問題可以有很多種不同的類型,從最簡單的到最難的
link |
最簡單的,舉例來說,有些問題啊,我們叫做Factoid的問題
link |
有這些問題有標準答案,那答案就是一個詞彙
link |
舉例來說,誰現在是美國總統,大家都知道是川普
link |
你只要找到有提到川普的文章,可能就可以告訴你這個問題的答案
link |
你需要從好幾個不同的來源,去多方找尋資訊
link |
你可能可以找到川普的年紀,你可能可以找到歐巴馬的年紀
link |
但是你要把他們兩個的年紀都找出來以後,再進行比對
link |
不過像這種問題,在八卦版是有標準答案的
link |
好,那這個問題的答案的來源,這個叫做Knowledge Source
link |
這個Knowledge Source有很多種不同的來源
link |
比如說,可以是一篇文章,可以是整個網路
link |
甚至也可以是多媒體的資訊,比如說影音,比如說影像或者是圖片
link |
然後接下來,你就把這個Knowledge Source丟到一個module裡面做一下process
link |
那你完全可以想像說,如果這個是文字的話
link |
就是丟到一個BERT裡面,把每個token的embedding都抽出來
link |
然後question的話,也是丟到BERT裡面,把每一個token的embedding都抽出來
link |
然後這兩邊可能互相要做一些attention
link |
然後接下來,你把這個source encode以後的結果
link |
跟question處理以後的結果,丟到一個找answer的module
link |
有時候你的回答可能是你的source裡面的一個片段
link |
也有可能你現在要做的是選擇題,所以machine要做的事情是從數個選項裡面選出正確的那一個
link |
也有可能你的answer是沒有任何限制的,它是一段話,甚至是一個段落
link |
今天QA有人會說,那等一下是不是會講各式各樣神奇的QAmodel呢?
link |
那確實可能focus在各式各樣神奇的attention架構
link |
但是今天,基本上BERT可以打趴過去所有各式各樣奇妙的架構了
link |
所以今天QA的研究,基本上變成有點像是
link |
誰先找到一個比較大的BERT,誰就贏了
link |
就跟大家作業4-3的時候發表感覺差不多
link |
誰找到一個比較大的BERT,誰就贏了
link |
這個像是風神演義一樣,誰先使用翻天印,誰就贏了
link |
通常風神演義裡面,兩個人物出來要打架的時候
link |
然後接下來其中一個人就會想要放法寶,比如說翻天印
link |
通常誰放法寶,誰就贏了,就是這個樣子
link |
question answering各種不同的型態
link |
最簡單的形式是輸出的答案就是一個詞彙
link |
那在QA裡面,最早的一個QA的benchmark corpus叫做baby
link |
我們知道在做影像的時候,你會用admiss來測試所有的東西
link |
那過去在做QA的時候,往往會用baby來測試所有的東西
link |
那baby它有20個不同的任務,它有20種不同的類型
link |
不過baby裡面的文章跟問題,它是合成出來的
link |
它是用某一個template產生出來的
link |
那我這邊就舉了Task 5、Task 10、Task 15給大家看看這個baby的感覺
link |
舉例來說Task 5,它裡面的文章是Mary把蛋糕給了Fred
link |
然後呢,這個Bill把牛奶給了Jeff
link |
然後接下來它的問題就是,誰把蛋糕給了Fred呢?
link |
誰把蛋糕給了Fred呢?是Mary,Mary把蛋糕給了Fred
link |
給了Bill,Fred把蛋糕給了Bill
link |
然後這個baby呢,大概就是這種感覺
link |
那baby當然在今天看起來,已經有點太過簡單了
link |
所以今天很多QA的文章,往往不是用baby來當作它的testing set
link |
通常現在可能用squat還比較多,比較不會用baby當作你的benchmark
link |
不過當年創造baby的時候,其實也是有很大的野心的
link |
當時創造baby的時候,你看那個文章的title還說
link |
To work AI-complete question answer
link |
它希望可以制定出20個任務來測試機器的能力
link |
來general的測試機器,連結不同的資訊
link |
那期待有這20個任務,我們可以從20個不同的面向來檢視機器
link |
當時創造baby的時候,是有這樣子的野心的
link |
當然baby是比較早的文章,是15年的時候proposed的
link |
當時剛剛提出來的時候,我們人們並不覺得說
link |
這種簡單的用template產生的文章跟問題
link |
可以輕易的讓machine抓到這種pattern,然後輕易的就回答出來
link |
不過今天這20個不同的問題,基本上都已經被deep learning破了
link |
所謂破了就是正確率都達到95%以上了
link |
所以基本上這20個問題,都算是用deep learning解掉了
link |
當然用deep learning解掉,並不代表machine真的學到了推理、歸納
link |
他真的可以讀懂一篇文章,這是另外一回事
link |
總之,有baby這個corpus、有baby這個benchmark
link |
他要繼續做的事情就是,回答一個答案,這個答案就是一個對
link |
那怎麼做呢?簡單來講就是,把它看作是一個分類的問題
link |
對你的answer module來說,他要解的就是一個分類的問題
link |
哪些類別呢?所有可能的答案都是一個類別
link |
jones是一個類別,mary是一個類別,kitchen是一個類別,no是一個類別,maybe是一個類別
link |
然後你的answer module就是會assign一個confident score,assign一個分數給每一個類別
link |
接下來看哪一個類別分數最高,分數最高的那個類別,也就是分數最高的那個詞彙
link |
就是答案,所以baby通常就是這麼解的
link |
那有另外一種類型的問題,是multiple choice的問題,是這個選擇題的問題
link |
那在選擇題裡面通常就是你有文章,有問題,然後數個選項,希望機器從數個選項裡面選出正確的答案
link |
怎麼讓機器進行選項的選擇呢?那這邊你除了要去處理source跟question以外
link |
你可能也要有一個module去處理選項,比如說把某一個選項選項A丟到這個module
link |
你會得到選項裡面的token的embedding
link |
接下來呢,這三個module間可能互相都要做一些attention
link |
這個我們沒有把它畫出來,這三個module間互相做一些attention
link |
然後answer的module就把這個問題當作是一個二元分類的問題
link |
決定說輸入這個選項,這個選項到底是對的還是錯的
link |
那這邊假設有四個選項,你就把四個選項通通都拿來跑一遍
link |
那也有另外一個解法是說,我們把這四個選項通通都丟到module裡面
link |
把ABCD通通丟到module裡面,然後接下來對answer的module來說呢
link |
我們現在要決定說ABCD四個類別裡面,哪一個才是對的
link |
不過把它formulate成binary classification的problem可能是比較有彈性
link |
因為你可能不同的選擇題,它的選項根本就不一樣多啊
link |
這樣會變成你分類的問題裡面的類別斷的在改變
link |
所以如果把它當作是一個二元分類的問題
link |
每次只丟一個選項進來,然後得到一個信心分數
link |
得到yes或no,或者是一個信心分數
link |
最後再看說四個選項裡面,哪一個選項的信心分數最高的
link |
這樣你這個模型可以用在選項數量不固定的狀況下
link |
好,那接下來呢,就進入大家最常見的SQUAD跟DRCD
link |
其實大家這個作業裡面用的就是DRCD啦
link |
好,那SQUAD呢,是EMNLP16的paper
link |
那SQUAD要做的事情,就是從輸入的文章裡面去找出來
link |
你要今天要門訊輸出的答案,一定是輸入文章裡面的其中一段
link |
那這樣子的東西,這樣子的QA的類型,又叫做Exception Based QA
link |
那最知名的、最具代表性的,就是SQUAD
link |
那如果是中文一個比較具有代表性的,就是DRCD
link |
DRCD是台達電做的,當初做DRCD就是仿造SQUAD的格式
link |
那怎麼解這種Exception Based QA的問題呢?
link |
這個是你輸入的文章,它是一堆的token
link |
那你的model要做的事情就是,你的model要給每一個token一個作為起始的分數
link |
然後也要給每一個token一個作為結尾的分數
link |
接下來,你再看說哪一個token作為起始的分數最大
link |
比如說第三個token作為起始的分數最大
link |
再看哪一個token作為結尾的分數最大
link |
比如說第五個token,它作為結尾的分數最大
link |
把第三個token當作開頭,把第五個token當作結尾
link |
所以你現在輸出的答案就是W3、W4、W5
link |
這個是今天常見的解這種Exception Based QA的方法
link |
那我第一次看到這樣的解法的時候,我覺得
link |
當然現在Squash就是這麼做的啦,大家都知道說這個方法
link |
其實在過去的文獻裡面,最常見的做法其實是這個樣子
link |
就是我們現在有一個Knowledge Source,有一個Question
link |
當然這個Knowledge Source跟Question,它們互相在process的時候
link |
它們在process的過程中,互相會有Attention
link |
那接下來呢,這個Knowledge Source被process以後
link |
就變成一個Vector Sequence
link |
通常每一個Vector或每一個Embedding就代表Input的一個token
link |
那接下來你會有一個Answer的Module
link |
這個Answer的Module做的事情就是把這一排Embedding把它吃進去
link |
那每一個Embedding都給它兩個數字
link |
一個數字就代表這個Embedding是問答案的起始的機率
link |
然後另外一個數字就代表這個Embedding是答案結束的機率
link |
所以你的Answer Module會把這個Knowledge Source的每一個token的Embedding讀進去
link |
然後根據每一個token的Embedding會給它兩個數值
link |
其中一個數值代表這個token是Start的機率
link |
另外一個數值代表這個token是End的機率
link |
那再來你可能會問說,那這個Answer Module它裡面的內容是什麼呢?
link |
在還沒有BERT的年代,通常你這個Answer Module就是好幾層的LSTM
link |
你要好幾層的LSTM,把這個Input的Vector Sequence讀進去
link |
然後每一個Vector就給它兩個數值
link |
那這其實是一個很Typical的Sequence Labeling的問題
link |
那在有了BERT的年代,因為這個Source的Module已經很複雜了
link |
所以這個Answer Module往往就不需要做太多事,就可以正確的找出答案
link |
那在有BERT的年代,這個Answer Module往往裡面就只有兩個Vector
link |
一個是代表Start的Vector,一個是代表End的Vector
link |
你把這個代表Start的Vector跟每一個Embedded去做搭乎搭
link |
你把End的Vector跟每一個Embedded做搭乎搭
link |
那接下來還有一種比Expression Based QA更General的Case
link |
就是Free Answer的Generation
link |
也就是我們現在要產生的答案是沒有任何限制的
link |
這個產生出來的答案,它可能在文章裡面,也可能不在文章裡面
link |
那具有代表性的Corpus,舉例來說英文有MS Markle
link |
這個是Microsoft做的,中文有Dew Reader,這個是百度做的
link |
那像在MS Markle裡面,它的問題就有幾種類型,它的答案有幾種類型
link |
比如說有一種Case是,答案裡面有出現的詞彙,在文章裡面都找得到
link |
但是這些詞彙沒有連在一起,它是出現在文章的不同的位置
link |
所以像剛才那種Spam Based的方法,那種Extraction Based的方法,其實也沒辦法解這種問題
link |
在Extraction Based的方法裡面,你的答案一定是文章裡面的連續幾個詞彙
link |
如果你的答案是分佈在文章裡面不同的位置
link |
那像剛才講的那種Extraction Based的方法,是沒有辦法解的
link |
或者是有另外一種可能是,答案的文字一部分出現在文章裡面,一部分出現在問題裡面
link |
或還有一種可能是答案裡面有一些關鍵的詞彙出現在文章裡面,但也有一些詞彙沒有出現在文章裡面
link |
也有可能遇到一個Case是說,答案沒有出現在文章的任何地方
link |
那這時候特別容易出現這種狀況的是那種Yes、No的Question
link |
就是你今天的答案是Yes或No,但是Yes或No這兩個字眼可能根本就沒有出現在文章裡面
link |
不過像這種Yes或No的問題,有一個特殊的解法,有人會說
link |
那我就在文章裡面通通都加上Yes或No,不管是哪一篇文章,我都在它結尾放個Yes、放個No
link |
那這樣我就可以把Yes、No的Problem把它Reduce成Expression-based的Problem,可以這麼做,也有人這麼做
link |
當然還有另外一種做法是說,我今天事先對問題做一些分類
link |
Yes、No的Question這麼特別,它的答案一定不在文章裡面,但是它其實又是一個簡單的二元分類的問題
link |
那我就先用一個分類器,決定一個問題是不是Yes、No Question,決定一個問題它的答案是不是應該要輸出
link |
這種分類器,你如果只是要把答案是Yes、No的Question找出來,那是正確率可以做到很高啦,做到99什麼都是很有可能的
link |
你先做一個問題的分類器,找出那些答案就是Yes、No的Question
link |
然後這些Question特別把它拿出來當作是一個Binary Classification,當作是一個二元分類的問題,直接給它做下去就結束了
link |
事實上像NS Markle這種Corpus,很多時候有人會把它,很多時候就是直覺上想起來,你要怎麼解這種問題呢?
link |
直覺上想法就是Chain個Sequence-to-Sequence Model,用個Sequence-to-Sequence Model來產生答案
link |
比如說一個特別具有代表性的,叫做SNAT,SNAT怎麼做的呢?
link |
你會發現說,我們有Question的Encoder,有Passage,就是文章的Encoder,然後把文章跟問題讀過,接下來有個Decoder,Decoder就會把答案輸出來
link |
就是一個Sequence-to-Sequence Model,用Sequence-to-Sequence Model來產生各種不同的答案,當然可以這樣解
link |
不過很多時候我看這個NS Markle的解法,很多人都是用這種偷吃步的解法,怎麼偷吃步呢?
link |
把整個NS Markle當作是一個Extraction-based的問題來做,因為Extraction-based的QA絕對比你用什麼Sequence-to-Sequence Model容易
link |
所以把它硬當作Extraction-based的問題來做,那種答案不在文章裡面的不是會很慘嗎?
link |
可是因為答案的那些文字,往往在文章裡面還是有出現幾個嘛,那你有Extraction-based的方法,你還是可以抽出一段
link |
那一段裡面雖然跟正確答案不是一模一樣的,但跟正確答案有好幾個相似的詞彙
link |
然後在NS Markle的Evaluation裡面,只要你跟正確答案相似的詞彙一樣的詞彙越多,你的分數就越高,這樣至少可以蒙到一堆分數
link |
所以很多人在解NS Markle的時候,都是當作Extraction-based的QA來做
link |
那有人可能會問一個問題,如果把NS Markle當作Extraction-based的QA,可是正確答案在哪裡不知道啊?
link |
如果你今天你的答案根本就不在文章裡面,那你根本就不知道,如果要從文章裡面訓練一個Extraction-based的model,從文章裡面抽個段落的時候,根本不知道要抽哪裡嗎?
link |
這個早就有人解了,這個怎麼解呢?你就印在文章裡面,找一段文字,看看哪一段文字跟你的答案的overlap最大
link |
那一段文字就當作Extraction-based QA的quantum,當作正確答案,給它train下去,然後你就可以把整個NS Markle通通當作Extraction-based的QA來硬解
link |
好,那到目前為止,我們已經講了好幾種QA的型態,但是有一種例外的狀況是我們需要考慮的,因為並不是所有的問題都有答案
link |
這就讓我想到獵人試驗,獵人試驗裡面有一個關卡,就是會有一個攔路的老婆婆,那攔路的老婆婆會問你一個問題,回答了你才能夠通過
link |
比如說她問的問題是,你母親和女友被壞人抓住了,你只能救一個人出來,那你會救母親還是救女友呢?
link |
那有一個人就回答說,我也想要順著老婆婆的喜好回答,所以我就回答了母親,那老婆婆就說,過去吧!她就通過了這個關卡,就往前走了
link |
接下來就輪到主角群,然後老婆婆就問說,你兒子跟女兒被綁架了,你只能救回其中一個人,你會救女兒還是兒子呢?
link |
主角群裡面有一個人叫雷歐莉,就是這個人,她就生氣了,她就說,死老太婆,你還玩吶?
link |
她就抽起了一個木棒,就說,你玩上癮了,你的壽命就只剩下你倒數的那幾秒了,她就準備打那個老人
link |
這時候就被她的隊友,另外一個叫庫拉皮卡的人阻止了。庫拉皮卡說,我們其實已經答對了
link |
為什麼?因為沒有正確答案,評審又說我們只能回答一或二,也就是不回答,沉默才是正確答案
link |
那剛才那個回答母親的人是怎麼回事呢?評審並沒有說他答對,評審只是叫他過去而已
link |
剛才聽到一聲慘叫,剛才通過的人已經被魔獸吃掉了,所以那一條路不是正確的路
link |
所以看看這個多可怕,今天一個問題,如果沒有答案,你硬是回答的話,你就會被魔獸吃掉啊
link |
但是今天的QA的系統,它沒有這種能力啊,你問它什麼問題,它都一定會給你一個答案啊,所以它很容易被魔獸吃掉啊
link |
所以怎麼辦?我們需要有機器,不回答沒有答案的問題的能力,這樣可以避免機器被魔獸吃掉
link |
所以怎麼讓機器看到一個問題如果沒有答案的時候,就保持沉默,就選擇不回答呢?
link |
有一個benchmark corpus叫做SQUAD 2.0,就是想要測驗機器不回答的能力
link |
SQUAD 2.0裡面有很多假的問題,那些問題是沒有答案的,如果你回答的話就是錯了,就會被魔獸吃掉
link |
這些問題正確的答案就是沒有答案或者是選擇不回答或者拒答才是正確的
link |
舉例來說,這邊有一篇文章,然後它有一個問題,這個問題是說,有哪些法案遭逢到了巨大的反對
link |
但是在這篇文章裡面,沒有任何法案被反對,它雖然有提到opposition這個字眼,但它是說這些法案很少被反對
link |
但是對一般的機器來說,它可能就很愚蠢的隨便拿一些法案的名字就當作答案,那它就錯了,它就會被魔獸吃掉
link |
機器要知道說,這個問題是沒有答案的,或者它問你說,1937年的合約這個treaty是什麼名字呢?
link |
但是這文章裡面根本就沒有提到1937年treaty的名字,那一般的model可能就很憨的隨便找一個條約的名字出來當作答案
link |
那它就會被魔獸吃掉,那這個時候我們需要一個聰明的機器,跟庫拉皮卡一樣,它要知道說這一題的答案就是沉默
link |
那我們怎麼讓機器做到這件事情呢?其實在最原始的BERT的paper裡面,它就有試圖解釋過這個問題了
link |
在原版的BERT裡面,是怎麼讓機器選擇不回答的呢?它的做法是這樣,在文章裡面加入一個特別的token,這個特別的token我們這邊就叫做NOR
link |
然後接下來呢,就跟一般attraction-based QA一樣,每一個token,包括NOR這個token,都會得到一個作為初始的分數跟作為結束的分數
link |
如果最後你的machine發現說,NOR初始的分數最大,結束的分數也最大,代表說今天model覺得NOR才是答案,那model就會保持沉默,沒有答案才是正確的答案
link |
那在原始BERT裡面呢,其實它就是把CLS token當作NOR,如果你的model今天它的答案是CLS token,它給CLS token最大的初始分數跟最大的結束分數,那BERT就會回答說這個問題是沒有答案的
link |
那其實在實作的時候,這邊還有很多小細節要調啦,舉例來說,因為你很難遇到說這個NOR同時得到初始答案分數最高,作為結束分數最高的狀況
link |
所以怎麼辦呢?其實很多時候都是只要這兩個分數超過某一個threshold,就算是NOR了,它不需要是全部最大的,它不需要全部最大,只要超過某一個threshold就當作是沒有答案
link |
但是那個threshold就變成你需要自己用手來調一下就是了
link |
那還有很多其他的做法,舉例來說,一個直覺的做法就是,我們另外再train一個決定問題能不能被回答的module
link |
這個module可能會看question的embedding,可能會看你的文章的embedding,接下來它會回答yes或no
link |
這個問題可以回答還是不能回答,這是一個二元分類的問題
link |
那還有另外一種做法是說,因為像這種answerable module,它只看了文章,它只看了問題,它還沒有看machine的答案呢
link |
也許machine的答案可以告訴我們這個問題能不能夠被回答,舉例來說,也許machine的答案非常荒謬,它根本就找不出一個好的答案,所以硬是答了一個非常荒謬的答案
link |
那如果這個答案跟這個問題不匹配,這個答案跟這個問題答非所問的話,那這個問題可能就是不能回答的
link |
所以另外一個做法是,另外再train一個answer verifier,這個answer verifier把文章問題跟現在你的model得到的答案,這三個東西都當作輸入
link |
然後接下來回答yes或no,那跟這個answerable module不一樣的地方是,answerable module只看了問題跟文章,它還沒有看答案
link |
answer verifier可以再把答案也考慮進來,然後決定yes或no
link |
好,那接下來呢,我們就來講knowledge source的部分,講到這邊我們再稍微停一下,看看大家有沒有問題要問的
link |
我再下課,好,那我們接下來呢,講一下knowledge的source,我們有哪些可能的knowledge source呢?最常見的就是給你一篇文章當作knowledge source
link |
像我們在作業4-3做的,就是給你一篇文章叫你找出答案,但是這個setup其實有點不切實際,對不對?
link |
因為你可能會覺得說,這個看一篇文章找答案的實際應用是什麼啊?就是一篇文章給我,我自己不會看嗎?我一眼就看完啦,那我就得到答案了啊,我幹嘛還要問機器呢?
link |
所以真正使用這種question answering的狀況可能像是這樣,這個scenario這張圖是來自於doc.qa這篇paper
link |
就人提出來一個問題,但我們不是只要從某一篇文章找答案,我們根本不知道那篇文章在哪裡,整個internet就是我們的knowledge source
link |
在doc.qa這篇paper裡面它是沒有用整個internet啦,但它把整個wikipedia就當作是knowledge source
link |
所以我們會需要先有一個搜尋的系統,根據這個問題找出一些有可能有包含答案跟問題比較相關的文章,比如說抽個十篇出來
link |
然後你的QA model再去閱讀那十篇文章,決定最終的答案是什麼
link |
所以實際上在做QA的時候,我們可能會把從問題到答案的過程拆成兩個步驟,第一個步驟可能是從一個很大的資料庫裡面找出相關的文章
link |
第二個步驟才是根據這些相關的文章去找出問題的答案
link |
其實剛才有提到的nsmarkle還有due reader都是這樣子的設計,在nsmarkle跟due reader裡面,每一個問題其實都提供了數篇的文章
link |
你要從那數篇的文章裡面去找出正確答案,其實那些文章是哪來的呢?比如說在nsmarkle裡面,那些文章就是bin這個搜尋引擎的搜尋結果
link |
就是你輸入一個問題,然後這個搜尋引擎會回傳一大堆的文章,把前十名拿出來,然後要求你的QA model在那前十名的文章裡面找出正確答案
link |
那這樣會遇到的問題是什麼呢?因為不是所有你的搜尋引擎找出來的文章都是有關係的,不是所有你的搜尋引擎裡面的文章都有正確答案
link |
所以對你的QA model來說,它需要做一個額外的判斷,這額外的判斷是現在讀的這篇文章到底可不可信
link |
它應該只要相信那個可信的文章,把那個無關的可能會得到錯誤答案的文章把它濾掉
link |
當然怎麼把這些比較無關的文章,比較沒有包含正確答案的文章濾掉,是一個還值得研究上代研究的問題
link |
舉例來說,這邊舉一個例子,叫做VNET,我們看這個圖,你就可以大概知道說它在做什麼,它有輸入一個問題
link |
那這邊有很多passage,就是很多篇文章,那每一篇文章都給了一個答案
link |
有N篇文章,我們就有A1到AN這N個答案,到底哪一個答案才是正確的呢?
link |
我們就需要想一些方法來評估每一個答案的可信度,選出正確的答案
link |
比如說在VNET裡面,它比較有趣的想法是說,它覺得今天多數文章其實都有正確答案
link |
所以我們可以用一個類似投票的概念,來看說現在假設有十篇文章,如果有八篇都得到一樣的答案,那這個答案可能就是正確的
link |
那假設有某一篇文章,它得出來的答案跟別人都不一樣,那這篇文章的答案很有可能就是錯誤的
link |
它在VNET的paper裡面就舉了一個這樣的例子,這邊有個問題,這個問題是說mix跟pure culture它們的差異是什麼?
link |
我本來以為這個culture是指的是文化,就是純文化跟混雜文化它們的差異是什麼
link |
後來我發現這個culture不是指文化,這好像是跟生物比較有關係的,跟培養細菌什麼比較有關係
link |
我也搞不太清楚是什麼的,總之它不是指的文化
link |
現在這邊有六篇文章,根據這六篇文章我們會得到六個答案,你的QA model會給你六個答案,就是這邊的這六個有標出題字的部分
link |
但是我們會發現說,其實第一篇文章給我們答案跟其他篇文章特別的不一樣
link |
正確答案是第六篇文章提供的這個,pure culture是什麼,mix culture是什麼
link |
而第三篇文章、第四篇文章、第五篇文章得到的答案也跟第六篇差不多
link |
而第一篇文章它的答案是很奇怪,它就是在解釋跟文化有關的東西,那這不是錯的
link |
它解釋的是文化,不是pure culture跟mix culture這邊指的culture,這邊的culture不是文化
link |
所以第一題是錯的,就算是這一個答案的線性分數再高,但是因為其他passage得到的答案是不一樣的,所以1就會被看作是錯的
link |
而因為第六題的這個答案跟三四五題都像,所以第六題的這個答案可能比較是正確的答案,那這個就是VNET的基本想法
link |
好,那我們剛才講的都是拿文字當作輸入,那有沒有可能有其他種類類型的輸入呢?
link |
有可能的,你可能可以拿圖片當作輸入,可能可以拿影片當作輸入
link |
舉例來說,你可以給Machine看這張圖片,然後問它一些跟這個圖片有關的問題
link |
比如說這群人在幹嘛,穿藍色球衣的人在幹嘛,或場上有幾個球員等等
link |
那怎麼處理這樣子的圖片呢?其實一個常見的做法就是把一個圖片裡面丟到CNN裡面,然後CNN就會給這個圖片的每一小塊一個向量
link |
所以一張圖片也是表示成一堆向量,就好像對Bert而言,一篇文章輸進去就是一堆的embedding
link |
那現在你會有一個CNN,一個pre-trained好的model,然後你把一張圖片丟進去,它也會產生一堆embedding
link |
然後接下來用的QA的方法就跟文字上沒什麼差別,反正今天你的source都是一堆embedding嘛
link |
不管你的source是文字還是影像,通通都會變成一堆embedding,所以接下來回答問題的方法在文字上跟在影像上其實是沒有那麼大的差異的
link |
那我們實驗室嘗試做了很多以audio當作輸入的QA,因為你知道說網路上不是只有文字,不是只有影像,還有很多聲音
link |
聲音裡面往往包含了很重要的資訊,比如說這些聲音可能是新聞,可能是線上課程,它們裡面會包含了非常豐富的資訊
link |
我們也許可以從這些線上課程或者是新聞裡面擷取出重要資訊來當作問題的答案
link |
那怎麼做語音的QA呢?也許最簡單的想法就是先做語音辨識,把聲音訊號辨識成文字,然後根據這些語音辨識的結果來回答問題
link |
那我們實驗室最早嘗試讓機器去做托福的聽力測驗,這個文章其實蠻早的,這個是16年的文章
link |
我們在做這個研究的時候,那個時候連squat都還沒有,那個時候沒有squat,那個時候只有baby
link |
但我就想說,我們能不能夠讓machine去聽一段聲音,比如說線上的課程回答問題呢?
link |
那要怎麼開始做呢?我就想到托福的聽力測驗,當時有一個很強的同學叫做曾博祥,他去網路上收集了很多托福聽力測驗的問題
link |
他去考滿分的網站,爬了好幾百題,好幾百題今天聽起來怎麼那麼少,但當年會覺得不錯不錯,我們有快一千題的問題,應該是可以訓練一個模型的
link |
爬了近千題的托福聽力測驗的考古題,然後我們就用考古題來訓練一個模型,看看能不能讓機器去回答托福聽力測驗的問題
link |
托福聽力測驗大概像這個樣子,就是你有一段聲音,給機器聽,問機器一個問題,然後揭曉四個選項,希望機器可以選出正確的答案
link |
當然當年沒有BERT,不過沒有關係,反正就是train一個recurrent network,把語音的辨識結果讀過,把問題的辨識結果讀過,然後把這四個選項讀過,從四個選項裡面選一個正確的答案
link |
當然今天看起來就是一個一般的QA的問題,不過在當年連SQUAD都還沒有的年代,那個時候可以讓機器回答托福聽力測驗的問題是非常讓人興奮的
link |
後來有了SQUAD以後,我們就想說,那我們來做一個語音版的SQUAD吧,SQUAD就是有文章、有問題、有答案
link |
那我們就找人來念一些文章,找人來念一些問題,然後我們就有語音版的SQUAD就可以做Audio QA相關的研究
link |
本來在把這篇paper發表之前,在把Audio版本的SQUAD發表之前,我們把這篇Corpus的名字取叫Spoken Open Domain Question Answering,縮寫就是SODQA
link |
我是不知道SODQA是什麼,我不知道SOD是什麼,不過我覺得這個名字太棒了,太好了,我們就用這個名字來發表文章
link |
然後如果發表的時候,有人露出了奇怪的笑容,就像現在螢幕前的你一樣,我就要斥責他說,我根本不知道你在笑什麼
link |
但是學生後來覺得心裡過不去,還是把這個SOD改了,就把本來Spoken Open Domain改成Open Domain Spoken Question Answering
link |
這個同學是嘉軒,嘉軒後來覺得心裡過不去,就把SODQA改成ODSQA
link |
剛才我們講說怎麼做Audio的Question Answering,很簡單就是先做語音辨識,但是語音辨識會遇到什麼問題呢?就是語音辨識會有錯誤
link |
所以我們需要想一些辦法來讓我們的QA model處理語音的錯誤,我們這邊就列一些文獻給大家參考
link |
舉例來說,一個思考的方向是,也許今天語音的QA,它不一定要讀文字,它也許可以讀subword的unit
link |
比如說以中文為例,如果你單純看中文的字,比如說我說城市,你可能很難正確辨識說城市是city還是program
link |
如果你看字的層級,有比較大的辨識錯誤
link |
但是如果你在降一階,看注音符號的層級,那個也許就不會有錯了
link |
反正我說城市,注音符號辨識出來可能是正確的,雖然機器不知道是哪一個字
link |
但也許發音是對的,就可以正確的辨識出這段聲音的注音符號是什麼
link |
所以也許可以讓機器在注音符號的那個level去做Question Answering
link |
這樣可能可以得到不一樣的答案,可能可以得到跟用文字做Question Answering互補的結果
link |
另外一個我們發展的技術是使用了Adversarial Learning來做Domain Adaptation
link |
為什麼今天做語音的QA會需要Domain Adaptation呢?
link |
因為在做語音QA的時候,我們這個語音的訓練資料很少
link |
所以我們期待其實文字的資料是可以幫一些忙的
link |
因為文字的QA的Data很多嘛,語音QA的Data就一點點嘛
link |
但是文字QA的那些文章是沒有語音辨識錯誤的
link |
所以他們跟有語音辨識錯誤的語音QA中間就是有一個Mismatch
link |
那怎麼辦?我們期待用Domain Adversarial Training的方法來解這個問題
link |
但是更進一步,我們真的一定要做語音辨識嗎?
link |
做一個真正的End-to-End的語音QA
link |
反正這個是莊永松助教做的啦,他Train了一個Speech Bird
link |
這個Speech Bird吃問題、吃聲音、沒做語音辨識
link |
直接告訴你答案落在聲音訊號的哪裡到哪裡
link |
End-to-End硬Train下去,然後就可以讓機器回答問題了
link |
當然你直接這樣做,你得到的正確率不可能跟有做語音辨識一樣高
link |
但是我們發現說,首先這個直接End-to-End做的Speech Bird
link |
就是你把有做語音辨識的模型跟沒有做語音辨識的模型的結果
link |
然後在語音辨識錯誤率特別大的那些語音檔裡面
link |
Speech Bird的Performance甚至是可以比有做語音辨識的Performance還要稍微再好一點的
link |
好,那剛才講的都是從單一的來源來回答問題
link |
那有沒有可能從多個不同的來源來回答問題呢?
link |
是有可能的,比如說有一個比賽叫做Movie QA的比賽
link |
它是期望機器看一個電影的片段,然後回答問題
link |
比如說有影像的資訊,還有文字,比如說字幕的資訊
link |
所以在Movie QA這個比賽裡面,回答一個問題
link |
其實是提供了各種不同來源的資訊,有影像的也有文字的
link |
不過後來實際上比賽發現說文字的資訊有點太強了啦
link |
單用影像就是幾乎沒辦法回答問題,而且影像對文字幾乎沒有幫助
link |
如果你要做出最好的結果,都用文字就嚇嚇叫了,用文字的結果其實是最好的
link |
然後之前我們實驗室這個吳宥學、劉子健同學
link |
而且他們當時在比賽結束的時候還排名第二
link |
那個時候他們就設計了一個很複雜的模型叫QACNN
link |
那我們這邊就沒有細講,只是放在這邊告訴你說
link |
就是都流行疊這種很複雜的模型去處理文章跟問題
link |
那我們就停在這邊,看看大家有沒有問題要提出來的