Dieses Repository ist der Begleiter des ICML 2024-Artikels Automated Evaluation of Retrieval-Augmented Language Models with Task-Specific Exam Generation (Blog)
Ziel : Für einen gegebenen Wissenskorpus:
Das Einzige, was Sie zum Experimentieren mit diesem Code benötigen, ist eine json
-Datei mit Ihrem Wissenskorpus im unten beschriebenen Format.
Data
: Enthält für jeden Anwendungsfall:ExamGenerator
: Code zum Generieren und Verarbeiten der Multi-Choice-Prüfung mithilfe von Wissenskorpus und LLM-Generatoren.ExamEvaluator
: Code zur Bewertung der Prüfung mithilfe einer Kombination (Retrieval System, LLM, ExamCorpus)
, basierend auf lm-harness
-Bibliothek.LLMServer
: Einheitliche LLM-Endpunkte zum Generieren der Prüfung.RetrievalSystems
: Unified Retrieval System-Klassen (z. B. DPR, BM25, Embedding Similarity ...). Wir veranschaulichen unsere Methodik anhand von 4 interessanten Aufgaben: AWS DevOPS-Fehlerbehebung, Fragen und Antworten zu StackExchange, Fragen und Antworten zu Wertpapiereinreichungen und Fragen und Antworten zu Arxiv. Anschließend zeigen wir, wie Sie die Methodik an jede Aufgabenstellung anpassen können.
Führen Sie die folgenden Befehle aus, wobei question-date
die Daten mit der Rohdatengenerierung sind. Fügen Sie --save-exam
hinzu, wenn Sie die Prüfung speichern möchten, und entfernen Sie sie, wenn Sie nur an Analysen interessiert sind.
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
Speichern Sie in MyOwnTask/KnowledgeCorpus/main
eine json
-Datei, die eine Liste der Dokumentationen enthält, jeweils im folgenden Format. Einige Beispiele finden Sie unter DevOps/html_parser.py
, DevOps/preprocessor.py
oder StackExchange/preprocessor.py
.
{ ' 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 ' ,
}
Generieren Sie zunächst die Rohuntersuchung und den Abrufindex. Beachten Sie, dass Sie möglicherweise Unterstützung für Ihr eigenes LLM hinzufügen müssen, mehr dazu weiter unten. Möglicherweise möchten Sie die Eingabeaufforderung ändern, die für die Prüfungsgenerierung in der Klasse LLMExamGenerator
in ExamGenerator/question_generator.py
verwendet wird.
python3 -m ExamGenerator.question_generator --task-domain MyOwnTask
Sobald dies erledigt ist (kann je nach Umfang der Dokumentation einige Stunden dauern), generieren Sie die bearbeitete Prüfung. Überprüfen Sie dazu MyRawExamDate in RawExamData (z. B. 2023091223) und führen Sie Folgendes aus:
python3 -m ExamGenerator.multi_choice_exam --task-domain MyOwnTask --question-date MyRawExamDate --save-exam
Wir unterstützen derzeit Endpunkte für Bedrock (Claude) in LLMServer
Datei. Das Einzige, was Sie zum Mitbringen Ihrer eigenen benötigen, ist eine Klasse mit einer inference
, die eine Eingabeaufforderung als Eingabe verwendet und sowohl die Eingabeaufforderung als auch den fertigen Text ausgibt. Ändern Sie LLMExamGenerator
Klasse in ExamGenerator/question_generator.py
um sie einzubinden. Verschiedene LLM generieren unterschiedliche Arten von Fragen. Daher möchten Sie möglicherweise die Rohprüfungsanalyse in ExamGenerator/multi_choice_questions.py
ändern. Sie können mit dem Notizbuch failed_questions.ipynb
von ExamGenerator
experimentieren.
Wir nutzen das lm-harness-Paket, um das (LLM&Retrieval)-System anhand der generierten Prüfung zu bewerten. Befolgen Sie dazu die nächsten Schritte:
Erstellen Sie einen Benchmark-Ordner für Ihre Aufgabe, hier DevOpsExam
, die Vorlage finden Sie unter ExamEvaluator/DevOpsExam
. Es enthält eine Codedatei „preprocess_exam,py“ für Eingabeaufforderungsvorlagen und, was noch wichtiger ist, eine Reihe von Aufgaben zur Bewertung von Modellen anhand von:
DevOpsExam
enthält die Aufgaben, die ClosedBook (kein Abruf) und OpenBook (Oracle-Abruf) zugeordnet sind.DevOpsRagExam
enthält die Aufgaben, die den Abrufvarianten (DPR/Embeddings/BM25...) zugeordnet sind. Das bereitgestellte Skript task_evaluation.sh
veranschaulicht die Auswertung von Llamav2:Chat:13B
und Llamav2:Chat:70B
für die Aufgabe unter Verwendung von In-Context-Learning (ICL) mit jeweils 0, 1 und 2 Stichproben.
Um diese Arbeit zu zitieren, verwenden Sie bitte
@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}
}
Weitere Informationen finden Sie unter BEITRAGEN.
Dieses Projekt ist unter der Apache-2.0-Lizenz lizenziert.