QA問句解析的七種方法及優(yōu)化思路

《淺談智能搜索和對話式OS》中,提到過,人機(jī)對話系統(tǒng)的常見場景有三種,分別為:閑聊型(Chatbot)、問答型(QA)、任務(wù)型(VPA)。本篇文章所關(guān)注的解析方式主要適用于QA系統(tǒng)中的封閉域問答,也即:將用戶問句解析為庫中存在的標(biāo)準(zhǔn)問句。

這里講的七種方法均為我個(gè)人閱讀文獻(xiàn)后歸納整理而來,并不都是成熟穩(wěn)定可以商業(yè)化的做法,目的只是提出思路以作參考。

0.基于規(guī)則的方法

基于規(guī)則的方法通常在缺乏訓(xùn)練數(shù)據(jù)的情況下采用,由于與后面的基于統(tǒng)計(jì)的方法區(qū)別較大,所以記為第零種方法。

基于規(guī)則的解析系統(tǒng)通常由兩部分構(gòu)成:一個(gè)是『規(guī)則庫』,解析規(guī)則通常為 CFG 上下文無關(guān)文法;另一個(gè)是『同義詞庫』,記錄了一些標(biāo)準(zhǔn)詞的常見同義詞。

整個(gè)解析就是一個(gè)上下文無關(guān)文法歸約的過程。首先進(jìn)行自動(dòng)分詞,接著將用戶問句中的詞依照『同義詞庫』歸約為標(biāo)準(zhǔn)詞,然后再將詞歸約后的問句與『規(guī)則庫』中的解析規(guī)則比對,一旦比對成功,即該條用戶問句被成功歸約到該條解析規(guī)則所對應(yīng)的標(biāo)準(zhǔn)問句上。

舉個(gè)例子,同義詞庫中有這樣兩條記錄:『失?。翰簧先?、不進(jìn)去、不成功、錯(cuò)誤』『登錄:登陸、登錄』,規(guī)則庫中有這樣一條規(guī)則:『賬號登錄失敗:[賬號][登錄][失敗]』。

有一條用戶問句是這樣的『我賬號怎么登陸不上去了』。首先假定分詞正確,分詞結(jié)果為『我|賬號|怎么|登陸|不上去|了』;之后進(jìn)行詞歸約,歸約結(jié)果為『我賬號怎么登錄失敗了』;接著與規(guī)則『賬號登錄失敗:[賬號][登錄][失敗]』比對,發(fā)現(xiàn)比對成功。該條用戶問句被成功歸約為標(biāo)準(zhǔn)問句『賬號登錄失敗』,我們將系統(tǒng)中『賬號登錄失敗』所對應(yīng)的標(biāo)準(zhǔn)答案提供給用戶,完成交互流程。

這樣做在一定程度上能夠解決問題,但缺點(diǎn)也特別嚴(yán)重。首先『規(guī)則庫』與『同義詞庫』需要人工構(gòu)建,這需要巨大且長期的人力資源投入。因?yàn)檎Z言的表達(dá)方式理論上是無限的,而能想到的規(guī)則和同義詞總是有限的;且隨著語言的發(fā)展,或是業(yè)務(wù)的變動(dòng),整個(gè)規(guī)則庫和同義詞庫的維護(hù)也需要持續(xù)的人力資源投入。

其次,編寫規(guī)則庫需要豐富的經(jīng)驗(yàn),對于人員素質(zhì)的要求極高。因?yàn)榻馕鲆?guī)則的抽象程度相當(dāng)高,在這樣高的抽象程度上,即便編寫者具有較豐富的經(jīng)驗(yàn)(如果沒經(jīng)驗(yàn)會(huì)更糟),不同解析規(guī)則之間的沖突也是不可避免的,也即同一條用戶問句會(huì)與多條標(biāo)準(zhǔn)問句的解析規(guī)則比對成功,這種情況下的標(biāo)準(zhǔn)問句選擇/評分問題,又需要另一套系統(tǒng)來解決。

