快速建立問答系統,怎麼少得了cdQA-suite

2020-12-14 讀芯術

全文共5101字,預計學習時長10分鐘

機器閱讀理解(MC)的源頭可以追溯至AI誕生之時。艾倫·圖靈在其著作《計算機和智能》中提出了衡量人工智慧的一項測試——圖靈測試。大約70年後,MC的子領域人機問答(QA)依然是AI領域最困難的任務之一。

然而自去年開始,得益於深度學習研究的發展和遷移學習技術的發明,自然語言處理(NLP)領域快速革新。在行業頂尖研究員的努力下,強大的預訓練NLP模型,如 OpenAI-GPT、 ELMo、BERT和XLNet 已走向社會。

有了這些發展,一些改良後的NLP系統和應用也即將面世。其中一個系統就是cdQA-suite。這是由筆者團隊、法國工程學院Telecom ParisTech和歐洲個人理財的領軍者BNP Paribas Personal Finance共同合作開發的軟體包。

開域QA vs 閉域QA

QA系統主要分為兩類,開域QA(ODQA)和閉域QA(CDQA)。

開域系統幾乎能處理所有問題,並且只依賴於通用的本體和世界知識。DrQA就是其中一個例子。它是由Facebook Research開發的開域系統,使用維基百科的大量文章作為知識來源。鑑於這些文章與幾個不同的主題和科目相關,因而該系統被視作開域系統。

另一方面,閉域系統處理的是某個特定領域的問題(例如醫學或汽車維護),並通過一個特定領域的資料庫獲取特定領域的知識。cdQA-suite旨在幫助人們快速創建閉域QA系統。

cdQA-suite

cdQA是一個端到端閉域問答系統

cdQA-suite由三個板塊組成:

· cdQA:方便快捷的Python軟體包,用於搭建QA管道

· cdQA-註解器:簡化問答數據集註解的工具,用於評估模型和進行微調

· cdQA-用戶界面:可接入任何網站和後端系統的用戶界面

下文將解釋各板塊如何運作,及如何通過該系統建立基於個人數據的私人QA系統。

cdQA架構基於兩個主要組件:檢索器和閱讀器。下圖展示了系統機制的結構。

cdQA管道機制

將問題發送到系統時,檢索器會選擇資料庫中最有可能包含答案的文檔。該系統的基礎是與DrQA相同的檢索器,檢索器基於uni-gram和bi-gram創建TF-IDF特徵,並計算題幹與資料庫的每個文檔之間的餘弦相似性。

選擇了最貼近的文檔後,系統把每個文檔分為不同段落,將它們與問題一起發至閱讀器。本質上閱讀器是預訓練的深度學習模型。使用的模型是由HuggingFace提供的著名NLP模型BERT的Pytorch版本。然後,閱讀器輸出在每個段落中找到的最貼近的答案。之後,系統最後一個層級將用內部評分函數比較答案,根據分數輸出最貼近的答案。

使用cdQA的Python軟體包

使用前首先要安裝軟體包。pip install cdqa是一個選擇。但本教程用原始碼進行安裝,從而運行一個腳本來下載預訓練的模型和BNP數據集(數據集包含從公共新聞網頁中摘錄的文章)。

# Installing cdQA package with pip

pip install cdqa

# From source

git clone

cd cdQA &&

pip install .

現在可以打開Jupyter筆記本,按照以下步驟以了解cdQA如何運作:

import pandas as pd

from ast import literal_eval

from cdqa.utils.filters import filter_paragraphs

from cdqa.utils.download import download_model, download_bnpp_data

from cdqa.pipeline.cdqa_sklearn import QAPipeline

# Download data and models

download_bnpp_data(dir='./data/bnpp_newsroom_v1.1/')

download_model(model='bert-squad_1.1', dir='./models')

# Loading data and filtering / preprocessing the documents

df = pd.read_csv('data/bnpp_newsroom_v1.1/bnpp_newsroom-v1.1.csv', converters={'paragraphs': literal_eval})

df = filter_paragraphs(df)

# Loading QAPipeline with CPU version of BERT Reader pretrained on SQuAD 1.1

cdqa_pipeline = QAPipeline(reader='models/bert_qa_vCPU-sklearn.joblib')

# Fitting the retriever to the list of documents in the dataframe

