This README is in Japanese and the latest information is in English. Please refer to the English version for the latest information.
[ English | 日本語 ]
このツールは,複数のデータセットを横断して日本語マルチモーダル大規模言語モデルを自動評価するものです. このツールは以下の機能を提供します:
- 既存の日本語評価データを利用し,マルチモーダルテキスト生成タスクの評価データセットに変換して提供する.
- ユーザが作成した推論結果を用いて,タスクごとに設定された評価メトリクスを計算する.
データフォーマットの詳細,サポートしているデータの一覧については,DATASET.mdを参照ください.
このツールはPyPI経由で利用することができます.
pip
コマンドを用いてeval_mm
を利用している仮想環境に含めることができます.
pip install eval_mm
- 本ツールではLLM-as-a-judge手法を用いて評価をする際に,OpenAI APIを用いてGPT-4oにリクエストを送信します.
.env
ファイルを作成し,Azureを利用する場合にはAZURE_OPENAI_ENDPOINT
,AZURE_OPENAI_KEY
の組を,OpenAI APIを利用する場合はOPENAI_API_KEY
を設定してください.
以上で環境構築は終了です.
リポジトリをクローンして利用する場合は以下の手順を参考にしてください.
eval-mmは仮想環境の管理にuvを用いています.
- リポジトリをクローンして移動する
git clone git@github.com:llm-jp/llm-jp-eval-mm.git
cd llm-jp-eval-mm
- uv を用いて環境構築を行う
uvはofficial doc を参考にインストールしてください.
cd llm-jp-eval-mm
uv sync
- .env.sampleを参考にして,
.env
ファイルを作成し,AZURE_OPENAI_ENDPOINT
,AZURE_OPENAI_KEY
の組,あるいはOPENAI_API_KEY
を設定してください.
以上で環境構築は終了です.
(現在, llm-jp-eval-mm リポジトリはprivateになっています. examples ディレクトリについては, https://pypi.org/project/eval-mm/#filesのSource Distributionにてdownloadできます.)
評価の実行のために,サンプルコードexamples/sample.py
を提供しています.
examples/{モデル名}.py
として含まれているモデルは,その推論方法に限りサポートしています.
新たな推論方法・新たなモデルでの評価を実行したい場合,既存のexamples/{モデル名}.py
を参考に同様のファイルを作成することで,評価を実行することができます.
例として, llava-hf/llava-1.5-7b-hf
モデルをjapanese-heron-benchで評価したい場合は, 以下のコマンドを実行してください.
python3 examples/sample.py \
--model_id llava-hf/llava-1.5-7b-hf \
--task_id japanese-heron-bench \
--result_dir test \
--metrics "llm_as_a_judge_heron_bench" \
--judge_model "gpt-4o-2024-05-13" \
--overwrite
評価結果のスコアと出力結果は
test/{task_id}/evaluation/{model_id}.jsonl
, test/{task_id}/prediction/{model_id}.jsonl
に保存されます.
複数のモデルを複数のタスクで評価したい場合は, eval_all.sh
を参考にしてください.
現在,代表的なモデルの評価結果をまとめたリーダーボードを公開する予定があります.
現在,以下のベンチマークタスクをサポートしています.
Japanese Task:
English Task:
各モデルごとに, 必要なライブラリが異なります. このリポジトリでは, uvのDependency groupsを用いて, モデルごとに必要なライブラリを管理しています.
以下のモデルを利用する際には, normal groupを指定してください. stabiliyai/japanese-instructblip-alpha, stabilityai/japanese-stable-vlm, cyberagent/llava-calm2-siglip, llava-hf/llava-1.5-7b-hf, llava-hf/llava-v1.6-mistral-7b-hf, neulab/Pangea-7B-hf, meta-llama/Llama-3.2-11B-Vision-Instruct, meta-llama/Llama-3.2-90B-Vision-Instruct, OpenGVLab/InternVL2-8B, Qwen/Qwen2-VL-7B-Instruct, OpenGVLab/InternVL2-26B, Qwen/Qwen2-VL-72B-Instruct, gpt-4o-2024-05-13
uv sync --group normal
以下のモデルを利用する際には, evovlm groupを指定してください. SamanaAI/Llama-3-EvoVLM-JP-v2
uv sync --group evovlm
以下のモデルを利用する際には, vilaja groupを指定してください. llm-jp/llm-jp-3-vila-14b, Efficient-Large-Model/VILA1.5-13b
uv sync --group vilaja
mistralai/Pixtral-12B-2409
uv sync --group pixtral
実行時は, groupを指定してください.
$ uv run --group normal python ...
新しいgroupを追加する際は, conflictの設定を忘れないようにしてください.
- JDocQA JDocQA データセットの構築において, pdf2image library が必要です. pdf2imageはpoppler-utilsに依存していますので, 以下のコマンドでインストールしてください.
sudo apt-get install poppler-utils
各評価データセットのライセンスはDATASET.mdを参照してください.
- 問題や提案があれば,Issue で報告してください.
- 新たなベンチマークタスクやメトリック, VLMモデルの推論コードの追加や, バグの修正がありましたら, Pull Requestを送ってください.
タスクはTaskクラスで定義されます. src/eval_mm/tasksのコードを参考にTaskクラスを実装してください. データセットをVLMモデルに入力する形式に変換するメソッドと, スコアを計算するメソッドを定義する必要があります.
メトリックはScorerクラスで定義されます.
src/eval_mm/metricsのコードを参考にScorerクラスを実装してください.
参照文と生成文を比較してsampleレベルのスコアリングを行うscore()
メソッドと, スコアを集約してpopulationレベルのメトリック計算を行うaggregate()
メソッドを定義する必要があります.
VLMモデルの推論コードはVLMクラスで定義されます.
examples/base_vlmを参考に, VLMクラスを実装してください.
画像とプロンプトをもとに生成文を生成するgenerate()
メソッドを定義する必要があります.
uv add <package_name>
uv add --group <group_name> <package_name>
uv run ruff format src
uv run ruff check --fix src
git tag -a v0.x.x -m "version 0.x.x"
git push origin --tags
github_pages/README.mdを参照ください.