Azure AI Studio でバリアントを使用してプロンプトをチューニングする

重要

この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

この記事では、バリアントを使用してプロンプトをチューニングし、さまざまなバリアントのパフォーマンスを評価する方法について説明します。

優れたプロンプトを作成することは、多くの創造性、明確さ、関連性を必要とする困難なタスクです。 適切なプロンプトの場合、事前トレーニング済み言語モデルから目的の出力を引き出すことができますが、不適切なプロンプトの場合は、不正確、無関係、または無意味な出力につながる可能性があります。 そのため、さまざまなタスクやドメインに合わせてプロンプトのパフォーマンスと堅牢性を最適化するようにプロンプトをチューニングする必要があります。

バリアントは、さまざまな文言、書式設定、コンテキスト、温度、または top-k など、さまざまな条件下でモデルの動作をテストするのに役立ちます。 モデルの正確性、多様性、または一貫性を最大化する最適なプロンプトと構成を比較して見つけることができます。

プロンプト フローのバリアント

プロンプト フローでは、バリアントを使用してプロンプトをチューニングできます。 バリアントとは、個別の設定を持つツール ノードの特定のバージョンを指します。 現在、バリアントは LLM ツールでのみサポートされています。 たとえば、LLM ツールの新しいバリアントは、異なるプロンプト コンテンツまたは異なる接続設定を表す可能性があります。

たとえば、ニュース記事の概要を生成するとします。 次のように、さまざまなバリアントのプロンプトと設定を設定できます。

バリアント Prompt 接続の設定
バリアント 0 Summary: {{input sentences}} 温度 = 1
バリアント 1 Summary: {{input sentences}} 温度 = 0.7
バリアント 2 What is the main point of this article? {{input sentences}} 温度 = 1
バリアント 3 What is the main point of this article? {{input sentences}} 温度 = 0.7

さまざまなバリアントのプロンプトと設定を利用することで、さまざまな入力と出力に対してモデルがどのように応答するかを調べ、要件に最適な組み合わせを見つけることができます。

バリアントを使用するベネフィットには次があります。

  • LLM 生成の質を高める: 同じ LLM ノードの複数のバリアントをさまざまなプロンプトと構成で作成することで、ニーズに合った高品質のコンテンツを生成する最適な組み合わせを特定できます。
  • 時間と労力を節約する: プロンプトにわずかな変更を加えただけでも、異なる結果が生成される可能性があります。 各プロンプト バージョンのパフォーマンスを追跡して比較することが重要です。 バリアントを使うと、LLM ノードの過去のバージョンを簡単に管理し、以前のイテレーションを忘れるリスクなしで、任意のバリアントに基づいて簡単に更新できるようになります。 バリアントにより、プロンプトのチューニング履歴を管理する時間と労力を節約できます。
  • 生産性を高める: バリアントを使うと、LLM ノードの最適化プロセスを合理化できるので、複数のバリアントの作成と管理が簡単になります。 より短い時間で結果を改善できるので、全体的な生産性が向上します。
  • 簡単な比較を容易にする: さまざまなバリアントから得られた結果を並べて簡単に比較できるので、最良の結果を生成するバリアントに関してデータに基づいた決定を下すことができます。

バリアントを使ってプロンプトをチューニングする方法

この記事では、例として Web 分類サンプル フローを使います。

  1. サンプル フローを開き、最初に prepare_examples ノードを削除します。
    1. [ツール] で、[プロンプト フロー] を選択します。
    2. [作成] を選択して、フロー作成ウィザードを開きます。
    3. フロー ギャラリーの [ギャラリーの探索] の下で、"Web 分類" ボックスの[複製] を選択します。
    4. フローのタブで、prepare_examples ノードを削除します。
  2. 次のプロンプトを classify_with_llm ノードのベースライン プロンプトとして使います。
Your task is to classify a given url into one of the following types:
Movie, App, Academic, Channel, Profile, PDF or None based on the text content information.
The classification will be based on the url, the webpage text content summary, or both.

