- Notifications
You must be signed in to change notification settings - Fork1
Swallowプロジェクト 大規模言語モデル 評価スクリプト
License
swallow-llm/swallow-evaluation
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
- このリポジトリではSwallowプロジェクトによる大規模言語モデル;Swallowシリーズのリリースに用いた評価スクリプトを公開しています。再現実験などにご利用ください。
- 本文書では評価スクリプトの実行方法のみを説明します。評価方法や結果はSwallowプロジェクトの評価ページや論文発表を参照ください。
- 評価スクリプトは、基本的にはllm-jp-eval などの既存のLLM評価フレームワークを使用しています。この場をお借りしてフレームワーク開発者の皆様にお礼申し上げます。
- 実行環境の違いにより、異なる評価結果になる場合があります。
- 評価がうまくいかないなど問題があればIssueまでお願いします。
- 以前のバージョンをご利用になりたい方はReleasesを参照してください。
- バージョン:llm-jp-eval v1.3.0 [Han+, ANLP24]
- ライセンス: Copyright 2023 LLM-jp, Apache License Version 2.0 (LICENSE)
- バージョン:JP Language Model Evaluation Harness v0.4.2
- ライセンス: 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 にしています。
- バージョン:Language Model Evaluation Harness v0.3.0 (commit #9b42d41) [Gao+, 22]
- ライセンス: 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)
- 主な変更点: なし
- バージョン:llm-jp-eval v1.3.0 [Han+, ANLP24]
- ライセンス: Copyright 2023 LLM-jp, Apache License Version 2.0 (LICENSE)
- 主な変更点:
- バージョン:JP Language Model Evaluation Harness v0.4.2
- ライセンス: Copyright (c) 2020 EleutherAI, MIT License (LICENSE)
- 主な変更点: なし
- バージョン:Language Model Evaluation Harness v0.3.0 (commit #9b42d41) [Gao+, 22]
- ライセンス: Copyright (c) 2020 EleutherAI, MIT License (LICENSE)
- 主な変更点:
- TER (Translation Error Rate) をブートストラップ統計量から除外しました。
- 評価結果のキャッシュの保存先を指定できるようにしました。
- huggingface tokenizerを読み込む際に
trust_remote_code
に渡す値を指定できるようにしました。
- バージョン:FastChat (commit #e86e70d0)
- ライセンス: Apache License Version 2.0 (LICENSE)
- 主な変更点:
- 新しいモデルに対応するために、それぞれのモデルに対応するChatTemplateの追加をしました (リンク)。
- 一つの事例に対して複数回の応答文の生成と評価を行えるようにしました。
- OpenAIのAPIを呼び出す際のretryの処理を改善しました。
- バージョン:bigcode-evaluation-harness (commit #0261c52)
- ライセンス: Apache License Version 2.0 (LICENSE)
- 主な変更点:
- バージョン:jhuman-eval
- ライセンス: Copyright (c) 2023 Kimio Kuramitsu's Laboratory, MIT License (LICENSE)
- 主な変更点: なし
各フレームワークに対し、別々の仮想環境を用意します。
Pythonのバージョンは3.10.14を使ってください。
python -m venv .venv_llm_jp_evalpython -m venv .venv_harness_jppython -m venv .venv_harness_enpython -m venv .venv_bigcodepython -m venv .venv_fastchat
なお、以下の環境構築コードは、我々の計算環境においては動作検証をしておりますが、
利用される計算環境によってはバージョンが合わないことが考えられます。
その際は適宜適当なバージョンに置き換えてください。
jalm-evaluation-private/
にて
source .venv_llm_jp_eval/bin/activatecd llm-jp-evalpip install --upgrade pippip install -e.pip install protobuf sentencepiecepip install'accelerate>=0.26.0'pip install datasets==2.21.0pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121
swallow-evaluation/
にて
source .venv_harness_jp/bin/activatecd lm-evaluation-harness-jppip install --upgrade pippip install -e".[ja]"pip install sacrebleu sentencepiece protobuf nagisapip install'accelerate>=0.26.0'pip install datasets==2.21.0pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121
swallow-evaluation/
にて
source .venv_harness_en/bin/activatecd lm-evaluation-harness-enpip install --upgrade pippip install -e".[math]"pip install sentencepiece==0.2.0 protobuf==5.28.3 transformers==4.46.2pip install'accelerate>=0.26.0'pip install datasets==2.21.0pip install vllm==v0.6.3.post1pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121
jalm-evaluation-private/
にて
docker build -t evaluation-harness-jalm-evaluation.source .venv_bigcode/bin/activatecd bigcode-evaluation-harnesspip install --upgrade pippip install -e.pip install sentencepiece==0.2.0 protobuf==5.28.3 transformers==4.46.2pip install'accelerate>=0.26.0'pip install datasets==2.21.0pip install vllm==v0.6.3.post1pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121
swallow-evaluation/
にて
source .venv_fastchat/bin/activatecd fastchatpip install --upgrade pippip install python-dotenv pandaspip install -e".[model_worker,llm_judge]"pip install vllm==v0.6.3.post1pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121pip install markdown beautifulsoup4
モデルの生成文を gpt-4o-2024-08-06 を用いて評価する(LLM-as-a-judge)のでjalm-evaluation-private/.env
ファイルを作成し、OpenAIのAPIキーを入力する。
OPENAI_API_KEY=...
結果はresults/${MODEL_PATH}/ja/
以下に保存されます。
llm-jp-evalのREADME.mdに従い、以下のコマンドを実行してデータセットをダウンロードする
source .venv_llm_jp_eval/bin/activatecd llm-jp-evalpython scripts/preprocess_dataset.py \--dataset-name all \--output-dir ./datasetcd ../
swallow-evaluation/
にて
bash scripts/evaluate_ja_llmjp.sh$MODEL_PATH
jamp, janli, jemhopqa, jcommonsenseqa, jnli, jsem, jsick, jsquad, jsts, niilc, jmmluの評価が実行されます。
NLIタスクの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.tsv
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_PATH
結果はresults/${MODEL_PATH}/ja/${task_name}_${NUM_FEWSHOT}shot_${NUM_TESTCASE}cases/
に保存される。
- データはJHumanEvalを使用。
- few-shot数: 10
- 評価を行うにはdockerイメージのビルドが必要
bash scripts/evaluate_ja_{humaneval-unstripped,mbpp}.sh$MODEL_PATHtruetrue
bash scripts/evaluate_ja_{humaneval-unstripped,mbpp}.sh$MODEL_PATHtruefalse
bash scripts/evaluate_ja_{humaneval-unstripped,mbpp}.sh$MODEL_PATHfalsetrue
few-shot数: 0 (JHumanEval), 3 (MBPP Ja)
bash scripts/evaluate_ja_mt_bench.sh$MODEL_PATH$GPU_NUM
結果はresults/${MODEL_PATH}/en/
以下に保存されます。
llm-evaluation-harness
を採用- 常識推論: HellaSwag, WinoGrande, OpenBookQA
- 世界知識: TriviaQA
- 文書読解: SQuAD2
- 算術推論: GSM8K
- 数学: MATH
- 一般教養・学術知識: MMLU
- 博士課程: GPQA
本フレームワークでは評価時間の削減(評価の並列化)のために以下のようにスクリプトを分けている。
evaluate_english_general.sh
- TriviaQA, GSM8K, OpenBookQA, HellaSwag,WinoGrande, SQuAD2evaluate_english_bbh.sh
- BBHevaluate_english_gpqa.sh
- GPQAevaluate_english_mmlu.sh
- MMLU
jalm-evaluation-private/
にて
bash scripts/evaluate_english_{general,bbh,gpqa,mmlu}.sh$MODEL_PATH
bash scripts/evaluate_english_{humaneval-unstripped,mbpp}.sh$MODEL_PATHtruetrue
bash scripts/evaluate_english_{humaneval-unstripped,mbpp}.sh$MODEL_PATHtruefalse
bash scripts/evaluate_english_{humaneval-unstripped,mbpp}.sh$MODEL_PATHfalsetrue
- 全体の結果は
results/$MODEL_NAME/aggregated_result.json
に書き込まれます。 - 複数のモデルの結果を確認したい場合は、
tmp/model_list
ファイルを作成し、各モデル名を1行ずつ記入してください。その後、scripts/show_results.py
を実行すると、複数モデルの結果を一覧表示できます。
About
Swallowプロジェクト 大規模言語モデル 評価スクリプト
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors11
Uh oh!
There was an error while loading.Please reload this page.