cdqa_pipeline.fit_retriever(X=df)

# Sending a question to the pipeline and getting prediction

query = 'Since when does the Excellence Program of BNP Paribas exist?'

prediction = cdqa_pipeline.predict(X=query)

print('query: {}\n'.format(query))

print('answer: {}\n'.format(prediction[0]))

print('title: {}\n'.format(prediction[1]))

print('paragraph: {}\n'.format(prediction[2]))

可能的輸出結果應如下:

QA管道預測的輸出結果

可以看到,系統不僅輸出答案,還輸出答案所在的段落和文檔/文章的標題。

上面的代碼片段需要進行預處理/過濾,從而將BNP Paribas數據幀轉換為以下結構:

需要發送到cdQA管道的數據幀結構

如果使用自己的數據集,請確保數據幀具備此類結構。

使用模型的CPU版本時,每個預測需要10到20秒才能完成。預測的中等執行速度由BERT閱讀器決定。該閱讀器是一個非常大的深度學習模型(約110M參數)。如果有GPU,可以直接使用模型models/bert_qa_vGPU-sklearn.joblib的GPU版本。

這些預訓練的模型也可以在cdQA github的發布頁面上獲取

訓練/微調閱讀器

此外還可以提高預訓練閱讀器的性能,可在SQuAD 1.1 數據集上預先培訓。如果有格式與SQuAD數據集相同的帶注釋的數據集(可通過cdQA-annotator生成),便可對其中的閱讀器進行微調:

# Put the path to your json file in SQuAD format here

path_to_data = './data/SQuAD_1.1/train-v1.1.json'

cdqa_pipeline.fit_reader(path_to_data)

請注意,應使用GPU執行此類微調。因為BERT模型太大,無法使用CPU進行培訓。

你也可以在官方教程中查看執行相同步驟的其他方法

cdQA註解器

為了便於備註數據,我們建立了基於網絡的應用程式,即cdQA註解器。使用該程序前,先將數據集轉化成類似SQuAD格式的JSON文件。

from cdqa.utils.converters import df2squad

# Converting dataframe to SQuAD format

json_data = df2squad(df=df, squad_version='v1.1', output_dir='.', filename='dataset-name.json')

現在可以安裝、運行這個程序:

# Clone the repo

git clone

# Install dependencies

cd cdQA-annotator

npm install

# Start development server

cd src

vue serve

進入網站的頁面,加載JSON文件後可以看到下圖:

cdQA註解器的界面

備註一組問答題時,應先列出一個問題,用滑鼠光標將答案標亮(答案便自動生成),再點擊「添加備註」:

用cdQA註解器給問答題備註

正如前面解釋的那樣,備註完成後可以進行下載,並在數據中微調BERT閱讀器。

cdQA用戶界面

我們還提供了基於網絡的用戶界面,與cdQA並行。接下來將介紹如何操作與cdQA後端連接的用戶界面。

首先,通過在shell腳本上執行命令(確保在cdQA文件夾中運行)來運行cdQA REST API。

export dataset_path = 'path-to-dataset.csv'

export reader_path = 'path-to-reader-model'

FLASK_APP=api.py flask run -h 0.0.0.0

其次,繼續安裝cdQA用戶界面的程序包:

git clone

cd cdQA-ui &&

npm install

之後啟動開發伺服器:

npm run serve

在網站上登陸網絡應用程式,隨即可以看到下圖:

cdQA用戶界面的網絡應用程式

應用程式通過REST API與後端連接良好時,便可進行提問,應用程式隨即列出答案、答案所在的文本及文章標題:

演示運行中的網絡應用程式

在網頁中插入界面

如果想將界面與網頁結合,只需在Vue程序中輸入以下內容:

import Vue from 'vue'

import CdqaUI from 'cdqa-ui'

Vue.use(CdqaUI)

import Vue from 'vue'

import BootstrapVue from "bootstrap-vue"

Vue.use(BootstrapVue)

import "bootstrap/dist/css/bootstrap.css"

import "bootstrap-vue/dist/bootstrap-vue.css"

之後插入cdQA的界面組件:

<CdqaUI api_endpoint_cpu=['What is Artificial Intelligence?', 'What is Blockchain?']">

</CdqaUI>

樣本演示

