엔드 투 엔드 폐쇄 도메인 질문 응답 시스템. 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 Deep Learning AMI (Ubuntu) 버전 22.0p3.2xlarge 딥 러닝 AMI (UBUNTU) 버전 22.0 + 단일 테슬라 V100 16GB. cdQA 사용하려면 다음 열이있는 Pandas Dataframe을 만들어야합니다.
| 제목 | 단락 |
|---|---|
| 기사 제목 | [기사 1 항, ..., 기사의 단락 n] |
cdqa 변환기의 목적은 원시 문서 데이터베이스 에서이 데이터 프레임을 쉽게 만들 수 있도록하는 것입니다. 예를 들어 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' )최고의 예측을 얻으려면 :
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 를 참조하십시오.
파이프 라인 객체 평가 :
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' )예제 디렉토리 아래에 몇 가지 노트북 예제를 준비했습니다.
Binder 또는 Google 공동 작업을 사용 하여이 노트북 예제를 직접 플레이 할 수도 있습니다.
| 공책 | 하드웨어 | 플랫폼 |
|---|---|---|
| [1] CDQA의 첫 단계 | CPU 또는 GPU | |
| [2] PDF 변환기 사용 | CPU 또는 GPU | |
| [3] 분대에서 독자 훈련 | GPU |
바인더와 Google 공동 작업은 임시 환경을 제공하며 시작이 느리게 진행될 수 있지만 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이제 API를 테스트하도록 요청할 수 있습니다 (여기서는 httpie를 사용하여) :
http localhost:5000/api query== ' your question here ' cdQA 시스템 위에서 사용자 인터페이스를 제공하려면 cdQA 용 웹 인터페이스 인 CDQA-UI의 지침을 따르십시오.
기고 가이드 라인을 읽으십시오.
| 유형 | 제목 | 작가 | 년도 |
|---|---|---|---|
| ? 동영상 | 스탠포드 CS224N : 딥 러닝 강의가있는 NLP - 질문 답변 | 크리스토퍼 매닝 | 2019 |
| ? 종이 | Wikipedia를 읽고 오픈 도메인 질문에 답하십시오 | Danqi Chen, Adam Fisch, Jason Weston, Antoine Bordes | 2017 |
| ? 종이 | 신경 독해 및 그 너머 | Danqi Chen | 2018 |
| ? 종이 | BERT : 언어 이해를위한 깊은 양방향 변압기의 사전 훈련 | Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova | 2018 |
| ? 종이 | 맥락 단어 표현 : 상황에 맞는 소개 | 노아 A. 스미스 | 2019 |
| ? 종이 | Bertserini와의 응답 엔드 투 엔드 오픈 도메인 질문 | Wei Yang, Yuqing Xie, Aileen Lin, Xingyu Li, Luchen Tan, Kun Xiong, Ming Li, Jimmy Lin | 2019 |
| ? 종이 | 개방형 도메인 질문에 대한 버트 미세 조정에 대한 데이터 확대 | Wei Yang, Yuqing Xie, Luchen Tan, Kun Xiong, Ming Li, Jimmy Lin | 2019 |
| ? 종이 | Bert와 함께 통과를 재평가합니다 | 로드리고 노지 리라, 칸색 조교 | 2019 |
| ? 종이 | MRQA : 질문 답변을위한 기계 읽기 | Jonathan Berant, Percy Liang, Luke Zettlemoyer | 2019 |
| ? 종이 | Cloze Translation의 감독되지 않은 질문 답변 | Patrick Lewis, Ludovic Denoyer, Sebastian Riedel | 2019 |
| 뼈대 | Scikit-Learn : 파이썬의 기계 학습 | Pedregosa et al. | 2011 |
| 뼈대 | Pytorch | Adam Paszke, Sam Gross, Soumith Chintala, Gregory Chanan | 2016 |
| 뼈대 | 변압기 : Tensorflow 2.0 및 Pytorch의 최신 자연 언어 처리. | 포옹 얼굴 | 2018 |
아파치 -2.0