1.基于檢索模型的方法

換個(gè)角度,我們可以將依照用戶問句找到標(biāo)準(zhǔn)問句的過程看做是輸入 Query 得到 Document 的搜索過程。

我們可以嘗試采用傳統(tǒng)搜索引擎中使用的檢索模型來進(jìn)行用戶問句解析。《淺談搜索引擎基礎(chǔ)(上)》中提到,BM25 是目前效果最好的檢索模型,我們就以 BM25 模型為例來分析。

BM25 模型的計(jì)算公式如下:


BM25 模型計(jì)算公式融合了 4 個(gè)考慮因素:IDF 因子、文檔詞頻、文檔長度因子查詢詞頻,并利用 3 個(gè)自由調(diào)節(jié)因子(k1、k2 和 b)對各種因子的權(quán)值進(jìn)行調(diào)整組合。

其中,N 代表文檔總數(shù),n 代表出現(xiàn)對應(yīng)單詞的文檔個(gè)數(shù),f 指文檔中出現(xiàn)對應(yīng)單詞的詞頻,qf 是查詢語句中對應(yīng)單詞的詞頻,dl 是文檔長度。

利用 BM25 模型可以有三種思路,分別把標(biāo)準(zhǔn)問句、標(biāo)準(zhǔn)問句及標(biāo)準(zhǔn)答案、歷史中曾經(jīng)正確匹配過該標(biāo)準(zhǔn)問句的用戶問句集作為 Document,利用公式計(jì)算其與用戶問句的相似度,然后利用相似度進(jìn)行排序,取出評分最高的標(biāo)準(zhǔn)問句作為解析結(jié)果。

對于這個(gè)思路我沒有做過實(shí)驗(yàn),不過我推測,這種方法雖然節(jié)省了大量的人力,但在這種封閉域的 QA 系統(tǒng)中,其表現(xiàn)應(yīng)當(dāng)是不如上一種基于規(guī)則的方法,基于檢索模型的方法在開放域中的表現(xiàn)會(huì)更好。

此外,基于傳統(tǒng)檢索模型的方法會(huì)存在一個(gè)固有缺陷,就是檢索模型只能處理 Query 與 Document 有重合詞的情況,傳統(tǒng)檢索模型無法處理詞語的語義相關(guān)性。在上一種方法中,通過人工搭建的同義詞庫,一定程度上解決了語義相關(guān)性的問題。

2.基于檢索模型+LDA/SMT的方法

上文提到,完全基于檢索模型的方法無法處理詞語的語義相關(guān)性。

為了在一定程度上解決這個(gè)問題,我們可以利用 LDA/SMT 等方法通過語料挖掘詞之間的同義關(guān)系,為每個(gè)詞自動(dòng)構(gòu)建一個(gè)同義度高于閾值且大小合適的同義詞表。在代入檢索模型公式進(jìn)行計(jì)算的過程中,若文檔中發(fā)現(xiàn)所查找關(guān)鍵詞的同義詞,可以依據(jù)同義程度乘以一定權(quán)重后納入到關(guān)鍵詞的詞頻計(jì)算之中。

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

簡單的說,LDA 可以合理的將單詞歸類到不同的隱含主題之中;并且通過計(jì)算兩篇文章主題向量 θ 的 KL 散度(相對熵),可以得到兩篇文章的相似性。SMT 模型出自微軟之手,目的即是將翻譯模型引入傳統(tǒng)檢索模型,提高檢索模型對語義相關(guān)詞對的處理能力,該模型也曾被百度采用過以提高搜索引擎返回結(jié)果的質(zhì)量。

3.基于word embedding+DNN的方法

word embedding 將詞表示為 Distributed Representation,也即低維向量空間中的一個(gè)詞向量,Distributed Representation 下的詞可以利用余弦距離來計(jì)算詞之間語義的相關(guān)關(guān)系。與 one-hot Representation 相對應(yīng),one-hot Representation 下的詞向量的維數(shù)與單詞表的維數(shù)相同,不同詞的詞向量之間均正交。傳統(tǒng)的詞集模型(SOW)和詞袋模型(BOW)采用的即是 one-hot Representation。

