Ein End-to-End-Fragen Antwortsystem für geschlossene Domänen. Auf der Bibliothek von Suggingface -Transformers aufgebaut.
⛔ [nicht aufrechterhalten] Dieses Repository ist nicht mehr aufrechterhalten, wird aber zu Bildungszwecken in der Nähe gehalten. Wenn Sie eine gepflegte Alternative zu CDQA wünschen: https://github.com/deepset-ai/haystack
Wenn Sie daran interessiert sind, zu verstehen, wie das System funktioniert und seine Implementierung, haben wir einen Artikel über Medium mit einer hohen Erklärung geschrieben.
Wir haben auch eine Präsentation während des von Feedly organisierten NLP -Frühstücks #9 gemacht. Sie können es hier überprüfen.
pip install cdqagit clone https://github.com/cdqa-suite/cdQA.git
cd cdQA
pip install -e .Experimente wurden durchgeführt mit:
t2.medium Deep Learning AMI (Ubuntu) Version 22.0p3.2xlarge Deep Learning AMI (Ubuntu) Version 22.0 + Ein einzelner Tesla V100 16GB. Um cdQA zu verwenden, müssen Sie mit den folgenden Spalten einen Pandas -Datenfreame erstellen:
| Titel | Absätze |
|---|---|
| Der Artikel Titel | [Absatz 1 des Artikels, ..., Absatz n des Artikels] |
Das Ziel von cdqa -Konverter ist es, diesen Datenrahmen einfach aus Ihrer RAW -Dokumentendatenbank zu erstellen. Zum Beispiel kann der pdf_converter einen cdqa -Datenfreame aus einem Verzeichnis erstellen, das .pdf -Dateien enthält:
from cdqa . utils . converters import pdf_converter
df = pdf_converter ( directory_path = 'path_to_pdf_folder' )Sie müssen Java OpenJDK für diesen Konverter installieren. Wir haben derzeit Konverter für:
Wir planen, in Zukunft weitere Konverter zu verbessern und hinzuzufügen. Bleiben Sie dran!
Sie können die Modelle und Daten manuell aus den GitHub -Releases herunterladen oder unsere Download -Funktionen verwenden:
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 )Machen Sie die Pipeline mit dem vorgeborenen Leser auf Ihrem Korpus:
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 )Wenn Sie den Leser in Ihrem benutzerdefinierten kader-ähnlichen, kommentierten Datensatz fein abstellen möchten:
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' )Speichern Sie das Lesermodell nach der Feinabstimmung:
cdqa_pipeline . dump_reader ( 'path-to-save-bert-reader.joblib' )Um die beste Vorhersage bei einer Eingabeabfrage zu erhalten:
cdqa_pipeline . predict ( query = 'your question' )Um die besten Vorhersagen zu erhalten:
cdqa_pipeline . predict ( query = 'your question' , n_predictions = N )Es besteht auch die Möglichkeit, das Gewicht des Retriever-Scores gegenüber dem Leserwert in der Berechnung der endgültigen Ranking-Punktzahl zu ändern (der Standard ist 0,35, was das beste Gewicht des Entwicklungssatzes von Kader 1,1-Open ist)
cdqa_pipeline . predict ( query = 'your question' , retriever_score_weight = 0.35 )Um Modelle in Ihrem benutzerdefinierten Datensatz zu bewerten, müssen Sie ihn mit Anmerkungen versehen. Der Annotationsprozess kann in 3 Schritten durchgeführt werden:
Konvertieren Sie Ihren Pandas -Datenfreame in eine JSON -Datei mit Squad -Format:
from cdqa . utils . converters import df2squad
json_data = df2squad ( df = df , squad_version = 'v1.1' , output_dir = '.' , filename = 'dataset-name' )Verwenden Sie einen Annotator, um Frages-Antwortenpaare von Ground-Wahrheit hinzuzufügen:
In unserem cdQA-annotator finden Sie einen webbasierten Annotator für die Beantwortung von Datensätzen mit geschlossenem Domänen mit dem Squad-Format.
Bewerten Sie das Pipeline -Objekt:
from cdqa . utils . evaluation import evaluate_pipeline
evaluate_pipeline ( cdqa_pipeline , 'path-to-annotated-dataset.json' )Bewerten Sie den Leser:
from cdqa . utils . evaluation import evaluate_reader
evaluate_reader ( cdqa_pipeline , 'path-to-annotated-dataset.json' )Wir haben einige Notizbuchbeispiele im Beispiel für Beispiele vorbereitet.
Sie können auch direkt mit diesen Notebook -Beispielen mit Binder oder Google Colaboratory spielen:
| Notizbuch | Hardware | Plattform |
|---|---|---|
| [1] Erste Schritte mit CDQA | CPU oder GPU | |
| [2] Verwenden des PDF -Konverters | CPU oder GPU | |
| [3] Training des Lesers im Kader | GPU |
Binder und Google Colaboratory bieten temporäre Umgebungen und können langsam beginnen, aber wir empfehlen sie, wenn Sie einfach mit cdQA beginnen möchten.
Sie können eine cdQA -REST -API durch Ausführen bereitstellen:
export dataset_path=path-to-dataset.csv
export reader_path=path-to-reader-model
FLASK_APP=api.py flask run -h 0.0.0.0Sie können jetzt Anfragen stellen, um Ihre API (hier mit HTTPIE) zu testen:
http localhost:5000/api query== ' your question here ' Wenn Sie eine Benutzeroberfläche über Ihrem cdQA System servieren möchten, befolgen Sie die Anweisungen von CDQA-UI, einer für cdQA entwickelten Webschnittstelle.
Lesen Sie unsere beitragenden Richtlinien.
| Typ | Titel | Autor | Jahr |
|---|---|---|---|
| ? Video | Stanford CS224N: NLP mit Deep Learning Lecture 10 - Frage Beantwortung | Christopher Manning | 2019 |
| ? Papier | Lesen von Wikipedia, um Fragen offener Domänen zu beantworten | Danqi Chen, Adam Fisch, Jason Weston, Antoine Bordes | 2017 |
| ? Papier | Neuronales Leseverständnis und darüber hinaus | Danqi Chen | 2018 |
| ? Papier | Bert: Vorausbildung von tiefen bidirektionalen Transformatoren für das Sprachverständnis | Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova | 2018 |
| ? Papier | Kontextwort Darstellungen: Eine kontextbezogene Einführung | Noah A. Smith | 2019 |
| ? Papier | End-to-End-Fragen zur Beantwortung von Bertserini | Wei Yang, Yuqing Xie, Ailen Lin, Xingyu Li, Luchen Tan, Kun Xiong, Ming Li, Jimmy Lin | 2019 |
| ? Papier | Datenvergrößerung für Bert-Feinabstimmungen bei der Beantwortung von Fragen zur Beantwortung von offener Domänen | Wei Yang, Yuqing Xie, Luchen Tan, Kun Xiong, Ming Li, Jimmy Lin | 2019 |
| ? Papier | Durchgang mit Bert neu rangieren | Rodrigo Nogueira, Kyunghyun Cho | 2019 |
| ? Papier | MRQA: Maschinenlesung zur Beantwortung der Frage | Jonathan Berant, Percy Liang, Luke Zettlemoyer | 2019 |
| ? Papier | Unbeaufsichtigte Frage zur Beantwortung der Übersetzung von Lückle | Patrick Lewis, Ludovic Deoyer, Sebastian Riedel | 2019 |
| Rahmen | Scikit-Learn: maschinelles Lernen in Python | Pedregosa et al. | 2011 |
| Rahmen | Pytorch | Adam Paszke, Sam Gross, Soumith Chintala, Gregory Chanan | 2016 |
| Rahmen | Transformatoren: Stand der Technik natürliche Sprachverarbeitung für Tensorflow 2.0 und Pytorch. | Umarmtes Gesicht | 2018 |
Apache-2.0