「LLM評価のガイド:設定と重要な指標」
『LLM評価のガイド:指標と重要な設定』
LLM評価の構築と実行方法、そしてLLMプロンプトテンプレートのベンチマーキングに適合性と再現性を使用すべき理由
この記事は、Ilya Reznikとの共著です
大規模言語モデル(LLM)は、開発者やビジネスリーダーにとって、消費者への新たな価値を創造するための驚異的なツールです。彼らは個人向けの推薦を行ったり、非構造化データと構造化データの間を翻訳したり、大量の情報を要約したり、さまざまなことができます。
応用が増えるにつれ、LLMベースのアプリケーションのパフォーマンスの測定の重要性も増します。これはいくつかの理由で非常に困難な問題です。ユーザーフィードバックや他の「真実の情報源」は非常に限られていて、しばしば存在しないことがあります。可能な場合でも、人手によるラベリングは非常に高価であり、これらのアプリケーションを複雑にすることが容易です。
この複雑さは、コードの抽象化レイヤーによって頻繁に隠され、問題が発生したときにのみ明らかになります。1行のコードで連鎖的に呼び出し(スパン)が開始されることがあります。したがって、各スパンには異なる評価が必要です。以下のシンプルなコードスニペットは、複数のサブLLM呼び出しをトリガーします。
幸いなことに、LLMの力を利用して評価を自動化することができます。この記事では、この設定方法と信頼性の確保方法について詳しく説明します。
LLM評価の核心は、AIがAIを評価することです。
これは循環的に聞こえるかもしれませんが、常に人間の知能は人間の知能を評価してきました(例えば、就職面接や大学の期末試験)。今やAIシステムは他のAIシステムを評価することができます。
ここでのプロセスは、LLMが別のシステムを評価するために使用できる合成した真実のグランドトゥルースを生成することです。では、なぜ直接人間のフィードバックを使用しないのでしょうか?単純に言うと、それが必要十分な量得ることはできないからです。
あなたの入力/出力のペアのたった1%でも人間のフィードバックを得ることは巨大な偉業です。ほとんどのチームはそれすら得られません。しかし、このプロセスが本当に有用であるためには、既に多くのサブLLM呼び出しが存在することを考慮して、各LLMサブコールに対する評価を行うことが重要です。
それでは、これを試してみましょう。
LLMモデルの評価とLLMシステムの評価
LLM_model_evals != LLM_System_evals
LLMモデルの評価
LLMの評価については聞いたことがあるかもしれません。この用語は非常に似ているものの、実際には非常に異なる方法で使用されます。よく使用される方法の1つは、LLMモデルの評価というものです。LLMモデルの評価は、基盤となるモデルの全体的なパフォーマンスに焦点を当てています。最初の顧客向けLLMを開始する企業は、さまざまなタスクにおける効果的性を数量化する方法が必要でした。
LLMモデル評価には、OpenAI Evalライブラリが人気です。これはもともとモデル評価のユースケースに焦点を当てたものです。HellaSwag(LLMが文章を適切に完成させるか評価する)、TruthfulQA(モデルの応答の真実性を測定する)、MMLU(LLMのマルチタスク能力を評価する)など、さまざまなメトリックがあります。さらに、オープンソースのLLM同士の評価を行うリーダーボードもあります。
LLMシステム評価
ここまで、LLMモデル評価について説明してきましたが、対照的に、LLMシステム評価はシステム内で制御可能なコンポーネントの総合評価です。これらのコンポーネントの中でも最も重要なのはプロンプト(またはプロンプトテンプレート)とコンテキストです。LLMシステム評価では、入力が出力を決定する能力を評価します。
例えば、LLMを一定に保ったまま、プロンプトテンプレートを変更して評価することがあります。プロンプトはシステム内でより動的な部分なので、この評価はプロジェクトのライフサイクル全体にわたって重要です。例えば、LLMはチャットボットの応答の有用性や礼儀正しさを評価することができ、同じ評価結果から本番環境でのパフォーマンスの変化についての情報も得ることができます。
どちらを使用するかは、役割によります
LLM評価を利用するのは異なる人々がいます。一つは、モデルの開発者やコアLLMの微調整を担当するエンジニアであり、もう一つはユーザー向けシステムを構築する実践者です。
LLMモデルの開発者は非常に少数で、OpenAIやAnthropic、Google、Metaなどの場所で働いています。彼らは広範なユースケースに対応するモデルを提供することが仕事なので、モデル開発者はLLMモデル評価に関心を持ちます。
ML実践者にとっても、タスクの開始はモデルの評価から始まります。LLMシステムを開発する最初のステップの一つは、モデルの選択(GPT 3.5 vs 4 vs Palmなど)です。ただし、このグループのLLMモデル評価は一度限りのステップです。どのモデルが特定のユースケースで最も優れているかという問題が解決されれば、アプリケーションの残りのほとんどはLLMシステム評価によって定義されるでしょう。したがって、ML実践者はLLMモデル評価とLLMシステム評価の両方に関心を持ちますが、後者にはより多くの時間を費やします。
LLMシステム評価メトリクスはユースケースによって異なります
他のMLシステムと一緒に働いた経験がある場合、最初の質問はおそらく「成果メトリックは何にすべきか?」となるでしょう。その答えは評価したい内容によります。
- 構造化情報の抽出: LLMが情報をどれだけ正確に抽出できるかを評価することができます。例えば、完全性(入力に情報が含まれていて出力に含まれていない情報はあるか)を評価することができます。
- 質問応答: システムがユーザーの質問にどれだけ正確に回答できるかを評価することができます。回答の正確さ、礼儀正しさ、簡潔さなどを評価することができます。
- 情報検索を活用した生成(RAG): 検索されたドキュメントと最終的な回答が関連しているかどうかを評価します。
システムデザイナーとして、システムのパフォーマンスには最終的にあなたが責任を持っており、評価する必要があるシステムの側面を理解することが求められます。例えば、あなたが子供と対話するLLMを持つチューターアプリの場合、応答が適切な年齢に適していて有害なものではないことを確認する必要があります。
今日よく使われている一部の評価方法は、関連性、幻覚、質疑応答の正確さ、毒性です。これらの評価は、評価対象によって異なるテンプレートを持つことになります。以下は関連性の例です。
この例では、簡便のためにオープンソースのPhoenixツールを使用します(フルディスクロージャー:私はPhoenixの開発チームの一員です)。Phoenixツール内には、ほとんどの一般的な使用ケースに対してデフォルトのテンプレートが存在します。以下はこの例で使用するテンプレートです。
あなたはリファレンステキストと質問を比較し、リファレンステキストには質問に回答するのに関連した情報が含まれているかどうかを判断しようとしています。以下がデータです: [BEGIN DATA] ************ [Question]: {query} ************ [Reference text]: {reference} [END DATA]上記のQuestionとReference textを比較してください。Reference textにはQuestionに答える情報が含まれているかどうかを判断する必要があります。非常に具体的な質問がReference textの情報で答えられるかどうかに焦点を当ててください。回答は「関連する」または「関連しない」という単語で行い、その言葉以外のテキストや文字は含めないでください。「関連しない」は、リファレンステキストに質問の答えが含まれていないことを意味します。「関連する」は、リファレンステキストに質問の答えが含まれていることを意味します。
また、OpenAIのGPT-4モデルとscikitlearnの精度/再現率指標も使用します。
まず、必要な依存関係をすべてインポートしましょう。
from phoenix.experimental.evals import ( RAG_RELEVANCY_PROMPT_TEMPLATE_STR, RAG_RELEVANCY_PROMPT_RAILS_MAP, OpenAIModel, download_benchmark_dataset, llm_eval_binary,)from sklearn.metrics import precision_recall_fscore_support
次に、データセットを読み込みます。
# Phoenixに組み込まれた「golden dataset」をダウンロードしますbenchmark_dataset = download_benchmark_dataset( task="binary-relevance-classification", dataset_name="wiki_qa-train")# 速度のために、再現可能な方法で100の例をサンプリングしますbenchmark_dataset = benchmark_dataset.sample(100, random_state=2023)benchmark_dataset = benchmark_dataset.rename( columns={ "query_text": "query", "document_text": "reference", },)# データセットと評価生成されるもののラベルを一致させますy_true = benchmark_dataset["relevant"].map({True: "relevant", False: "irrelevant"})
それでは、評価を行いましょう。
# 一般的な目的のLLMであればここで動作するはずですが、temperatureを0にするのがベストプラクティスですmodel = OpenAIModel( model_name="gpt-4", temperature=0.0,)# Railsが出力クラスを定義しますrails = list(RAG_RELEVANCY_PROMPT_RAILS_MAP.values())benchmark_dataset["eval_relevance"] = \ llm_eval_binary(benchmark_dataset, model, RAG_RELEVANCY_PROMPT_TEMPLATE_STR, rails)y_pred = benchmark_dataset["eval_relevance"]# 評価指標を計算precision, recall, f1, support = precision_recall_fscore_support(y_true, y_pred)
LLMでベースとなるシステムをLLMで評価する
LLMでベースとなるシステムをLLMで評価するプロセスは、2つの異なるステップがあります。まず、LLMの評価指標のベンチマークを設定します。これには、あなたが「golden dataset」を人間がラベル付けしたのと同様に効果的にデータをラベル付けする専用のLLMベースの評価を組み立てます。その評価指標をベンチマークとして使用します。次に、このLLM評価指標をLLMアプリケーションの結果に対して実行します(以下で詳しく説明します)。
LLM評価を構築する方法
前述のように、評価のためのベンチマークを作成する最初のステップは、適切な目的に合った評価基準を選ぶことです。
その後、golden dataset(実際のデータに近いデータ)を必要とします。Golden datasetはLLM評価のテンプレートの性能を測定するために「正解のラベル」を持つべきです。このようなラベルは通常、人間のフィードバックから得られます。このようなデータセットの構築は手間がかかりますが、最も一般的な使用ケースでは標準化されたデータセットを見つけることができることがあります(上記のコードで行ったように)。
次に、評価に使用するLLMを選択する必要があります。これは、アプリケーションに使用しているLLMとは異なるLLMになる可能性があります。例えば、アプリケーションにはLlamaを使用し、評価にはGPT-4を使用することがあります。この選択は、コストと精度の問題に影響を受けることが多いです。
さて、ベンチマークと改善を試みている評価テンプレートが重要なコンポーネントとなります。OpenAIやPhoenixなどの既存のライブラリを使用している場合は、既存のテンプレートを使用してパフォーマンスを確認することが重要です。
特定のニュアンスを取り入れたい場合は、テンプレートを調整するか、新しく作成してください。
テンプレートは前のセクションで使用したように明確な構造を持っている必要があることを忘れないでください。以下の点について明確にしてください:
- 入力は何ですか? この例では、検索結果やユーザーからのクエリなどの文書/コンテキストです。
- 何を尋ねていますか? この例では、LLMに対して、文書がクエリに関連しているかどうかを教えてもらうように求めています。
- 出力の形式は何ですか? この例では、関連/関連しないのバイナリ形式ですが、マルチクラス(例:完全に関連している、一部関連している、関連していない)にすることもできます。
次に、ゴールデンデータセット上で評価を実行する必要があります。その後、ベンチマークを決定するために指標(全体の精度、適合率、再現率、F1など)を生成できます。全体の精度だけでなく、他の点も詳しく説明します。
LLMの評価テンプレートのパフォーマンスに満足していない場合は、パフォーマンスを向上させるためにプロンプトを変更する必要があります。これはハードな指標によって裏付けられた反復的なプロセスです。常にゴールデンデータセットへの過学習を避けることが重要です。代表的なホールドアウトセットを持っているか、k分割交差検証を実行してください。
最後に、ベンチマークに到達します。ゴールデンデータセット上の最適化されたパフォーマンスは、LLM評価に対する信頼度を示します。これはグラウンドトゥルースほど正確ではありませんが、十分に正確であり、全ての例において人間のラベラーを利用するよりもはるかにコストがかかりません。
プロンプトテンプレートを準備してカスタマイズすることで、テストケースを設定できます。
LLM評価テンプレートのベンチマークに適合率と再現率を使用するべき理由
業界では、LLMの評価に関するベストプラクティスが完全に標準化されていません。チームは一般的に適切なベンチマーク指標を確立する方法を知りません。
全体の精度はよく使用されますが、それだけでは不十分です。
これは、データサイエンスにおける最も一般的な問題の一つです:極端なクラスの不均衡は、精度が実用的な指標ではなくなるためです。
関連性の指標として考えると理解しやすいです。最も関連性の高いチャットボットを作成するために多くの手間と費用をかけるとしましょう。使用ケースに適したLLMとテンプレートを選択します。これは、例えば99.99%のクエリが関連する結果を返すということを意味します。素晴らしいですね!
しかし、LLM評価テンプレートの観点から見てみましょう。データを見ずにすべての場合で出力が「関連する」となった場合、その出力は99.99%の正確さを持つでしょう。しかし、同時に、モデルが関連しない結果を返す(おそらく最も重要な)ケース、つまり捕捉しなければならないケースでは、そのモデルはすべてのケースを見落とします。
この例では、精度は高いですが、適合率と再現率(またはF1スコアなどの両方の組み合わせ)は非常に低くなります。精度と再現率は、モデルのパフォーマンスをより良く測るための指標です。
もう1つの有用な可視化ツールは混同行列です。混同行列を使用すると、関連と無関連の例の正しく予測された割合を見ることができます。
アプリケーションでLLM評価を実行する方法
この時点で、モデルとテスト済みのLLM評価があるはずです。評価が機能することを確認し、グラウンドトゥルースとのパフォーマンスを定量化することができました。信頼性を高める時間です!
今度は、実際にアプリケーションで評価を使用できます。これにより、LLMアプリケーションのパフォーマンスを測定し、改善方法を見つけることができます。
LLMシステム評価は、追加のステップを含めてシステム全体を実行します。たとえば:
- 入力ドキュメントを取得し、プロンプトテンプレートにサンプルユーザーの入力と組み合わせて追加します。
- そのプロンプトをLLMに提供し、回答を受け取ります。
- プロンプトと回答を評価に提供し、回答がプロンプトに関連しているかどうかを尋ねます。
LLM評価は、ワンオフのコードではなく、組み込みのプロンプトテンプレートを持つライブラリを使用することがベストプラクティスです。これにより再現性が高まり、異なる要素を交換できるより柔軟な評価が可能になります。
これらの評価は、3つの異なる環境で動作する必要があります:
プレプロダクション
ベンチマーキングを行っているとき。
プレプロダクション
アプリケーションをテストしているとき。これは、従来の機械学習のオフライン評価コンセプトにやや類似しています。システムを顧客に提供する前に、そのパフォーマンスを理解することを目的としています。
プロダクション
デプロイされたとき。現実は複雑です。データが変化し、ユーザーが変化し、モデルが変化しますが、いずれも予測できません。システムが一度うまく機能したとしても、火曜日の午後7時に同じように機能するわけではありません。評価は、デプロイ後もシステムのパフォーマンスを継続的に理解するのに役立ちます。
考慮すべき質問
サンプリングする行数はどれくらいですか?
LLM評価-LLMパラダイムは魔法ではありません。すべての例を評価することはできません-非常に高価になります。ただし、人間のラベリング中にデータをサンプリングする必要があり、自動化されたサンプリングはこれを容易かつ安価にします。したがって、人間のラベリングよりも多くの行をサンプリングできます。
どの評価指標を使用すべきですか?
それは主に使用目的によります。検索や取り出しの場合、関連性のある評価指標が最適です。毒性や幻覚は特定の評価パターンを持っています(詳細は上記参照)。
これらの評価指標のいくつかはトラブルシューティングフローで重要です。質問応答の精度は一般的に優れたメトリックですが、なぜシステムでこのメトリックが性能を発揮していないのか調査すると、例えば検索の不具合が原因であることがわかるかもしれません。原因はさまざまであり、それを解明するには複数のメトリックが必要になる場合があります。
どのモデルを使用すべきですか?
すべてのケースに最適なモデルを1つだけ示すことは不可能です。代わりに、モデルの評価を実行して、アプリケーションに適したモデルを理解する必要があります。また、リコールと精度のトレードオフを考慮する必要があります。つまり、特定のケースにおいてこれを理解するためにデータサイエンスを行う必要があります。
結論
アプリケーションのパフォーマンスを評価できることは、プロダクションコードにおいて非常に重要です。LLMの時代では、問題はより難しくなりましたが、幸いなことにLLMの技術自体を評価実行するのに使用することができます。このような評価は、LLMモデルだけでなく、ユーザーエクスペリエンスにおいてプロンプトテンプレートがどれだけ重要であるかも考慮すべきです。ベストプラクティス、標準化されたツール、キュレーションされたデータセットは、LLMシステムの開発作業を簡素化します。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles