【問答系統】中國面積大還是美國面積大?
在SQuAD數據集性能超過人類之際,致敬研究者們!
先想一下,如果有人問你「2022年冬奧會在哪裡舉辦」這個問題,你會怎麼做?
當然如果你已經知道這個問題的答案了,直接就可以說出來。
但是人的知識是有限的,大部分的問題自己之前都是不知道答案的,於是你就去百度查一查。這時候,你有兩個選擇:一個是把整個問題都作為檢索詞輸入百度,一個是從問題中提取關鍵詞再進行檢索。我們來看看兩種選擇的結果。
檢索詞:2022年冬奧會在哪裡舉辦
檢索詞:2022 冬奧會
看起來,兩種檢索詞的效果其實差不多,第一種將整個問題作為檢索詞的做法搜索到的更多是網路上其他人問這個問題的記錄,而第二種關鍵詞檢索的方法搜索到的更多是更官方的頁面。
現在,有了這麼多文字資料,就可以在此基礎上回答問題了。這時候因為已經讀過問題,腦子裡對問題有了印象,再去讀材料的時候,就是有重點地讀了。比如百度百科的標題「2022年北京-張家口冬季奧林匹克運動會」,首先由常識知道「冬季奧林匹克運動會」和「冬奧會」是一個意思,又發現了「2022年」和問題中的年份相匹配,最後還要知道出現在「冬季奧林匹克運動會」之前的「北京」和「張家口」是兩個地名,而問題中「在哪裡」說的也是地名。於是,你就將「北京-張家口」這個詞記在腦子裡,作為備選答案。
從閱讀材料的角度,眼睛在這段文字材料上掃過去的時候,先看到的是「冬季奧林匹克運動會」,匹配了問題中的一部分關鍵詞,然後往前看到了「北京-張家口」,心裡想著這可能是答案,再往前看到了「2022年」,匹配了問題中的另一個關鍵詞。這時候兩個關鍵詞都匹配上了,就重點盯著中間的地名,把它記在腦子裡。
從答案定位的角度來看,是在第一遍讀材料的時候將這兩個地名的概念的一點點印象留在記憶中,確定了這句話和問題匹配之後,在第二遍讀材料找答案的時候憑著記憶尋找這兩個概念對應的詞。如果不是在網上搜索而是紙質的閱讀材料(就像英語考試的閱讀題),則可以把這兩個詞用筆划出來。
但是還有一個問題,根據材料抽取的答案有時候是「北京-張家口」,有時候又只有「北京」(尤其新聞標題),這時候又該怎麼辦呢?雖然答案為「北京」的次數較多,但是根據先驗知識,你知道新聞標題有時候會用簡略的形式,而相對而言百科類的材料更為嚴謹,因此你最終選擇「北京-張家口」作為問題的答案。
總結一下,我們可以把這個回答問題的過程分為以下5個步驟:
1、 根據問題檢索相關文字材料。
2、 初步閱讀文字材料,根據與問題的相關程度判斷每一段文字材料是否包含答案,這個過程中可能需要反覆對比問題和材料。
3、 仔細閱讀文字材料,提取材料所說的大致意思,根據問題初步確定答案的大致位置,並將答案的概念留在記憶中,這個過程也需要在材料和問題之間反覆閱讀
4、 再次閱讀文字材料,根據記憶確定答案的位置,抽取答案對應詞語。
5、 比較從不同材料抽取的答案,確定最終答案。
說了這麼多「顯而易見」的結論,其實是想說,如果要讓計算機來完成【從一個問題到一個答案】的過程,需要怎樣的結構和模型才能完成。
同樣地,對應上面的5個步驟,計算機在回答問題的時候也應該是以下5個步驟:
1、 知識庫文本檢索。
2、 材料相似度篩選。
3、 注意力語義表示。
4、 答案字元串提取。
5、 各材料答案比較。
其中,3、4、5過程就是今天宣布已有模型性能超過人類的SQuAD(The Stanford Question Answering Dataset)數據集所定義的任務。下圖是SQuAD數據集里的一道題:
這段短文講的是降水(Precipitation),以第三個問題為例,在做題的時候先看的是問題,從問題中找出關鍵詞(比如form、collide with和它的主語water droplets和賓語ice crystals)(依存關係?)(注意力機制),想著問題再去看材料(語義表示),在看材料的時候尋找與關鍵詞相匹配的一句話(相似度計算),再回去看問題發現問題問的是Where(注意力機制),然後再看一遍剛才挑出來的句子,心裡想著我要找的是一個地方,讀完之後對within a cloud的意思就有了一點記憶(記憶機制),最後再讀一遍材料,在讀前面的詞的時候把它們都跳過了,直到讀到within a cloud的時候發現與之前的記憶相匹配,於是把這三個詞選出來作為答案。
當然還有另外一種做題方法,讀文章的時候就把文章的內容完全理解,把有價值的信息記住,在回答問題的時候直接根據記憶生成答案那幾個詞。如果在高考的時候你是這樣做題的,那你一定是英語大神。
這也對應現有閱讀理解系統的兩種思路。一種是答案抽取模型,從材料中直接選出幾個詞作為答案,代表模型就是今天超過人類的微軟R-Net模型。另一種是答案生成模型,使用encoder-decoder框架根據問題和材料的表示生成答案,代表模型是同樣來自微軟的S-Net模型,但S-Net模型並非針對SQuAD數據集,而是針對更加困難的微軟MS-MARCO數據集,這個數據集的主要特點就是答案不一定能夠通過抽取一段材料直接獲得,而有時候需要綜合幾段材料的信息。
下面不妨就來講講這個R-Net模型到底是何方神聖。
首先是標準操作:查詞向量表獲得每個詞的向量表示,此外還有一個字元級別的單詞表示為了解決沒見過的詞(OOV)的問題,這個表示是通過一個雙向RNN閱讀單詞里每一個字母的表示,將RNN最後的輸出向量作為單詞的字元級表示。接下來也是標準操作,用雙向RNN把問題和材料讀一遍,生成包含上下文的每個詞的表示。
下面一層是注意力層,對於材料中的每個詞,將其與問題中的每個詞做匹配,將匹配結果作為注意力,對問題進行總結,這樣就獲得了對於材料中的每個詞都有一個問題的表示,將這個表示和材料詞本身一起輸入一層雙向RNN。在輸入之前,還用一個「門」根據每個詞的重要程度對輸入RNN的向量做「縮放」(但是只有縮沒有放)。這一層就相當於帶著問題看材料,並且跳過不重要的詞。
從上一層輸出出來的向量序列,就已經是帶著「與答案的相關程度」信息並且包含上下文信息的材料表示了。下面一層是自注意力層,為的是在全文的層面更多地尋找證據(比如前面說到的「2022年」和「冬季奧林匹克運動會」)。和上面的注意力機制相同,對於材料的每個詞計算材料的每個詞(Self的來歷)與它的關係,作為注意力總結材料,再和材料的每個詞一起輸入雙向RNN,同樣有根據表示本身判斷重要性並進行縮放的門控機制。這樣就獲得了包含全文重要性信息、上下文信息和問題匹配信息的材料的最終表示。
下面要判斷答案的開始位置和結束位置。首先對問題做一個attention pooling的總結,使用這個總結表示計算與材料的最終表示中每個詞的注意力,將注意力最大的地方作為答案開始的地方,並用這個注意力對材料做總結。
接下來將剛才的問題總結向量作為一個RNN的初始狀態,將材料總結向量作為RNN輸入進行一步RNN計算(在我看來這個RNN只計算了一次,也可能我理解有偏差),得到一個輸出狀態,再利用這個狀態計算與材料最終表示中每個詞的注意力,將注意力最大的位置作為結束位置。到此為止就可以從材料中抽取一個子字元串作為答案了。
最後,回到這篇文章標題的那個問題,「中國面積大還是美國面積大」。如果是人類的話,可能看到這個問題就會去維基百科分別查一下中國的面積和美國的面積,比較一下就可以做出回答了。但是,這可就難為計算機了,如何讓計算機識別出來這是在做比較,然後分別獲取信息最後完成比較,也就是說如何根據兩個數據完成這樣一個推理,目前還沒有成型的方法。現在計算機能做的也只有拿這個問題去搜索一下,看看別人是怎麼回答的。
推薦閱讀:
※中國3D列印歷史大事件
※腦機介面四大倫理問題:神經科技和AI將如何重塑人機關係
※作一名優秀的用戶運營,實在是太難了(上)
※嘗試理解 TensorFlow 的總體機制
※【ChatbotZine】聊天機器人資訊18.03