用BERT與Milvus快速搭建對話機器人!

https://github.com/milvus-io/milvusgit

問答系統是天然語言處理領域一個很經典的問題,它用於回答人們以天然語言形式提出的問題,有着普遍的應用。其經典應用場景包括:智能語音交互、在線客服、知識獲取、情感類聊天等。常見的分類有:生成型、檢索型問答系統;單輪問答、多輪問答系統;面向開放領域、特定領域的問答系統。本文涉及的主要是在檢索型、面向特定領域的問答系統,一般稱之爲——智能客服機器人。github

在過去,客服機器人的搭建一般須要將相關領域的知識(Domain Knowledge),轉化爲一系列的規則和知識圖譜。構建過程當中重度依賴「人工」智能,換個場景,換個用戶都須要大量的重複勞動。sql

隨着深度學習在天然語言處理(NLP)中的應用,機器閱讀能夠直接自動從文檔中找到匹配問題的答案。深度語言模型會將問題和文檔轉化爲語義向量,從而找到最後的匹配答案。本文藉助Google開源的Bert模型結合Milvus開源向量搜索引擎,快速搭建基於語義理解的對話機器人。api

| 總體架構

本文經過語義類似度匹配來實現一個問答系統,大體的構建過程:架構

  1. 獲取某一特定領域裏大量的帶有答案的中文問題(本文將之稱爲標準問題集)。
  2. 使用Bert模型將這些問題轉化爲特徵向量存儲在Milvus中,同時Milvus將 給這些特徵向量分配一個向量ID。
  3. 將這些表明問題的ID和其對應的答案存儲在PostgreSQL中。

當用戶提出一個問題時:性能

  1. 經過Bert模型將之轉化爲特徵向量
  2. 在Milvus中對特徵向量作類似度檢索,獲得與該問題最類似的標準問題的id
  3. 在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技術的大規模落地。

相關文章
相關標籤/搜索