作者:網易智企自然語言處理專家 天曄
客服機器人的核心任務是有效回答使用者各式各樣的問題。而回答問題需要知識,通常客服系統所使用的知識的表現形式是問題-答案對(Question-Answer Pair),這些資訊通常由瞭解實際業務場景的同學整理而成,在客服系統裡,這些問題-答案對的集合通常被命名為知識庫,下面的例子是人力資源共享服務中心場景(HRSSC)下典型知識庫的一個片段。
- 問題一:員工有多少天帶薪年假?
答案:7天。 - 問題二:發工資是哪一天?
答案:每月5號。 - 問題三:公司支付的公積金繳納比例?
答案:繳費基數的12%。
可以想象,不同的場景會有完全不一樣的知識庫,即便某一固定場景下,因每家公司政策不同也會設定不一樣的知識庫,例如為員工購買了附加商業保險的公司的HRSSC系統知識庫可能會有這樣的問答對話:
- 問題四:公司贈送的附加商業保險怎麼申請?
答案:在職期間自動生效,無須專門申請。
此外通過知識庫,可以方便實現附加功能,例如一家電商公司的知識庫可能有如下知識點:
- 問題一:貨怎麼還沒送到,服務太差了!
答案:很抱歉,親,給您帶來了不好的購物體驗。請您稍安勿躁,物品正向您飛奔而去。
這裡的標準問法並非傳統意義上的問題,而是投訴和抱怨。通過該知識點的答案,客服機器人提供了情緒安撫功能。
機器人問答匹配率是衡量客服系統智慧程度的核心指標,它的定義如下:
機器人問答匹配率 = 使用者問題被正確匹配到知識庫中若干知識點的數量 / 使用者輸入的所有問題的數量
換言之,機器人問答匹配率表達的是使用者發出的問題中,客服機器人能從知識庫中選擇正確的問題並給出答覆的比率,即機器人自己能正確作答的比率。
不難理解,這個指標直接決定了客服系統的訪客滿意度。
這個指標達到較高值對客服系統是極具挑戰的,原因是針對相同含義,博大精深的漢語具備幾乎是無窮多種表達方式。例如,我們來列舉一些形容小姐姐美麗的表達:
爐邊人似月,皓腕凝雪霜。
回眸一笑百媚生,六宮粉黛無顏色。
嫻靜似嬌花照水,行動如弱柳扶風。
沉魚落雁鳥驚喧,羞花閉月花愁顫。
月光下,你帶著笑地向我步來,月光與雪色之間,你是第三種絕色。
每當你向我走來,看見了星辰大海。
你把藍天穿在身上,照亮我內心。
顯而易見,相同的意思有無窮種表達,無法預先在知識庫裡窮舉。機器人在查詢知識庫的時候必須能正確處理事先未遇到,但是知識庫中存在相似含義知識點的使用者問題。這是問答匹配率提升關鍵點和難點。作為具備業內領先 AI 能力的服務營銷一體化解決方案專家,網易七魚的機器人問答匹配率高達90%,是如何達成的呢?
1 知識庫搭建
客服系統知識庫分類體系的合理性和範圍廣度是匹配率的最重要基礎。根據上面的機器人問答匹配率公式,我們可以設想兩種極端情況:
- 沒有輸入任何知識,知識的構建成本為零,同時使用者問題被正確匹配的概率為零,即機器人問答匹配率為零;
- 知識庫裡的知識數量為無窮大,知識的構建成本為無窮大,即包含了使用者所有可能提出的問題和答案,那麼使用簡單的字串完全匹配演算法,即可得到機器人問答匹配率為百分之百;
實際的知識庫介於這兩種極端情況之間,適合客服場景的知識庫體系搭建需要專業的知識。大多數客戶在第一次嘗試智慧客服系統時對知識庫搭建並無實際經驗,網易七魚提供了專業的機器人輔助訓練師服務。這些訓練師處理過多種行業和場景下的知識庫冷啟動搭建,經驗豐富, 可輔助客戶在專案冷啟動階段快速搭建知識庫,從而快速形成一套可用的客服系統。下圖是一個典型客戶的知識庫冷啟動過程:
我們再對比一下七魚訓練師團隊輔助搭建的知識庫,和對於智慧機器人沒有實際冷啟動經驗的客戶自行建立的知識庫:
整理前的知識庫:
訓練師整理後的知識庫:
可以看到訓練師整理後的知識庫包含更多表達豐富的有效相似問法,同時消除了客戶自行搭建知識庫情況下包含的錯誤(比如“員工開介紹信” “工資問誰”被安排成是同一個知識點)。
2 知識庫維護
冷啟動階段完成後,系統上線開始執行。如何在客服系統執行中不斷提升知識庫則成為保持和提升機器人問答匹配率的關鍵問題。線上系統的知識庫維護需要從存量知識和增量知識兩個維度分別考慮。
針對存量知識
客服行業由於人員流動性較大,系統側的運營同學經常會發生變化。不同的客服運營同學互相之間有資訊差,容易發生高度重複知識點被不斷加入知識庫的情況,最終知識庫變得冗餘低效。針對此問題,網易七魚提供了知識查重功能,能有效發現重複度高的知識點,降低系統自干擾。下圖是一個示例:
可以看到知識查重功能檢測出大量相似問法分佈在不同的知識點下面的情況,提示需要對知識庫進行整理。
針對增量知識
針對線上執行情況,七魚提供了 “猜你想問相似問法彙總” 和 “未知問題聚類” 兩個功能點來幫助知識庫運營同學提高工作效率。
猜你想問得到的相似問法:
下圖是一個“猜你想問”範例,使用者提問“食堂啥時候開門”,系統的知識庫裡並沒有很接近的知識點,但是演算法找到了三個比較接近的知識點,作為“猜你想問”候選提交給使用者。如果使用者做出了選擇,比如示例裡面的“1”, 那麼,使用者選中的問題 “餐廳開餐時間”和之前使用者輸入的問法“食堂啥時候開門”會在後臺被保留下來。之後運營同學可以決定是否需要把“食堂啥時候開門”加入“餐廳開餐時間”所在的知識點裡面。
未知問題發現
系統執行過程中會不斷遇到知識庫中無法解答的問題,這類使用者問題稱為未知問題。七魚系統提供了文字聚類的演算法能力,能將這些語義接近的句子彙集到一起,例如:
- 新冠疫苗哪裡可以打?
- 什麼時候可以開始接種新冠疫苗?
- 如何申請新冠疫苗接種?
這類隨著場景變化產生的新增使用者提問大概率是不會被已有知識點包含的。七魚的未知問題發現功能可以有效發現並歸類這樣的未知問題給運營同學,之後運營同學可以決定是否需要在知識庫裡面新增對應的知識點。 同時未知問題發現還具有輿情監控方面的作用,例如文字聚類找到了下面的相似問題:
- 今天的蘋果好多爛的。
- 蘋果質量不行啊。
- 你們的蘋果怎麼質量這麼差。
- 蘋果不新鮮而且好多都爛了。
上面的未知問法集中出現提示商家可能出現了品控問題,商家根據這個報警資訊可以迅速做出管理動作從而解決問題。
3 句子相似度匹配核心演算法
有了內容廣泛,結構合理的知識庫,下一步驟是演算法模組的職責去找到正確匹配使用者問法的知識點並將答案返回。針對同一知識點,五千年文化沉澱而成的漢語提供了列舉不盡的表達方式。使用者問句和知識庫中知識點語句的相似度匹配演算法是七魚機器人的核心模組,該模組的能力直接決定了客服系統的問答匹配率。七魚客服系統的問答匹配率之所以保持在業界領先的90+%水平,主要依靠持續不斷的研發投入,保證七魚的演算法能力始終處於業界前沿。下面列舉一部分七魚客服系統使用的相似度匹配演算法,分別從單個語句的建模(通過數(number)去表示單個語句)和兩個語句關係的建模(通過數(number)去表示待匹配兩句話的關聯性)兩個維度來描述。
表示單個語句的演算法
在計算兩個句子相似度之前,先要找到合適的數學模型來做句子表徵(即使用一定量的數(number)來表示句子)。七魚內部的句子表徵方法包括詞袋(bag-of-words)模型, 向量空間(vector space)模型, 基於靜態詞向量(word embedding)模型, 基於預訓練(pre-training based)模型。
詞袋模型用集合來表示單個句子,每個詞都是集合中的一個元素,詞與詞之間相互獨立,即不考慮詞語之間的順序和依賴關係。通常我們會針對漢語預先定義一個詞典,詞袋模型的句子表徵是一個向量,它的長度與該詞典的大小相同,其中的每個元素代表了對應詞出現的次數,例如:
- 詞典:[老王,老張,想去,北京,上海,旅遊]
- 例句:老王想去北京旅遊
- 句子表徵:[1,0,1,1,0,1]
例句中包含了“老王”、“想去”、“北京”、“旅遊”四個詞,並且這些詞都只出現了1次,這些詞在詞典中的索引分別為0、2、3、5,所以句子表徵向量中這些位置的元素值為1,其餘元素值為0。
詞袋模型使用詞頻作為句子向量中元素的值,還可以進一步用語義資訊更豐富的指標來生成句子的向量空間模型表示,例如表示詞重要性的TF-IDF指標。TF-IDF是詞頻(TF: Term Frequency)和逆文件頻率(IDF: Inverse Document Frequency)兩項指標的乘積,其思想是如果一個詞在當前文件中出現的頻率高,而在其他文件中出現的頻率相對較低,那麼說明這個詞具有很好的區分度。詞頻可以通過統計當前句子得到,而逆文件頻率則需要遍歷所有文件,按照以下公式計算:
求出每個詞的TF-IDF值後,類似詞袋模型那樣構建句向量。
詞的語義資訊往往體現於它與其他詞的關係中,例如與“筷子”相近的詞更可能是“吃飯”而非“睡眠”。靜態詞向量模型是對詞與詞之間的共現關係建模,從而獲得詞向量表示的方法。然後對句子中所有詞的靜態詞向量取平均或者通過其他更復雜的神經網路結構(如CNN,LSTM),就能夠獲得該句話的向量表示。靜態詞向量中的“靜態”是指對於給定的輸入句子,詞向量的取值是固定的,與該詞對應的上下文無關。換言之,靜態詞向量模型訓練完畢後,每個詞語的靜態詞向量就是固定的,不因具體的輸入句子改變而發生變化。
預訓練模型通過大規模語料來學習在具體語境下詞與詞之間的關係,並且得到的詞向量一般是動態的,即一個詞向量的取值依賴於上下文。換言之,同一個詞在不同語句中出現會對應不同的動態詞向量。為了準確地獲得語義,預訓練模型通常從詞法、句法等粒度出發構建學習任務,詞法特徵的任務主要有:
- 遮蔽某個詞,使用上文資訊去預測這個詞是什麼,例如GPT。
- 遮蔽某個詞,使用上下文資訊去預測這個詞是什麼, 例如BERT。
句法特徵的任務主要有:
- 給定兩句話S1和S2,判斷二者在語料中的位置是否是連續的,例如BERT。
- 給定兩句話S1和S2,判斷在語料中哪句話先出現,例如ALBERT。
- 給定兩句話S1和S2,判斷在聊天的場景下,S2是否可以作為S1的回覆,例如ERNIE 1。
- 給定一個句子集合,預測每條句子在語料中出現的順序,例如ERNIE 2。
表示兩個語句之間關係的演算法
計算句子之間的相似度時,除了要考慮如何用數學模型表示單個句子之外,還要考慮對兩句話之間的關聯性進行建模,特別是需要考慮兩個句子的關聯方式和關聯時機。根據建模時兩個句子互動發生時機的不同,相似度演算法大體上可劃分為雙塔模型、單塔模型、互動聚合模型三種結構。
雙塔結構是純粹基於單句句子表徵的相似度演算法,意思是我們先依次對兩句話做出抽象的理解,然後再對比兩邊的理解是否一致。該類模型使用兩個編碼器分別對需要匹配的兩句話進行編碼表示,最後再計算兩句話編碼結果之間的相似度 (通常是餘弦相似度)。雙塔的意思是需要比較的兩個語句如兩座塔,在輸出最後相似度結果之前沒有任何互動,例如QA-LSTM、BCNN等。
單塔結構強調兩句話之間的互動,意思是把待匹配的兩句話放到一起當作整體去理解,然後得出相似與否的結論。該類模型將兩句話通過某種方式拼接到一起,然後輸入到編碼器中計算相似度。單塔的意思是待匹配的兩句話是一個整體,如同一座孤塔,待匹配的兩句話從始至終都在發生資訊的互動,例如 MatchPyramid、BERT等。
互動聚合結構可以認為是上述結構的一種折衷方案,類似於我們依次閱讀兩句話並做出初步的單句理解,基於單句理解的結果在全域性層面進行第二步兩句話的聯合理解,最終得出句子匹配的結果。該類模型首先使用兩個編碼器分別對需要匹配的兩句話進行編碼表示,然後通過某種方法融合兩部分的資訊並做進一步推理,最後輸出兩句話之間的相似度。互動聚合的含義是整體結構如同存在一條或多條“天橋”的兩座塔,下層互相獨立,上層發生關聯,例如ESIM、BiMPM等。
4 總結
在本篇文章中,我們詳述了七魚機器人問答匹配率高達90%以上的祕訣:
- 冷啟動時在七魚專業人工智慧訓練師的指導下快速搭建知識庫實現服務上線;
- 系統執行中對知識庫的有效維護和新知識點發現;
- 完整的演算法技術棧以服務於各種場景。
在以上三個環節的加持下,七魚機器人的問題匹配準確率在業內一直佔據絕對優勢。
不知您是否曾經在銀行苦苦排隊只為繳納電費,是否在門店等待一小時卻未能辦好業務而和店員吵架,是否有過在食堂排隊很久最後被告知菜賣完了的經歷。如果以上這些都不夠刻骨銘心的話,您是否曾經拖著病體大清早起床掛號,抑或數九寒天忍飢挨餓只為買一張火車票回家。
技術改變生活,移動網際網路時代,以上這些需求都已經可以足不出戶在手機上完成,而問答機器人在其中扮演了關鍵角色。
作具備業內領先 AI 能力的服務營銷一體化解決方案專家,網易七魚已經在電商、教育、製造、汽車等各行業落地,助力企業服務的數字化轉型。有幸服務千家萬戶,提升生活品質,創造美好生活,對這個時代我們充滿感激。如果您的企業仍然困擾於上述痛點,不妨和七魚交個朋友,我們一起共同努力,擁抱星辰大海!