https://github.com/milvus-io/milvusgit
問答系統是天然語言處理領域一個很經典的問題,它用於回答人們以天然語言形式提出的問題,有着普遍的應用。其經典應用場景包括:智能語音交互、在線客服、知識獲取、情感類聊天等。常見的分類有:生成型、檢索型問答系統;單輪問答、多輪問答系統;面向開放領域、特定領域的問答系統。本文涉及的主要是在檢索型、面向特定領域的問答系統,一般稱之爲——智能客服機器人。github
在過去,客服機器人的搭建一般須要將相關領域的知識(Domain Knowledge),轉化爲一系列的規則和知識圖譜。構建過程當中重度依賴「人工」智能,換個場景,換個用戶都須要大量的重複勞動。sql
隨着深度學習在天然語言處理(NLP)中的應用,機器閱讀能夠直接自動從文檔中找到匹配問題的答案。深度語言模型會將問題和文檔轉化爲語義向量,從而找到最後的匹配答案。本文藉助Google開源的Bert模型結合Milvus開源向量搜索引擎,快速搭建基於語義理解的對話機器人。api
| 總體架構
本文經過語義類似度匹配來實現一個問答系統,大體的構建過程:架構
- 獲取某一特定領域裏大量的帶有答案的中文問題(本文將之稱爲標準問題集)。
- 使用Bert模型將這些問題轉化爲特徵向量存儲在Milvus中,同時Milvus將 給這些特徵向量分配一個向量ID。
- 將這些表明問題的ID和其對應的答案存儲在PostgreSQL中。
當用戶提出一個問題時:性能
- 經過Bert模型將之轉化爲特徵向量
- 在Milvus中對特徵向量作類似度檢索,獲得與該問題最類似的標準問題的id
- 在PostgreSQL得出對應的答案。
系統架構圖以下(藍色線是導入過程,黃色線是查詢過程):學習
接下來,將手把手教您搭建一個在線問答系統。搜索引擎
| 搭建步驟
在搭建以前您須要安裝Milvus、Postgresql,具體安裝步驟請參考官網。google
1.數據準備spa
本文中的實驗數據來自: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技術的大規模落地。