問答系統(Question Answering System,QA) 是資訊檢索系統的一種高階形式,它能用準確、簡潔的自然語言回答使用者用自然語言提出的問題。其研究興起的主要原因是人們對快速、準確地獲取資訊的需求。問答系統是人工智慧.
抽取式閱讀理解:它的答案一定是段落裡的一個片段,所以在訓練前,先要找到答案的起始位置和結束位置,模型只需要預測這兩個位置,有點像序列標註的任務,對一段話裡的每個字,都會預測兩個值,預測是開始位置還是結尾位置的概率,相當於對每個字來講,都是一個二分類的任務
機器閱讀技術:2011年7月20日,姚明正式宣佈退役 => 姚明哪一年退役
500萬的維基百科檔案
檢索式問答:先做段落檢索、再做答案抽取
閱讀理解:
郭鶴年 => 郭鶴,3個字裡面對了2個 => 2/3, 完全匹配 => 1,f1(2/3,1) => 0.8
SQuAD(2016) 只能做抽取,資料量是訓練深度神經網路的關鍵要素,資料集有著很大的影響力很多精典的閱讀理解模型,也是基於SQuAD做的
DuReader(2017) 百度2017年釋出的,迄今為止最大的中文閱讀理解資料集,相比較 SQuAD,除了實體類、描述類和事實類的問題,還包含了是非類和觀點類的問題
抽取式閱讀理解,它的答案一定是段落裡的一個片段,所以在訓練前,先要找到答案的起始位置和結束位置,模型只需要預測這兩個位置,有點像序列標註的任務,對一段話裡的每個字,都會預測兩個值,預測是開始位置還是結尾位置的概率,相當於對每個字來講,都是一個二分類的任務
基於LSTM+注意力機制,核心思想就是如何對問題和段落進行互動和語意理解,一般就是在模型裡面加各種 attention,各種複雜的模型結構基本上能總結成圖中的形式,一般分為四層,
理論形式:給定了一個查詢向量Query,以及一些帶計算的值Value,通過計算查詢向量跟Key的注意力分佈,並把它附加在Value上面,計算出 attention 的值。
一般會事先定義一個候選庫,也就是大規模語料的來源,然後從這個庫裡面檢索,檢索出一個段落後,再在這個段路上做匹配。
基於預訓練語言模型(eg.BERT)
領導A訓練好的模型,在領域B應用
過穩定:對於不同的提問,給出相同的答案
過敏感:對於相同語意的提問,給出不同的答案
提高閱讀模型魯棒性的方法:
稀疏向量檢索:雙塔
把文字表示成 one hot (拼寫可能有錯)的形式,常見的有 TFDF、BM?
文章編碼成向量,向量的長度和詞典的大小一致,比如詞典的大小是3W,稀疏向量表示3W,
每個位置表示這個詞有沒有在問題中出現過,出現過就是1
倒排索引,一般採用稀疏向量方式,只能做字面匹配
稀疏向量,幾百、上千萬的檔案都支援
稠密向量檢索:單塔
把文字表示成稠密向量,也就是 Embedding,需要通過模型,對文字的語意資訊進行建模,然後把資訊記錄在向量裡,這邊的向量長度,一般是128、256、768,相較於稀疏向量檢索小很多,每個位置的數位是浮點數
一般通過對偶模型的結構進行訓練,來獲得建模的語意向量,
例:
Q:王思聰有幾個女朋友
P:國民老公的戀人A、B、C......
如果通過 稀疏向量檢索,可能完全匹配不到
稠密向量檢索,可以學習到,國民老公=>王思聰,戀人=> 女朋友
兩者可以互補,一個字面匹配,一個是語意匹配
文字匹配中的兩種模型結構
對偶模型的引數可以共用,共用引數對字面匹配效果好些,不共用效果也差不了太多
實際應用中,把所有的檔案都計算完,把向量儲存下來。線上計算時,直接去檢索
DPR
正例和強負例 1:1 ,弱負例 越多越好
強負例:和檔案有些關係
弱負例:和檔案內容不相關的。
一般做檢索,不會把正例表得那麼完整,在標註時,也是通過一個query,先去檢索出一些候選的段落,在候選段落裡,去標正例和負例,這樣因為檢索能力的限制,可能沒有檢索回來的一些段落就沒有標註,這樣會導致資料集中漏標,所以實際上在訓練過程中會對這些漏標的資料集進行處理,有些資料集只標了正例,並沒有負例,這時候負例只能通過一些方式去構造
推薦閱讀