我們可以采用深度學(xué)習(xí)的方法來得到詞 Distributed Representation 的詞向量。比如訓(xùn)練一個(gè)普通的神經(jīng)概率語言模型,就可以得到詞的詞向量,或者參考 word2vec 中的方式,訓(xùn)練 CBOW 或者 Skip-gram 模型。神經(jīng)概率語言模型、CBOW 以及 Skip-gram 的介紹在《淺談智能搜索和對話式OS》均有提及。

借助百度這張圖來講,利用 DNN 建模的思路如下:


我們需要使用一批用戶問句-標(biāo)準(zhǔn)問句對的正例和反例作為訓(xùn)練語料,借助上面的方式,同時(shí)將正例和反例進(jìn)行 word embedding 后送入 DNN 中,并采用 Pairwise ranking loss 的方式來建模正例和反例之間的語義差別。

4.基于word embedding+CNN的方法

上一種基于 DNN 的方法,在一定程度上已經(jīng)可以解決詞的語義相關(guān)性的問題,但對句子中的短距離依賴關(guān)系并沒有做恰當(dāng)?shù)奶幚恚热鐭o法區(qū)分『甲到乙』和『乙到甲』。

根據(jù)百度的評測結(jié)果,CNN 在處理短距離依賴關(guān)系上擁有更好的表現(xiàn)。

該圖出自李航博士 Convolutional Neural Network Architectures for Matching Natural Language Sentences 中的 ARC-1:

ARC-1

其做法的基本思路是:將問句中的每個(gè)詞,都做 word embedding,得到每個(gè)詞所對應(yīng)的固定長度的詞向量,我們將問句表示成一個(gè)二維矩陣,每一行代表問句中相應(yīng)詞所對應(yīng)的詞向量。將這個(gè)二維矩陣進(jìn)行多次卷積池化(卷積核的寬度與詞向量維數(shù)相同,高度多為 2-5),最后得到一個(gè)一維特征向量,我們用 CNN 同時(shí)處理用戶問句和標(biāo)準(zhǔn)問句,得到用戶問句和庫中標(biāo)準(zhǔn)問句所對應(yīng)的特征向量。之后將這兩個(gè)向量拼接起來送入多層感知機(jī),由它來計(jì)算兩個(gè)問句之間的匹配程度。

另外,有人指出,直接將兩個(gè)特征向量拼接起來送入 MLP 會(huì)丟失邊界信息,所以我們同時(shí)將特征向量 a、特征向量 b 和 aTb 同時(shí)送入 MLP 來計(jì)算相似度。

5.基于word embedding+CNN(ARC-2)的方法

ARC-2 結(jié)構(gòu)同樣出自李航博士的上述論文:


ARC-2

ARC-2 相較于 ARC-1 的改進(jìn)在于,ARC-2 嘗試讓兩個(gè)句子在得到像 ARC-1 結(jié)果那樣的高層抽象表示之前就進(jìn)行相互作用,不再先分別通過 CNN 結(jié)構(gòu)得到各自高層抽象表示。

在 ARC-1 模型中,一張 feature map 僅僅是一個(gè)列向量,或者說是一個(gè)一維矩陣,若干個(gè)列向量并在一起形成了 ARC-1 示意圖中的模樣(二維),而在 ARC-2 中,一張 feature map 成為了一個(gè)二維矩陣,若干個(gè)二維矩陣疊在一起形成了 ARC-2 示意圖中的模樣(三維)。

再之后的卷積、池化過程就與 CV 中 CNN 的卷積、池化過程類似了。與上一種方法類似的,在進(jìn)行 1D convolution 時(shí),涉及到兩個(gè)詞向量的連接,同樣可以采用之前提到的做法來避免邊界信息的丟失。

6.基于LSTM+CNN(ARC-2)的方法

