次の方法で共有


バリアントを使用してプロンプトを調整する

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

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

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

前提条件

この記事を読む前に、以下の内容を一読することをお勧めします。

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

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

  1. サンプル フローを開き、最初に prepare_examples ノードを削除します。

    Screenshot of Web Classification example flow to demonstrate variants.

  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 つです。

Screenshot of flow authoring page when you have variants in flow.

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

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

注意

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

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

  1. 右上にある [実行] ボタンを選びます。
  2. バリアントを使う LLM ノードを選びます。 他の LLM ノードには既定のバリアントが使われます。 Screenshot of submitting a flow run when you have variants in flow.
  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. 実行を送信したら、リンクを選び、実行の詳細ページに移動します。

注意

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

出力の視覚化

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

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

次のステップ