😽

オープンLLMのLLM as a JudgeにおけるJudgeモデルとしての性能を検証してみる

2024/10/26に公開

LLM as a JudgeとPairwise評価について

LLM as a Judgeは、与えられたテキストの妥当性や品質をLLMで自動評価する手法です。LLMの基礎性能計測だけでなく、様々な生成系タスクにおいてよく使われる評価方法です。今回はその中でもPairwise評価と呼ばれる手法に注目し、オープンLLMのLLM as a JudgeにおけるJudgeモデルとしての性能を検証してみます。

Pairwise評価は、2つのテキストを並べてどちらが良いかをLLMに判定させて評価する手法です。例えば、2つモデルをSFTして開発した後に、その2つのモデルの出力を並べてどちらのモデルの方がより性能が高いかを評価したりする際に利用されます。

一般的にベンチマーク等の評価ではOpenAIのgpt-4やgpt-4o等がJudgeモデルに利用されますが、これらのモデルの出力は規約的に学習に使えません。一方、DPO等のPreference Optimizationに使われるようなデータをLLMで合成しようとした時、出力を学習に利用できるモデルによるJudgeが必要となりますが、どのモデルが最適かは分かりませんでした。合成データ作成のためにオープンLLMのJudge性能を計測・比較したいと思い、今回の計測に至りました。

性能検証に利用するデータセット

今回は検証にteam-hatakeyama-phase2/LLMChatというデータセットを利用します。

このデータセットは、GENIAC 松尾研 LLM開発プロジェクトで開発したモデルを人手評価するために構築されたChatbot Arenaのようなシステムで収集された質問とLLMの回答、および人手評価のデータです。

今回の性能検証では、このデータセットからどちらかのモデルの出力が良いと判定された1458件のデータを抽出し利用しました。
このデータセットから質問と2つのLLMの回答を検証対象の各モデルに与えてどちらが良いかを評価させ、その評価と人手評価との一致率をJudge性能の指標とし、各モデルで検証していきます。

検証対象とするモデル

今回は、Apache 2.0またはMITライセンスで提供されており、日本語性能が高いと言われているモデルを対象に選定しました。
実際に検証対象としたモデル一覧は以下の通りです。

また、比較対象としてOpenAIのgpt-4o-2024-08-06とgpt-4o-mini-2024-07-18でも計測しています。

Judgeに利用したプロンプト

各モデルにおけるJudgeには以下のようなプロンプトを利用しました。ここで、{answer_a}には上記データセットのanswer_1が、{answer_b}にはanswer_2が入ります。

公平な判定者として、以下に与えられたユーザーの質問に対する2つのAIアシスタントの回答の質を評価してください。そして、ユーザーの指示に上手く従い質問により良い答えをしているアシスタントを1つ選択してください。
まず、評価を始める前にそれぞれの回答に明らかなまたは微妙な誤りがないか確認してください。その後、この質問に対する回答を評価する際に重要な基準(例:1~5つの基準)を提案してください。
次に、その基準に基づいて各回答を注意深くチェックしてください。その後、前のステップでの分析に基づいて、全体的に優れた回答を1つ選んでください。
評価の際には順序による偏りを避け、提示された回答の順番が判断に影響しないようにしてください。、また、回答の長さに影響されないようにし、アシスタントの名前による好みも避けてください。できる限り客観的に評価をすることを心掛けてください。
評価を提供した後、アシスタントAが優れている場合は「[[A]]」、アシスタントBが優れている場合は「[[B]]」というフォーマットに厳密に従って最終判定を出力してください。

[ユーザーの質問]
{instruction}

[アシスタントAの回答の開始]
{answer_a}
[アシスタントAの回答の終了]

[アシスタントBの回答の開始]
{answer_b}
[アシスタントBの回答の終了]

このプロンプトを元に、主に以下の2パターンで計測しました。

  1. System Promptにはモデルのデフォルトのもの・推奨されているものを利用し、最初のUser Promptに上記プロンプトを入力
  2. System Promptには上記プロンプトの[ユーザーの質問]より前までを、最初のUser Promptにはそれ以降のプロンプトを入力

例えばcalm3-22b-chatの場合、実際のプロンプトは以下のようになります。

パターン1

<|im_start|>system
あなたは親切なAIアシスタントです。<|im_end|>
<|im_start|>user
公平な判定者として、以下に与えられたユーザーの質問に対する2つのAIアシスタントの回答の質を評価してください。そして、ユーザーの指示に上手く従い質問により良い答えをしているアシスタントを1つ選択してください。
まず、評価を始める前にそれぞれの回答に明らかなまたは微妙な誤りがないか確認してください。その後、この質問に対する回答を評価する際に重要な基準(例:1~5つの基準)を提案してください。
次に、その基準に基づいて各回答を注意深くチェックしてください。その後、前のステップでの分析に基づいて、全体的に優れた回答を1つ選んでください。
評価の際には順序による偏りを避け、提示された回答の順番が判断に影響しないようにしてください。、また、回答の長さに影響されないようにし、アシスタントの名前による好みも避けてください。できる限り客観的に評価をすることを心掛けてください。
評価を提供した後、アシスタントAが優れている場合は「[[A]]」、アシスタントBが優れている場合は「[[B]]」というフォーマットに厳密に従って最終判定を出力してください。

[ユーザーの質問]
{instruction}

[アシスタントAの回答の開始]
{answer_a}
[アシスタントAの回答の終了]

[アシスタントBの回答の開始]
{answer_b}
[アシスタントBの回答の終了]<|im_end|>
<|im_start|>assistant

