NLP問答任務相似度和規(guī)則匹配,都是早期的方法,現(xiàn)在主流的方法,都是基于生成的方法結(jié)構(gòu)化數(shù)據(jù)問答,有兩種形式,一種是知識圖譜形式、一種是關(guān)系型數(shù)據(jù)庫形式。主要應用在企業(yè)中,減少銷售的成本應用于商業(yè)智能,用于報告生成,解放了財務能力,降低人力成本
結(jié)構(gòu)化數(shù)據(jù)問答任務結(jié)構(gòu)化數(shù)據(jù)問答:基于給定的結(jié)構(gòu)化知識庫和自然語言問題,給出問題對應的答案任務能力:
推理能力:基于現(xiàn)有知識推理/計算給出答案,E.g. OPPOA93比魅族18貴多少呀輸出結(jié)果可解釋:輸出知識庫查詢語句結(jié)構(gòu)化形式存儲,不盡存儲了問題的知識和答案,這種存儲有利于推理和計算結(jié)構(gòu)化問答能夠輸出查詢語句,是人類可讀可理解的,相對于其它問答形式,這種是可控的。
(資料圖)
表格問題中,一般用語義解析技術(shù)(Text-to-SQL)表格問答:核心技術(shù),將自然語言問題轉(zhuǎn)成數(shù)據(jù)庫上可執(zhí)行的SQL查詢語句兩大功能:
SQL解析功能:比較關(guān)鍵,是表格問答的核心技術(shù),如何將自然語言轉(zhuǎn)成可查詢的SQL語句SQL執(zhí)行功能評估方法常用的有兩種,這兩種是不等價的。
精確匹配正確率:評估生成的SQL的正確率,預測SQL與標準SQL相等的問題占比執(zhí)行正確率:評估答案正確率,執(zhí)行預測SQL獲得正確答案的問題占比分母是問題集合大小N,預測的SQL和標準的SQL相等的問題數(shù)量,在判斷相等的時候會忽略順序的影響
問題這種方式和第一種相比,分子是通過答案相比,這兩種方式是不等價的。
精確匹配正確率:針對同一個問題,有不同的SQL寫法,而且SQL都是正確的,這種情況下。如果使用第一種評估方式,標準的SQL只是正確寫法中的一個,使用這種方式會漏掉一些正確的結(jié)果。導致評估的結(jié)果會偏低,這種情況就比較適合使用第二種方式(評估答案準確率)執(zhí)行正確率:數(shù)據(jù)庫的不完畢性,有些問題是沒有答案的,這樣的話,就導致正常的SQL沒有答案,錯誤的SQL也沒有答案,按答案判斷兩種情況都是正常的。這樣會導致評估結(jié)果會偏高在實際應用在選擇評估方式時,
看選擇的測試數(shù)據(jù),提供了哪些信息,有沒有提供SQL、答案,實際應用更關(guān)注哪個指標,是關(guān)注SQL正常,還是更關(guān)注答案數(shù)據(jù)集一般是按數(shù)據(jù)集化分,要么問題在訓練集中,要么在測試集中,多領(lǐng)域是按數(shù)據(jù)庫劃分的,在一個數(shù)據(jù)集中
多領(lǐng)域(cross-domain):訓練/測試集使用的數(shù)據(jù)庫是否相同或交叉,數(shù)據(jù)集是包含多個數(shù)據(jù)庫的,每個數(shù)據(jù)庫有一個領(lǐng)域,每個領(lǐng)域有一個或多個數(shù)據(jù)庫,數(shù)據(jù)集劃分時,是按訓練集、測試集劃分的。一個數(shù)據(jù)庫所有的問題,只能屬于一個集合,要么屬于訓練集,要么屬于測試集。這會導致測試集中的數(shù)據(jù)庫和問題,在訓練集中是沒有見過的。多領(lǐng)域化分,是用來劃分模型的泛化性。同時也給任務帶來很大的挑戰(zhàn)
單/多表(multi-table):構(gòu)成數(shù)據(jù)庫的表的數(shù)量,多表涉及到表的檢索,一張表為單表,涉及多張表的表示多表
簡單/復雜:從SQL角度評估,是否包含高級從句、集合操作、嵌套等,簡單 SQL只包含SELECT WHERE(答案、條件),復雜:有可能包含排序、分組、集合操作
CSpider 數(shù)據(jù)庫是英文,問題是中文
主流學習方式基于規(guī)則的方式,已經(jīng)不用了,主流的有以下兩種
有監(jiān)督方法:以生成的SQL是否正確,來指導模型的學習,這種學習方法依賴于標準數(shù)據(jù),由于正確的SQL語句標注比較困難
弱監(jiān)督方法:給出數(shù)據(jù)庫問題,以及問題對應的答案,標注答案要比標注SQL相對容易很多,在這情況下,SQL是中間輸出,會以答案指導SQL的生成,能夠輸出正常答案的SQL就是正確的。這種需要在整個數(shù)據(jù)庫中去搜索合理或正常的正確語句,搜索空間比較大。這種方式比較適合簡單的數(shù)據(jù)集,復雜的數(shù)據(jù)集很難執(zhí)行下去。
https://github.com/salesforce/WikiSQL為了各類數(shù)據(jù)集都適用,后面都是基于有監(jiān)督方法的介紹
encode-decoder 中英文翻譯,中文句子翻譯成英文句子,encode 把中文句子映射到表示空間上,完成編碼的作用decode 從表示空間上,解碼出對應的英文句子
從下往上看,把多輸入進行拼接,自然語言和DB Schema 的拼接,將拼接輸入給 Encoder 編碼器,解碼器按順序輸出每個元素,直到遇到結(jié)束符,最終生成序例(SQL語句)Decode 引入了兩個開關(guān),generate、copy 多領(lǐng)域數(shù)據(jù)集在劃分訓練集和測試集時,是按數(shù)據(jù)庫進行化分的,測試集中的一些問題在訓練集中沒有見過,如何在生成的時候把這些沒有見過的生成出來。輸出信息,應該包含在輸入定義的 db schema 信息中,這時候就可以把定義的輸入信息copy到輸出信息中。對于 SQL 關(guān)鍵詞,是生成的,數(shù)據(jù)庫和問題中的元素是copy的
Text-to-SQL任務挑戰(zhàn)領(lǐng)域泛化:測試集中數(shù)據(jù)庫未在訓練集中出現(xiàn)過輸出結(jié)構(gòu)化:生成的SQL語句在數(shù)據(jù)庫上可執(zhí)行,即滿足數(shù)據(jù)庫結(jié)構(gòu)、SQL語法
Text-to-SQL實例解決方案編碼:Relation-awarerepresentation 利用匹配關(guān)系強化編碼方式解碼:Grammar-baseddecoder 利用語法解碼,保證生成的SQL是滿足語法的Encode => 隱式表示 => Decode
輸入部分仍然是自然語言+Schema的拼接,在這邊為了更好的識別條件值,增加了條件值的一個拼接,使用基礎(chǔ)的編碼器,對數(shù)據(jù)進行一個表示,得到一個隱式表示,在基礎(chǔ)編碼器上,又增加了一個 Relation-aware Transformer Encoder:用匹配關(guān)系增強表示,接下來在Decode中引入了 Grammar-based Decoder 語法解碼,這種解碼不是在每次輸出時輸出一個個元素,而是輸出的一個語法序列。
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_sql
SchemaLinking自然語言和數(shù)據(jù)庫Schema進行匹配映射,把匹配信息構(gòu)成匹配關(guān)系矩陣,這個矩陣作為后面模塊的輸入,
先對自然語言進行分詞問題中的每個詞與DB Schema中的成分進行匹配,標注出匹配方式和程度,構(gòu)建出關(guān)系矩陣,顏色表示匹配關(guān)系,不同的顏色表示不同的關(guān)系
Encoding–BasicEncoder基礎(chǔ)編碼:把輸入映射到隱式空間的過程Dataprocess:text2sql/dataproc/ernie_input_encoder_v2.py中類ErnieInputEncoderV2Encoder:third/ERNIE或PaddleNLP:from paddlenlp.transformersimport BertModelEncoding–Relation-awareEncoder匹配關(guān)系增強編碼:利用SchemaLinking 中建立起來的關(guān)系矩陣,來指導編碼,進而強化編碼,學習輸入中的每個詞對目標詞的權(quán)重,輸入自然語言和DB Schema進行拼接,權(quán)重越大,對目標詞的影響越大1:08:40Decoding語法解碼:解碼過程種通過語法生成語法序列,保證語法的合理性基于Copy機制的解碼:對應的元素是數(shù)據(jù)庫元素時,利用copy機制Grammar-basedDecoder基本思想:根據(jù)SQL語法設定上下文無關(guān)文法,將SQL生成看作文法序列生成,即文法選擇過程不再生成單獨的 query元素,而是生成符合SQL語言的語法,最后生成的語法序列是可以構(gòu)成 sql query的。
是經(jīng)過領(lǐng)域泛化的,換一個庫不需要重新標注,除非需要很高的準確率。
應用實例演示:https://ai.baidu.com/unit/v2#/innovationtec/kbqa/skilllist
視頻:https://aistudio.baidu.com/aistudio/course/introduce/24177?sharedLesson=1477808&sharedType=2&sharedUserId=2631487&ts=1686638807733
課件:https://aistudio.baidu.com/aistudio/course/introduce/24177?sharedLesson=1567910&sharedType=2&sharedUserId=2631487&ts=1686638791675