/swallow-evaluation

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

Primary LanguagePythonOtherNOASSERTION

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

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

注意事項

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

評価スクリプトが使用する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

JP Language Model Evaluation Harness

  • バージョン: 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

  • バージョン: FastChat (commit #e86e70d0)
  • ライセンス: Apache License Version 2.0 (LICENSE)
  • 主な変更点:
    • 新しいモデルに対応するために、それぞれのモデルに対応するChatTemplateの追加をしました (リンク)。
    • 一つの事例に対して複数回の応答文の生成と評価を行えるようにしました。
    • OpenAIのAPIを呼び出す際のretryの処理を改善しました。

Code Generation LM Evaluation Harness

  • バージョン: bigcode-evaluation-harness (commit #0261c52)
  • ライセンス: Apache License Version 2.0 (LICENSE)
  • 主な変更点:
    • JHumanEvalの評価を行えるようにしました (リンク)。
    • HumanEval / JHumanEval タスクにおける、設問に対する回答率を計算する関数を追加しました (リンク)。

JHumanEval (Code Generation LM Evaluation Harnessで使用)

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

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

準備:環境構築

各フレームワークに対し、別々の仮想環境を用意します。

Pythonのバージョンは3.9を使ってください。

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

swallow-evaluation/にて

source .venv_llm_jp_eval/bin/activate
cd llm-jp-eval
pip install --upgrade pip
pip install -e .
pip install protobuf
pip install sentencepiece

torchのバージョンがcudaに合わない場合は、torchを入れ直してください。

swallow-evaluation/にて

source .venv_harness_jp/bin/activate
cd lm-evaluation-harness-jp
pip install --upgrade pip
pip install -e ".[ja]"
pip install sacrebleu
pip install sentencepiece
pip install protobuf
pip install nagisa

torchのバージョンがcudaに合わない場合は、torchを入れ直してください。

swallow-evaluation/にて

source .venv_harness_en/bin/activate
cd lm-evaluation-harness-en
pip install --upgrade pip
pip install -e .
pip install sentencepiece
pip install protobuf

torchのバージョンがcudaに合わない場合は、torchを入れ直してください。

swallow-evaluation/にて

source .venv_bigcode/bin/activate
cd bigcode-evaluation-harness
pip install --upgrade pip
pip install -e .
# For Llama
pip install sentencepiece
pip install protobuf

torchのバージョンがcudaに合わない場合は、torchを入れ直してください。

bigcode-evaluation-harnessの指示に従ってdockerイメージをビルドする。

swallow-evaluation/にて

source .venv_fastchat/bin/activate
cd fastchat
pip install --upgrade pip
pip install torch==2.1.0 --index-url https://download.pytorch.org/whl/cu118
pip install python-dotenv pandas
pip install -e ".[model_worker,llm_judge]"

torchのバージョンがcudaに合わない場合は、torchを入れ直してください。

swallow-evaluation/.envファイルを作成し、AzureのAPIキーを入力する。

AZURE_OPENAI_KEY=...
AZURE_OPENAI_ENDPOINT=...

日本語の評価

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

llm-jp-eval データセットの前処理

cd llm-jp-eval

python scripts/preprocess_dataset.py  \
--dataset-name all  \
--output-dir ./dataset

cd ../

llm-jp-evalのタスクで評価

swallow-evaluation/にて

bash scripts/evaluate_ja_llmjp.sh \
$MODEL_PATH \
$TOKENIZER_PATH \

jamp, janli, jemhopqa, jcommonsenseqa, jnli, jsem, jsick, jsquad, jsts, niilc, jmmluの評価が実行されます。

xlsum(自動要約)のタスクで評価

bash scripts/evaluate_ja_xlsum.sh $MODEL_PATH

mgsm(数学)のタスクで評価

bash scripts/evaluate_ja_mgsm.sh $MODEL_PATH

WMT20(機械翻訳)のタスクで評価

bash scripts/evaluate_ja_wmt20_{enja,jaen}.sh $MODEL_PATH

JHumanevalのタスクで評価

  • 評価を行うにはdockerイメージのビルドが必要
bash scripts/evaluate_ja_humaneval-unstripped.sh $MODEL_PATH true true

日本語MTBenchの評価

  • Azure OpenAI APIを用いてGPT-4を呼び出すためAPI料金がかかる
bash scripts/ja_mt_bench.sh $MODEL_PATH $GPU_NUM

英語の評価

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

lm-evaluation-harness のタスクで評価

swallow-evaluation/にて

bash scripts/evaluate_english.sh $MODEL_PATH

Humanevalのタスクで評価

triviaqa, gsm8k, openbookqa, hellaswag, xwinograd_en, squadv2, mmlu, bbh_cot_fewshotの評価が実行されます。

  • 評価を行うにはdockerイメージのビルドが必要
bash scripts/evaluate_english_humaneval-unstripped.sh $MODEL_PATH true true

結果の集計

モデル名を指定してscripts/aggregate_result.pyを実行することで、モデルの評価結果を集計することができます。 ただし、各評価スクリプトの最後に自動的に結果が集計されるようになっているので、通常は実行する必要はありません。

python scripts/aggregate_result.py --model $MODEL_NAME