はじめに
機械学習やディープラーニングにおいて、モデルの推論精度は非常に重要な指標です。特に複雑なタスクを扱う際に、モデルが実際にどのように動作するかを理解するのに役立ちます。この記事では、モデルの推論精度をテストする方法をステップバイステップで解説し、Pythonを使って簡単なコードを実装します。
モデルの推論精度とは?
モデルの推論精度とは、モデルが特定のタスクにおいてどれだけ正確に推論を行うかを示す指標です。例えば、質問応答タスクでは、モデルが正しく回答する割合が推論精度となります。モデルの推論精度をテストするためには、標準的なデータセットとツールを使用します。
使用するツール:lm-evaluation-harness
lm-evaluation-harness
というツールを使用して、モデルの推論精度をテストします。このツールは、多くの標準データセットと評価方法を提供しており、モデルの性能を簡単にテストすることができます。
ツールのインストール
まず、lm-evaluation-harness
ツールをインストールします。以下のコマンドを使用してインストールできます。
git clone --depth 1 https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .
国内の場合は、ミラーサイトを使用してダウンロード速度を向上させることができます。
export HF_ENDPOINT=https://hf-mirror.com
データセットのロードで問題が発生した場合は、datasets
のバージョンを指定してみてください。
pip install datasets==2.14.6
モデルの推論精度をテストする手順
ここでは、Qwen2.5-0.5B
モデルを使用し、ARC_challenge
、HellaSwag
、piqa
データセットでテストを行います。
1. モデルとトークナイザーのロード
まず、モデルとトークナイザーをロードします。transformers
ライブラリを使用してモデルとトークナイザーをロードします。
from transformers import AutoModelForCausalLM, AutoTokenizer
# モデルをロード
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B", device_map="auto", trust_remote_code=True).eval()
# トークナイザーをロード
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B", trust_remote_code=True)
2. lm-evaluation-harness を使用してテスト
次に、lm-evaluation-harness
を使用してモデルの推論精度をテストします。simple_evaluate
関数を使用して評価を行います。
from lm_eval.models.huggingface import HFLM
from lm_eval import simple_evaluate
import json
# HFLMオブジェクトを作成
lm = HFLM(pretrained=model, tokenizer=tokenizer, batch_size=64, device="cpu")
# 指定されたデータセットで評価
results = simple_evaluate(model=lm, tasks=["arc_challenge", "hellaswag", "piqa"])
# 結果をJSONファイルにエクスポート
filtered_results = results.copy()
filtered_results = {key: value for key, value in results.items() if key == "results"}
json_filtered_results = json.dumps(filtered_results, indent=4)
with open("results.json", "w") as json_file:
json_file.write(json_filtered_results)
3. スクリプトの実行
上記のコードをPythonスクリプト(例えば evaluate_model.py
)として保存し、コマンドラインで実行します。
python evaluate_model.py
実行が完了すると、results.json
というファイルが生成されます。このファイルには、モデルが ARC_challenge
、HellaSwag
、piqa
データセットで達成した推論精度が含まれています。
4. 結果の確認
results.json
ファイルを開くと、以下のような内容が表示されます。
{
"results": {
"arc_challenge": {
"alias": "arc_challenge",
"acc,none": 0.295221843003413,
"acc_stderr,none": 0.01332975029338232,
"acc_norm,none": 0.3242320819112628,
"acc_norm_stderr,none": 0.013678810399518813
},
"hellaswag": {
"alias": "hellaswag",
"acc,none": 0.40619398526190004,
"acc_stderr,none": 0.004901178917900843,
"acc_norm,none": 0.5214100776737701,
"acc_norm_stderr,none": 0.004985204766555058
},
"piqa": {
"alias": "piqa",
"acc,none": 0.7023939064200218,
"acc_stderr,none": 0.01066735379238821,
"acc_norm,none": 0.6996735582154516,
"acc_norm_stderr,none": 0.010695225308183138
}
}
}
ここで、acc,none
はモデルが対応するデータセットで達成した正解率を示しています。例えば、arc_challenge
データセットでの正解率は約29.5%です。
まとめ
この記事では、モデルの推論精度をテストする方法を紹介しました。lm-evaluation-harness
ツールを使用することで、複数の標準データセットでモデルの性能を簡単に評価することができます。このガイドが、今後のプロジェクトで役立つことを願っています。