質の高い情報の取得に役立つ Azure OpenAI LogProbs の 4 つの例を示す .NET コンソール アプリケーション。
git clone https://github.com/bartczernicki/AzureOpenAILogProbs.git
{
"AzureOpenAI" : {
"ModelDeploymentName" : "gpt-4-2024-04-09" , // Any Azure OpenAI GPT-4o-mini, GPT-4o or GPT3.5 model should perform well
"APIKey" : "YOURAZUREOPENAIKEY" ,
"Endpoint" : "https://YOURAZUREOPENAIENDPOINT.openai.azure.com/"
}
}
dotnet build
dotnet run
この設定では、ニューヨーク メッツ野球チームの歴史に関するウィキペディアの記事から選択された段落が LLM に提供されます。記事全文は、https://en.wikipedia.org/wiki/New_York_Mets でご覧いただけます。これは、各プロンプトで常に提供されるコンテキスト (基礎情報) です。
さらに、20 の質問と回答のペアが提供されます。リスト内の各項目には、メッツのウィキペディア記事に関する質問があり、提供されたウィキペディア記事に質問に答えるのに十分な情報がある場合、人による評価の正/偽と組み合わせられています。各質問は LLM に送信され、LLM は質問に答えるのに十分な情報があるかどうかを評価します。その答えは人間の評価(論理的真実)と比較されます。 20 の質問リストからの 2 つの例:
new Question { Number = 1 , EnoughInformationInProvidedContext = true , QuestionText = " When where the Mets founded? " } ,
new Question { Number = 2 , EnoughInformationInProvidedContext = true , QuestionText = " Are the Mets a baseball team or basketball team? " } ,
トークン ログの確率を検査する機能は、デフォルトではオフになっています。この機能を有効にするには、 IncludeLogProbabilitiesプロパティを true に設定する必要があります。これにより、追加のトークンが発生したり、API 呼び出しに余分な費用がかかることはありません。ただし、これにより、返される JSON オブジェクトのペイロードがわずかに増加します。たとえば、新しい OpenAI .NET ライブラリを使用すると、ChatCompletionOptions クラスのプロパティとして公開されます。
chatCompletionOptions . IncludeLogProbabilities = true ;
.NET ライブラリには、各 API 呼び出しで返されるログの確率の数を制御する機能が含まれています。これにより、それぞれの確率を持つトークンの配列/リストが提供されます。統計学では、これは確率の離散分布であるため、確率質量関数 (PMF) として知られています。注: Azure OpenAI では、現在の最大値は 5 で、OpenAI では (ほとんどの API の場合) は 10 です。たとえば、新しい OpenAI .NET ライブラリを使用すると、ChatCompletionOptions クラスのプロパティとして公開されます。
chatCompletionOptions . TopLogProbabilityCount = 5 ;
このソリューションには、(LLM) モデルから予想される各出力の温度を設定する機能も含まれています。デフォルトは 0.3f (浮動小数点数) ですが、創造性と変化をさらに高めるために 2f まで増やすことができます。
internal static class GenAI
{
// To simulate more variance in selecting lower probability tokens, increase the temperature to between 1.4 - 2.0.
public const float OPENAITEMPATURE = 0.3f ;
.. .
これが本質的にこのソリューションの中核となる設定です。コードの残りの部分は、サービスの入出力を接続し、計算が適切に実行され、コンソール アプリケーションで視覚化されるようにするための C# コードです。
LogProbs (対数確率) とは何ですか?現在のほとんどの LLM は、次のトークンを予測することでプロンプト命令を処理し、停止点 (つまり、最大トークン長、ユーザー命令を完了する) に達するまで各トークンを反復処理します。出力対象とみなされる各トークンは、選択対象となる「最も一致する」トークンの統計的確率分布を出力する内部 LLM パイプラインを通じて処理されます。構成 (温度、top_p など) に基づいてこれらのトークンの確率を計算でき、LLM はさまざまな構成に基づいて次の「最も一致する」トークンを選択します。これらの LLM は本質的に確率的なものであるため、(LLM) モデルに送信された同じプロンプト命令に対して異なるトークンが出力される場合があります。
以下は、Q&A シナリオの例と、 「アメリカ合衆国の初代大統領は誰ですか?」という質問に答えるために選択された 2 つのトークン (単語) に関連する確率の例です。 。以下の例では、モデルはそれぞれ 99.62% と 99.99% のトークン確率を使用して、2 つのトークン「ジョージ」「ワシントン」で応答しました。選択可能なトークンは他にもありましたが、LLM の固有の知識と推論能力 (大量のデータでトレーニングされたことによる) により、これら 2 つのトークン「ジョージ」と「ワシントン」の確率が確実に増加したことに注意してください。
LLM がどの程度厳格であるか、または創造的であるかを調整できる設定があります。たとえば、温度と呼ばれる (LLM) モデル設定について聞いたことがあるかもしれません。これは本質的に、より低い確率のトークンが選択される可能性を高めます。
さらに詳しい情報が必要ですか? Azure OpenAI LogProbs の背景に関する推奨書籍:
応答、結論、または品質の決定に到達するために、1 つまたは複数のモデルへの複数の呼び出しを使用する、実証済みのさまざまな新しい改善手法があります。現在、GenAI 実稼働システムで LLM が使用されるほとんどの方法は、追加のコンテキスト情報を提供することによるグラウンディング (RAG) を伴う方法です。 (LLM) モデルは、質問に答えたり、その情報について推論したりするように指示されます。ただし、基礎技術が不十分だと、結果の品質が低下する可能性があります。
Azure OpenAI LogProbs は、モデルの応答の信頼性 (確率) を測定するのに役立ち、利用できる高度な技術です。この驚異的な機能により、GenAI システムは自己修正を行うことができ、ユーザー/エージェントが質の高い応答に到達するように誘導することができます。
LogProbs の威力を、GenAI ワークフローの図で以下に示します。 2 つのパス (左と右) があることに注意してください。
出力例:
上の画像は、LLM からの True および False 出力と、その True または False 出力の確率を示していることに注意してください。 「True」または「False」は応答内の最初で唯一のトークンであるため、最初のトークン (LogProb) の確率を使用できます。このアプローチにはいくつかの問題があります。
Brier スコアは、モデルの機能、プロンプト、質問のコンテキストによって異なります。プロンプトとコンテキストを同じに保つことで、全体的なモデルの精度パフォーマンスを比較できます。 GPT-4o モデルと GPT-4o-mini モデルを比較した以下の Brier スコアに注目してください。 GPT-4o-mini モデルのブライアー スコアは低く、正解の応答の確率の予測がより正確であることを意味します。実際、GPT-4o-mini は 20 問中 18 問で最終的な回答に正しく到達しましたが、GPT-4o モデルは (質問に答えるための十分な情報がコンテキスト内にある場合に) 人間の予想される回答と一致しましたが、20 問中 17 問でした。質問。 GPT-4o-mini の平均 Brier スコアは 0.083 (0.1 未満) であり、優れた予測性能を示しています。したがって、GPT-4o-mini モデルの Brier スコアはより低く (より優れています)。これは、提供されたプロンプトの質問に答えるのに十分な情報を持っている確率を定量化する際に、より正確であることを経験的に示しています。
出力例:
複数の Log Probabilities を返すには、LogProbabilitiesPerToken を 5 (この記事の執筆時点での Azure OpenAI の最大値) に設定します。
chatCompletionOptions.Temperature = 0.3f; // Higher Temperature setting will use tokens with much lower probability
chatCompletionOptions.IncludeLogProbabilities = true;
// For the Confidence Score, we want to investigate 5 of the top log probabilities (PMF)
chatCompletionOptions.TopLogProbabilityCount = 5;
出力例:
以下は、5 つの LogProbs トークンがそれぞれの確率で返された場合のトークン確率分布の例です。以下のヒストグラムでは、「信頼スコア: 1」の確率は 42.3% です。これは、モデルが質問に対する回答の信頼スコア = 1 が非常に低く、確率が 42.3% であると考えていることを意味します。モデルが返した最も高い信頼スコアを選択しただけの場合、他のトークン (トークン番号 2 ~ 5) に関する他の多くの情報が欠落している可能性があります。このシナリオでは、他のトークンの確率を使用して「加重」信頼スコアを計算できるという情報がさらに約 57% あります。これにより、信頼スコアは 1 -> 2.3 に調整されます。
出力例:
このリポジトリでは、モデルの信頼スコアの調整やモデルの確率 LogProbs の調整については触れていません。 LLM は本質的にニューラル ネットワークであるため、特定のタスクやドメインに対して調整されていない可能性があります。基本的に、LLM が 8/10 の信頼性があると判断した場合、または 80% の確率を決定した場合、モデルは約 80% の確率で (エラー率の範囲内で) 正しいはずです。
統計シミュレーション 10,000,000 のシミュレーションと 100 の質問の予想範囲を表示 80% キャリブレーション:
これらのキャリブレーション手法は、現実世界のシナリオに適用されます。人間のスーパー予測者が出来事の確率に賭ける Mainifold Markets (https://manifold.markets/) を考えてみましょう。これら人間のスーパー予報士たちの集合知は、現実世界の出来事を予測する上で高度に調整されています。
数千の予測が含まれるマニホールド市場からの実際の予測環境でのキャリブレーションの例:
キャリブレーションのトピックは新しいものではなく、意思決定理論と機械学習で研究されています。意思決定インテリジェンス (認知科学) と機械学習テクニックの両方を適用して、モデルのパフォーマンスをさらに調整できます。