For a given URL : {{url}}, and text content: {{text_content}}.
Classify above url to complete the category and indicate evidence.

The output shoule be in this format: {"category": "App", "evidence": "Both"} 
OUTPUT:

このフローを最適化するには複数の方法がありますが、次に 2 つの方向を示します。

  • classify_with_llm ノードの場合: コミュニティや論文から、温度が低いほど精度は高くなりますが、創造性と驚きは少なくなることがわかりました。そのため、温度が低い方が分類タスクには適しています。また、少数ショットのプロンプトで LLM のパフォーマンスを高めることができます。 それでは、温度を 1 から 0 に変更したときや、少数ショットの例を使ったプロンプトの場合に、フローがどのように動作するかをテストしてみましょう。

  • summarize_text_content ノードの場合: また、概要を 100 語から 300 語に変更したときのフローの動作をテストし、テキスト コンテンツを増やしてパフォーマンスが向上するかどうかを確認してみましょう。

バリアントを作成する

  1. LLM ノードの右上にある [Show variants] (バリアントの表示) ボタンを選びます。 既存の LLM ノードは variant_0 であり、既定のバリアントです。
  2. variant_0 の [複製] ボタンを選んで variant_1 を生成すると、パラメーターを別の値に構成することや、variant_1 のプロンプトを更新することができます。
  3. さらにバリアントを作成するには、この手順を繰り返します。
  4. バリアントの追加を停止するには、[Hide variants] (バリアントを非表示にする) を選びます。 すべてのバリアントが折りたたまれます。 ノードの既定のバリアントが表示されます。

variant_0 に基づく classify_with_llm ノードの場合:

  • 温度を 1 から 0 に変更した variant_1 を作成します。
  • 温度が 0 である variant_2 を作成します。少数ショットの例を含む次のプロンプトを使用できます。
Your task is to classify a given url into one of the following types:
Movie, App, Academic, Channel, Profile, PDF or None based on the text content information.
The classification will be based on the url, the webpage text content summary, or both.

Here are a few examples:

URL: https://play.google.com/store/apps/details?id=com.spotify.music 
Text content: Spotify is a free music and podcast streaming app with millions of songs, albums, and original podcasts. It also offers audiobooks, so users can enjoy thousands of stories. It has a variety of features such as creating and sharing music playlists, discovering new music, and listening to popular and exclusive podcasts. It also has a Premium subscription option which allows users to download and listen offline, and access ad-free music. It is available on all devices and has a variety of genres and artists to choose from. 
OUTPUT: {"category": "App", "evidence": "Both"} 
		
URL: https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw 
Text content: NFL Sunday Ticket is a service offered by Google LLC that allows users to watch NFL games on YouTube. It is available in 2023 and is subject to the terms and privacy policy of Google LLC. It is also subject to YouTube's terms of use and any applicable laws. 
OUTPUT: {"category": "Channel", "evidence": "URL"} 
		
URL: https://arxiv.org/abs/2303.04671 
Text content: Visual ChatGPT is a system that enables users to interact with ChatGPT by sending and receiving not only languages but also images, providing complex visual questions or visual editing instructions, and providing feedback and asking for corrected results. It incorporates different Visual Foundation Models and is publicly available. Experiments show that Visual ChatGPT opens the door to investigating the visual roles of ChatGPT with the help of Visual Foundation Models. 
OUTPUT: {"category": "Academic", "evidence": "Text content"} 
		
URL: https://ab.politiaromana.ro/ 
Text content: There is no content available for this text. 
OUTPUT: {"category": "None", "evidence": "None"}
		
For a given URL : {{url}}, and text content: {{text_content}}.
Classify above url to complete the category and indicate evidence.
OUTPUT:    

variant_0 に基づく summarize_text_content ノードの場合、プロンプトの 100 words300 語に変更した variant_1 を作成できます。

これでフローは次のようになります。summarize_text_content ノードのバリアントは 2 つ、classify_with_llm ノードのバリアントは 3 つです。

一行のデータですべてのバリアントを実行して出力を確認する

