作者 | Milvus.io
責編 | 胡巍巍
問答系統是自然語言處理領域一個很經典的問題,它用於回答人們以自然語言形式提出的問題,有著廣泛的應用。其經典應用場景包括:智能語音交互、在線客服、知識獲取、情感類聊天等。常見的分類有:生成型、檢索型問答系統;單輪問答、多輪問答系統;面向開放領域、特定領域的問答系統。本文涉及的主要是在檢索型、面向特定領域的問答系統,通常稱之為——智能客服機器人。
在過去,客服機器人的搭建通常需要將相關領域的知識(Domain Knowledge),轉化為一系列的規則和知識圖譜。構建過程中重度依賴「人工」智能,換個場景,換個用戶都需要大量的重複勞動。
隨著深度學習在自然語言處理(NLP)中的應用,機器閱讀可以直接自動從文檔中找到匹配問題的答案。深度語言模型會將問題和文檔轉化為語義向量,從而找到最後的匹配答案。本文藉助Google開源的Bert模型結合Milvus開源向量搜尋引擎,快速搭建基於語義理解的對話機器人。
整體架構
本文通過語義相似度匹配來實現一個問答系統,大致的構建過程:
獲取某一特定領域裡大量的帶有答案的中文問題(本文將之稱為標準問題集)。使用Bert模型將這些問題轉化為特徵向量存儲在Milvus中,同時Milvus將給這些特徵向量分配一個向量ID。將這些代表問題的ID和其對應的答案存儲在PostgreSQL中。當用戶提出一個問題時:
通過Bert模型將之轉化為特徵向量在Milvus中對特徵向量做相似度檢索,得到與該問題最相似的標準問題的id在PostgreSQL得出對應的答案。系統架構圖如下(藍色線是導入過程,黃色線是查詢過程):
接下來,將手把手教您搭建一個在線問答系統。
搭建步驟
在搭建之前您需要安裝Milvus、Postgresql,具體安裝步驟請參考官網。
1.數據準備
本文中的實驗數據來自:https://github.com/SophonPlus/ChineseNlpCorpus。
該項目下的FAQ問答系統中的金融數據集,我們從中一共整理了33萬條數據。結合這組數據,我們可以快速搭建一個xx銀行智能客服機器人。
2.生成特徵向量
本系統使用了Bert已預訓練好的一個模型。在啟動服務前,需要下載該模型:https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip
使用該模型將問題庫轉化為特徵向量,以用於後續的相似度檢索。更多bert服務相關可參考:https://github.com/hanxiao/bert-as-service
3.導入Milvus和PostgreSQL
將上述產生的特徵向量歸一化處理後導入Milvus中存儲,然後j將Milvus返回的id以及該id對應的問題的答案導入PostgreSQL中。PostgreSQL中的表結構:
4.獲取答案
用戶輸入一個問題,通過Bert產生特徵向量後,在Milvus庫中找出與之最相似的一個問題。本文採用的餘弦距離來表示兩個句子間的相似度,由於所有向量都進行了歸一化,因此兩個特徵向量的餘弦距離越接近1表示相似度也高越高。庫中可能沒有與用戶給定問題比較相似的問題,所以在實踐中我們可以設定了一個閾值0.9,當檢索出來的最相似的距離小於該閾值時,則返回本系統未收錄相關問題的提示。
系統演示
系統初始界面如下:
在對話框中輸入你的問題,將會收到對應的答案。如圖:
總結
上述的問答系統搭建是不是很簡單?有Bert模型的加持,你根本不需要預先對語料進行分類整理、標籤化等工作。同時,得益於開源向量搜尋引擎Milvus的高性能和可擴展性,系統可以支撐上億級別的語料庫。Milvus向量搜尋引擎已經加入Linux AI (LF AI)基金會進行孵化,歡迎大家加入Milvus社區。讓我們一起加速AI技術的大規模落地。
附錄
Milvus網站:milvus.io
系統演示:https://milvus.io/cn/scenarios
詳細步驟(附代碼):
https://github.com/milvus-io/bootcamp/tree/0.7.0/solutions/QA_System
聲明:本文系作者投稿,不代表CSDN立場。