NLP問答任務
相似度和規則匹配,都是早期的方法,現在主流的方法,都是基于生成的方法
結構化資料問答,有兩種形式,一種是知識圖譜形式、一種是關系型資料庫形式,

主要應用在企業中,減少銷售的成本

應用于商業智能,用于報告生成,解放了財務能力,降低人力成本

結構化資料問答任務
結構化資料問答:基于給定的結構化知識庫和自然語言問題,給出問題對應的答案
任務能力:
- 推理能力:基于現有知識推理/計算給出答案,E.g. OPPOA93比魅族18貴多少呀
- 輸出結果可解釋:輸出知識庫查詢陳述句
結構化形式存盤,不盡存盤了問題的知識和答案,這種存盤有利于推理和計算
結構化問答能夠輸出查詢陳述句,是人類可讀可理解的,相對于其它問答形式,這種是可控的,

表格問題中,一般用語意決議技術(Text-to-SQL)
表格問答:核心技術,將自然語言問題轉成資料庫上可執行的SQL查詢陳述句
兩大功能:
- SQL決議功能:比較關鍵,是表格問答的核心技術,如何將自然語言轉成可查詢的SQL陳述句
- SQL執行功能


評估方法
常用的有兩種,這兩種是不等價的,
- 精確匹配正確率:評估生成的SQL的正確率,預測SQL與標準SQL相等的問題占比
- 執行正確率:評估答案正確率,執行預測SQL獲得正確答案的問題占比
分母是問題集合大小N,預測的SQL和標準的SQL相等的問題數量,在判斷相等的時候會忽略順序的影響
問題
這種方式和第一種相比,分子是通過答案相比,這兩種方式是不等價的,
- 精確匹配正確率:針對同一個問題,有不同的SQL寫法,而且SQL都是正確的,這種情況下,如果使用第一種評估方式,標準的SQL只是正確寫法中的一個,使用這種方式會漏掉一些正確的結果,導致評估的結果會偏低,這種情況就比較適合使用第二種方式(評估答案準確率)
- 執行正確率:資料庫的不完畢性,有些問題是沒有答案的,這樣的話,就導致正常的SQL沒有答案,錯誤的SQL也沒有答案,按答案判斷兩種情況都是正常的,這樣會導致評估結果會偏高
在實際應用在選擇評估方式時,
-
- 看選擇的測驗資料,提供了哪些資訊,有沒有提供SQL、答案,
-
- 實際應用更關注哪個指標,是關注SQL正常,還是更關注答案

資料集
一般是按資料集化分,要么問題在訓練集中,要么在測驗集中,多領域是按資料庫劃分的,在一個資料集中
-
多領域(cross-domain):訓練/測驗集使用的資料庫是否相同或交叉,資料集是包含多個資料庫的,每個資料庫有一個領域,每個領域有一個或多個資料庫,資料集劃分時,是按訓練集、測驗集劃分的,一個資料庫所有的問題,只能屬于一個集合,要么屬于訓練集,要么屬于測驗集,這會導致測驗集中的資料庫和問題,在訓練集中是沒有見過的,多領域化分,是用來劃分模型的泛化性,同時也給任務帶來很大的挑戰
-
單/多表(multi-table):構成資料庫的表的數量,多表涉及到表的檢索,一張表為單表,涉及多張表的表示多表
-
簡單/復雜:從SQL角度評估,是否包含高級從句、集合操作、嵌套等,簡單 SQL只包含SELECT WHERE(答案、條件),復雜:有可能包含排序、分組、集合操作
CSpider 資料庫是英文,問題是中文

