amazon-science/auto-rag-eval
요약
이 리포지토리는 ICML 2024 논문의 보조 자료로, RAG 시스템을 평가하기 위한 자동화된 프레임워크를 제공합니다. 이 도구는 주어진 지식 코퍼스 기반으로 LLM을 활용하여 작업별 객관식 시험을 생성하고, 이를 통해 다양한 RaG 변형들을 체계적으로 평가하며 개선하는 방법을 제시합니다.
핵심 포인트
- LLM을 이용해 작업 특화 객관식 시험 자동 생성 가능
- 지식 코퍼스 전처리부터 시험 평가까지의 전체 파이프라인 제공
- AWS DevOPS, StackExchange 등 4가지 관심 분야에 적용된 방법론 설명
- 자체적인 지식 코퍼스를 추가하여 프레임워크 확장 용이
이 리포지토리는 ICML 2024 논문인 Automated Evaluation of Retrieval-Augmented Language Models with Task-Specific Exam Generation (Blog)의 보조 자료입니다.
목표: 주어진 지식 코퍼스(knowledge corpus)에 대해:
- 관심 있는 작업(task)과 관련된 객관식 시험을 LLM을 활용하여 생성합니다.
- 이 시험으로 RaG 시스템의 다양한 변형들을 평가합니다.
- 시험을 평가하고 반복적으로 개선합니다.
이 코드를 실험하기 위해 필요한 유일한 것은 아래에 설명된 형식으로 작성된 지식 코퍼스(json) 파일뿐입니다.
Data:
각 사용 사례(use case)별로 다음을 포함합니다:
- 전처리 코드 (Preprocessing Code)
- 지식 코퍼스 데이터 (Knowledge Corpus Data)
- 시험 데이터 (Exam Data) (원시 및 처리됨)
- 검색 인덱스 (Retrieval Index)
ExamGenerator:
지식 코퍼스와 LLM 생성기(LLM generator)를 사용하여 객관식 시험을 생성하고 처리하는 코드입니다.
ExamEvaluator:
lm-harness 라이브러리에 의존하여 (검색 시스템, LLM, 시험 코퍼스)의 조합으로 시험을 평가하는 코드입니다.
LLMServer:
시험 생성을 위한 통합된 LLM 엔드포인트입니다.
RetrievalSystems:
통합 검색 시스템 클래스들 (예: DPR, BM25, 임베딩 유사도(Embedding Similarity)...).
저희는 AWS DevOPS Troubleshooting, StackExchange Q&A, Sec Filings Q&A, Arxiv Q&A의 4가지 관심 작업에 대해 방법론을 설명합니다. 그런 다음 이 방법론을 모든 작업에 맞게 조정하는 방법을 보여줍니다.
아래 명령어를 실행하십시오. 여기서 question-date는 원시 데이터 생성(raw data generation)이 포함된 데이터입니다. 시험을 저장하고 싶은 경우 --save-exam을 추가하고, 분석만 관심 있다면 이 플래그를 제거하십시오.
cd auto-rag-eval
rm -rf Data/StackExchange/KnowledgeCorpus/main/*
python3 -m Data.StackExchange.preprocessor
...
cd auto-rag-eval
rm -rf Data/Arxiv/KnowledgeCorpus/main/*
python3 -m Data.Arxiv.preprocessor
...
cd auto-rag-eval
rm -rf Data/SecFilings/KnowledgeCorpus/main/*
python3 -m Data.SecFilings.preprocessor
...
cd auto-rag-eval
rm -rf Data/
mkdir MyOwnTask
mkdir MyOwnTask/KnowledgeCorpus
...
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',
...
먼저 원본 시험과 검색 인덱스를 생성합니다. 참고로, 자체 LLM에 대한 지원을 추가해야 할 수도 있습니다. 자세한 내용은 아래를 참조하십시오. 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 클래스를 수정하십시오.
서로 다른 LLM은 서로 다른 유형의 질문을 생성합니다. 따라서, ExamGenerator/multi_choice_questions.py에서 원본 시험 파싱을 수정해야 할 수도 있습니다.
ExamGenerator의 failed_questions.ipynb 노트북을 사용하여 실험해 볼 수 있습니다.
우리는 lm-harness 패키지를 활용하여 생성된 시험에 대해 (LLM 및 검색) 시스템을 평가합니다. 이를 위해 다음 단계를 따르십시오:
- 작업용 벤치마크 폴더를 만드세요. 여기서는
DevOpsExam입니다. - 템플릿은
ExamEvaluator/DevOpsExam을 참조하십시오.
이곳에는 프롬프트 템플릿을 위한 코드 파일preprocess_exam.py와, 모델 평가를 위한 일련의 작업들이 포함되어 있습니다:
DevOpsExam: 폐쇄형 책(검색 없음) 및 개방형 책(Oracle Retrieval)에 관련된 작업을 포함합니다.DevOpsRagExam
이 스크립트는 검색 증강 생성(Retrieval-Augmented) 변형(DPR/임베딩(Embeddings)/BM25 등)과 관련된 작업을 포함합니다.
제공된 task_evaluation.sh 스크립트는 In-Context-Learning (ICL)을 사용하여 각각 0, 1, 2개의 샘플로 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},
...
더 많은 정보는 CONTRIBUTING을 참조하십시오.
이 프로젝트는 Apache-2.0 라이선스에 따라 라이선스가 부여되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기