Repositori ini adalah pendamping makalah ICML 2024 Evaluasi Otomatis Model Bahasa Retrieval-Augmented dengan Pembuatan Ujian Khusus Tugas (Blog)
Sasaran : Untuk korpus pengetahuan tertentu:
Satu-satunya hal yang Anda perlukan untuk bereksperimen dengan kode ini adalah file json
dengan korpus pengetahuan Anda dalam format yang dijelaskan di bawah.
Data
: Untuk setiap use case, berisi:ExamGenerator
: Kode untuk menghasilkan dan memproses ujian pilihan ganda menggunakan korpus pengetahuan dan generator LLM.ExamEvaluator
: Kode untuk mengevaluasi ujian menggunakan kombinasi (Retrieval System, LLM, ExamCorpus)
, mengandalkan perpustakaan lm-harness
.LLMServer
: Titik akhir LLM terpadu untuk menghasilkan ujian.RetrievalSystems
: Kelas Unified Retrieval System (misalnya DPR, BM25, Embedding Kemiripan...). Kami mengilustrasikan metodologi kami pada 4 tugas yang menarik: Pemecahan Masalah AWS DevOPS, Tanya Jawab StackExchange, Tanya Jawab Pengarsipan Sec, dan Tanya Jawab Arxiv. Kami kemudian menunjukkan bagaimana mengadaptasi metodologi untuk tugas apa pun.
Jalankan perintah di bawah ini, di mana question-date
adalah data dengan pembuatan data mentah. Tambahkan --save-exam
jika Anda ingin menyimpan ujian dan menghapusnya jika Anda hanya tertarik pada analitik.
cd auto-rag-eval
rm -rf Data/StackExchange/KnowledgeCorpus/main/ *
python3 -m Data.StackExchange.preprocessor
python3 -m ExamGenerator.question_generator --task-domain StackExchange
python3 -m ExamGenerator.multi_choice_exam --task-domain StackExchange --question-date " question-date " --save-exam
cd auto-rag-eval
rm -rf Data/Arxiv/KnowledgeCorpus/main/ *
python3 -m Data.Arxiv.preprocessor
python3 -m ExamGenerator.question_generator --task-domain Arxiv
python3 -m ExamGenerator.multi_choice_exam --task-domain Arxiv --question-date " question-date " --save-exam
cd auto-rag-eval
rm -rf Data/SecFilings/KnowledgeCorpus/main/ *
python3 -m Data.SecFilings.preprocessor
python3 -m ExamGenerator.question_generator --task-domain SecFilings
python3 -m ExamGenerator.multi_choice_exam --task-domain SecFilings --question-date " question-date " --save-exam
cd src/llm_automated_exam_evaluation/Data/
mkdir MyOwnTask
mkdir MyOwnTask/KnowledgeCorpus
mkdir MyOwnTask/KnowledgeCorpus/main
mkdir MyOwnTask/RetrievalIndex
mkdir MyOwnTask/RetrievalIndex/main
mkdir MyOwnTask/ExamData
mkdir MyOwnTask/RawExamData
Simpan di MyOwnTask/KnowledgeCorpus/main
file json
, yang berisi daftar dokumentasi, masing-masing dengan format di bawah. Lihat DevOps/html_parser.py
, DevOps/preprocessor.py
atau StackExchange/preprocessor.py
untuk beberapa contoh.
{ ' source ' : ' my_own_source ' ,
' docs_id ' : ' Doc1022 ' ,
' title ' : ' Dev Desktop Set Up ' ,
' section ' : ' How to [...] ' ,
' text ' : " Documentation Text, should be long enough to make informative questions but shorter enough to fit into context " ,
' start_character ' : ' N/A ' ,
' end_character ' : ' N/A ' ,
' date ' : ' N/A ' ,
}
Pertama-tama buat ujian mentah dan indeks pengambilan. Perhatikan bahwa Anda mungkin perlu menambahkan dukungan untuk LLM Anda sendiri, selengkapnya di bawah ini. Anda mungkin ingin mengubah perintah yang digunakan untuk pembuatan ujian di kelas LLMExamGenerator
di ExamGenerator/question_generator.py
.
python3 -m ExamGenerator.question_generator --task-domain MyOwnTask
Setelah ini selesai (dapat memakan waktu beberapa jam tergantung pada ukuran dokumentasi), buat ujian yang telah diproses. Untuk melakukannya, periksa MyRawExamDate di RawExamData (misalnya 2023091223) dan jalankan:
python3 -m ExamGenerator.multi_choice_exam --task-domain MyOwnTask --question-date MyRawExamDate --save-exam
Saat ini kami mendukung titik akhir untuk Batuan Dasar (Claude) dalam file LLMServer
. Satu-satunya hal yang diperlukan untuk membawa Anda sendiri adalah kelas, dengan fungsi inference
yang mengambil prompt dalam input dan output baik teks prompt dan selesai. Ubah kelas LLMExamGenerator
di ExamGenerator/question_generator.py
untuk menggabungkannya. LLM yang berbeda menghasilkan jenis pertanyaan yang berbeda. Oleh karena itu, Anda mungkin ingin mengubah penguraian ujian mentah di ExamGenerator/multi_choice_questions.py
. Anda dapat bereksperimen menggunakan notebook failed_questions.ipynb
dari ExamGenerator
.
Kami memanfaatkan paket lm-harness untuk mengevaluasi sistem (LLM&Retrieval) pada ujian yang dihasilkan. Untuk melakukannya, ikuti langkah selanjutnya:
Buat folder benchmark untuk tugas Anda, di sini DevOpsExam
, lihat ExamEvaluator/DevOpsExam
untuk templatnya. Ini berisi file kode preprocess_exam,py untuk templat prompt dan yang lebih penting, serangkaian tugas untuk mengevaluasi model pada:
DevOpsExam
berisi tugas yang terkait dengan ClosedBook (bukan pengambilan) dan OpenBook (Oracle Retrieval).DevOpsRagExam
berisi tugas yang terkait dengan varian Pengambilan (DPR/Embeddings/BM25...). Script task_evaluation.sh
yang disediakan menggambarkan evaluasi Llamav2:Chat:13B
dan Llamav2:Chat:70B
pada tugas, menggunakan In-Context-Learning (ICL) dengan masing-masing 0, 1 dan 2 sampel.
Untuk mengutip karya ini, silakan gunakan
@misc{autorageval2024,
title={Automated Evaluation of Retrieval-Augmented Language Models with Task-Specific Exam Generation},
author={Gauthier Guinet and Behrooz Omidvar-Tehrani and Anoop Deoras and Laurent Callot},
year={2024},
eprint={2405.13622},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
Lihat KONTRIBUSI untuk informasi lebih lanjut.
Proyek ini dilisensikan di bawah Lisensi Apache-2.0.