同樣有人提出,在 ARC-2 結(jié)構(gòu)中,直接采用傳統(tǒng)的 word embedding 方法得到的詞向量組成句子作為輸入并不是最佳方案,最佳方案是采用已經(jīng)過了 LSTM 的 hidden state。

我們可以采用 LSTM 結(jié)構(gòu)訓(xùn)練一個(gè) RNN 語言模型,如下圖(以普通 RNN 為例):


從圖中可以發(fā)現(xiàn),當(dāng)輸出為『e』時(shí),hidden layer 向量中第三分量最大,而輸出為『l』時(shí),第一分量最大,輸出『o』時(shí),第二分量最大。我們可以將 RNN 的 hidden state 當(dāng)做 Distributed Representation 的詞向量來使用,將其作為 CNN(ARC-2)的輸入,經(jīng)測試可以得到更好的結(jié)果。

番外

中文分詞

一個(gè)可信度高的分詞結(jié)果是進(jìn)行后續(xù)解析步驟的基本前提。

《淺談自然語言處理基礎(chǔ)(中)》中,我介紹了一些經(jīng)典的分詞方法,不過都是些較早的研究成果。CRF方法是目前公認(rèn)的效果最好的分詞算法。

CRF 方法的思想非常直接,就是將分詞問題看作一個(gè)序列標(biāo)注問題,為句子中的每個(gè)字標(biāo)注詞位:

  • 詞首,常用B表示
  • 詞中,常用M表示
  • 詞尾,常用E表示
  • 單子詞,常用S表示

CRF 分詞的過程就是對詞位標(biāo)注后,將 B 和 E 之間的字,以及 S 單字構(gòu)成分詞。網(wǎng)上有很多公開的基于 CRF 的分詞工具。

解析優(yōu)化

至少存在四個(gè)角度可以在已有模型的基礎(chǔ)上進(jìn)一步提高解析質(zhì)量,包括:問句歸一化、用戶狀態(tài)、強(qiáng)化學(xué)習(xí)、多輪對話。

問句歸一化

問句歸一化的目的是對用戶的輸入具有較好的容錯(cuò)性。

簡單的一些比如:簡繁體歸一化、全角半角歸一化、標(biāo)點(diǎn)符號處理和大小寫歸一化。復(fù)雜一些的比如漢語錯(cuò)別字的糾正。錯(cuò)別字自動(dòng)糾正技術(shù)的應(yīng)用非常廣泛,而且在提高系統(tǒng)用戶體驗(yàn)上能夠發(fā)揮很大的作用,可以說性價(jià)比極高。

錯(cuò)別字糾正通常的做法是訓(xùn)練噪聲信道模型。

用戶狀態(tài)

我們可以對用戶狀態(tài)提取特征,在訓(xùn)練和解析時(shí)將其作為附加信息一并作為神經(jīng)網(wǎng)絡(luò)的輸入。

可以被考慮的用戶狀態(tài)至少包含:

  • 用戶的過往使用記錄:比如賬號注冊時(shí)長、歷史付費(fèi)金額
  • 用戶的過往問答記錄:用戶過去詢問過的問題和這次的問題可能會(huì)具有一定的相關(guān)性
  • 用戶的進(jìn)入路徑:可能隱含著用戶問題的觸發(fā)源頁面
  • 用戶的當(dāng)前問答記錄:同一個(gè) Session 中用戶詢問的問題通常具有一定的相關(guān)性

強(qiáng)化學(xué)習(xí)

其次可以采用強(qiáng)化學(xué)習(xí)的方法,通過設(shè)計(jì)合理的獎(jiǎng)賞機(jī)制,讓解析系統(tǒng)在與環(huán)境互動(dòng)的過程中自主進(jìn)行策略更新。

