端到端的封閉域問答系統。建在Huggingface Transformers庫的頂部。
⛔[不保留]該存儲庫不再維護,而是出於教育目的而被保存。如果您想要維護的CDQA替代方案,請訪問:https://github.com/deepset-ai/haystack
如果您有興趣了解系統的工作原理及其實施方式,我們將在媒體上寫了一篇文章,並提供了高級解釋。
我們還在Feedly組織的#9 NLP早餐期間進行了演講。您可以在這裡檢查一下。
pip install cdqagit clone https://github.com/cdqa-suite/cdQA.git
cd cdQA
pip install -e .實驗已經完成:
t2.medium深度學習AMI(UBUNTU)版本22.0p3.2xlarge深度學習AMI(UBUNTU)版本22.0 +單個Tesla V100 16GB。 要使用cdQA ,您需要使用以下列創建PANDAS DataFrame:
| 標題 | 段落 |
|---|---|
| 文章標題 | [文章第1段,...文章n段] |
cdqa轉換器的目的是使您可以輕鬆地從RAW文檔數據庫中創建此數據框架。例如, pdf_converter可以從包含.pdf文件的目錄創建cdqa數據框:
from cdqa . utils . converters import pdf_converter
df = pdf_converter ( directory_path = 'path_to_pdf_folder' )您將需要安裝Java OpenJDK來使用此轉換器。我們目前有:
我們計劃將來改進和添加更多轉換器。敬請關注!
您可以從GitHub版本中手動下載模型和數據,也可以使用我們的下載功能:
from cdqa . utils . download import download_squad , download_model , download_bnpp_data
directory = 'path-to-directory'
# Downloading data
download_squad ( dir = directory )
download_bnpp_data ( dir = directory )
# Downloading pre-trained BERT fine-tuned on SQuAD 1.1
download_model ( 'bert-squad_1.1' , dir = directory )
# Downloading pre-trained DistilBERT fine-tuned on SQuAD 1.1
download_model ( 'distilbert-squad_1.1' , dir = directory )使用預訓練的讀者將管道安裝在您的語料庫上:
import pandas as pd
from ast import literal_eval
from cdqa . pipeline import QAPipeline
df = pd . read_csv ( 'your-custom-corpus-here.csv' , converters = { 'paragraphs' : literal_eval })
cdqa_pipeline = QAPipeline ( reader = 'bert_qa.joblib' ) # use 'distilbert_qa.joblib' for DistilBERT instead of BERT
cdqa_pipeline . fit_retriever ( df = df )如果您想在類似自定義小隊的註釋數據集中微調讀取器:
cdqa_pipeline = QAPipeline ( reader = 'bert_qa.joblib' ) # use 'distilbert_qa.joblib' for DistilBERT instead of BERT
cdqa_pipeline . fit_reader ( 'path-to-custom-squad-like-dataset.json' )微調後保存讀者模型:
cdqa_pipeline . dump_reader ( 'path-to-save-bert-reader.joblib' )要獲得輸入查詢的最佳預測:
cdqa_pipeline . predict ( query = 'your question' )為了獲得N的最佳預測:
cdqa_pipeline . predict ( query = 'your question' , n_predictions = N )在最終排名分數計算中,還有可能更改獵犬分數與讀者分數的重量(默認值為0.35,這被證明是1.1 open的開發集中的最佳權重))
cdqa_pipeline . predict ( query = 'your question' , retriever_score_weight = 0.35 )為了評估自定義數據集中的模型,您需要註釋它。註釋過程可以以3個步驟完成:
使用小隊格式將PANDAS DataFrame轉換為JSON文件:
from cdqa . utils . converters import df2squad
json_data = df2squad ( df = df , squad_version = 'v1.1' , output_dir = '.' , filename = 'dataset-name' )使用註釋者添加地面真相問答對:
請參閱我們的cdQA-annotator ,這是一種基於Web的註釋器,以封閉域問題以小型格式回答數據集。
評估管道對象:
from cdqa . utils . evaluation import evaluate_pipeline
evaluate_pipeline ( cdqa_pipeline , 'path-to-annotated-dataset.json' )評估讀者:
from cdqa . utils . evaluation import evaluate_reader
evaluate_reader ( cdqa_pipeline , 'path-to-annotated-dataset.json' )我們在示例目錄中準備了一些筆記本示例。
您也可以使用活頁夾或Google Colagoratory直接使用這些筆記本示例播放:
| 筆記本 | 硬體 | 平台 |
|---|---|---|
| [1] CDQA的第一步 | CPU或GPU | |
| [2]使用PDF轉換器 | CPU或GPU | |
| [3]在小隊上訓練讀者 | GPU |
活頁夾和Google合同提供臨時環境,並且可能會很慢,但是如果您想輕鬆開始使用cdQA ,我們建議它們。
您cdQA通過執行:
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您現在可以提出測試API的請求(在此使用httpie):
http localhost:5000/api query== ' your question here '如果您希望在cdQA系統頂部使用用戶界面,請按照CDQA-UI的說明,CDQA-UI(為cdQA開發的Web界面)的說明。
閱讀我們的貢獻指南。
| 類型 | 標題 | 作者 | 年 |
|---|---|---|---|
| ?影片 | Stanford CS224N:NLP與深度學習講座10 - 問題回答 | 克里斯托弗·曼寧 | 2019 |
| ?紙 | 閱讀Wikipedia回答開放域問題 | Danqi Chen,Adam Fisch,Jason Weston,Antoine Bordes | 2017 |
| ?紙 | 神經閱讀理解及以後 | Danqi Chen | 2018 |
| ?紙 | BERT:深層雙向變壓器的預訓練以了解語言理解 | 雅各布·德夫林(Jacob Devlin),明 - - 韋·張(Ming-Wei Chang),肯頓·李(Kenton Lee),克里斯蒂娜·杜塔諾瓦 | 2018 |
| ?紙 | 上下文單詞表示:上下文介紹 | 諾亞·史密斯 | 2019 |
| ?紙 | 端到端的開放域問題與Bertserini回答 | Wei Yang,Yuqing Xie,Aileen Lin,Xingyu Li,Luchen Tan,Kun Xiong,Ming Li,Jimmy Lin | 2019 |
| ?紙 | 在開放域問題回答的BERT微調的數據增強 | Wei Yang,Yuqing Xie,Luchen Tan,Kun Xiong,Ming Li,Jimmy Lin | 2019 |
| ?紙 | 通過伯特重新排行 | Rodrigo Nogueira,Kyunghyun Cho | 2019 |
| ?紙 | MRQA:機器閱讀提問回答 | Jonathan Berant,Percy Liang,Luke Zettlemoyer | 2019 |
| ?紙 | 無監督的問題通過披肩翻譯回答 | 帕特里克·劉易斯(Patrick Lewis),盧多維奇(Ludovic Denoyer) | 2019 |
| 框架 | Scikit-Learn:Python中的機器學習 | Pedregosa等。 | 2011 |
| 框架 | Pytorch | Adam Paszke,Sam Gross,Soumith Chintala,Gregory Chanan | 2016 |
| 框架 | 變壓器:Tensorflow 2.0和Pytorch的最先進的自然語言處理。 | 擁抱臉 | 2018 |
Apache-2.0