端到端的封闭域问答系统。建在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