強(qiáng)化學(xué)習(xí)與普通的監(jiān)督學(xué)習(xí)方法相比存在兩個(gè)明顯的優(yōu)點(diǎn):一個(gè)是強(qiáng)化學(xué)習(xí)策略更新所需要的數(shù)據(jù)主要來源于與環(huán)境的交互/采樣,而不是昂貴的人工標(biāo)記數(shù)據(jù);另一個(gè)是強(qiáng)化學(xué)習(xí)所產(chǎn)生的策略是根據(jù)獎(jiǎng)賞機(jī)制自主迭代更新的,會(huì)有一些創(chuàng)新的做法,而不僅僅是模仿人類提供的『標(biāo)準(zhǔn)』做法。

QA 問句解析中雖然不像游戲一樣擁有『策略\創(chuàng)新玩法』這樣的概念,但仍然可以在解析優(yōu)化中幫助大量節(jié)省數(shù)據(jù)的人工標(biāo)記開銷。

應(yīng)用強(qiáng)化學(xué)習(xí)方法的核心問題之一就是獎(jiǎng)賞機(jī)制的設(shè)計(jì),在 QA 的場景下設(shè)計(jì)獎(jiǎng)賞機(jī)制,至少可以考慮以下幾個(gè)角度:

  • 退出 QA 頁面時(shí)可以要求用戶對本次 QA 做出反饋(已被螞蟻金服小螞答和京東智能客服采用),負(fù)面反饋可以被進(jìn)一步區(qū)分為『解析錯(cuò)誤』和『答案錯(cuò)誤』,只有屬于『解析錯(cuò)誤』的負(fù)面反饋才被用于優(yōu)化解析系統(tǒng)
  • 系統(tǒng)是否連續(xù)多次提供給用戶相同的回答(以系統(tǒng)回答而不是用戶問句為標(biāo)準(zhǔn))
  • 用戶是否最終選擇接入人工(如果人工接入不是自動(dòng)的)
  • 通過文本情感分析識別用戶的情緒變化

多輪對話

多輪對話技術(shù)可以進(jìn)一步提高與用戶對話的連貫性。

我傾向于將多輪對話劃分為『封閉域』和『開放域』兩個(gè)場景,不同場景的實(shí)現(xiàn)思路也應(yīng)該不同。

封閉域場景多輪對話的特點(diǎn)是:系統(tǒng)能解決的問題是一個(gè)有限集,多輪對話的目的是將用戶引導(dǎo)到我們可以解決的問題上。

而開放域場景多輪對話的特點(diǎn)是:系統(tǒng)需要解決的問題是一個(gè)無限集,多輪對話的目的是依照上下文更準(zhǔn)確的理解用戶的需求。

在這樣的指導(dǎo)思想下,封閉域多輪對話的核心思路應(yīng)該是『填槽』,而開放域多輪對話的核心思路是『上下文替換』和『主體補(bǔ)全』。

《淺談智能搜索和對話式OS》中介紹了百度利用 slot filling 技術(shù)來做 NLU,并利用『上下文替換』和『主體補(bǔ)全』來提高其 DuerOS 的對話能力的。

而更進(jìn)一步的,填槽、上下文替換和主體補(bǔ)全的技術(shù)基礎(chǔ)都是『序列標(biāo)注』,這里給出百度的兩張 PPT:

填槽
上下文替換和主體補(bǔ)全

根據(jù)百度的 PPT,采用雙向 LSTM + CRF 做序列標(biāo)注,是一個(gè)商業(yè)上可行的方法。

人工接入

選擇合適的人工接入時(shí)機(jī)同樣是提高 QA 系統(tǒng)整體表現(xiàn)的方法之一,其核心問題在于平衡用戶體驗(yàn)與投入成本。人工接入的越早,用戶體驗(yàn)越好,但成本也越高。

這里簡單提供螞蟻金服小螞答的做法:若系統(tǒng)連續(xù)提供給用戶三次相同的回答,顯示人工接入按鈕;若用戶連續(xù)詢問兩次客服類問題(比如『我要人工』、『你們客服電話多少』),顯示人工接入按鈕。

答案優(yōu)化

QA 系統(tǒng)的另一個(gè)重要組成部分是答案庫。