すべてのバリアントが正常に実行され、期待どおりに機能することを確認するには、1 行のデータでフローを実行してテストできます。

注意

実行するバリアントを使う LLM ノードは、毎回 1 つだけ選択できます。他の LLM ノードには既定のバリアントが使われます。

この例では、summarize_text_content ノードと classify_with_llm ノードの両方にバリアントを構成しているので、すべてのバリアントをテストするには 2 回実行する必要があります。

  1. 右上にある [実行] ボタンを選びます。
  2. バリアントを使う LLM ノードを選びます。 他の LLM ノードでは、既定のバリアントが使用されます。
  3. フロー実行を送信します。
  4. フロー実行が完了すると、各バリアントに対応する結果を確認できます。
  5. バリアントを使う他の LLM ノードで別のフロー実行を送信し、出力を確認します。
  6. 別の入力データを変更して (たとえば、Wikipedia ページの URL を使う) 上の手順を繰り返し、さまざまなデータのバリアントをテストできます。

バリアントを評価する

いくつかの単一のデータでバリアントを実行し、その結果を肉眼で確認すると、実際のデータの複雑さと多様性を反映できず、一方で出力は測定できないため、さまざまなバリアントの有効性を比較してから最適なものを選ぶのは困難です。

バッチ実行を送信すると、大量のデータを使ってバリアントをテストし、メトリックを使って評価できるため、最適なものを見つけることができます。

  1. まず、プロンプト フローで解決する実際の問題を十分に表しているデータセットを準備する必要があります。 この例では、URL の一覧とその分類の実測値です。 正確性を使用してバリアントのパフォーマンスを評価します。

  2. ページ右上にある [評価] を選択します。

  3. [Batch run & Evaluate] (バッチ実行と評価) ウィザードが表示されます。 最初の手順は、すべてのバリアントを実行するノードを選ぶことです。

    フロー内のノードごとに異なるバリアントがどのように機能するかをテストするには、各ノードに対してバリアントを 1 つずつ使用してバッチ実行を実行する必要があります。 こうすることで、他のノードのバリアントの影響を回避し、このノードのバリアントの結果に集中することができます。 これは対照実験の規則に従ったもので、一度に 1 つのことのみを変更し、他はすべて同じに保ちます。

    たとえば、classify_with_llm ノードを選択してすべてのバリアントを実行でき、summarize_text_content ノードでは、このバッチ実行に既定のバリアントが使用されます。

  4. 次に、[バッチ実行の設定] でバッチ実行名の設定、ランタイムの選択、準備したデータのアップロードを行います。

  5. 次に [Evaluation settings] (評価の設定) で評価方法を選びます。

    このフローは分類のためなので、[Classification Accuracy Evaluation] (分類の正確性評価) 方法を選んで正確性を評価します。

    正確性を計算するには、フローによって割り当てられた予測ラベル (予測値) と実際のデータのラベル (実測値) を比較し、その中で一致する数をカウントします。

    [Evaluation input mapping] (評価入力マッピング) セクションで、入力データセットのカテゴリ列から実測値を、フローの出力の 1 つであるカテゴリから取得した予測値を指定する必要があります。

  6. すべての設定を確認したら、バッチ実行を送信できます。

  7. 実行を送信したら、リンクを選び、実行の詳細ページに移動します。

Note

実行が完了するまでに数分かかる場合があります。

出力の視覚化

  1. バッチの実行と評価の実行が完了したら、実行の詳細ページで、バリアントごとにバッチ実行を複数選択し、[出力の視覚化] を選択します。 classify_with_llm ノードの 3 つのバリアントのメトリックと、データの各レコードの LLM 予測出力が表示されます。
  2. どのバリアントが最適かを特定したら、フローの作成ページに戻ってそのバリアントをノードの既定のバリアントに設定できます。
  3. この手順を繰り返して summarize_text_content ノードのバリアントも評価できます。

これで、バリアントを使ったプロンプトのチューニングは完了です。 この手法を自分のプロンプト フローに適用すると、LLM ノードに最適なバリアントを見つけることができます。

次のステップ