Sistem Penjawab Pertanyaan Domain Tertutup End-to-End. Dibangun di atas perpustakaan Huggingface Transformers.
⛔ [tidak dipelihara] Repositori ini tidak lagi dipertahankan, tetapi disimpan untuk tujuan pendidikan. Jika Anda ingin alternatif yang dipelihara untuk CDQA, periksa: https://github.com/deepset-ai/haystack
Jika Anda tertarik untuk memahami cara kerja sistem dan implementasinya, kami menulis artikel tentang medium dengan penjelasan tingkat tinggi.
Kami juga membuat presentasi selama sarapan NLP #9 yang disusun oleh Feedly. Anda dapat memeriksanya di sini.
pip install cdqagit clone https://github.com/cdqa-suite/cdQA.git
cd cdQA
pip install -e .Eksperimen telah dilakukan dengan:
t2.medium DEEP Learning Ami (Ubuntu) Versi 22.0p3.2xlarge Deep Learning AMI (Ubuntu) Versi 22.0 + Tesla v100 16GB tunggal. Untuk menggunakan cdQA , Anda perlu membuat DataFrame PANDAS dengan kolom berikut:
| judul | paragraf |
|---|---|
| Judul artikel | [Paragraf 1 artikel, ..., paragraf n artikel] |
Tujuan konverter cdqa adalah untuk memudahkan untuk membuat basis data ini dari database Dokumen Raw Anda. Misalnya pdf_converter dapat membuat DataFrame cdqa dari direktori yang berisi file .pdf :
from cdqa . utils . converters import pdf_converter
df = pdf_converter ( directory_path = 'path_to_pdf_folder' )Anda perlu menginstal Java OpenJDK untuk menggunakan konverter ini. Kami saat ini memiliki konverter untuk:
Kami berencana untuk meningkatkan dan menambahkan lebih banyak konverter di masa depan. Pantau terus!
Anda dapat mengunduh model dan data secara manual dari rilis GitHub atau menggunakan fungsi unduhan kami:
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 )Pasang pipa pada korpus Anda menggunakan pembaca yang sudah terlatih:
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 )Jika Anda ingin menyempurnakan pembaca pada dataset beranotasi seperti skuad khusus Anda:
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' )Simpan model pembaca setelah penyesuaian:
cdqa_pipeline . dump_reader ( 'path-to-save-bert-reader.joblib' )Untuk mendapatkan prediksi terbaik yang diberikan kueri input:
cdqa_pipeline . predict ( query = 'your question' )Untuk mendapatkan prediksi terbaik:
cdqa_pipeline . predict ( query = 'your question' , n_predictions = N )Ada juga kemungkinan untuk mengubah bobot skor retriever versus skor pembaca dalam perhitungan skor peringkat akhir (standarnya adalah 0,35, yang terbukti menjadi bobot terbaik pada set pengembangan skuad 1.1-terbuka)
cdqa_pipeline . predict ( query = 'your question' , retriever_score_weight = 0.35 )Untuk mengevaluasi model pada dataset khusus Anda, Anda perlu memberi anotasi. Proses anotasi dapat dilakukan dalam 3 langkah:
Konversikan Pandas DataFrame Anda menjadi file JSON dengan format skuad:
from cdqa . utils . converters import df2squad
json_data = df2squad ( df = df , squad_version = 'v1.1' , output_dir = '.' , filename = 'dataset-name' )Gunakan annotator untuk menambahkan pasangan pertanyaan-pertanyaan kebenaran ground:
Silakan merujuk ke cdQA-annotator kami, annotator berbasis web untuk dataset penjawab pertanyaan domain tertutup dengan format skuad.
Mengevaluasi objek pipa:
from cdqa . utils . evaluation import evaluate_pipeline
evaluate_pipeline ( cdqa_pipeline , 'path-to-annotated-dataset.json' )Evaluasi pembaca:
from cdqa . utils . evaluation import evaluate_reader
evaluate_reader ( cdqa_pipeline , 'path-to-annotated-dataset.json' )Kami menyiapkan beberapa contoh buku catatan di bawah Direktori Contoh.
Anda juga dapat bermain langsung dengan contoh notebook ini menggunakan Binder atau Google Colaboratory:
| Buku catatan | Perangkat keras | Platform |
|---|---|---|
| [1] Langkah pertama dengan CDQA | CPU atau GPU | |
| [2] Menggunakan konverter PDF | CPU atau GPU | |
| [3] Melatih pembaca di skuad | GPU |
Binder dan Google Colaboratory menyediakan lingkungan sementara dan mungkin lambat untuk memulai tetapi kami merekomendasikan mereka jika Anda ingin memulai dengan cdQA dengan mudah.
Anda dapat menggunakan API REST cdQA dengan mengeksekusi:
export dataset_path=path-to-dataset.csv
export reader_path=path-to-reader-model
FLASK_APP=api.py flask run -h 0.0.0.0Anda sekarang dapat membuat permintaan untuk menguji API Anda (di sini menggunakan httpie):
http localhost:5000/api query== ' your question here ' Jika Anda ingin melayani antarmuka pengguna di atas sistem cdQA Anda, ikuti instruksi CDQA-UI, antarmuka web yang dikembangkan untuk cdQA .
Baca Pedoman Kontribusi kami.
| Jenis | Judul | Pengarang | Tahun |
|---|---|---|---|
| ? Video | Stanford CS224N: NLP dengan kuliah pembelajaran mendalam 10 - menjawab pertanyaan | Christopher Manning | 2019 |
| ? Kertas | Membaca Wikipedia untuk menjawab pertanyaan domain terbuka | Danqi Chen, Adam Fisch, Jason Weston, Antoine Bordes | 2017 |
| ? Kertas | Pemahaman bacaan saraf dan seterusnya | Danqi Chen | 2018 |
| ? Kertas | Bert: Pra-pelatihan transformator dua arah yang dalam untuk pemahaman bahasa | Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova | 2018 |
| ? Kertas | Representasi Kata Kontekstual: Pendahuluan Kontekstual | Nuh A. Smith | 2019 |
| ? Kertas | Pertanyaan domain terbuka ujung ke ujung menjawab dengan Bertserini | Wei Yang, Yuqing Xie, Aileen Lin, Xingyu Li, Luchen Tan, Kun Xiong, Ming Li, Jimmy Lin | 2019 |
| ? Kertas | Augmentasi data untuk fine-tuning dalam menjawab pertanyaan domain terbuka | Wei Yang, Yuqing Xie, Luchen Tan, Kun Xiong, Ming Li, Jimmy Lin | 2019 |
| ? Kertas | Bagian peringkat ulang dengan Bert | Rodrigo Nogueira, Kyunghyun Cho | 2019 |
| ? Kertas | MRQA: Membaca mesin untuk menjawab pertanyaan | Jonathan Berant, Percy Liang, Luke Zettlemoyer | 2019 |
| ? Kertas | Pertanyaan Tanpa Diawasi Menjawab dengan Terjemahan Cloze | Patrick Lewis, Ludovic Denoyer, Sebastian Riedel | 2019 |
| Kerangka | Scikit-Learn: Pembelajaran Mesin dalam Python | Pedregosa et al. | 2011 |
| Kerangka | Pytorch | Adam Paszke, Sam Gross, Soumith Chintala, Gregory Chanan | 2016 |
| Kerangka | Transformers: Pemrosesan bahasa alami yang canggih untuk TensorFlow 2.0 dan Pytorch. | Wajah memeluk | 2018 |
Apache-2.0