基於知識庫的智能問答系統搭建


一、問答機器人介紹

智能問答中最重要得到模塊就是要理解用戶的咨詢意圖,並給出專業的咨詢回復,結合業務知識庫或者知識圖譜,應用到不同的業務中去,以低成本的智能客服替代人工服務,滿足客戶咨詢訴求,根據對話倫次可分為單輪FAQ問答式機器人,基於業務規則的多輪對話機器人,基於前文理解的多輪對話機器人等,比如很火的chatgpt就是能結合前文信息的生成式問答,生成式問答存在生成內容不可控的問題,這里暫且不表,主要介紹基於知識庫的問答,該技術也可用於智能客服、智能催收、智能電銷等業務中

二、算法選型

1、要識別用戶的意圖可以采用分類算法或者相似比對算法,到底采用分類還是比對,分類算法最致命的問題是,模型訓練時,訓練Y標是定下來的,每次Y標修改,必須重新訓練迭代模型,因此基於相似比對算法來做意圖識別通常更符合業務訴求,采用比對算法的問題主要是在庫需要比對的數據或者文本過於龐大,消耗計算資源過大,通常的做法是先做一層或者多層的召回,再進行精細化的比對,只要召回算法夠高效,既可以節約大量計算時間和成本,又不影響整體效果。

2、文本領域常用的有倒排索引召回,TF_IDF召回,annoy語義召回,BM25召回以及混合召回等,基於多次效果和性能上的考量,最終選用了BM25召回,選用它的還有一大好處就是Elasticsearch 7.9.0 版本中,引入了一個名為 "rank_feature" 的字段類型,它使用 BM25 相似性評分模型進行召回,經過BM25召回后,再接入語義比對模型進行精細相似度打分

3、比對模型,在文本領域也叫語義模型,這里通常會使用Siamese網絡,基模型可采用textcnn、bert、albert等模型來進行語義模型的訓練與比對,基於效果和性能的考量,個人推薦采用bert模型,當然也可以根據數據量與業務場景靈活選擇.

4、sentence-bert是對預訓練 BERT網絡 的一種改進,該網絡使用孿生網絡或者三元組網絡結構,來推導語義上有意義的句子向量表征,語義模型訓練與比對模型類似,同類樣本交叉可產生正樣本對,不同類樣本組成負類樣本對,當然也可采用三元組樣本,只是損失函數需修改為triplet loss,語義模型訓練的目標是獲取一個魯棒性夠高,在業務數據上AUC夠高的模型,為提高性能,可考慮以下幾點方案:

a、利用教育中心打磨業務知識庫,明確不同意圖的語義邊界,豐富說法與意圖,同時對訓練樣本進行合理篩選

b、選用一個合適預訓練模型,博主目前采用macbertMacbert 是一種改進的BERT,它采用了比較前沿的MLM掩碼技術來校正預訓練任務,同時采用Synonyms 工具包 來做樣本增強。它減輕了預訓練和微調的差異,多次實驗表明,采用Macbert來做基礎模型進行fine-tune,效果比原生Bert更好,魯棒性更強
c、尋找更多同領域數據,語義模型的訓練數據不是越多越好,不同類別之間的正負規范越接近越好,例如金融領域內拿醫療領域樣本就不合適,"你是神經病"和"你是精神病"在金融領域可能都是罵人,但在醫療領域是不同的意圖

5、意圖識別流程設計:

 

三、技術選型:

Elasticsearch 從版本 7.10.0 開始引入了向量計算的能力。新的向量數據類型(vector data type)和相應的查詢語法使得可以在 Elasticsearch 中存儲和操作向量數據。這使得可以執行類似於余弦相似度等向量計算。
該特性使得采用Elasticsearch比mysql多了相似度計算能力, 比milvus多了文本召回能力,比采用內存存儲如annoy索引樹又多了可熱更新與持久化的能力,所以存儲方案上,采用Elasticsearch 成了最優的選擇
,采用Elasticsearch還可以進行BM25參數的調整、向量點積的計算,大幅降低機器人代碼耦合度與邏輯計算量,還可以按需進行多條件的篩選,通過向量冗余存儲,還可以靈活調整所需要的語義模型版本,實現業務無感知的模型迭代,同時可以通過API實現業務知識庫的熱更新

 

1、服務解耦:經過服務解耦設計,智能客服核心的服務組件可拆成ES服務、bert embedding服務、機器人服務,教育中心服務,監控服務四大模型,各服務模塊采用

a、ES服務:ES服務主要用於存儲知識庫、文本召回、向量點積計算、知識庫更新、數據匹配等,是智能客服中的核心組件,服務搭建部署可參考:https://www.cnblogs.com/jax-/p/17647888.html
b、embedding服務:主要用於快速計算query文本的embedding,用於文本召回后的點積計算:服務搭建部署可參考:https://www.cnblogs.com/jax-/p/17647991.html
c、機器人服務:機器人邏輯主服務,可實現機器人選擇,語義模型選擇,不同業務機器人規則篩選等
d、教育中心服務:教育中心服務是用於提升知識庫質量的一系列推薦服務,旨在提升知識庫完善度與質量
e、監控服務:監控服務主要用於監控各模塊服務是否正常,性能是否已到瓶頸,異常時發出告警等

 

2、部署方案:經過不同技術框架的比對選型,結合業務數據分析,最終采用了容器化部署方案,采用docker或者docker-composer容器,容器化部署有以下幾點優勢

a、輕量化和可移植性:容器化將應用程序及其依賴項打包為獨立的容器,使其在不同的環境中可以輕松部署和運行。容器是輕量級的,與宿主操作系統共享內核,因此更加高效,並且可以在不同的平台上運行,提供了高度的可移植性。
b、快速部署和擴展:容器可以快速啟動和停止,使得應用程序的部署和擴展變得更加簡單和迅速。容器化應用程序可以根據需求進行水平擴展,即增加或減少容器的數量,以適應流量的變化,實現更好的彈性和靈活性。
c、隔離和安全性:每個容器都是相互隔離的運行單元,具有自己的文件系統、進程和網絡空間。這種隔離能力提供了更高的安全性,因為容器之間無法直接訪問彼此的資源,減少了潛在的攻擊面。
d、簡化依賴管理:通過容器化,可以將應用程序及其所有依賴項打包在一起。這樣,開發人員可以輕松地管理和維護應用程序所需的特定版本的庫、工具和配置,減少了依賴沖突和環境配置問題。
e、可重復部署:使用容器鏡像可以確保在不同的環境中以相同的方式部署應用程序,消除了部署過程中的配置差異和兼容性問題。這種可重復性簡化了開發、測試和生產環境之間的遷移和部署。
f、簡化持續集成和交付:容器化使得實現持續集成和持續交付(CI/CD)變得更加容易。通過將容器作為構建和交付的基本單位,可以快速構建、測試和部署應用程序,並且容器的可移植性和隔離性使得持續集成和交付流程更加穩定和可靠

 

四、模型上線與迭代

基於知識庫的意圖識別效果嚴重依賴知識庫的質量,成熟的知識庫能攔截90%以上的訪問流量,既用戶的query進入規則層后與在庫說法完全匹配的概率超過90%,同時bert模型的訓練通常需要一天以上,所以優化工作的重心之一是打磨知識庫

基於此,開發了智能教育模塊用於輔助優化知識庫,總體設計方案如下圖所示,具體詳情可參考連接:https://www.cnblogs.com/jax-/p/17681932.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM