熟悉搜索引擎的朋友會(huì)發(fā)現(xiàn)這個(gè)架構(gòu)跟搜索引擎的很類(lèi)似。單輪問(wèn)答一般來(lái)說(shuō)就是FAQ問(wèn)答,是基于業(yè)務(wù)問(wèn)答對(duì)組成的問(wèn)答庫(kù)進(jìn)行檢索匹配。其中FAQ問(wèn)題集包含多個(gè)相似問(wèn)法供用戶問(wèn)題去匹配。預(yù)處理階段一般會(huì)進(jìn)行文本糾錯(cuò),標(biāo)準(zhǔn)化和底層NLP特征提取;召回階段會(huì)在倒排索引中召回若干個(gè)候選問(wèn)題(粗排),而最后的匹配階段會(huì)基于各種模型進(jìn)行匹配打分并返回得分最高的結(jié)果(精排)。匹配階段還會(huì)引入其他模塊,如知識(shí)圖譜和拒識(shí)模型,目的是輔助提升匹配的最終準(zhǔn)確率。
retrieval中的匹配可以看做是naive solution,詞袋+VSM, 篩選候選夠用了,但是精排需要更精致的策略,第一,要利用監(jiān)督信息做擬合,我們構(gòu)建基于問(wèn)題對(duì)的訓(xùn)練語(yǔ)料,擬合是否匹配這個(gè)二分類(lèi)目標(biāo)。第二,特征上拋棄稀疏的詞袋模型,而是構(gòu)造各種相似度來(lái)做base scorer,然后利用非線性的抗噪能力強(qiáng)的xgboost來(lái)做融合,比如我們用到詞bigram, 字bigram, 核心詞,名詞等特征集合的相似度。這種方法的優(yōu)缺點(diǎn)是一體的,由于模型只學(xué)習(xí)字面相似的特征,因此不受領(lǐng)域影響,通用性強(qiáng),適合用在冷啟動(dòng)階段;但也因?yàn)橹豢紤]字面相似,無(wú)法處理更深層的語(yǔ)義匹配。
那如何度量語(yǔ)義的相似呢。詞向量技術(shù)的興起是語(yǔ)義匹配的前提,所謂詞向量,是將孤立的傳統(tǒng)的token表示映射到相互關(guān)聯(lián)的向量空間中,這種關(guān)聯(lián)性,或者說(shuō)是相似性,是通過(guò)詞語(yǔ)的上下文的來(lái)描述的。也就是說(shuō),上下文越相似的詞語(yǔ),他們的語(yǔ)義就越相似,詞向量的歐式距離就越近。這是很容易理解的,更妙的是,通過(guò)對(duì)向量進(jìn)行簡(jiǎn)單加減運(yùn)算,能夠呈現(xiàn)出概念的關(guān)系,比如king-man+woman的結(jié)果非常接近于queen, 因此說(shuō)明詞向量能夠一定程度刻畫(huà)語(yǔ)義。那對(duì)句子如何做向量表示呢?一個(gè)簡(jiǎn)單的想法是直接求和平均,WMD是另一個(gè)比較有意思且有效的做法,他將計(jì)算句子到句子的相似度建模成一個(gè)運(yùn)輸?shù)膯?wèn)題,把句子p的各個(gè)詞,運(yùn)輸?shù)絨的各個(gè)詞上,也可以說(shuō)是變換;運(yùn)輸成本是詞向量的cosine相似度,而要運(yùn)輸?shù)氖歉鱾€(gè)詞在句子中的權(quán)重,用線性規(guī)劃求解一個(gè)最優(yōu)解,即為p到q的距離。另外還有個(gè)有效的方法是SIF,思路是做詞向量加權(quán)求和,但是突顯出句子中非通用的部分,即權(quán)重用詞頻倒數(shù)來(lái)計(jì)算權(quán)重,實(shí)驗(yàn)效果也很不錯(cuò)。
上面的方法有一個(gè)問(wèn)題就是沒(méi)有利用有監(jiān)督信息,所以效果有明顯的天花板。下面介紹這個(gè)工作是基于深層網(wǎng)絡(luò)做有監(jiān)督學(xué)習(xí)的匹配的,做法也比較簡(jiǎn)單,首先把句子文本用one-hot編碼,假如詞典大小是500K,那編碼完長(zhǎng)度就是500K維,其實(shí)等于是詞袋模型,然后輸入到一個(gè)多層的神經(jīng)網(wǎng)絡(luò)去學(xué)習(xí),最終得到一個(gè)128維的向量作為句子的語(yǔ)義表示,然后用cosine計(jì)算兩個(gè)句子與文檔的相似度作為模型輸出。這個(gè)方法其實(shí)是將高維稀疏的token特征映射到低維語(yǔ)義空間,跟詞向量的思路很類(lèi)似,只不過(guò)訓(xùn)練目標(biāo)不同,并且這里使用了深層網(wǎng)絡(luò)結(jié)構(gòu)。
上面工作的問(wèn)題是對(duì)句子的輸入進(jìn)行建模時(shí)還是詞袋模型的思路,沒(méi)有考慮詞的位置和順序信息,因此我們需要考慮引入特征提取能力更強(qiáng)的網(wǎng)絡(luò)單元。先介紹左邊這位大名鼎鼎CNN, 卷積神經(jīng)網(wǎng)絡(luò),原來(lái)是圖像領(lǐng)域上的關(guān)鍵技術(shù),通過(guò)不同的卷積核用來(lái)處理鄰近區(qū)塊信息提取。就好比一個(gè)人透過(guò)各種不同的過(guò)濾鏡片逐塊逐塊地觀察一副圖片,所謂橫看成嶺側(cè)成峰,關(guān)注到不同的影像然后記憶下來(lái),再用這些不同的影像來(lái)對(duì)原始圖片做表達(dá),有點(diǎn)類(lèi)似把信息分出了多個(gè)層次,顯然魯棒性更好。移植至到NLP上,CNN可以用來(lái)捕捉局部上下文的信息,如左邊這個(gè)例子,CNN觀察范圍為3,不同的卷積核關(guān)注不同的詞語(yǔ)組合,然后再通過(guò)最大池化選出關(guān)注度最高的部分,完成一次特征抽取過(guò)程。
但是CNN對(duì)上下文的處理能力依賴(lài)于窗口大小,遠(yuǎn)距離就沒(méi)辦法處理了,因此要考慮另一種網(wǎng)絡(luò)單元RNN,這種單元是專(zhuān)門(mén)為時(shí)序模型量身打造的,簡(jiǎn)單來(lái)說(shuō),每一時(shí)刻t上的隱藏狀態(tài),或者說(shuō)第t個(gè)詞上的語(yǔ)義編碼,都由兩個(gè)輸入共同決定,即上一時(shí)刻的隱藏狀態(tài)和當(dāng)前時(shí)刻的原始輸入,而為了解決遠(yuǎn)距離傳遞導(dǎo)致的梯度消失和梯度爆炸等問(wèn)題,RNN有一些變種結(jié)構(gòu)來(lái)應(yīng)對(duì),比如 LSTM和GRU等。
CNN和RNN都是對(duì)原始輸入進(jìn)行語(yǔ)義編碼的基本單元,編碼后的向量就可以接入多層感知機(jī)進(jìn)行相似度計(jì)算,如果是直接計(jì)算cosine相似度,那就是dssm的升級(jí)版,而更常見(jiàn)的做法是把兩個(gè)句子的編碼向量拼接在一起,再經(jīng)過(guò)一個(gè)多層感知機(jī)計(jì)算相似度,而這種方法統(tǒng)稱(chēng)為表達(dá)式建模;
另一種方案考慮到兩個(gè)句子之間的交互信息對(duì)學(xué)習(xí)他們是否匹配顯然更為重要,這一類(lèi)方案被稱(chēng)為交互式建模,右邊是一個(gè)典型的例子,他最大的不同是首先對(duì)兩個(gè)句子的所有窗口組合進(jìn)行拼接和卷積,得到交互信息。然后再進(jìn)行多次卷積和池化得到表示。其他的交互方式還包括編碼之后,進(jìn)行交互操作,如作差,點(diǎn)乘等,還有計(jì)算attention表示,也是常見(jiàn)的交互方式。
下面介紹我們的方案,跟上面介紹的模型相比,我們的方案主要做了兩處改動(dòng),一個(gè)是使用了稠密連接的網(wǎng)絡(luò)結(jié)構(gòu),讓rnn層的輸入和輸出拼接在一起做為下一層的輸入,第二個(gè)是混合注意力機(jī)制,即在計(jì)算attention向量進(jìn)行交互式建模的基礎(chǔ)上,增加self-attention向量計(jì)算,然后把兩個(gè)attention向量經(jīng)過(guò)門(mén)機(jī)制進(jìn)行融合,這樣做一方面引入了問(wèn)句間的交互信息,同時(shí)又增強(qiáng)了對(duì)自身的表達(dá)建模。
上面的模型是比較復(fù)雜的模型,參數(shù)量有5.8M。在實(shí)際中應(yīng)用中訓(xùn)練語(yǔ)料會(huì)嚴(yán)重不足,為了解決這個(gè)問(wèn)題,我們引入了遷移學(xué)習(xí)的策略。首先第一種是多任務(wù)聯(lián)合學(xué)習(xí),比如在擬合兩個(gè)問(wèn)句是否匹配的同時(shí),也對(duì)問(wèn)句進(jìn)行分類(lèi)預(yù)測(cè);另外還可以同時(shí)對(duì)匹配的問(wèn)題對(duì)做seq2seq的翻譯模型訓(xùn)練。這兩個(gè)策略都證明能有效提升準(zhǔn)確率。
而另一個(gè)思路更加直觀,即引入其他領(lǐng)域的語(yǔ)料,所謂多語(yǔ)料遷移。Fine-tune即參數(shù)微調(diào)是其中一種做法,即先用通用語(yǔ)料訓(xùn)練網(wǎng)絡(luò),固定底層表達(dá)層的參數(shù),然后再使用領(lǐng)域語(yǔ)料調(diào)整上層參數(shù);另一種思路參考了對(duì)抗學(xué)習(xí)的思想,即引入一個(gè)新的任務(wù)“混淆分類(lèi)器”去判別當(dāng)前樣本是來(lái)自源語(yǔ)料還是目標(biāo)語(yǔ)料,通過(guò)在損失函數(shù)中增加反向的混淆分類(lèi)損失項(xiàng),讓混淆分類(lèi)器盡可能地?zé)o法區(qū)分樣本的來(lái)源,從而保證共享了參數(shù)的表達(dá)網(wǎng)絡(luò)能夠?qū)W習(xí)到兩部分語(yǔ)料中共性的部分。
以上的介紹都是為了完成一個(gè)基本的單輪對(duì)話機(jī)器人,而實(shí)際應(yīng)用中,往往存在需要需要交互的場(chǎng)景,比如查詢(xún)社保余額,就需要用戶提供指定信息,如姓名,身份證號(hào),手機(jī)號(hào)等。這種是所謂任務(wù)導(dǎo)向型機(jī)器人,而另一種,基于知識(shí)圖譜的機(jī)器人也往往會(huì)涉及到多輪交互。這里簡(jiǎn)單介紹一下多輪對(duì)話機(jī)器人的架構(gòu),整體上是一個(gè)對(duì)話管理系統(tǒng),總的來(lái)說(shuō)是管理會(huì)話狀態(tài),包含4個(gè)模塊,分別是輸入部分:自然語(yǔ)言理解模塊NLU,負(fù)責(zé)意圖識(shí)別和抽取槽位實(shí)體,比如這里匹配到了意圖是查詢(xún)社保余額,抽取到了社保號(hào)1234。得到的意圖和槽位值會(huì)送入到對(duì)話狀態(tài)追蹤模塊,DST,他負(fù)責(zé)會(huì)話狀態(tài)的更新,形式化來(lái)說(shuō)是一個(gè)函數(shù),輸入是當(dāng)前狀態(tài)s和當(dāng)前的query經(jīng)過(guò)NLU處理過(guò)得到的意圖和槽位值q, 輸出新的狀態(tài)s‘,下一步是把s’送入DPL,對(duì)話策略模塊,這個(gè)模塊是根據(jù)新的狀態(tài)s‘輸出行動(dòng)a,通常這個(gè)決策選擇會(huì)依賴(lài)于一個(gè)外部數(shù)據(jù)庫(kù)或知識(shí)圖譜,最后,由輸出部分,自然語(yǔ)言生成模塊NLG負(fù)責(zé)將行動(dòng)轉(zhuǎn)換為自然語(yǔ)言文本,返回給用戶。
以上是多輪對(duì)話的原理框架,可以用不同的方式實(shí)現(xiàn),近年來(lái)研究的熱點(diǎn)是所謂end-to-end的神經(jīng)網(wǎng)絡(luò)模型,希望可以利用神經(jīng)網(wǎng)絡(luò)的語(yǔ)義編碼能力和深層網(wǎng)絡(luò)的堆疊實(shí)現(xiàn)端到端學(xué)習(xí),減少各個(gè)模塊的擬合bias導(dǎo)致的損失。但實(shí)用中我們并不會(huì)真正實(shí)現(xiàn)輸入到輸出的end-to-end學(xué)習(xí),主要是因?yàn)槟P蜕疃冗^(guò)深不且多輪對(duì)話的語(yǔ)料非常欠缺,模型不好訓(xùn)練。實(shí)際中是分開(kāi)各自的模塊進(jìn)行訓(xùn)練的,比如NLU中的槽位抽取就可以用基于神經(jīng)網(wǎng)絡(luò)的序列標(biāo)注模型來(lái)建模,意圖識(shí)別則可以通過(guò)之前的語(yǔ)義匹配模型或者分類(lèi)模型來(lái)做都可以,NLG則是用seq2seq的翻譯模型來(lái)訓(xùn)練,這樣做比較靈活。而在多輪對(duì)話中比較受關(guān)注的是對(duì)話狀態(tài)和策略的建模,做法有多種,比如對(duì)上一次的agent輸出,本次的用戶輸入,當(dāng)前的狀態(tài)下可用的數(shù)據(jù)集合一起進(jìn)行編碼,然后輸入到一個(gè)神經(jīng)網(wǎng)絡(luò)中學(xué)習(xí)action的選擇,即policy learning,這里除了使用有監(jiān)督學(xué)習(xí),還可以進(jìn)一步使用強(qiáng)化學(xué)習(xí)的技術(shù),即構(gòu)造一個(gè)用戶模擬器,讓agent跟他不斷交互,根據(jù)交互是否完成任務(wù)和交互輪數(shù)來(lái)給agent不同的獎(jiǎng)勵(lì)和懲罰,從而最終學(xué)習(xí)出高成功率的對(duì)話策略。這部分的內(nèi)容也特別有意思,希望以后可以單獨(dú)展開(kāi)來(lái)說(shuō)。
前面提到的單輪FAQ機(jī)器人,有一個(gè)問(wèn)題是問(wèn)答準(zhǔn)確率依賴(lài)于問(wèn)答庫(kù)的質(zhì)量,而問(wèn)答庫(kù)的構(gòu)建耗時(shí)費(fèi)力,所以針對(duì)數(shù)據(jù)較大的非結(jié)構(gòu)化文檔,如果可以直接從中抽取答案,是非常理想的做法。比如斯坦佛大學(xué)開(kāi)源的drQA,就是基于wikipedia的語(yǔ)料做的一個(gè)開(kāi)放域上的問(wèn)答機(jī)器人,我們來(lái)看看這種閱讀理解機(jī)器人的架構(gòu)示意,他也是基于檢索重排的思路,首先把可能的文段從語(yǔ)料庫(kù)中摘取出來(lái),然后送入閱讀理解模型進(jìn)行答案定位,打分,排序和選擇得分最高的答案。閱讀理解模型與匹配模型是類(lèi)似的,需要先對(duì)問(wèn)題和候選文段進(jìn)行編碼表示,不同之處在于最終預(yù)測(cè)的目標(biāo)是答案的起始和結(jié)束位置。我所在的團(tuán)隊(duì)在去年,在閱讀理解的權(quán)威公開(kāi)測(cè)評(píng)Squad v1中取得過(guò)第一的成績(jī),同時(shí)參加這個(gè)測(cè)評(píng)的包括了google, facebook, 微軟,阿里idst, 科大訊飛等國(guó)內(nèi)外同行。說(shuō)明業(yè)界對(duì)這種技術(shù)還是非??粗氐摹?/p>
下面分享小知在把以上技術(shù)落地產(chǎn)品化的經(jīng)驗(yàn)。首先我們來(lái)看看小知的整體架構(gòu)圖,核心引擎有兩部分,一塊是上面重點(diǎn)闡述的深度語(yǔ)義匹配模型,另一塊是本次分享沒(méi)有展開(kāi)的知識(shí)圖譜引擎,在此之上,我們構(gòu)建了FAQ機(jī)器人,多輪會(huì)話機(jī)器人(任務(wù)機(jī)器人),閑聊機(jī)器人等。以下是我們單輪和多輪機(jī)器人的示例。
在我們實(shí)際的落地項(xiàng)目中,得益于深度遷移模型的語(yǔ)義匹配能力和行業(yè)知識(shí)圖譜的的精準(zhǔn)匹配和輔助追問(wèn),小知機(jī)器人能夠做到95%左右的問(wèn)答準(zhǔn)確率,并且節(jié)省了50%以上的服務(wù)人力,切實(shí)為政府和企業(yè)提升效率和降低成本。
在智能客服的基礎(chǔ)上,我們又打造了基于語(yǔ)音的電話機(jī)器人,力主融合智能客服,人工在線客服,工單系統(tǒng)和電話機(jī)器人,為客戶打造從售前售中售后的整體解決方案。
以下是電話機(jī)器人的整體架構(gòu)圖,核心是自然語(yǔ)言理解NLU模塊,負(fù)責(zé)識(shí)別用戶提問(wèn)意圖
提取相關(guān)實(shí)體。根據(jù)NLU輸出的結(jié)果,內(nèi)置的對(duì)話管理引擎會(huì)進(jìn)行流程狀態(tài)流轉(zhuǎn)和跟蹤。
另外,ASR語(yǔ)音識(shí)別和TTS語(yǔ)音合成是不可或缺的重要服務(wù),這三個(gè)模塊相互協(xié)作,共同完成與用戶的交互。
最后對(duì)智能問(wèn)答的未來(lái)發(fā)展提幾點(diǎn)我的看法。目前學(xué)術(shù)界比較公認(rèn)的一個(gè)方向是,需要更有機(jī)地結(jié)合模型和規(guī)則,而在問(wèn)答領(lǐng)域,規(guī)則的一大組成部分就是知識(shí)圖譜,包括開(kāi)放領(lǐng)域的知識(shí)圖譜和專(zhuān)業(yè)領(lǐng)域知識(shí)圖譜。而更進(jìn)一步地,我們需要研究帶有推理性質(zhì)的事理型知識(shí)圖譜去描述領(lǐng)域內(nèi)的規(guī)則和知識(shí),讓機(jī)器人能夠處理帶有復(fù)雜條件的問(wèn)題,提供更智能的回復(fù)。在我看來(lái),智能問(wèn)答的一個(gè)突破口就在于解決以上三個(gè)問(wèn)題。以上就是今天分享的內(nèi)容,謝謝大家。
主講人介紹:
陳松堅(jiān),騰訊數(shù)據(jù)平臺(tái)部算法高級(jí)研究員,有著8 年的 NLP 研發(fā)經(jīng)驗(yàn),2017 年加入騰訊 TEG 數(shù)據(jù)平臺(tái)部,負(fù)責(zé)智能客服產(chǎn)品騰訊小知的算法規(guī)劃和落地。負(fù)責(zé)過(guò)多個(gè)智能客服項(xiàng)目,對(duì)封閉領(lǐng)域的智能問(wèn)答有豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。