搭建智慧問答機器人

hurongliang發表於2020-10-19

背景

場景一、大多數網站或者app都會有類似幫助中心的模組來幫助使用者更好的使用網站或APP,目前大多數頁面會以一問一答的形式展示。但是如果提供的QA或服務的內容較多,使用者找起來會很麻煩,比如京東的幫助中心,提供的服務非常多,如果有一個簡單的互動頁面,使用者輸入口語化的問題就能正確定位到相關QA並直接給出答案,體驗會更好。

場景二、購物類應用的客服通常要提供購物相關答疑,並且大多數問題會重複出現,如果有一個智慧問答機器人在人工繁忙的時候預先提供服務,能很好的提高答疑效率。避免客戶因長時間等待失去耐心和購物熱情。

目標

構建一個智慧問答機器人,能根據使用者的提問從問答庫中準確找出相應的答案並呈現。

這裡我們不需要結構化語義,也不需要提供動態服務。

技術方案

這是一個文字相似度匹配的問題。

傳統的工程技術解決方案是基於字串匹配,首先對問題列表進行歸一化處理,然後分詞,利用lucene或elestic相關技術中介軟體將問題集存入倒排表進行索引儲存。當使用者輸入提問時,對提問做歸一化處理後利用中介軟體做分詞或搜尋字串,中介軟體會自動計算匹配相似度並按匹配度從高向低給出匹配的問題及匹配度。滿足匹配度閾值取第一條即可。

這種方式原問題和提問是基於對相同字元的出現頻率和距離來匹配的。無法在語義上做匹配,泛化能力弱。舉個例子:原問題:一加一等於 ,使用者如果提問一加一,大概率是能匹配到的,但是如果提問1+1=?,那大概率是匹配不到的。

論文 《Learning Semantic Textual Similarity from Conversations》 提供了一個語義相似度演算法模型,她從對話資料中學習句子之間的語義相似度,通過無監督訓練模型學習表徵,並用多工訓練增強模型,並結合問答預測任務和自然語言推理任務提升效能。在給定的問答場景中,能有效區分語義相似的的問題。

Google提供了現成的universal-sentence-encoder模型(USE):https://tfhub.dev/google/universal-sentence-encoder-large/3

使用USE模型得到的是文字的向量表示,而要匹配提問和原問題的向量,則需要用到Milvus。Milvus是一個開源的分散式向量搜尋引擎。我們把問答庫中的原問題錄入Milvus,在使用者提示時,使用USE模型將提問轉換成向量表示,並利用Milvus檢索出相似度最高的原問題,可以找到對應的答案。

工程實現

原始碼:https://github.com/hurongliang/ai-chatbot

Demo

搭建了一個簡單應用,有興趣的同學體驗下。

地址:https://chatbot.hurongliang.com/

參考及引用

Learning Semantic Textual Similarity from Conversations

Advances in Semantic Textual Similarity

相關文章