Este repositorio es complementario del documento ICML 2024 Evaluación automatizada de modelos de lenguaje de recuperación aumentada con generación de exámenes específicos de tareas (Blog)
Objetivo : Para un corpus de conocimiento determinado:
Lo único que necesita para experimentar con este código es un archivo json
con su corpus de conocimientos en el formato que se describe a continuación.
Data
: Para cada caso de uso, contiene:ExamGenerator
: Código para generar y procesar el examen de opción múltiple utilizando corpus de conocimiento y generador(es) LLM.ExamEvaluator
: Código para evaluar el examen utilizando una combinación (Retrieval System, LLM, ExamCorpus)
, basándose en la biblioteca lm-harness
.LLMServer
: puntos finales unificados de LLM para generar el examen.RetrievalSystems
: clases de sistemas de recuperación unificados (por ejemplo, DPR, BM25, incrustación de similitud...). Ilustramos nuestra metodología en 4 tareas de interés: Solución de problemas de AWS DevOPS, Preguntas y respuestas de StackExchange, Preguntas y respuestas de Sec Filings y Preguntas y respuestas de Arxiv. Luego mostramos cómo adaptar la metodología a cualquier tarea.
Ejecute los siguientes comandos, donde question-date
son los datos con la generación de datos sin procesar. Agregue --save-exam
si desea guardar el examen y elimínelo si solo le interesan los análisis.
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
Almacene en MyOwnTask/KnowledgeCorpus/main
un archivo json
que contiene una lista de documentación, cada una con el formato siguiente. Consulte DevOps/html_parser.py
, DevOps/preprocessor.py
o StackExchange/preprocessor.py
para ver algunos ejemplos.
{ ' 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 ' ,
}
Primero genere el examen sin procesar y el índice de recuperación. Tenga en cuenta que es posible que necesite agregar soporte para su propio LLM; encontrará más información a continuación. Es posible que desee modificar el mensaje utilizado para la generación del examen en la clase LLMExamGenerator
en ExamGenerator/question_generator.py
.
python3 -m ExamGenerator.question_generator --task-domain MyOwnTask
Una vez hecho esto (puede tardar un par de horas dependiendo del tamaño de la documentación), genere el examen procesado. Para hacerlo, verifique MyRawExamDate en RawExamData (por ejemplo, 2023091223) y ejecute:
python3 -m ExamGenerator.multi_choice_exam --task-domain MyOwnTask --question-date MyRawExamDate --save-exam
Actualmente admitimos puntos finales para Bedrock (Claude) en el archivo LLMServer
. Lo único que necesita para traer el suyo propio es una clase, con una función inference
que toma un mensaje en la entrada y genera tanto el mensaje como el texto completo. Modifique la clase LLMExamGenerator
en ExamGenerator/question_generator.py
para incorporarla. Diferentes LLM generan diferentes tipos de preguntas. Por lo tanto, es posible que desee modificar el análisis del examen sin procesar en ExamGenerator/multi_choice_questions.py
. Puedes experimentar usando el cuaderno failed_questions.ipynb
de ExamGenerator
.
Aprovechamos el paquete lm-harness para evaluar el sistema (LLM&Retrieval) en el examen generado. Para hacerlo, siga los siguientes pasos:
Cree una carpeta de referencia para su tarea, aquí DevOpsExam
, consulte ExamEvaluator/DevOpsExam
para ver la plantilla. Contiene un archivo de código preprocess_exam,py para plantillas de mensajes y, lo que es más importante, un conjunto de tareas para evaluar modelos en:
DevOpsExam
contiene las tareas asociadas a ClosedBook (no recuperación) y OpenBook (Oracle Retrieval).DevOpsRagExam
contiene las tareas asociadas a las variantes de recuperación (DPR/Embeddings/BM25...). El script task_evaluation.sh
proporcionado ilustra la evaluación de Llamav2:Chat:13B
y Llamav2:Chat:70B
en la tarea, utilizando aprendizaje en contexto (ICL) con 0, 1 y 2 muestras respectivamente.
Para citar este trabajo utilice
@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}
}
Consulte CONTRIBUCIÓN para obtener más información.
Este proyecto está bajo la licencia Apache-2.0.