该存储库是 ICML 2024 论文《自动评估检索增强语言模型与特定任务考试生成》的配套文件(博客)
目标:对于给定的知识库:
您唯一需要试验此代码的是一个json
文件,其中包含您的知识库,格式如下所述。
Data
:对于每个用例,包含:ExamGenerator
:使用知识库和 LLM 生成器生成和处理多项选择考试的代码。ExamEvaluator
:使用组合(Retrieval System, LLM, ExamCorpus)
评估考试的代码,依赖于lm-harness
库。LLMServer
:统一 LLM 端点来生成考试。RetrievalSystems
:统一检索系统类(例如 DPR、BM25、嵌入相似度...)。 我们在 4 个感兴趣的任务上说明了我们的方法:AWS DevOPS 故障排除、StackExchange 问答、Sec Filings 问答和 Arxiv 问答。然后我们展示如何使该方法适应任何任务。
运行以下命令,其中question-date
是原始数据生成的数据。如果您想保存考试,请添加--save-exam
如果您只对分析感兴趣,则将其删除。
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
在MyOwnTask/KnowledgeCorpus/main
中存储一个json
文件,其中包含文档列表,每个文档的格式如下。有关一些示例,请参阅DevOps/html_parser.py
、 DevOps/preprocessor.py
或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 ' ,
}
首先生成原始检查和检索索引。请注意,您可能需要添加对您自己的法学硕士的支持,更多信息如下。您可能想要修改ExamGenerator/question_generator.py
中的LLMExamGenerator
类中用于考试生成的提示。
python3 -m ExamGenerator.question_generator --task-domain MyOwnTask
完成此操作后(可能需要几个小时,具体取决于文档大小),生成已处理的检查。为此,请检查 RawExamData 中的 MyRawExamDate(例如 2023091223)并运行:
python3 -m ExamGenerator.multi_choice_exam --task-domain MyOwnTask --question-date MyRawExamDate --save-exam
我们目前支持LLMServer
文件中 Bedrock (Claude) 的端点。您自己需要的唯一东西是一个类,它具有一个inference
函数,可以在输入中接受提示并输出提示和完整的文本。修改ExamGenerator/question_generator.py
中的LLMExamGenerator
类以合并它。不同的法学硕士会产生不同类型的问题。因此,您可能需要修改ExamGenerator/multi_choice_questions.py
中的原始考试解析。您可以使用ExamGenerator
中的failed_questions.ipynb
笔记本进行实验。
我们利用 lm-harness 包在生成的考试中评估(LLM&Retrieval)系统。为此,请按照以下步骤操作:
为您的任务创建一个基准文件夹,此处为DevOpsExam
,请参阅ExamEvaluator/DevOpsExam
了解模板。它包含一个用于提示模板的代码文件 preprocess_exam,py ,更重要的是,一组用于评估模型的任务:
DevOpsExam
包含与 ClosedBook(非检索)和 OpenBook(Oracle 检索)相关的任务。DevOpsRagExam
包含与检索变体(DPR/Embeddings/BM25...)相关的任务。提供的脚本task_evaluation.sh
说明了任务中Llamav2:Chat:13B
和Llamav2:Chat:70B
的评估,分别使用上下文学习 (ICL) 和 0、1 和 2 个样本。
要引用这项工作,请使用
@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}
}
请参阅贡献以获取更多信息。
该项目根据 Apache-2.0 许可证获得许可。