近年來隨著各行業(yè)的發(fā)展,企業(yè)的數(shù)字化轉(zhuǎn)型已經(jīng)成為大勢所趨。企業(yè)將自己的核心業(yè)務(wù)系統(tǒng)云化、容器化不僅能夠提高對客戶數(shù)據(jù)信息的利用率、創(chuàng)建以客戶為中心的業(yè)務(wù),還能夠有效節(jié)約成本、對市場進行更精確的劃分。但與此同時也帶來了許多的運維痛點,比如云端設(shè)備告警量大、故障根因定位困難、容器環(huán)境故障診斷對運維人員專業(yè)水平要求較高,因此如何輔助企業(yè)對云端設(shè)備進行運營維護成為業(yè)內(nèi)研究的重點。
隨著知識圖譜,自然語言處理等相關(guān)技術(shù)的發(fā)展,問答系統(tǒng)已經(jīng)擴展到了眾多領(lǐng)域,在運維場景下,對話機器人同樣也可以幫助企業(yè)相關(guān)人員完成運維工作。通過與運維機器人進行人機交互,工作人員可以獲取專家運維知識、可以給機器人下發(fā)運維作業(yè)任務(wù),也可以與機器人進行閑聊,這樣會大幅度提高運維人員工作效率,使運維人員從繁雜的重復性工作中解放出來,且運維機器人可以全天候工作,好處眾多。
為解決運維人員在實際生產(chǎn)中遇到的相關(guān)問題,構(gòu)建了一個具有4種功能的運維機器人,包括圖譜問答(KBQA),知識對問答(FAQ),任務(wù)型問答(Task)以及基礎(chǔ)閑聊問答。KBQA和FAQ類似,它們可以幫助運維人員解決一些運維知識類的問題,例如“Spark的啟動命令是什么?” “與**同屬一個機架的節(jié)點有哪些?”。任務(wù)型問答可以幫助運維人員完成實際的運維操作動作,例如“請執(zhí)行**作業(yè)”,“創(chuàng)建**群組”等?;A(chǔ)閑聊問答則讓運維機器人具備基礎(chǔ)的功能描述性問答,例如它可以回答用戶輸入的“你好” “你會干什么?” “誰創(chuàng)造了你?”等問題。
現(xiàn)有的運維機器人大多是某一獨立功能的問答系統(tǒng),例如常見的客服機器人屬于基礎(chǔ)閑聊和FAQ問答相結(jié)合,特定功能型機器人屬于Task和基礎(chǔ)閑聊相結(jié)合。如何高效地將多功能場景集合在一個機器人中是本文要解決的問題。
本方案的整體功能劃分可以分為4個部分,Task插件模塊(part1),知識庫QA模塊(part2),Rasa模型預測模塊(part3)和準確率修正模塊(part4),我們的機器人定位是能夠為運維人員提供一問一答的運維知識檢索、基礎(chǔ)的簡單閑聊和基于多輪對話的運維Task執(zhí)行,即前兩個任務(wù)都是一問一答的形式,而第三個任務(wù)可以實現(xiàn)多輪對話的形式。
(一)Task插件模塊(part1)
作為運維機器人使用最多的便是Task場景,這是一個基于專家規(guī)則的模塊,該部分我們設(shè)計了關(guān)鍵詞字典和正則表達式用來匹配Task場景的問答語句。例如在“建立群聊”的Task場景中,我們可以配置相似關(guān)鍵詞的字典,如“創(chuàng)建聊天群、構(gòu)建群組、建立群組、拉建群聊”等,并通過正則表達式的形式進行配置,如“(構(gòu)建|創(chuàng)建|拉建)(.+ )(群聊|群組|聊天群)”。該模塊通過配置文件或以前端界面工具的方式提供給后續(xù)開發(fā)者,使得開發(fā)人員很方便的可以根據(jù)實際情況調(diào)整專家規(guī)則,或在新增意圖時增加專家規(guī)則。
我們通過對現(xiàn)場用戶真實的使用數(shù)據(jù)進行了統(tǒng)計,并通過part1模塊進行相應(yīng)問答記錄的分析,截取了80%左右的task問答語料,被截留的語句無需在經(jīng)過后續(xù)的KBQA或者FAQ問答模型的檢測,而是直接前往part4中的Task場景進行處理,明顯提升了機器人的意圖識別速度。
其次,part1還用于檢測當前是否處于多輪對話狀態(tài)中。多輪對話狀態(tài)的檢測我們依賴目前業(yè)界流行的Rasa開源框架完成。Rasa開源框架通過維護對話狀態(tài)跟蹤(DST)來實現(xiàn)對對話歷史、狀態(tài)等信息的記錄。如果處于多輪對話狀態(tài)中時,根據(jù)我們的實際情況,多輪對話只存在于Task場景中。那么新來的句子就不需要重復進行Task場景的匹配也不會進入part2進行知識檢索,而直接進行多輪對話的操作。例如用戶輸入“拉建群聊”的指令后,機器人會智能分析意圖,并進行追問“請輸入需要創(chuàng)建的群聊名稱”來引導用戶提供必要數(shù)據(jù),這時候用戶再輸入的群名稱可能性就會很多,如用戶可以輸入“如何開啟redis集群”,此時的輸入與我們知識庫存放的QA問答的數(shù)據(jù)重合,如果沒有對話狀態(tài)的檢測,機器人就會錯誤的返回知識庫中存在的問題答案了。
(二)知識庫QA模塊(part2)
當part1部分沒有匹配到專家規(guī)則且不在多輪對話轉(zhuǎn)態(tài)中時,數(shù)據(jù)流入part2。part2通過使用KBQA和FAQ模塊共同協(xié)作,實現(xiàn)對庫中存有的知識進行相似度分析檢索,從而得到符合閾值的問答對數(shù)據(jù)。
KBQA模塊在本應(yīng)用中,主要采用基于答案排序的模式進行處理。我們會首先對用戶輸入的內(nèi)容進行命名實體識別(NER),然后對提取到的實體放入知識圖譜中,關(guān)聯(lián)查找所有相關(guān)的三運組,繼而計算用戶問題與三元組中內(nèi)容的相似度。
FAQ模塊中我們引入ES進行數(shù)據(jù)管理與相似問題的檢索。問答對數(shù)據(jù)存儲在ES中并對輸入的問句進行分詞,停用詞,建索引,向量化,相似度計算等操作。因為倒排索引本身的限制,我們通過近義詞表的引入,加強ES的相似度檢索能力及效果。例如“怎么restart電腦”,用戶實際意圖是希望知道重啟電腦的操作步驟,即相似的問法可以是“怎么重啟電腦”,因此在實際應(yīng)用中,可以將近義詞表、中英翻譯表放入ES中實現(xiàn)關(guān)聯(lián)加速查詢。
Part2模塊可靈活并行調(diào)用KBQA和FAS兩個接口服務(wù),實現(xiàn)并行預測,提升預測結(jié)果效率和質(zhì)量。在實際生產(chǎn)中這里需要設(shè)定優(yōu)先級,定級標準可以依據(jù)2個模型的性能高低情況,知識圖譜和問答對數(shù)據(jù)的質(zhì)量、大小等情況。
(三)RASA模型預測模塊(part3)
通過part2模塊后如果不滿足相似度閾值則會進入 part3部分,例如“你好”等基礎(chǔ)閑聊部分語句。
在我們的實現(xiàn)中,因為Task場景和閑聊場景的語料數(shù)量較為均衡,因此借用Rasa框架采用一個多分類模型進行意圖識別。用戶輸入的語句經(jīng)過該模型后,如果滿足所設(shè)定的閾值,則直接給出模型回答語句,例如滿足閑聊的閾值,則進行閑聊回答。如果part1中未過濾的Task語句來到part3,則會在part3進行意圖識別執(zhí)行。如果不滿足閾值,例如用戶隨意輸入了一串隨機字符“asdasdasd”,則通過rasa框架的FallbackPolicy策略給出設(shè)定好的默認回答,如“我還不理解您的意思,請換個說法”。意圖識別采用Rasa框架可以很方便,快速的通過配置文件搭建起整個pipeline。
例如我們選擇針對中文優(yōu)化的BERT-wwm模型,意圖識別網(wǎng)絡(luò)結(jié)構(gòu)選擇Rasa組織在2020年提出的DIET網(wǎng)絡(luò)結(jié)構(gòu)。其中“正則+字典”部分可以作為意圖識別的特征工程來設(shè)計,對于一些意圖不容易識別的邊緣語句,例如用戶輸入語句“創(chuàng)建XX系統(tǒng)故障處理溝通群組”,這種屬于短文本分類場景,語句中無效的詞槽會嚴重干擾語句本身的意圖,這里我們做了一些輔助提升分類效果的特征工程。借助DIET模型的Sparse features輸入端設(shè)計特征工程。
特征的設(shè)計思路可以依靠“端到端”的思想來展開,可以包含一些通用特征(Feature)以及定制化特征:比如:英文、數(shù)字、正則符號、IP正則、某字典等。
隨著Feature數(shù)量的增加,像Feature1,F(xiàn)eature2這種通用類型的特征逐漸不再需要增加,其它有針對性的Feature根據(jù)問答語句的實際情況進行設(shè)計,實際的一條語句形成的稀疏矩陣,可以想象成一個坐標軸,其中X軸(橫坐標)代表稀疏特征的個數(shù),以0~6來代表7個特性(Feature),Y軸(縱坐標)代表分詞后的輸入內(nèi)容,以0~13來代表14個Token。相應(yīng)的內(nèi)容為1則表示該Feature滿足調(diào)整,為0則表示不滿足。經(jīng)過特征工程的處理,DIET模型可以對邊緣語句的識別率有所提升,基本可以做到在所有待分類別中,正確類別的置信度排名第一。
(四)準確率修正模塊(part4)
如果用戶輸入的數(shù)據(jù)滿足專家規(guī)則或者正在多輪對話中,則數(shù)據(jù)流入part4模塊進行意圖識別和Task任務(wù)。如果正在多輪對話中,則通過Rasa框架完成下輪對話的生成。
如果不在多輪對話中,接下來有一個重要的步驟:基于專家規(guī)則的準確率修正。由于Rasa框架要進行多輪對話管理,所以仍需要在經(jīng)過part1過濾后再用Rasa進行意圖識別,設(shè)立該步驟的原因是為了解決用戶輸入的某些模型不容易識別的邊緣場景導致置信度低于我們所設(shè)定的意圖識別閾值的情況。識別得到的Task場景的置信度未必會超過我們設(shè)定的閾值,因此這里需要添加準確率修正模塊,對Rasa進行2次開發(fā),主動提升這些帶有固定句式的語句置信度,如將置信度人為設(shè)定為0.99。
本文關(guān)注在實際運維中如何提高運維人員的運維體驗和減輕實地操作的工作量,提出了一種基于運維場景的多功能對話機器人,采用一種高效率的結(jié)構(gòu)將四種對話功能集成在一起,在保證功能強大的同時還保持了高實時性、高準確率和擴展性,適合在各個行業(yè)的運維工作中部署,可以有效減輕運維人員的工作量,提高運維體驗。
作者單位: 中國移動通信集團上海有限公司