パターン2

<|im_start|>system
公平な判定者として、以下に与えられたユーザーの質問に対する2つのAIアシスタントの回答の質を評価してください。そして、ユーザーの指示に上手く従い質問により良い答えをしているアシスタントを1つ選択してください。
まず、評価を始める前にそれぞれの回答に明らかなまたは微妙な誤りがないか確認してください。その後、この質問に対する回答を評価する際に重要な基準(例:1~5つの基準)を提案してください。
次に、その基準に基づいて各回答を注意深くチェックしてください。その後、前のステップでの分析に基づいて、全体的に優れた回答を1つ選んでください。
評価の際には順序による偏りを避け、提示された回答の順番が判断に影響しないようにしてください。、また、回答の長さに影響されないようにし、アシスタントの名前による好みも避けてください。できる限り客観的に評価をすることを心掛けてください。
評価を提供した後、アシスタントAが優れている場合は「[[A]]」、アシスタントBが優れている場合は「[[B]]」というフォーマットに厳密に従って最終判定を出力してください。<|im_end|>
<|im_start|>user
[ユーザーの質問]
{instruction}

[アシスタントAの回答の開始]
{answer_a}
[アシスタントAの回答の終了]

[アシスタントBの回答の開始]
{answer_b}
[アシスタントBの回答の終了]<|im_end|>
<|im_start|>assistant

推論パラメータ

Judgeの際には以下のようなパラメータを用いてvLLMで推論を行いました。

  • temperature: 0
  • top_p: 1.0
  • max_tokens: 2048
  • repetition_penalty: 1.1

検証結果

各モデルにてJudgeを行い人手評価との一致率を計測してまとめた結果が以下の表になります。
ここで、default_system_promptとついているものが先ほどのプロンプトのパターン1、custom_system_promptとついているものがパターン2です。

また、一部モデルでは指示追従不足からか指示通りのフォーマットで評価を上手く行えないことがありました。3回ほどJudgeを再試行し、フォーマット通りの評価に成功した件数が表中のValid Judgments Countとなります。これらのモデルの一致率の計算においては分母もこの件数になっています。

Model Agreement Rate (%) Valid Judgments Count
gpt_4o_2024_08_06 74.76 1458
qwen2.5_32b_custom_system_prompt 72.57 1458
qwen2.5_32b_default_system_prompt 71.88 1458
gpt_4o_mini_2024_07_18 71.86 1457
qwen2.5_14b_default_system_prompt 71.06 1458
qwen2.5_14b_custom_system_prompt 70.71 1458
ezo_qwen2.5_32b_default_system_prompt 70.56 1457
ezo_qwen2.5_32b_custom_system_prompt 70.37 1458
ca_mistral_nemo_custom_system_prompt 65.43 1458
qwen2.5_7b_custom_system_prompt 65.02 1458
ca_mistral_nemo_default_system_prompt 64.79 1457
qwen2.5_7b_default_system_prompt 64.13 1458
karakuri_8x7b_instruct_custom_system_prompt 61.79 1238
calm3_default_system_prompt 61.18 1458
calm3_custom_system_prompt 60.92 1456
karakuri_8x7b_chat_custom_system_prompt 60.7 776
llmjp_3_13b_default_system_prompt 54.99 1133
tanuki_8b_default_system_prompt 51.55 1321

また、各モデルの実際のJudge結果を以下のデータセットにまとめて公開しています。
https://huggingface.co/datasets/Aratako/LLMChat-Judge-Results

結果の分析

検証結果から以下のようなことが分かります。

  1. オープンモデルでもかなり高い精度でのJudgeが出来るようになってきている
    gpt-4oが最高性能(74.76%)を示す一方、オープンモデルのQwen2.5 32B(72.57%)が僅差で続いています。このことから、商用利用可能なApache 2.0ライセンスのモデルでも、十分な評価性能が得られていることが分かります。
  2. 現状、国内のフルスクラッチ開発モデルはこのタスクにおいては海外モデルに勝てていない
    calm3、llm-jp、Tanukiの3つは日本でフルスクラッチ開発されたモデルですが、どれも下位に位置しています。最近の国内開発モデルはJapanese MT-Benchのような対話性能を測るベンチマークではかなり高いスコアを出せるようになって来ていますが、Judgeのような複雑なタスクの処理においてはまだ海外モデルとは差があることが示唆されます。
  3. 特に国内開発の小規模モデルはJudgeの指示に十分従えるほどの指示追従能力が獲得できていない
    国内の小規模モデルであるTanuki-8Bやllm-jp-3 13bは一部フォーマット通りの出力が出来ていないものがあります。一方、海外の小規模モデルであるQwen2.5の7BやcyberagentのMistral-Nemoのファインチューニング版(12B)などはほぼ確実に指示通りのフォーマットで評価を出力できています。このことからも、Judgeのタスクではまだ海外モデルが先行していると分かります。

まとめ

本記事では、オープンLLMのLLM as a JudgeにおけるPairwise評価のJudgeモデルとしての性能を検証しました。
結果としては、Qwen2.5 32Bが商用利用可能なオープンモデルとして最も高い評価性能を示し、DPOなどの学習データ生成に適していることが分かりました。また、計算リソースに制約がある場合、Qwen2.5 14BやcyberagentのMistral-Nemoも実用的な選択肢となり得ます。
残念ながら国外開発モデルが性能的に先行しているという検証結果になってしまいましたが、今後の国内でのモデル開発競争による性能向上に期待します。

Discussion