Skip to content

swallow-llm/swallow-evaluation

Repository files navigation

Swallowプロジェクト 大規模言語モデル 評価スクリプト Ver. 202411

  • このリポジトリではSwallowプロジェクトによる大規模言語モデル;Swallowシリーズのリリースに用いた評価スクリプトを公開しています。 再現実験などにご利用ください。
  • 本文書では評価スクリプトの実行方法のみを説明します。評価方法や結果はSwallowプロジェクトの評価ページや論文発表を参照ください。
  • 評価スクリプトは、基本的には llm-jp-eval などの既存のLLM評価フレームワークを使用しています。 この場をお借りしてフレームワーク開発者の皆様にお礼申し上げます。
  • 推論型モデルを含む事後学習済みモデルの評価をお考えの方は swallow-evaluation-instruct をご検討ください。

注意事項

  • 実行環境の違いにより、異なる評価結果になる場合があります。
  • 評価がうまくいかないなど問題があればIssueまでお願いします。

以前のバージョンをお探しの方へ

  • 以前のバージョンをご利用になりたい方はReleasesを参照してください。

評価スクリプトが使用するLLM評価フレームワークおよびそれらのライセンス・変更点

llm-jp-eval

  • バージョン: llm-jp-eval v1.3.0 [Han+, ANLP24]
  • ライセンス: Copyright 2023 LLM-jp, Apache License Version 2.0 (LICENSE)

主な変更点

  • モデルの応答を生成する際に貪欲デコーディングを強制するようにconfigを追加しました(リンク)。
  • JMMLUの結果をカテゴリごとに算出するスクリプトを追加しました (リンク)。

Language Model Evaluation Harness

主な変更点

  • 数学のベンチマークである 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

主な変更点

  • TER (Translation Error Rate) をブートストラップ統計量から除外しました。
  • 評価結果のキャッシュの保存先を指定できるようにしました。
  • huggingface tokenizerを読み込む際にtrust_remote_codeに渡す値を指定できるようにしました。

FastChat

  • バージョン: FastChat (commit #e86e70d0)
  • ライセンス: Apache License Version 2.0 (LICENSE)

主な変更点

  • 新しいモデルに対応するために、それぞれのモデルに対応する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チームで独自に校閲・修正したものに変更しました(リンク)。
  • 応答文の日本語文字率を計算する関数を追加しました(リンク)。

Code Generation LM Evaluation Harness (BigCode)

主な変更点

  • JHumanEvalの評価を行えるようにしました (リンク)。
    • プロンプト末尾の改行 n を削除しない、いわゆる "unstripped" を使用しています。
  • MBPP-Ja の評価を行えるようにしました (リンク)。
    • テストセットは、llm-jp-eval v1.4.0 と同一です(MBPP-Ja)。 ただしMBPPの test split に合わせて task_id = 11--510 の設問のみを使用しています(リンク)。
  • HumanEval / JHumanEval について、設問に対する回答率を計算する関数を追加しました (リンク)。

評価フレームワークに追加したベンチマークのライセンス・変更点

MATH (Language Model Evaluation Harnessで使用)

GPQA (Language Model Evaluation Harnessで使用)

  • バージョン: idavidrein/gpqa
  • ライセンス: Copyright (c) 2022 I. David Rein, MIT License (LICENSE)
  • 主な変更点: なし

JHumanEval (Code Generation LM Evaluation Harnessで使用)

  • バージョン: jhuman-eval
  • ライセンス: Copyright (c) 2023 Kimio Kuramitsu's Laboratory, MIT License (LICENSE)
  • 主な変更点: なし

MBPP-Ja (Code Generation LM Evaluation Harnessで使用)

  • 取得元: llm-jp/mbpp-ja
  • ライセンス: Copyright (c) 2024 LLM-jp, CC BY 4.0 (LICENSE)
  • 主な変更点: なし

FAQ

こちら


評価スクリプトの実行方法

以下、本リポジトリをクローンしたフォルダ(例: /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

なお、以下の環境構築コードは、我々の計算環境においては動作検証をしておりますが、
利用される計算環境によってはバージョンが合わないことが考えられます。
その際は適宜適当なバージョンに置き換えてください。

llm-jp-eval の環境構築

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/cu121

JP Language Model Evaluation Harness の環境構築

source .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/cu121

Language Model Evaluation Harness の環境構築

source .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/cu121

Code Generation LM Evaluation Harness の環境構築

docker 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-harnessswallow-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

FastChat の環境構築

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 データセットの前処理

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 ../

llm-jp-eval が対応するタスクの評価

JEMHopQA, JCommonsenseQA, JSQuAD, NIILC, JMMLU, JSTS, NLIベンチマーク5種 (Jamp, JaNLI, JNLI, JSeM, JSICK) の評価が実行されます。

bash scripts/evaluate_ja_llmjp.sh $MODEL_PATH
NLIタスクのbalanced accuracyを計算する
  • NLIタスクデータセット(jamp,janli,jnli,jsem,jsick)のbalanced accuracyを計算するには ./scripts/re_evaluate_nli_task.pyllm-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

JP Language Model Evaluation Harness が対応するタスクの評価

XL-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_PATH

Code Generation LM Evaluation Harness が対応するタスクの評価

JHumanEval, 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

FastChat が対応するタスクの評価

日本語MT-Bench の評価が実行されます。

bash scripts/evaluate_ja_mt_bench.sh $MODEL_PATH $GPU_NUM

英語タスクの評価

結果は results/${MODEL_PATH}/en/ 以下に保存されます。

Language Model Evaluation Harness が対応するタスクの評価

以下の評価が実行されます。

  • 常識推論: HellaSwag, XWINO, OpenBookQA
  • 世界知識: TriviaQA
  • 文書読解: SQuAD v2
  • 算術推論: GSM8K
  • 論理推論: BBH (Big-Bench-Hard)
  • 数学: MATH
  • 一般教養・学術知識: MMLU
  • 博士レベルの科学: GPQA

それぞれのベンチマークは、以下のシェルスクリプトで実行できます。

  • evaluate_english_general.sh - TriviaQA, GSM8K, OpenBookQA, HellaSwag, XWINO, SQuAD v2
  • evaluate_english_bbh.sh - BBH
  • evaluate_english_gpqa.sh - GPQA
  • evaluate_english_mmlu.sh - MMLU
  • evaluate_english_math.sh - MATH
bash scripts/evaluate_english_{general,bbh,gpqa,mmlu,math}.sh $MODEL_PATH

Code Generation LM Evaluation Harness が対応するタスクの評価

HumanEval, 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 を実行すると、複数モデルの結果を一覧表示できます。

About

Swallowプロジェクト 大規模言語モデル 評価スクリプト

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 12