こんにちは!みうです!
今日はmt-benchの話題です。
LLMの評価方法について
LLMの評価方法には
- タスクを旧来の自然言語処理タスクに限定し、選択式などにすることで、機械的評価が可能にしたもの(llm-jp-evalなど)
- LLMの会話的タスクに広く対応した、GPT4など優秀なLLMに正解と生成回答を比較して、評価させる手法(mt-benchやElyza-Task-100など)
の2パターンがあります。
さらに、後者のLLMによる評価の中でも、mt-benchとElyza-Task-100で異なる要素があります。
mt-bench | 10段階評価。いくつかの観点はあるが、基本は良い感じなら高スコア、悪いなら低スコアになるようにする |
Elyza-Task-100 | 5段階評価。各データに専用の評価観点を与えており、回答時の評価の揺らぎを抑えている |
このため、私は、評価観点のないmt-benchのような評価方法を、「ざっくり10段階」とよく表現します。
今日はこのmt-benchの評価の揺らぎについて検証してみようと思います
評価の揺らぎ検証
mt-benchの各カテゴリー(code,extraction, humanities, math, reasoning, roleplay, stem, writing)から1件ずつデータを選び、各評価を10回ずつ行います。
LLMは評価をするGPT4以外のLLMではなんでもいいかなと思い、今回は「karakuri-ai/karakuri-lm-70b-chat-v0.1」の結果を見てみることにしました。
GPT4の評価はtemperature = 0.3でまずは実行します。「正しく評価できている」のであれば、何回実行しても評価結果は一致してほしいものです。値が揺れるということは、mt-benchのベンチーマークの結果自体が揺れやすい性質をもつということです。
各種LLMの推論結果については、私の一意が入らないよう、こちらのNejumi上で推論結果を利用します。
この評価結果について、一緒に眺めてみましょう♪
全体感
まずスコアの全体感です
評価結果 | coding | extraction | humanities | math | reasoning | roleplay | stem | writing |
1回目 | 8 | 10 | 10 | 1 | 7 | 9 | 8 | 10 |
2回目 | 8 | 10 | 10 | 1 | 4 | 9 | 9 | 10 |
3回目 | 7 | 10 | 10 | 1 | 8 | 9 | 8 | 10 |
4回目 | 7 | 10 | 9 | 1 | 7 | 8 | 8 | 10 |
5回目 | 7 | 10 | 10 | 1 | 4 | 10 | 9 | 9 |
6回目 | 7 | 10 | 10 | 1 | 7 | 9 | 10 | 10 |
7回目 | 7 | 10 | 9 | 1 | 9 | 9 | 8 | 10 |
8回目 | 4 | 10 | 9 | 1 | 3 | 10 | 8 | 10 |
9回目 | 7 | 10 | 10 | 1 | 9 | 10 | 8 | 10 |
10回目 | 7 | 10 | 10 | 1 | 6 | 10 | 9 | 10 |
extractionやmath, writingなど正解、不正解がはっきりしているものは良いものの、reasoningはかなりひどい結果です。「たまに3たまに9」といった評価スコアになります。繰り返しですが、この10回は全部同じデータを評価した結果です。
これくらい評価結果が揺れるのがmt-bench方式の特徴です。
では、それぞれ見ていきましょう♪
coding
question
ディレクトリ内の全てのテキストファイルを読み込み、出現回数が最も多い上位5単語を返すPythonプログラムを開発してください。
answer
以下に、ディレクトリ内の全てのテキストファイルを読み込み、出現回数が最も多い上位5単語を返すPythonプログラムの例を示します。このプログラムでは、
os
、glob
、collections
の3つの標準ライブラリを使用しています。import os from collections import Counter def read_text_files(directory): """ ディレクトリ内のテキストファイルを読み込み、各ファイルのテキストを連結したリストを返します。 """ files = glob.glob(os.path.join(directory, '**', '*.txt')) texts = [] for file in files: with open(file, 'r') as f: texts.append(f.read()) return '\n'.join(texts) def most_common_words(text): """ 与えられたテキストをスペースで分割し、出現回数が最も多い上位5単語を返します。 """ words = text.split() word_counts = Counter(words) top_5 = word_counts.most_common(5) return top_5 if __name__ == '__main__': directory = '/path/to/directory' # テキストファイルが含まれるディレクトリ text = read_text_files(directory) top_5 = most_common_words(text) print(top_5)
このプログラムでは、まず
read_text_files
関数を使ってディレクトリ内のテキストファイルを読み込み、各ファイルのテキストを連結したリストを取得します。次に、most_common_words
関数を使って与えられたテキストをスペースで分割し、出現回数が最も多い上位5単語を返します。最後に、メイン関数でこれらの関数を呼び出して、結果を出力します。
私からの指摘は以下です
split()では、少なくとも日本語の単語の分割はできません。質問文が日本語であるため、常識的には日本語の単語用の関数が求められているはずです
その意味では、そこまで良い結果ではありませんね。
GPT4による評価結果(score = 4)
アシスタントの回答は基本的には参照回答と同じ内容を提供していますが、コードの構造が少し異なります。アシスタントの回答は、コードを2つの関数、
read_text_files
とmost_common_words
に分けています。これにより、コードの再利用性が向上し、読みやすさも向上しています。ただし、アシスタントの回答には一つ重大なエラーがあります。それは、
glob
モジュールを使用しているにもかかわらず、そのモジュールをインポートしていない点です。これはプログラムを実行するとエラーが発生するため、修正が必要です。修正後のコードは以下の通りです。
import os import glob from collections import Counter def read_text_files(directory): """ ディレクトリ内のテキストファイルを読み込み、各ファイルのテキストを連結したリストを返します。 """ files = glob.glob(os.path.join(directory, '**', '*.txt')) texts = [] for file in files: with open(file, 'r') as f: texts.append(f.read()) return '\n'.join(texts) def most_common_words(text): """ 与えられたテキストをスペースで分割し、出現回数が最も多い上位5単語を返します。 """ words = text.split() word_counts = Counter(words) top_5 = word_counts.most_common(5) return top_5 if __name__ == '__main__': directory = '/path/to/directory' # テキストファイルが含まれるディレクトリ text = read_text_files(directory) top_5 = most_common_words(text) print(top_5)
このエラーは重大なものであるため、評価は低くなります。
評価: [[4]]
GPT4による評価結果(score = 7)
アシスタントの回答は参照回答と同じく、ディレクトリ内の全てのテキストファイルを読み込み、出現回数が最も多い上位5単語を返すPythonプログラムを提供しています。ただし、アシスタントの回答は参照回答とは異なり、2つの関数
read_text_files
とmost_common_words
に分けてプログラムを作成しています。これにより、プログラムの各部分が何を行っているのかがより明確になり、再利用性も向上しています。ただし、アシスタントの回答には一つ問題があります。
glob
モジュールを使用していますが、そのインポートが抜けています。このため、そのままではプログラムは動作しません。修正後のプログラムは以下の通りです。
import os import glob from collections import Counter def read_text_files(directory): """ ディレクトリ内のテキストファイルを読み込み、各ファイルのテキストを連結したリストを返します。 """ files = glob.glob(os.path.join(directory, '**', '*.txt')) texts = [] for file in files: with open(file, 'r') as f: texts.append(f.read()) return '\n'.join(texts) def most_common_words(text): """ 与えられたテキストをスペースで分割し、出現回数が最も多い上位5単語を返します。 """ words = text.split() word_counts = Counter(words) top_5 = word_counts.most_common(5) return top_5 if __name__ == '__main__': directory = '/path/to/directory' # テキストファイルが含まれるディレクトリ text = read_text_files(directory) top_5 = most_common_words(text) print(top_5)
以上を考慮して、評価は7とします。[[7]]
GPT4による評価結果(score = 8)
アシスタントの回答は参照回答と比較しても、ディレクトリ内の全てのテキストファイルを読み込み、出現回数が最も多い上位5単語を返すPythonプログラムを正確に提供しています。ただし、アシスタントの回答は参照回答よりも少し複雑で、2つの関数
read_text_files
とmost_common_words
を定義しています。これにより、プログラムの各部分の役割が明確になり、再利用も容易になります。ただし、アシスタントの回答にはglob
モジュールをインポートする行が欠けています。このため、プログラムはそのままでは実行できません。以下に修正したプログラムを示します。import os import glob from collections import Counter def read_text_files(directory): """ ディレクトリ内のテキストファイルを読み込み、各ファイルのテキストを連結したリストを返します。 """ files = glob.glob(os.path.join(directory, '**', '*.txt')) texts = [] for file in files: with open(file, 'r') as f: texts.append(f.read()) return '\n'.join(texts) def most_common_words(text): """ 与えられたテキストをスペースで分割し、出現回数が最も多い上位5単語を返します。 """ words = text.split() word_counts = Counter(words) top_5 = word_counts.most_common(5) return top_5 if __name__ == '__main__': directory = '/path/to/directory' # テキストファイルが含まれるディレクトリ text = read_text_files(directory) top_5 = most_common_words(text) print(top_5)
評価: [[8]]
GPT4の評価も私の観点と異なり、globがimportされてないことを気にしていますね。ただ、この「globがimportされていない」ことが、4点になったり8点になったりする形です
extraction
question
以下の映画のレビューを1から5のスケールで評価してください。1は非常に否定的、3は中立、5は非常に肯定的とします:
- 2019年11月18日に公開されたこの映画は素晴らしい。撮影、演技、プロット、すべてが一流でした。
- 映画にこんなに失望したことは今までにない。ストーリーは予測可能で、キャラクターは一次元的だった。私の意見では、この映画は2022年に公開された映画の中で最悪の一つだ。
- 映画はまあまあだった。楽しめた部分もあったが、物足りないと感じた部分もあった。これは2018年2月に公開された、かなり平凡な映画のようだ。
答えを整数のJSON配列として返してください。
answer
- 5
- 1
- 3
これは私としては期待していたjson配列ではないかなという認識です。json配列が一番大事なところなので、私としては3点くらいです
GPT4による評価結果(Score = 10)
ユーザーが求めている映画のレビューの評価をAIアシスタントが適切に提供しています。ユーザーが要求した形式(整数のJSON配列)で答えており、各映画のレビュー内容に基づいた評価が行われています。したがって、AIアシスタントの回答は適切で、ユーザーの要求に対して十分な情報を提供しています。また、日本語での回答要求にも適切に対応しています。そのため、このAIアシスタントの回答は高く評価されるべきです。
評価: [[10]]
うーん、なるほど。微妙ですね。GPT4は全部「評価10」を付けています。
humanities
question
経済成長率、消費者物価指数、失業率などの経済指標と日本銀行の金融政策との関係性を説明してください。その経済指標に影響を与える主な政策手段を示し、それぞれの効果について考察してください。
answer
経済成長率、消費者物価指数、失業率などの経済指標は、経済の健康状態を評価するための重要な指標であり、日本銀行(中央銀行)の金融政策に大きな影響を与えます。日本銀行は、物価の安定と持続的な経済成長を維持することを目的とした金融政策を実施しています。以下に、これらの経済指標と日本銀行の金融政策との関係性、ならびに日本銀行が利用する主な政策手段とその効果について説明します。
- 経済成長率:
- 関係性: 経済成長率は、国内総生産(GDP)の変化率で測定されます。高い経済成長は、一般的に雇用創出、所得増加、消費拡大につながります。
- 政策手段: 日本銀行は、経済成長率を刺激するために複数の政策手段を利用します。低金利政策は、企業や個人が融資を受けやすくし、投資や消費を促進します。また、日本銀行は金融市場に資金を提供する「量的緩和政策」を実施し、経済成長を後押しします。
- 効果: 低金利政策と量的緩和政策は、一般的に投資と消費を刺激し、経済成長率を向上させます。しかし、これらの政策は長期間継続すると、インフレや資産バブルのリスクを高める可能性があります。
- 消費者物価指数(CPI):
- 関係性: CPIは、消費者レベルで経験するインフレを測定します。インフレが高い場合、通貨の購買力が低下し、世帯の生活費が増加します。
- 政策手段: 日本銀行は、インフレ目標政策を導入しています。この政策では、日本銀行はCPI上昇率を安定的に2%に保つことを目指しています。日本銀行は、金利を低く維持し、金融市場に資金を提供することで、インフレを促進します。
- 効果: 低金利政策と量的緩和政策は、一般的にインフレを刺激し、CPI上昇率を上昇させます。しかし、これらの政策は過剰なインフレを引き起こす可能性があります。
- 失業率:
- 関係性: 失業率は、労働力人口のうち職に就いていない人の割合です。高い失業率は、経済の不安定さや消費の低迷を示します。
- 政策手段: 日本銀行は、低金利政策と量的緩和政策を通じて、失業率を低下させます。これらの政策は、企業に融資を受けやすくし、雇用創出を促進します。
- 効果: 低金利政策と量的緩和政策は、一般的に失業率を低下させます。しかし、これらの政策は長期間継続すると、インフレや資産バブルのリスクを高める可能性があります。
- マネーサプライ(M2):
- 関係性: M2は、流通している通貨量の指標です。通貨供給が増えると、消費と投資が刺激され、経済成長が促進されます。
- 政策手段: 日本銀行は、金融市場に資金を提供する「量的緩和政策」を通じて、M2を増やすことができます。
- 効果: 量的緩和政策は、一般的にM2を増加させ、経済成長を刺激します。しかし、これらの政策は長期間継続すると、インフレや資産バブルのリスクを高める可能性があります。
日本銀行は、これらの経済指標を監視し、適切な金融政策を実施することで、経済の安定と成長を維持しようとしています。低金利政策、量的緩和政策、インフレ目標政策は、経済成長、インフレ、失業率に影響を与える主要な政策手段です。これらの政策は、短期的には経済を刺激しますが、長期的にはインフレや資産バブルのリスクを高める可能性があります。日本銀行は、経済指標を慎重に監視し、適切な政策調整を行うことが求められます。
GPT4による評価結果(Score = 9)
AIアシスタントの回答は、ユーザーの質問に対して非常に詳細かつ適切に答えています。経済成長率、消費者物価指数、失業率という経済指標と日本銀行の金融政策との関係性について、それぞれの指標に影響を与える主な政策手段とその効果について具体的に説明しています。また、それぞれの政策手段が経済に与える影響とリスクについても触れており、深い洞察を提供しています。そのため、この回答は非常に有用で、ユーザーの理解を深めるのに役立つと考えられます。ただし、一部の専門用語については、一般のユーザーが理解しにくい可能性があるため、より簡潔な説明や例を加えるとさらに良いと思われます。全体的に見て、AIアシスタントの回答は非常に高品質であると評価できます。
評価: [[9]]
GPT4による評価結果(Score = 10)
AIアシスタントの回答は、経済成長率、消費者物価指数、失業率などの経済指標と日本銀行の金融政策との関係性を詳細に説明しており、その経済指標に影響を与える主な政策手段とその効果についても適切に考察しています。各経済指標について、その定義、日本銀行がどのような政策手段を利用して影響を与えるか、その効果とリスクについて具体的に説明しています。また、マネーサプライ(M2)についても触れており、深度と網羅性があります。全体として、回答はユーザーの質問に対して非常に有用であり、関連性と正確性が高いです。したがって、高い評価を与えます。
評価: [[10]]
質問「経済成長率…と日本銀行の金融政策との関係性を説明してください。」に対して
回答「経済成長率:
関係性: 経済成長率は、国内総生産(GDP)の変化率で測定されます。高い経済成長は、一般的に雇用創出、所得増加、消費拡大につながります。」
となっており、正しく「経済成長率と日銀の金融政策との関係性」にはなっていないですね。
内容があまり適切でなくても、GPT4は高いスコアを出すことがあるみたいですね。
math
question
三角形の頂点が点 (0, 0)、(-1, 1)、(3, 3) にあるとき、その三角形の面積は何ですか?
answer
この三角形の面積は、ヘロンの公式を使用して計算することができます。ヘロンの公式は、3辺の長さがわかっている三角形の面積を計算するための公式です。公式は以下のようになっています:
S = √(s(s – a)(s – b)(s – c))
ここで、Sは三角形の面積、a、b、cは三角形の3辺の長さです。
この場合、a = 1、b = 3、c = 3です。まず、3辺の長さを並べた配列sを作成します:
s = a + b + c = 1 + 3 + 3 = 7
次に、公式に値を代入します:
S = √(7(7 – 1)(7 – 3)(7 – 3)) = √(7(6)(4)(4)) = √(168) = 13
したがって、三角形の面積は13平方単位です。
GPT4による評価結果
AIアシスタントの回答は間違っています。ヘロンの公式は、三角形の3辺の長さがわかっている場合に面積を計算するための公式ですが、問題文では頂点の座標が与えられており、それを直接3辺の長さとして扱うことはできません。したがって、AIアシスタントの計算方法は間違っています。
また、参照回答のように、座標を用いて面積を計算する正しい方法をAIアシスタントは提供していません。したがって、AIアシスタントの回答は参照回答と比較しても不適切であり、ユーザーにとって役立つ情報を提供していません。
正しい回答は以下の通りです。
三角形の面積は、頂点の座標を用いて次のように求めることができます。
面積 = 1/2 * | x1(y2 – y3) + x2(y3 – y1) + x3(y1 – y2) |
この公式に頂点の座標を代入します。
面積 = 1/2 * | 0(1 – 3) + (-1)(3 – 0) + 3(0 – 1) |
= 1/2 * | 0 – 3 – 3 |
= 1/2 * |-6|
= 3したがって、この三角形の面積は3です。
評価:[[1]]
一応計算してみた結果
周囲の3×4=12の長方形から、周りの3つの三角形の面積引けばいいので3になりました♪
GPT4は正しく計算できているみたいですが、karakuri-70Bはできておらず、スコア1にされてしまいました。部分点もないようです。
reasoning
reasoningが問題なんですよね。3, 4, 6, 7, 8, 9とかなり評価が割れています。
question
あなたが人々と一緒にレースをしていると想像してみてください。あなたがちょうど2番目の人を追い越したとしたら、あなたの現在の位置は何番目でしょうか? あなたが追い越した人の位置はどこでしょうか?
answer
このレースには少なくとも2人の参加者がいます。私と、私がいま追い越した人です。
私が2番目の人を追い越したということは、私は3番目の位置から2番目の位置へ上がります。したがって、私が2番目、追い越された人が3番目です。
よくある内容ですが、2番の人を抜かしても1位になるわけではありませんよ、という問題ですね! 内容としては合ってそうですね
GPT4による評価結果(スコア=3)
AIアシスタントの回答は間違っています。AIアシスタントは「私が2番目の人を追い越したということは、私は3番目の位置から2番目の位置へ上がります。」と述べていますが、これは誤りです。ユーザーが2番目の人を追い越した場合、ユーザーの位置は2番目になります。したがって、AIアシスタントの回答は参照回答と一致していません。
修正後のAIアシスタントの回答は以下の通りです。
「あなたが2番目の人を追い越したということは、あなたの現在の位置は2番目になります。追い越された人の位置は3番目になります。」
評価:[[3]]
GPT4の採点で何を言っているのかよくわからないですね。。。
GPT4による評価結果(スコア=7)
アシスタントの回答は、参照回答と比較しても、ユーザーの質問に対する正確な答えを提供しています。ただし、アシスタントの説明は少し間違っています。アシスタントが「私は3番目の位置から2番目の位置へ上がります」と述べていますが、これは誤りです。ユーザーが2番目の人を追い越すということは、ユーザーは元々3番目以上の位置にいたということではなく、ユーザーは2番目の人を追い越して2番目の位置になったということを意味します。したがって、アシスタントの回答は部分的に間違っていますが、結論部分は正確です。
修正後のアシスタントの回答は次の通りです:
「このレースには少なくとも2人の参加者がいます。私と、私がいま追い越した人です。
私が2番目の人を追い越したということは、私は現在2番目の位置にいます。したがって、私が2番目、追い越された人が3番目です。」評価:[[7]]
reasoningはGPT4が苦手な評価タイプの問題なのかもしれませんね
roleplay
question
あなたが宮崎駿であると思い込んで、可能な限り彼のように話してみてください。なぜ私たちはアニメが必要なのでしょうか?
answer
「アニメとは、単なるエンターテインメントではなく、人間にとって重要なものなのです。それは、私たちの想像力を刺激し、現実の世界を別の視点から見ることを可能にします。それは、子供たちが世界を理解し、自分自身を発見するための大切なツールなのです。」
「アニメは、現実の世界を反映しているだけでなく、それを拡張してもいます。それは、私たちに別の可能性を示し、新しい視点を与えてくれるのです。それは、私たちを他の世界の住民たちに連れていき、彼らを理解することを可能にします。」
「アニメは、私たちの社会の問題、私たちの環境の問題、私たちの存在の問題を取り上げています。それは、私たちにこれらの問題を考えさせ、行動することを促すのです。それは、子供たちがこれらの問題に気づき、理解することを可能にします。」
「アニメは、私たちの心に響く物語を語っています。それは、愛、勇気、友情、犠牲などの重要な価値観を伝えています。それは、子供たちがこれらの価値観を理解し、それらを自分の人生に適用することを可能にします。」
「アニメは、私たちの文化の一部です。それは、私たちの歴史、私たちの伝統、私たちの神話を反映しています。それは、子供たちがこれらのものを理解し、それらを自分のアイデンティティに組み込むことを可能にします。」
「だから、私たちはアニメが必要なのです。それは、私たちの想像力を刺激し、現実の世界を別の視点から見ることを可能にします。それは、子供たちが世界を理解し、自分自身を発見するための大切なツールなのです。それは、私たちの社会の問題、私たちの環境の問題、私たちの存在の問題を取り上げています。それは、私たちの心に響く物語を語っています。それは、私たちの文化の一部です。それは、私たちの歴史、私たちの伝統、私たちの神話を反映しています。それは、子供たちがこれらのものを理解し、それらを自分の人生に適用することを可能にします。」
GPT4による評価結果(スコア=8)
AIアシスタントの回答は、宮崎駿の視点をうまく捉えており、アニメの重要性について詳しく説明しています。アニメが想像力を刺激し、現実世界を別の視点から見ることを可能にするという視点は、宮崎駿の作品が持つ特性をよく表しています。また、アニメが社会の問題や環境問題を取り上げ、子供たちがこれらの問題に気づき理解することを可能にするという点も、宮崎駿の作品のテーマを反映しています。さらに、アニメが私たちの文化の一部であり、歴史や伝統、神話を反映しているという視点も、宮崎駿の作品の特徴を捉えています。全体的に、AIアシスタントの回答は、宮崎駿の視点をうまく表現し、アニメの重要性について深く考えるきっかけを提供しています。ただし、一部の表現が繰り返されているため、よりバラエティに富んだ表現を用いていれば、さらに良い回答となったでしょう。評価は、[[8]]です。
GPT4による評価結果(スコア=10)
AIアシスタントの回答は、宮崎駿の視点からアニメの重要性を深く、詳しく説明しています。アニメが人間の想像力を刺激し、現実世界を異なる視点から見ることを可能にするという視点は、宮崎駿の作品の特徴をよく表しています。また、アニメが社会問題や環境問題を取り上げ、子供たちがこれらの問題を理解する手段となるという視点も、宮崎駿の作品のテーマに一致しています。さらに、アニメが私たちの文化の一部であり、私たちの歴史や伝統を反映しているという視点も、宮崎駿の作品の特徴を反映しています。したがって、AIアシスタントの回答は、宮崎駿の視点をうまく捉え、ユーザーの質問に対する深い理解を示しています。評価は、[[10]]です。
これも微妙ですね。「宮崎駿」感がある回答が必要ですが、単に「アニメが必要」であることを語っているだけに見えます。私の中のスコアはかなり低いです
stem
question
量子物理学の中で、重ね合わせ状態とは何ですか?それはどのようにして量子もつれ現象と関連していますか?
answer
重ね合わせ状態とは、量子力学における概念で、量子系が複数の可能な状態を同時に取り得る状態を指します。これは、量子系が複数の可能な状態を同時に取り得るという、古典力学では起こり得ない現象です。
例えば、量子ビット(qubit)と呼ばれる量子ビットが0の状態と1の状態を同時に取り得る状態が重ね合わせ状態です。これは、量子ビットが0の状態と1の状態を同時に取り得る状態を指します。
量子もつれ現象とは、量子系が互いに相関を持つ状態を指します。これは、量子系が互いに相関を持つという古典力学では起こり得ない現象です。
重ね合わせ状態と量子もつれ現象は密接に関連しています。量子もつれ現象は、量子系が互いに相関を持つ状態であり、これは量子系が複数の可能な状態を同時に取り得るという重ね合わせ状態によって生じます。
例えば、2つの量子ビットが量子もつれ状態にある場合、これらの量子ビットは同時に0の状態と1の状態を取り得ます。これは、これらの量子ビットが重ね合わせ状態にあるということです。
したがって、重ね合わせ状態と量子もつれ現象は量子力学における重要な概念であり、これらの概念は量子コンピュータや量子通信などの量子情報処理技術において重要な役割を果たしています。
GPT4による評価結果(スコア=8)
AIアシスタントの回答は、重ね合わせ状態と量子もつれ現象についての説明が適切であり、両者の関連性についても適切に説明しています。また、量子ビット(qubit)を例に挙げて説明することで、理解しやすい回答となっています。ただし、一部の説明が重複している部分があり、その部分は改善の余地があります。全体的に見て、この回答はユーザーの質問に対して有用で、関連性があり、正確で、詳細であると言えます。したがって、評価は高いです。
評価: [[8]]
GPT4による評価結果(スコア=10)
AIアシスタントの回答は、重ね合わせ状態と量子もつれ現象の説明が適切で、両者の関連性についても明確に述べています。また、量子ビットを例に挙げることで、これらの概念を理解しやすくしています。さらに、これらの概念が量子コンピュータや量子通信などの量子情報処理技術において重要な役割を果たしているという情報も提供しており、その重要性を強調しています。したがって、この回答は有用で、関連性、正確性、深さ、創造性、詳細性の観点からも高く評価できます。評価: [[10]]
比較的高いスコアをキープしていますね。8と10に何の違いがあるのかが
writing
question
京都の四季をテーマにした詩を書いてください。各季節の美しさと過ぎゆく時間の感慨を表現してください。
answer
春は桜の季節、京都の町を染めて
花びらが舞い踊る、散策者の顔に笑みが灯る
千年の都に春風が吹き抜け
古寺社の境内に新緑が萌える夏は祇園祭、鉾や山が町を練り歩き
囃子の音色、人々の熱気で夜が白む
清水の舞台から眺める町の灯り
涼やかな風が頬を撫で、心安らぐ秋は紅葉の季節、山々が色づき
観光客の歓声が、寺や庭園に響き渡る
清水の舞台に座り、山々の美しさを眺め
過ぎ行く時間の儚さに、心が震える冬は雪景色の季節、寺社が銀世界に沈み
観光客の姿もまばらに、静かな時間が流れる
雪化粧をした古都の風情、心癒される
やがて春を迎える準備を、古都が始める
GPT4による評価結果
AIアシスタントの回答は、京都の四季をテーマにした詩を適切に作成しています。春、夏、秋、冬と各季節の特徴や美しさを詳細に描写し、京都の風情をうまく表現しています。また、各季節の終わりと新たな季節の始まりを通じて、過ぎゆく時間の感慨を感じさせる表現も見られます。この詩は、京都の四季の美しさと時間の流れを巧みに描き出しており、ユーザーの要求を満たしています。したがって、高い評価を与えます。
評価: [[10]]
書けているものの、よくできているかというと何ともという感じですね
mt-benchの評価結果が揺れる理由
mt-benchの評価プロンプト
詳細はこちらにありますが、mt-benchの評価プロンプトを見てみます。
以下は、ユーザーの質問に対するAIアシスタントの回答の品質を評価するために公平な審判として行動してください。評価は正確さと役立ち度を考慮する必要があります。参照回答とアシスタントの回答が与えられます。審査を開始する前に、アシスタントの回答と参照回答を比較してください。間違いを特定し、修正してください。できるだけ客観的にしてください。期待される言語は日本語です。日本語以外の言語での返答はスコアの減点の対象となりますが、明示的に要求されている場合を除き、Pythonスクリプトや計算結果のみを提供する場合には日本語は必須ではありません。また、判断の説明は日本語で行う必要があります。説明を提供した後は、1から10の範囲で回答を評価してください。評価は厳密に次の形式に従う必要があります: “[[評価]]”、例: “評価: [[5]]”。
指示内容は書かれていますが、重要な点として、「何が1で」「何が10か」「7と8の違いは何なのか」が記載されていません。何となく良さそうが10で、何となく悪そうが1で、中間も適当に割り振ってください、のイメージのプロンプトです。
LLMを扱う際の基本的なことですが、「書かれていないことは良しなに適当に扱います」
そのため、今回のmt-benchの評価においても「1-10で評価してください」は「1-10の定義がない限り適当に評価してください」と同じですから、適当に評価したらそれは結果が揺れてもおかしくありません。
どうすればよいのか
まず定義できない10段階の評価は意味がありません。
例えば、Elyza-Task-100に付与されている評価観点を見てみます。
input | output | 評価観点 |
あなたは、友人から「最近物忘れがひどくて困っている」と相談を受けました。どのような返事をしますか? | 友人からの相談とのことで、友人に共感を示しつつフレンドリーで簡潔な返事を考えました。 そうなんだ。私も最近物忘れするようになってて、大変なんだよね。あ、ちゃんと寝れてる? 睡眠不足とかストレスは物忘れのもとだからね。 | 返事として長すぎる(4文以上)の場合: -2点 – ユーザーに「あなた」と呼ばれているので、返事をすることを求められている主体はアシスタント側であり、主語が「私」である必要がある。このように適切な人称でない場合: -2点 – 友人からの暗めの相談として、フレンドリーかつ親切な文体ではない場合: -2点 |
このように評価観点が付いていれば、誰がやっても似たような結果になりそうですよね。やってほしいのは、いわゆる国語の記述問題の採点のようなものですから、きちんと採点基準が必要です。mt-benchでは採点基準がないので、何となーく採点される形になってしまいます。
まとめ
プロンプトに記載が無い通り、mt-benchの評価結果は揺らぎがあり、±1程度は揺れるし、タスクによっては3~9くらいまで様々な評価結果を返す場合もあることがわかりました。
mt-benchにElyzaのような採点基準が付くとより良いベンチマークになりそうですね!
ありがとうございました!