答案錄入

答案錄入的優(yōu)化至少可以從三個(gè)角度來思考:

  • 答案形式的多樣性
  • 答案的個(gè)性化程度
  • 答案對用戶的幫助

答案形式的多樣性非常容易理解,比如小螞答就支持包括文本、鏈接、圖片、視頻在內(nèi)的多種答案形式。

個(gè)性化問題在上文解析優(yōu)化中已有涉及(考慮用戶狀態(tài)的解析優(yōu)化),上文的分析思路同樣可以應(yīng)用于答案錄入,我們可以對不同注冊時(shí)長、付費(fèi)金額不同、進(jìn)入路徑不同等等的用戶提供不同的個(gè)性化答案。

答案對用戶的幫助看起來比較抽象,但也很容易理解。通俗的,我個(gè)人以『地圖級』、『導(dǎo)航級』、『專車級』來為 QA 系統(tǒng)的答案進(jìn)行分級:

  • 『地圖級』答案告訴你在什么什么地方可以做什么什么事情,你自己去找,找到了再做。
  • 『導(dǎo)航級』答案幫你跳轉(zhuǎn)到完成任務(wù)所需的頁面,不必找,直接做。
  • 『專車級』答案直接為你解決問題,不必找,不必親自做。

依照文章最初的人機(jī)對話系統(tǒng)場景分類,提供『專車級』答案的 QA 系統(tǒng),可以被稱為 VPA 了。

答案更新

對于答案庫的優(yōu)化,在答案完備錄入(答案形式足夠豐富、針對不同用戶提供個(gè)性化的回答)的前提下,至少存在兩個(gè)優(yōu)化點(diǎn):

  • 發(fā)現(xiàn)答案庫中標(biāo)準(zhǔn)答案的錯(cuò)誤
  • 發(fā)現(xiàn)答案庫中缺失的標(biāo)準(zhǔn)答案

上文解析優(yōu)化中強(qiáng)化學(xué)習(xí)方法獎(jiǎng)賞機(jī)制的設(shè)計(jì)思路也可以被用來發(fā)現(xiàn)答案庫中存在的問題,因?yàn)榇蠖鄶?shù)時(shí)候我們還很難明確的區(qū)分用戶的負(fù)面反饋是針對解析系統(tǒng)還是答案本身。

除了從用戶負(fù)面反饋中發(fā)現(xiàn)問題,針對上面的兩個(gè)優(yōu)化點(diǎn),我們還應(yīng)該有一些預(yù)防機(jī)制來提前避免這些問題的發(fā)生。

比如第一點(diǎn)『答案庫中標(biāo)準(zhǔn)答案存在錯(cuò)誤』,如果不是錄入人員的素質(zhì)問題,最大的可能性就來源于答案的時(shí)效性,也即我們提供給了用戶過期的答案。針對這個(gè)問題,我們可以在錄入答案時(shí)特別添加『臨時(shí)』標(biāo)簽,以標(biāo)明該答案具有較強(qiáng)的時(shí)效性,需要及時(shí)更新。

而針對第二點(diǎn)『答案庫中缺失某些問題的答案』,最大的可能性來源于突發(fā)事件以及業(yè)務(wù)的變動(dòng)。比如系統(tǒng)服務(wù)宕機(jī)、系統(tǒng)上了新版本或者組織了一些運(yùn)營活動(dòng),我們都應(yīng)該針對這些可能引發(fā)用戶疑惑的變動(dòng),提前準(zhǔn)備一些 FAQ 并錄入到答案庫之中。

此外,當(dāng)我們錄入新問題及其標(biāo)準(zhǔn)答案的時(shí)候,需要注意新錄入問題與原解析系統(tǒng)的適配性,以避免出現(xiàn)新錄入的問題較難被解析系統(tǒng)解析到的情況。可采用的方法比如在錄入新問題的同時(shí),主動(dòng)錄入一些不同的問法作為初始訓(xùn)練語料(網(wǎng)易七魚云客服的做法)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容