ระบบตอบคำถามโดเมนแบบปิดไปจนถึงเอนด์ สร้างขึ้นบนห้องสมุด HuggingFace Transformers
⛔ [ไม่ได้รับการดูแล] ที่เก็บนี้ไม่ได้รับการดูแลอีกต่อไป แต่กำลังถูกเก็บไว้เพื่อจุดประสงค์ทางการศึกษา หากคุณต้องการทางเลือกที่ได้รับการบำรุงรักษาเพื่อตรวจสอบ CDQA: https://github.com/deepset-ai/haystack
หากคุณสนใจที่จะทำความเข้าใจว่าระบบทำงานอย่างไรและการใช้งานเราเขียนบทความเกี่ยวกับสื่อด้วยคำอธิบายระดับสูง
นอกจากนี้เรายังได้นำเสนอในช่วงอาหารเช้า #9 NLP ที่จัดโดย Feedly คุณสามารถตรวจสอบได้ที่นี่
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 คือทำให้ง่ายต่อการสร้าง dataframe นี้จากฐานข้อมูลเอกสารดิบของคุณ ตัวอย่างเช่น pdf_converter สามารถสร้าง cdqa dataframe จากไดเรกทอรีที่มีไฟล์ .pdf :
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 )นอกจากนี้ยังมีความเป็นไปได้ที่จะเปลี่ยนน้ำหนักของคะแนน Retriever เมื่อเทียบกับคะแนนผู้อ่านในการคำนวณคะแนนการจัดอันดับสุดท้าย (ค่าเริ่มต้นคือ 0.35 ซึ่งแสดงให้เห็นว่าเป็นน้ำหนักที่ดีที่สุดในชุดการพัฒนาของทีม 1.1-Open)
cdqa_pipeline . predict ( query = 'your question' , retriever_score_weight = 0.35 )ในการประเมินโมเดลในชุดข้อมูลที่กำหนดเองของคุณคุณจะต้องใส่คำอธิบายประกอบ กระบวนการเพิ่มความคิดเห็นสามารถทำได้ใน 3 ขั้นตอน:
แปลง DataFrame Pandas ของคุณเป็นไฟล์ JSON ด้วยรูปแบบทีม:
from cdqa . utils . converters import df2squad
json_data = df2squad ( df = df , squad_version = 'v1.1' , output_dir = '.' , filename = 'dataset-name' )ใช้ Annotator เพื่อเพิ่มคู่คำถามตอบคำถามภาคพื้นดิน:
โปรดดูที่ 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 Colaboratory:
| สมุดบันทึก | ฮาร์ดแวร์ | แพลตฟอร์ม |
|---|---|---|
| [1] ขั้นตอนแรกกับ CDQA | CPU หรือ GPU | |
| [2] การใช้ตัวแปลง PDF | CPU หรือ GPU | |
| [3] การฝึกอบรมผู้อ่านในทีม | GPU |
Binder และ Google Colaboratory ให้สภาพแวดล้อมชั่วคราวและอาจเริ่มช้า แต่เราขอแนะนำหากคุณต้องการเริ่มต้นด้วย 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-UI เว็บอินเตอร์เฟสที่พัฒนาขึ้นสำหรับ cdQA
อ่านแนวทางการสนับสนุนของเรา
| พิมพ์ | ชื่อ | ผู้เขียน | ปี |
|---|---|---|---|
| - วิดีโอ | Stanford CS224N: NLP พร้อมการบรรยายการเรียนรู้ลึก 10 - ตอบคำถาม | คริสโตเฟอร์แมนนิ่ง | 2019 |
| - กระดาษ | การอ่านวิกิพีเดียเพื่อตอบคำถามโดเมนแบบเปิด | Danqi Chen, Adam Fisch, Jason Weston, Antoine Bordes | 2017 |
| - กระดาษ | ความเข้าใจในการอ่านระบบประสาทและอื่น ๆ | Danqi Chen | 2018 |
| - กระดาษ | เบิร์ต: การฝึกอบรมหม้อแปลงสองทิศทางลึกเพื่อความเข้าใจภาษา | Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova | 2018 |
| - กระดาษ | การแสดงคำบริบท: การแนะนำบริบท | Noah A. Smith | 2019 |
| - กระดาษ | คำถามแบบเปิดโดเมนแบบ end-to-end ตอบกับ 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 |
| - กระดาษ | Passage จัดอันดับใหม่กับ Bert | Rodrigo Nogueira, Kyunghyun Cho | 2019 |
| - กระดาษ | MRQA: เครื่องอ่านเพื่อตอบคำถาม | Jonathan Berant, Percy Liang, Luke Zettlemoyer | 2019 |
| - กระดาษ | คำถามที่ไม่ได้รับการตอบคำถามโดยการแปล Cloze | Patrick Lewis, Ludovic Denoyer, Sebastian Riedel | 2019 |
| กรอบ | Scikit-learn: การเรียนรู้ของเครื่องใน Python | Pedregosa และคณะ | ปี 2554 |
| กรอบ | pytorch | Adam Paszke, Sam Gross, Soumith Chintala, Gregory Chanan | ปี 2559 |
| กรอบ | Transformers: การประมวลผลภาษาธรรมชาติที่ทันสมัยสำหรับ TensorFlow 2.0 และ Pytorch | กอดใบหน้า | 2018 |
Apache-2.0