當前位置:成語大全網 - 書法字典 - 問答問題解析的七種方法及優化思路

問答問題解析的七種方法及優化思路

在《談智能搜索與對話式OS》中提到,人機對話系統有三種常見場景,分別是:聊天機器人、問答和VPA。本文涉及的解析方法主要適用於問答系統中的封閉領域問答,即將用戶提問解析為庫中已有的標準問題。

這裏說的七種方法都是看了文獻後總結出來的,並不都是成熟、穩定、商業化的,目的只是提出思路供參考。

基於規則的方法通常在缺乏訓練數據的情況下使用。因為它與下面的基於統計的方法有很大不同,所以被記錄為零方法。

基於規則的解析系統通常由兩部分組成:壹是“規則庫”,解析規則通常是CFG上下文無關文法;另壹個是同義詞數據庫,記錄了標準詞中壹些常見的同義詞。

整個句法分析是壹個上下文無關的語法歸約過程。首先進行自動分詞,然後根據同義詞庫將用戶問題中的詞歸約為標準詞,再將歸約後的問題與規則庫中的分析規則進行比較。壹旦比對成功,用戶問題就成功還原為分析規則對應的標準問題。

比如敘詞表中有兩條記錄:“失敗:不訪問、不錄入、不成功、錯誤”和“登錄:登錄、登錄”,規則庫中有壹條規則:“賬戶登錄失敗:[賬戶][登錄][失敗]”。

有壹個用戶提問說“為什麽我不能登錄我的帳戶?”。首先假設分詞正確,分詞的結果是“我怎麽|賬號|登錄|上不去|”;之後進行減詞,減詞的結果是“我的賬號怎麽登錄失敗了?”;然後對比規則“賬號登錄失敗:[賬號][登錄][失敗]”,發現對比成功。這個用戶問題成功簡化為壹個標準問題“賬號登錄失敗”,我們將系統中“賬號登錄失敗”對應的標準答案提供給用戶完成交互過程。

這樣可以在壹定程度上解決問題,但是缺點也特別嚴重。首先,“規則庫”和“同義詞庫”需要人工構建,需要巨大而長期的人力資源投入。因為語言的表達理論上是無限的,能想到的規則和同義詞總是有限的;而且隨著語言的發展或者業務的變化,整個規則庫和同義詞庫的維護也需要持續的人力資源投入。

其次,編寫規則庫需要豐富的經驗,對人員素質要求極高。由於解析規則相當抽象,在如此高的抽象程度下,即使編寫人員有豐富的經驗(如果沒有經驗就更糟了),不同解析規則之間的沖突也是不可避免的,即同壹個用戶問題會被多個標準問題的解析規則成功比對。在這種情況下,標準題選擇/評分的問題需要另壹個系統來解決。

換句話說,我們可以把根據用戶問題找到標準問題的過程看作是壹個輸入查詢獲取文檔的搜索過程。

我們可以嘗試使用傳統搜索引擎中使用的檢索模型來分析用戶問題。《論搜索引擎的基礎(壹)》中提到BM25是目前最好的檢索模型,我們就以BM25模型為例進行分析。

BM25模型的計算公式如下:

BM25模型的計算公式綜合了IDF因子、文檔詞頻、文檔長度因子、查詢詞頻四個因子,用三個可自由調整的因子(k1、k2、B)來調整組合各因子的權重。

其中n代表文檔總數,n代表有對應詞的文檔數,f代表文檔中對應詞的詞頻,qf代表查詢語句中對應詞的詞頻,dl代表文檔長度。

BM25型號有三種使用方法。以標準問題、標準問題和標準答案、歷史上與標準問題正確匹配的用戶問題集為文檔,通過公式計算其與用戶問題的相似度,然後按相似度排序,取出得分最高的標準問題作為分析結果。

這個想法我沒有實驗過,但是我猜測這種方法雖然節省了很多人力,但是在這個封閉領域QA系統中的表現應該不如之前基於規則的方法,而基於檢索模型的方法在開放領域中表現會更好。

另外,基於傳統檢索模型的方法會有壹個固有的缺陷,即檢索模型只能處理查詢和文檔的重疊詞,而傳統檢索模型不能處理詞的語義相關性。前壹種方法通過人工詞庫在壹定程度上解決了語義相關問題。

如上所述,完全基於檢索模型的方法不能處理詞的語義相關性。

為了在壹定程度上解決這個問題,我們可以使用LDA/SMT等方法,通過語料庫挖掘詞與詞之間的同義關系,為每個詞自動構建同義詞度高於閾值、大小合適的同義詞表。在代入檢索模型公式進行計算的過程中,如果在文檔中發現被搜索關鍵詞的同義詞,可以根據同義詞的程度乘以壹定的權重,然後計入關鍵詞的詞頻計算中。

《談智能搜索與對話式OS》中有對LDA/SMT的介紹。

