Этот репозиторий является дополнением к документу ICML 2024 «Автоматическая оценка языковых моделей с расширенным поиском и генерацией экзаменов для конкретных задач» (блог).
Цель : Для данного корпуса знаний:
Единственное, что вам нужно для экспериментов с этим кодом, — это json
файл с вашим корпусом знаний в формате, описанном ниже.
Data
: для каждого варианта использования содержит:ExamGenerator
: код для создания и обработки экзамена с несколькими вариантами ответов с использованием корпуса знаний и генераторов LLM.ExamEvaluator
: код для оценки экзамена с использованием комбинации (Retrieval System, LLM, ExamCorpus)
с использованием библиотеки lm-harness
.LLMServer
: унифицированные конечные точки LLM для создания экзамена.RetrievalSystems
: классы унифицированной поисковой системы (например, DPR, BM25, внедрение сходства...). Мы иллюстрируем нашу методологию на четырех интересующих задачах: устранение неполадок AWS DevOPS, вопросы и ответы по StackExchange, вопросы и ответы по секретным документам и вопросы и ответы по 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 ' ,
}
Сначала сгенерируйте необработанный экзамен и индекс поиска. Обратите внимание, что вам может потребоваться добавить поддержку вашего собственного LLM, подробнее об этом ниже. Возможно, вы захотите изменить приглашение, используемое для создания экзамена в классе LLMExamGenerator
в ExamGenerator/question_generator.py
.
python3 -m ExamGenerator.question_generator --task-domain MyOwnTask
Как только это будет сделано (это может занять пару часов в зависимости от размера документации), сгенерируйте обработанный экзамен. Для этого проверьте MyRawExamDate в RawExamData (например, 2023091223) и запустите:
python3 -m ExamGenerator.multi_choice_exam --task-domain MyOwnTask --question-date MyRawExamDate --save-exam
В настоящее время мы поддерживаем конечные точки для Bedrock (Claude) в файле LLMServer
. Единственное, что нужно, чтобы создать свой собственный, — это класс с функцией inference
, которая принимает приглашение на вход и выводит как приглашение, так и завершенный текст. Измените класс LLMExamGenerator
в ExamGenerator/question_generator.py
чтобы включить его. Различные LLM порождают разные типы вопросов. Следовательно, вы можете изменить анализ необработанного экзамена в ExamGenerator/multi_choice_questions.py
. Вы можете поэкспериментировать, используя блокнот failed_questions.ipynb
из ExamGenerator
.
Мы используем пакет lm-harness для оценки системы (LLM&Retrival) на сгенерированном экзамене. Для этого выполните следующие шаги:
Создайте тестовую папку для своей задачи, здесь 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.