主流學習方式
基于規則的方式,已經不用了,主流的有以下兩種
-
有監督方法:以生成的SQL是否正確,來指導模型的學習,這種學習方法依賴于標準資料,由于正確的SQL陳述句標注比較困難
-
弱監督方法:給出資料庫問題,以及問題對應的答案,標注答案要比標注SQL相對容易很多,在這情況下,SQL是中間輸出,會以答案指導SQL的生成,能夠輸出正常答案的SQL就是正確的,這種需要在整個資料庫中去搜索合理或正常的正確陳述句,搜索空間比較大,這種方式比較適合簡單的資料集,復雜的資料集很難執行下去,
https://github.com/salesforce/WikiSQL
為了各類資料集都適用,后面都是基于有監督方法的介紹

encode-decoder 中英文翻譯,中文句子翻譯成英文句子,
encode 把中文句子映射到表示空間上,完成編碼的作用
decode 從表示空間上,解碼出對應的英文句子

從下往上看,把多輸入進行拼接,自然語言和DB Schema 的拼接,將拼接輸入給 Encoder 編碼器,解碼器按順序輸出每個元素,直到遇到結束符,最終生成序例(SQL陳述句)
Decode 引入了兩個開關,generate、copy 多領域資料集在劃分訓練集和測驗集時,是按資料庫進行化分的,測驗集中的一些問題在訓練集中沒有見過,如何在生成的時候把這些沒有見過的生成出來,輸出資訊,應該包含在輸入定義的 db schema 資訊中,這時候就可以把定義的輸入資訊copy到輸出資訊中,
對于 SQL 關鍵詞,是生成的,資料庫和問題中的元素是copy的

Text-to-SQL任務挑戰
領域泛化:測驗集中資料庫未在訓練集中出現過
輸出結構化:生成的SQL陳述句在資料庫上可執行,即滿足資料庫結構、SQL語法


Text-to-SQL實體
解決方案
編碼:Relation-awarerepresentation 利用匹配關系強化編碼方式
解碼:Grammar-baseddecoder 利用語法解碼,保證生成的SQL是滿足語法的

Encode => 隱式表示 => Decode

輸入部分仍然是自然語言+Schema的拼接,在這邊為了更好的識別條件值,增加了條件值的一個拼接,
使用基礎的編碼器,對資料進行一個表示,得到一個隱式表示,
在基礎編碼器上,又增加了一個 Relation-aware Transformer Encoder:用匹配關系增強表示,
接下來在Decode中引入了 Grammar-based Decoder 語法解碼,這種解碼不是在每次輸出時輸出一個個元素,而是輸出的一個語法序列,

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_sql

SchemaLinking
自然語言和資料庫Schema進行匹配映射,把匹配資訊構成匹配關系矩陣,這個矩陣作為后面模塊的輸入,
先對自然語言進行分詞
問題中的每個詞與DB Schema中的成分進行匹配,標注出匹配方式和程度,構建出關系矩陣,顏色表示匹配關系,不同的顏色表示不同的關系

Encoding–BasicEncoder
- 基礎編碼:把輸入映射到隱式空間的程序
Dataprocess:text2sql/dataproc/ernie_input_encoder_v2.py中類ErnieInputEncoderV2
Encoder:third/ERNIE或PaddleNLP:from paddlenlp.transformersimport BertModel

Encoding–Relation-awareEncoder
- 匹配關系增強編碼:利用SchemaLinking 中建立起來的關系矩陣,來指導編碼,進而強化編碼,
學習輸入中的每個詞對目標詞的權重,
輸入自然語言和DB Schema進行拼接,
權重越大,對目標詞的影響越大
1:08:40

Decoding
- 語法解碼:解碼程序種通過語法生成語法序列,保證語法的合理性
- 基于Copy機制的解碼:對應的元素是資料庫元素時,利用copy機制

Grammar-basedDecoder
基本思想:根據SQL語法設定背景關系無關文法,將SQL生成看作文法序列生成,即文法選擇程序
不再生成單獨的 query元素,而是生成符合SQL語言的語法,最后生成的語法序列是可以構成 sql query的,

是經過領域泛化的,換一個庫不需要重新標注,除非需要很高的準確率,
應用實體演示: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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/556052.html
標籤:其他
上一篇:如何成為10x倍工程師
下一篇:返回列表