你也可在官方網址中查看應用程式的樣本演示。

結語

本文展示了cdQA-suite,一套用於部署端到端閉域問答系統的軟體。

如果對這個項目感興趣並想進一步了解,可以參考GitHub官方儲存庫

留言 點讚 關注

我們一起分享AI學習與發展的乾貨

相關焦點

  • 諮詢三字經:通過「問答贊」建立家長信任感
    各位親愛的校長朋友們大家好,我是彩虹老師,你們教育路上的老朋友,今天和大家分享的是諮詢成交系統中諮詢三字經,問答贊建立客戶信任感。怎麼能夠和家長破冰?怎麼轉化和成交家長? 家長只會出於兩個原因買單:信任VS價值;信任需要在諮詢中建立,價值則在體驗展示中確立。 建立信任是成交的前提,那麼如何在諮詢中建立信賴感?
  • 亞馬遜QA是什麼意思?亞馬遜QA優化技巧一覽
    亞馬遜qa優化注意事項 1、不可以自問自答,也就是說賣家們是不能進行自己提問的,需要買家的帳號來進行提問,賣家們只擁有回答的權限,當然如果賣家用自己的買家號來進行提問,就需要注意電腦使用的ip問題。
  • Linux命令之cd詳解,然而CDPATH是什麼鬼,有什麼用?
    2. cd 如何快速的切換到主目錄?該命令可以讓您快速切換到主目錄,不管您當前所在的目錄。這可以通過使用cd命令加破浪符號(~)來完成。$ cd ~cd ~ 快速切換到主目錄正如您在上面的截圖中所看到的,用戶原先並不在主目錄中。但是在使用「cd ~」命令之後,當前目錄切換到了主目錄。
  • 巧用linux cd命令和Pushd切換目錄
    在Linux的多目錄命令提示符中工作是一種痛苦的事情,但以下這些利用linux cd命令和pushd切換目錄的技巧有助於你節省時間和精力。在Linux命令提示中,用linux cd命令來改變當前目錄。
  • 賞秋天的銀杏怎麼能少得了這裡
    賞秋天的銀杏怎麼能少得了這裡,如果你覺得古觀音禪寺人太多,鹹陽的銀杏太遠,就一定要去離大雁塔很近的大慈恩寺賞銀杏,雖然只有一小片,但是很好拍照,特別精緻,這是去年11月時拍的照片,今年的你一定不要錯過呦
  • visual studio 2005 team suite中文版到
    微軟visual studio 2005 team suite中文版FPP是2005 年發布的一個面向團隊的開發軟體,其提供支持整個軟體開發團隊的工具,讓架構師、開發人員、測試人員、項目管理等人員的工作能夠簡化,同時提高團隊的工作效率,讓開發工作得到有效的監控,是一個非常優秀的高度集成開發環境。目前,商家對其報價為56000元,有需求的朋友不妨考慮下。
  • 資源|「火鍋問答」是啥?面向自然語言和多步推理問題,新型問答數據...
    懷揣著同樣的疑問,我們對目前主流的問答系統 (question answering (QA) system) 以及相關的大規模數據集 (large-scale QA dataset) 進行了調研,結果稍顯悲劇:對於目前主流的問答數據集(例如斯坦福的 SQuAD 數據集 [1]),問題的答案基本都在單一文檔的單一
  • 魔獸世界8.0卡副本CD怎麼卡?魔獸世界8.0卡副本CD方法分享
    魔獸世界8.0是最近非常火的一個魔獸手遊,這個遊戲中的副本是能卡CD的,大家都在問這個魔獸世界8.0卡副本CD是怎麼卡的?小編就為大家帶來了魔獸世界8.0卡副本CD方法分享! 魔獸世界8.0卡副本cd方法介紹攻略 進度保存 我們需要在需要刷的倒數第二個boss之前上線,然後打完倒數第二個boss,離開副本,退出隊伍,打開我們的團隊界面。點擊團隊信息。 只要我們開副本了,打了一個boss這個倒計時就會開啟,每周都會清零一次。
  • 問答系統冠軍之路:用 CNN 做問答任務的 QANet
    什麼是問答系統?問答系統本質上是一個信息檢索(IR)系統,只是它從文具中獲取更多信息,返回更加精準的答案。傳統的問答系統將按照以下的流程工作:(1)問題解析(2)信息檢索(3)答案抽取。當然,我們並不是說傳統的問答系統研究就失去了其研究價值,事實上,傳統的可解釋性更強的問答系統的研究可以反哺端到端的深度學習問答系統,從而為設計深度學習系統提供更多啟發和理論依據。如火如荼的問答系統競賽:且從 SQuAD 說開去其實,一部問答系統發展史就是一部人工智慧史。伴隨著人工智慧的興衰,問答系統也經歷了半個多世紀的浮沉。
  • 唐家三少妻子怎麼了 木子是得了什麼病去世的
    唐家三少和木子的愛情故事曾經感動過很多人,昨晚,三少微博消息,三少的妻子已經離開了。唐家三少妻子去世怎麼回事?我們一起來看看吧。  唐家三少妻子去世怎麼回事  唐家三少還專門為妻子寫了一本書,這部小說今年改編的電視劇《為了你我願意熱愛整個世界》也開播了。
  • Linux常用命令 - cd
    A1owWDcd是一個 shell 內置的,它的行為可能因 shell 而略有不同。它使用 shell 環境變量來確定執行所需的信息。這個是centos系統看到的man信息。在最簡單的形式下,當不帶任何參數地使用時,cd 會將您帶到您的家目錄。在瀏覽文件系統時,可以使用 Tab 鍵自動完成目錄的名稱。在目錄名的末尾添加一個斜槓是可選的。若要切換到某個目錄,必須具有該目錄的可執行權限。pwd 命令允許您查找當前所在的目錄。
  • 怎麼刻錄音樂cd
    車載CD是行車不可或缺的娛樂工具,那麼,怎麼刻錄音樂cd?
  • React Suite 4.0 版本發布 - OSCHINA - 中文開源技術交流社區
    作為一個貼心的 UI 組件庫,怎麼能不照顧用戶的眼睛呢?按照 《Web Content Accessibility Guidelines (WCAG) 》的要求,文字的顏色,字體的粗細,我們在對比度上都做了改進,調整了色板的算法,目的就是讓您的產品更具有可訪問性。
  • 國脈研究院·《數字政府周刊第72期》—政務智能問答系統
    國脈研究院·《數字政府周刊第72期》—政務智能問答系統 2020-05-22 17:36 來源: 國脈電子政務網 查看:
  • 武警武警,怎麼能少得了「武功」呢?
    武警武警,怎麼能少得了「武功」呢?轉頭一看,擒敵訓練場上已經喊聲震天,官兵們正在進行模擬對抗,主動擒敵、被動擒敵、奪兇器擒敵……不管是主動出擊還是被動防禦,應有盡有。白天訓練了這麼多科目,晚上該休息了把?不!不!不!重要的事情說三遍!
  • 關於萬聖節的恐怖片,怎麼能少得了這一部?
    《別惹小孩》但提到與萬聖節相關的恐怖片,怎麼能少得了這一部呢?——《Halloween》。關鍵在於,他怎麼都殺不死。這樣一個人,如何在現實生活中有原型?可影片本身的恐怖點,並非建立在血腥暴力上。不然暴力鏡頭也不會少之又少,而且幾乎看不到血。它真正的恐怖,建立在懸念上。
  • 七夕將至,情人節又怎麼少得了聞綺巧克力
    那七夕將至,情人節又怎麼少得了聞綺巧克力呢?
  • z.lua 1.6.0 發布,會學習你習慣的 cd 命令
    z.lua 是一個命令行下快速切換路徑的工具。
  • 陰陽師陰陽寮怎麼快速升級 陰陽寮快速升級攻略
    陰陽師陰陽寮怎麼快速升級?陰陽寮快速升級的方法有哪些?陰陽寮升級了有什麼用?今天小編就為大家介紹下陰陽寮快速升級攻略,我們一起來看看吧!
  • 重磅|貴陽護理職業學院智能問答系統上線了!
    在這特殊的日子裡,為及時服務廣大考生,最大限度減少疫情對考生高考諮詢的影響,我院招生諮詢智能問答系統正式上線,歡迎廣大考生在線諮詢~  方式一:學院官網瀏覽器搜索「貴陽護理職業學院」進入學院官方網站,可根據您關心的問題進行查詢。