簡單來說,LDA可以合理地將單詞分類到不同的隱含主題中;並且通過計算兩篇文章的話題向量θ的KL散度(相對熵),可以得到兩篇文章的相似度。SMT模型來自微軟,其目的是將翻譯模型引入到傳統的檢索模型中,以提高檢索模型處理語義相關詞對的能力。百度也采用這種模式來提高搜索引擎返回結果的質量。

單詞嵌入將單詞表示為分布式表示,即低維向量空間中的單詞向量。分布式表示下的詞可以利用余弦距離計算詞之間的語義相關度。對應於壹熱表示,壹熱表示下的詞向量的維數與詞表的維數相同,不同詞的詞向量是正交的。傳統的詞集模型(SOW)和詞袋模型(BOW)采用壹熱表示法。

我們可以用深度學習的方法得到單詞分布表示的單詞向量。比如訓練壹個普通的神經概率語言模型,可以得到該詞的詞向量,或者參考word2vec中的方式訓練CBOW或者Skip-gram模型。神經概率語言模型的引入,CBOW和Skip-gram都是在談論智能搜索和對話式OS時提到的。

借助百度,用DNN建模的思路如下:

我們需要使用壹組用戶問題-標準問題對的正反例作為訓練語料。借助上述方法,正反例均進行單詞嵌入並發送給DNN,正反例之間的語義差異采用成對排序損失建模。

基於DNN的最後壹種方法可以在壹定程度上解決詞的語義關聯問題,但它沒有恰當地處理句子中的短距離依賴,如無法區分“A到B”和“B到A”。

根據百度的評測結果,CNN在應對短距離依賴方面有更好的表現。

圖片來自李航博士的《用於匹配自然語言句子的對流神經網絡架構》中的ARC-1:

這種方法的基本思想是將問題中的每壹個單詞都嵌入,得到壹個與每個單詞對應的定長單詞向量。我們把問題表示成壹個二維矩陣,每壹行表示問題中對應詞對應的詞向量。對這個二維矩陣進行多次卷積(卷積核的寬度與詞向量的維數相同,高度多為2-5),最終得到壹個壹維的特征向量。我們用CNN同時處理用戶問題和標準問題,得到庫中用戶問題和標準問題對應的特征向量。之後,這兩個向量被拼接並發送到壹個多層感知器,感知器計算兩個問題的匹配度。

此外,有人指出,如果將兩個特征向量直接拼接並發送到MLP,會丟失邊界信息,因此我們將特征向量A、特征向量B和aTb同時發送到MLP,以計算相似度。

ARC-2結構也來源於李航博士的上述論文:

ARC-2相對於ARC-1的改進之處在於,ARC-2在獲得類似ARC-1的結果的高層抽象表示之前,試圖讓兩個句子相互作用,而不是通過CNN結構獲得各自的高層抽象表示。

在ARC-1模型中,壹個特征圖只是壹個列向量,或者壹維矩陣,幾個列向量組合起來形成ARC-1示意圖中的圖案(二維),而在ARC-2中,壹個特征圖變成壹個二維矩陣,幾個二維矩陣疊加起來形成ARC-2示意圖中的圖案(三維)。

之後的卷積和池化過程類似於CV中的CNN。與前面的方法類似,1D卷積涉及兩個字向量的連接,也可以采用前面提到的方法來避免邊界信息的丟失。

也有人提出,在ARC-2結構中,直接使用傳統的單詞嵌入方法得到的單詞向量組成句子作為輸入,並不是最佳方案,最佳方案是使用已經過LSTM的隱藏狀態。

我們可以用LSTM結構訓練壹個RNN語言模型,如下圖(以普通RNN為例):

從圖中可以發現,當輸出為“E”時,隱層向量中的第三分量最大,而當輸出為“L”時,第壹分量最大,當輸出為“O”時,第二分量最大。我們可以用RNN的隱藏狀態作為分布式表示的詞向量,作為CNN(ARC-2)的輸入,經過測試可以得到更好的結果。

可信度高的分詞結果是後續句法分析步驟的基本前提。

在《自然語言處理基礎(下)》中,我介紹了壹些經典的分詞方法,但都是比較早的研究成果。CRF方法是目前公認的最有效的分詞算法。

CRF方法的思路很直接,就是把分詞問題看成壹個序列標註問題,對句子中的每個詞標註詞的位置:

CRF分詞的過程是標註單詞位置,然後在B和E、S單詞之間形成分詞。互聯網上有很多公開的基於CRF的分詞工具。

至少有四個角度可以在現有模型的基礎上進壹步提高解析質量,包括:問題規範化、用戶狀態、強化學習和多輪對話。

問題規範化的目的是為了對用戶輸入具有更好的容錯能力。

