이 저장소는 ICML 2024 논문 작업별 시험 생성을 통한 검색 증강 언어 모델의 자동 평가(블로그)와 함께 제공됩니다.
목표 : 주어진 지식 코퍼스에 대해:
이 코드를 실험하는 데 필요한 유일한 것은 아래 설명된 형식의 지식 코퍼스가 포함된 json
파일입니다.
Data
: 각 사용 사례에 대해 다음이 포함됩니다.ExamGenerator
: 지식 코퍼스 및 LLM 생성기를 사용하여 객관식 시험을 생성하고 처리하는 코드입니다.ExamEvaluator
: lm-harness
라이브러리를 기반으로 조합 (Retrieval System, LLM, ExamCorpus)
사용하여 시험을 평가하는 코드입니다.LLMServer
: 시험을 생성하기 위한 통합 LLM 엔드포인트입니다.RetrievalSystems
: 통합 검색 시스템 클래스(예: DPR, BM25, 임베딩 유사성...). AWS DevOPS 문제 해결, StackExchange Q&A, Sec Filings Q&A 및 Arxiv Q&A 등 관심 있는 4가지 작업에 대한 방법론을 설명합니다. 그런 다음 방법론을 모든 작업에 적용하는 방법을 보여줍니다.
아래 명령을 실행합니다. 여기서 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 ' ,
}
먼저 원시 시험과 검색 색인을 생성합니다. 자신의 LLM에 대한 지원을 추가해야 할 수도 있습니다. 자세한 내용은 아래에서 확인하세요. ExamGenerator/question_generator.py
의 LLMExamGenerator
클래스에서 시험 생성에 사용되는 프롬프트를 수정하고 싶을 수도 있습니다.
python3 -m ExamGenerator.question_generator --task-domain MyOwnTask
이 작업이 완료되면(문서 크기에 따라 몇 시간이 걸릴 수 있음) 처리된 시험을 생성합니다. 이렇게 하려면 RawExamData(예: 2023091223)에서 MyRawExamDate를 확인하고 다음을 실행합니다.
python3 -m ExamGenerator.multi_choice_exam --task-domain MyOwnTask --question-date MyRawExamDate --save-exam
현재 LLMServer
파일에서 Bedrock(Claude)에 대한 엔드포인트를 지원합니다. 자신만의 것을 가져오는 데 필요한 유일한 것은 입력 시 프롬프트를 취하고 프롬프트와 완성된 텍스트를 모두 출력하는 inference
기능이 있는 클래스입니다. ExamGenerator/question_generator.py
에서 LLMExamGenerator
클래스를 수정하여 통합하세요. LLM마다 다양한 유형의 질문이 생성됩니다. 따라서 ExamGenerator/multi_choice_questions.py
에서 원시 시험 구문 분석을 수정하고 싶을 수도 있습니다. ExamGenerator
의 failed_questions.ipynb
노트북을 사용하여 실험해 볼 수 있습니다.
생성된 시험에서 (LLM&Retrieval) 시스템을 평가하기 위해 lm-harness 패키지를 활용합니다. 그렇게 하려면 다음 단계를 따르십시오.
작업에 대한 벤치마크 폴더(여기 DevOpsExam
를 만듭니다. 템플릿은 ExamEvaluator/DevOpsExam
참조하세요. 여기에는 프롬프트 템플릿을 위한 코드 파일 preprocess_exam,py가 포함되어 있으며, 더 중요한 것은 다음 모델을 평가하는 작업 세트입니다.
DevOpsExam
에는 ClosedBook(검색 아님) 및 OpenBook(Oracle 검색)과 관련된 작업이 포함되어 있습니다.DevOpsRagExam
에는 검색 변형(DPR/Embeddings/BM25...)과 관련된 작업이 포함되어 있습니다. 제공된 task_evaluation.sh
스크립트는 각각 0, 1, 2개의 샘플이 있는 ICL(In-Context-Learning)을 사용하여 작업에 대한 Llamav2:Chat:13B
및 Llamav2:Chat:70B
의 평가를 보여줍니다.
이 저작물을 인용하려면 다음을 사용하세요.
@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 라이선스에 따라 라이선스가 부여됩니다.