- このリポジトリではSwallowプロジェクトによる大規模言語モデル;Swallowシリーズのリリースに用いた評価スクリプトを公開しています。 再現実験などにご利用ください。
- 本文書では評価スクリプトの実行方法のみを説明します。評価方法や結果はSwallowプロジェクトの評価ページや論文発表を参照ください。
- 評価スクリプトは、基本的には llm-jp-eval などの既存のLLM評価フレームワークを使用しています。 この場をお借りしてフレームワーク開発者の皆様にお礼申し上げます。
- 推論型モデルを含む事後学習済みモデルの評価をお考えの方は swallow-evaluation-instruct をご検討ください。
- 実行環境の違いにより、異なる評価結果になる場合があります。
- 評価がうまくいかないなど問題があればIssueまでお願いします。
- 以前のバージョンをご利用になりたい方はReleasesを参照してください。
- バージョン: llm-jp-eval v1.3.0 [Han+, ANLP24]
- ライセンス: Copyright 2023 LLM-jp, Apache License Version 2.0 (LICENSE)
- バージョン: Language Model Evaluation Harness v0.4.2 [Sutawika+, 2024]
- ライセンス: Copyright (c) 2020 EleutherAI, MIT License (LICENSE)
- 数学のベンチマークである MATH の評価を行えるようにしました。
- プロンプトは minerva_mathの 4-shot CoT プロンプトを使用しています。
- テストセットは Hendrycksら [Hendrycks+, NeurIPS21] によるオリジナルのtest split 5,000問ではなく、Lightmanらによる後続研究[Lightman+, ICLR24]で作成されたtest split 500問(いわゆる"MATH-500")を使用しています。
- 回答文生成は貪欲法で、停止条件に
I hope it is correctを追加したほか、生成トークン数の上限を 1024 に変更しています。 - 回答スパンの抽出方法は、デフォルト実装の
The final answer is(.*?).だけでなく\\boxed{}も併用する方法に変更しました。
- 博士課程レベルの科学的知識や能力のベンチマークである GPQA の評価を行えるようにしました。
- プロンプトは、Meta社によるLlama3.1評価再現用のリファレンス実装 meta-llama/Llama-3.1-8B-Instruct-evals の zero-shot CoT プロンプトを使用しています。 またプロンプトと整合するように回答選択肢を抽出する正規表現を調整しました(リンク)。
- テストセットは "main" subset の448問を使用しています。
- 回答文生成は貪欲法で、生成トークン数の上限を 2048 にしています。
- バージョン: JP Language Model Evaluation Harness v0.3.0 (commit #9b42d41)
- ライセンス: Copyright (c) 2020 EleutherAI, MIT License (LICENSE)
- TER (Translation Error Rate) をブートストラップ統計量から除外しました。
- 評価結果のキャッシュの保存先を指定できるようにしました。
- huggingface tokenizerを読み込む際に
trust_remote_codeに渡す値を指定できるようにしました。
- 新しいモデルに対応するために、それぞれのモデルに対応するChatTemplateの追加をしました (リンク)。
- 一つの事例に対して複数回の応答文の生成と評価を行えるようにしました。
- OpenAIのAPIを呼び出す際のretryの処理を改善しました。
- 審判(judge)を gpt-4o-2024-08-06 に変更しました(リンク)。
- 設問は Nejumi Leaderboard v3 の mtbench_ja_question:v4 (リンク) を使用しています。
ただし coding/math/reasoning の模範解答は、mtbench_ja_referenceanswer:v2 (リンク)をもとに、Swallowチームで独自に校閲・修正したものに変更しました(リンク)。 - 応答文の日本語文字率を計算する関数を追加しました(リンク)。
- バージョン: bigcode-evaluation-harness (commit #0261c52)
- ライセンス: Apache License Version 2.0 (LICENSE)
- JHumanEvalの評価を行えるようにしました (リンク)。
- プロンプト末尾の改行
nを削除しない、いわゆる "unstripped" を使用しています。
- プロンプト末尾の改行
- MBPP-Ja の評価を行えるようにしました (リンク)。
- HumanEval / JHumanEval について、設問に対する回答率を計算する関数を追加しました (リンク)。
- バージョン: HuggingFaceH4/MATH-500, オリジナル
- ライセンス: Copyright (c) 2021 Dan Hendrycks , MIT License (LICENSE)
- 主な変更点: なし
- バージョン: idavidrein/gpqa
- ライセンス: Copyright (c) 2022 I. David Rein, MIT License (LICENSE)
- 主な変更点: なし
- バージョン: jhuman-eval
- ライセンス: Copyright (c) 2023 Kimio Kuramitsu's Laboratory, MIT License (LICENSE)
- 主な変更点: なし
- 取得元: llm-jp/mbpp-ja
- ライセンス: Copyright (c) 2024 LLM-jp, CC BY 4.0 (LICENSE)
- 主な変更点: なし
以下、本リポジトリをクローンしたフォルダ(例: /home/user/swallow-evaluation/ )を作業ディレクトリとしてコマンドを示します。
各フレームワークに対して、別々の仮想環境を用意します。
Pythonのバージョンは3.10.14を使ってください。
python -m venv .venv_llm_jp_eval
python -m venv .venv_harness_jp
python -m venv .venv_harness_en
python -m venv .venv_bigcode
python -m venv .venv_fastchatなお、以下の環境構築コードは、我々の計算環境においては動作検証をしておりますが、
利用される計算環境によってはバージョンが合わないことが考えられます。
その際は適宜適当なバージョンに置き換えてください。
source .venv_llm_jp_eval/bin/activate
cd llm-jp-eval
pip install --upgrade pip
pip install -e .
pip install protobuf sentencepiece
pip install 'accelerate>=0.26.0'
pip install datasets==2.21.0
pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121source .venv_harness_jp/bin/activate
cd lm-evaluation-harness-jp
pip install --upgrade pip
pip install -e ".[ja]"
pip install sacrebleu sentencepiece protobuf nagisa
pip install 'accelerate>=0.26.0'
pip install datasets==2.21.0
pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121source .venv_harness_en/bin/activate
cd lm-evaluation-harness-en
pip install --upgrade pip
pip install -e ".[math]"
pip install sentencepiece==0.2.0 protobuf==5.28.3 transformers==4.46.2
pip install 'accelerate>=0.26.0'
pip install datasets==2.21.0
pip install vllm==v0.6.3.post1
pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121docker build -t evaluation-harness-jalm-evaluation .
source .venv_bigcode/bin/activate
cd bigcode-evaluation-harness
pip install --upgrade pip
pip install -e .
pip install sentencepiece==0.2.0 protobuf==5.28.3 transformers==4.46.2
pip install 'accelerate>=0.26.0'
pip install datasets==2.21.0
pip install vllm==v0.6.3.post1
pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121仮想環境構築に加えて、dockerイメージのビルドが必要です。
dockerイメージビルドの手順例(クリックして表示)
docker://ghcr.io/bigcode-project/evaluation-harness を swallow-evaluation/evaluation-harness.sif として
pull を行う必要があります。 また、その用意したコンテナの中で datasets==2.21.0 をインストールする必要もあります。
例:Apptainer を使う場合(Docker、Singularityの場合も同様)
cd (cloneしたswallow-evaluationへのパス)
apptainer pull --name evaluation-harness.sif docker://ghcr.io/bigcode-project/evaluation-harness
apptainer exec evaluation-harness.sif pip install --user datasets==2.21.0
source .venv_fastchat/bin/activate
cd fastchat
pip install --upgrade pip
pip install python-dotenv pandas
pip install -e ".[model_worker,llm_judge]"
pip install vllm==v0.6.3.post1
pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121
pip install markdown beautifulsoup4モデルの生成文を gpt-4o-2024-08-06 を用いて評価する(LLM-as-a-judge)ので
./.envファイルを作成し、OpenAIのAPIキーを入力してください。
OPENAI_API_KEY=...結果は
./results/${MODEL_PATH}/ja/
以下に保存されます。
llm-jp-evalのREADME.mdに従い、以下のコマンドを実行してデータセットをダウンロードする
source .venv_llm_jp_eval/bin/activate
cd llm-jp-eval
python scripts/preprocess_dataset.py \
--dataset-name all \
--output-dir ./dataset
cd ../JEMHopQA, JCommonsenseQA, JSQuAD, NIILC, JMMLU, JSTS, NLIベンチマーク5種 (Jamp, JaNLI, JNLI, JSeM, JSICK) の評価が実行されます。
bash scripts/evaluate_ja_llmjp.sh $MODEL_PATHNLIタスクのbalanced accuracyを計算する
- NLIタスクデータセット(
jamp,janli,jnli,jsem,jsick)のbalanced accuracyを計算するには./scripts/re_evaluate_nli_task.pyにllm-jp-evalが出力したoutput_eval.jsonを渡してください。 計算結果はjson形式でstdoutに出力されます。
python re_evaluate_nli_task.py --input="{output_eval.jsonのパス}" > {保存先のjsonファイルパス}
# 出力されるjsonの見本
{
"input_path": "{入力したoutput_eval.jsonのパス}",
"macro_accuracy": 0.38721748069591116, # accuracyのマクロ平均
"macro_balanced_accuracy": 0.3709781734463517, # balanced accuracyのマクロ平均
"jamp_balanced_accuracy": 0.33338203779466197, # 個別データセットのbalanced accuracy
...
}- 多数の
output_eval.jsonを一括で処理する場合は./scripts/batch_re_evaluate_nli_task.shを実行してください。 ただし find コマンドの対象パスをあなたのフォルダ構造に合わせて書き換えて使ってください。 計算結果はndjson形式でja_nli_task_dataset_scores.jsonに出力されます。 - ndjsonファイルをtsv形式に変換したい場合は jq を使うとよいでしょう。
# ヘッダ行の生成
head -n 1 {ndjsonファイル} | jq -r 'keys_unsorted | @tsv' > output.tsv
# 各行のデータの生成
cat {ndjsonファイル} | jq -r '[.[]] | @tsv' >> output.tsvXL-Sum(自動要約)、MGSM(算術推論)、WMT20(機械翻訳)の評価が実行されます。
bash scripts/evaluate_ja_xlsum.sh $MODEL_PATH
bash scripts/evaluate_ja_mgsm.sh $MODEL_PATH
bash scripts/evaluate_ja_wmt20_{enja,jaen}.sh $MODEL_PATHJHumanEval, MBPP-Ja の評価が実行されます。
結果は
./results/${MODEL_PATH}/ja/${task_name}_${NUM_FEWSHOT}shot_${NUM_TESTCASE}cases/
に保存されます。
bash scripts/evaluate_ja_{humaneval-unstripped,mbpp}.sh $MODEL_PATH true true日本語MT-Bench の評価が実行されます。
bash scripts/evaluate_ja_mt_bench.sh $MODEL_PATH $GPU_NUM結果は
results/${MODEL_PATH}/en/
以下に保存されます。
以下の評価が実行されます。
- 常識推論: HellaSwag, XWINO, OpenBookQA
- 世界知識: TriviaQA
- 文書読解: SQuAD v2
- 算術推論: GSM8K
- 論理推論: BBH (Big-Bench-Hard)
- 数学: MATH
- 一般教養・学術知識: MMLU
- 博士レベルの科学: GPQA
それぞれのベンチマークは、以下のシェルスクリプトで実行できます。
evaluate_english_general.sh- TriviaQA, GSM8K, OpenBookQA, HellaSwag, XWINO, SQuAD v2evaluate_english_bbh.sh- BBHevaluate_english_gpqa.sh- GPQAevaluate_english_mmlu.sh- MMLUevaluate_english_math.sh- MATH
bash scripts/evaluate_english_{general,bbh,gpqa,mmlu,math}.sh $MODEL_PATHHumanEval, MBPP の評価が実行されます。また、コード生成と採点を同時または別々に行うことができます。
# コード生成と採点を同時に行う場合
bash scripts/evaluate_english_{humaneval-unstripped,mbpp}.sh $MODEL_PATH true true
# コード生成のみを行う場合
bash scripts/evaluate_english_{humaneval-unstripped,mbpp}.sh $MODEL_PATH true false
# 採点のみを行う場合
bash scripts/evaluate_english_{humaneval-unstripped,mbpp}.sh $MODEL_PATH false true- 全体の結果は
./results/$MODEL_NAME/aggregated_result.jsonに書き込まれます。 - 複数のモデルの結果を確認したい場合は、
tmp/model_listファイルを作成し、各モデル名を1行ずつ記入してください。その後、scripts/show_results.pyを実行すると、複数モデルの結果を一覧表示できます。