このリポジトリは、ICML 2024 論文「Automated Evaluation of Retrieval-Augmented Language Models with Task-Specific Exam Generation (ブログ)」の付属品です。
目標: 特定の知識コーパスの場合:
このコードを試すために必要なのは、以下で説明する形式のナレッジ コーパスを含む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 の 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&Retrieval) システムを評価します。これを行うには、次の手順に従います。
タスク用のベンチマーク フォルダーを作成します (ここではDevOpsExam
。テンプレートについてはExamEvaluator/DevOpsExam
参照してください。これには、プロンプト テンプレート用のコード ファイル preprocess_exam,py が含まれており、さらに重要なことに、モデルを評価するための一連のタスクが含まれています。
DevOpsExam
は、ClosedBook (取得ではない) および OpenBook (Oracle 取得) に関連付けられたタスクが含まれています。DevOpsRagExam
には、取得バリアント (DPR/Embeddings/BM25...) に関連付けられたタスクが含まれています。提供されているスクリプトtask_evaluation.sh
、それぞれ 0、1、2 サンプルの In-Context-Learning (ICL) を使用して、タスクに関する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 ライセンスに基づいてライセンスされています。