簡單的,比如:簡繁體規範化,全角半角規範化,標點處理,大小寫規範化。更復雜的東西,比如中文錯別字的糾正。自動改錯技術應用廣泛,對於提升系統的用戶體驗能起到很大的作用,可以說性價比很高。

錯別字糾正的常見做法是訓練噪聲信道模型。

我們可以從用戶狀態中提取特征,並在訓練和分析期間將它們作為附加信息作為神經網絡的輸入。

可以考慮的用戶狀態至少包括:

其次,可以采用強化學習,設計合理的獎勵機制,讓分析系統在與環境交互的過程中自主更新策略。

與普通的監督學習方法相比,強化學習有兩個明顯的優勢:壹是更新強化學習策略所需的數據主要來自與環境的交互/采樣,而不是昂貴的人工標記數據;另壹種是強化學習產生的策略按照獎勵機制獨立叠代更新,會有壹些創新的做法,而不僅僅是模仿人類提供的“標準”做法。

雖然QA問題解析不像遊戲那樣有“策略\創新玩法”的概念,但在解析優化上還是可以幫助節省大量的人工閱卷費用。

強化學習方法應用的核心問題之壹是獎勵機制的設計。在QA場景的獎勵機制設計中,至少可以考慮以下幾個角度:

多輪對話技術可以進壹步提高與用戶對話的連貫性。

我傾向於把多輪對話分為封閉域和開放域兩種場景,不同場景的實現思路應該是不壹樣的。

封閉領域場景下多輪對話的特點是:系統能解決的問題是有限集合,多輪對話的目的是引導用戶到我們能解決的問題。

開放領域場景下多輪對話的特點是系統需要解決的問題是壹個無限集合,多輪對話的目的是根據上下文更準確地理解用戶的需求。

在這種指導思想下,封閉域多輪對話的核心思想應該是“填槽”,而開放域多輪對話的核心思想是“語境替換”和“主體補全”。

《談智能搜索與對話式OS》介紹,百度利用槽位填充技術做NLU,利用“上下文替換”和“主題補全”提升其DuerOS對話能力。

再者,槽位填充、上下文替換、主題補全的技術基礎是“序列標註”。下面是百度的兩個PPT:

根據百度的PPT,使用雙向LSTM+CRF進行序列標記是商業上可行的方法。

選擇合適的人工訪問時機也是提高QA系統整體性能的方法之壹,其核心問題在於平衡用戶體驗和投入成本。手動接入越早,用戶體驗越好,但成本越高。

下面是壹個簡單的提供螞蟻金服服務的方法:如果系統連續三次向用戶提供相同的答案,則顯示手動進入按鈕;如果用戶連續兩次問客服問題(如“我要人工”“妳客服電話是多少”),會顯示手動進入按鈕。

問答系統的另壹個重要部分是答案庫。

答案錄入的優化至少可以從三個角度考慮:

回答形式的多樣性非常好理解。例如,馬驍答題支持包括文本、鏈接、圖片和視頻在內的多種答題形式。

上述分析和優化中已經涉及到個性化(考慮用戶狀態的分析和優化),上述分析思路也可以應用到答案錄入中。我們可以為不同註冊時間、不同支付金額、不同訪問路徑等用戶提供不同的個性化回答。

答案對用戶的幫助看似抽象,但也很容易理解。總的來說,我個人對QA系統的答案按“地圖級”、“導航級”、“專車級”進行評分:

按照人機對話系統原有的場景分類,提供“汽車級”答案的QA系統可以稱為VPA。

對於答案庫的優化,在答案錄入完整的前提下(答案形式足夠豐富,可以為不同用戶提供個性化的答案),至少有兩個優化點:

解析優化中強化學習方法獎勵機制的設計思路也可以用來發現答案庫中的問題,因為很多時候很難清晰區分用戶的負面反饋是針對解析系統還是答案本身。

除了從用戶的負面反饋中發現問題,對於以上兩個優化點,我們還應該有壹些預防機制來提前避免這些問題。

比如第壹點“答案庫中的標準答案有錯誤”,如果不是輸入人員的素質問題,最大的可能來自於答案的時效性,也就是我們已經給用戶提供了過期的答案。為了解決這個問題,我們可以在輸入答案的時候加上壹個“臨時”的標簽,表示這個答案時效性很強,需要及時更新。

至於第二點“部分問題的答案在答案庫中缺失”,最大的可能性來自於突發事件和業務變化。比如系統服務宕機,安裝了新版本的系統或者組織了壹些運營活動,對於這些可能引起用戶疑惑的變化,我們要提前準備壹些FAQ,錄入到答案庫中。

另外,我們在輸入新題型及其標準答案時,需要註意新輸入題型與原分析系統的適應性,避免出現新輸入題型難以被分析系統分析的情況。可以采用的方法有,比如在輸入新問題的同時,主動輸入壹些不同的問題作為初始訓練語料(網易奇魚雲客服的做法)。