テキストを生成または操作する方法について学習する

Azure OpenAI Service には、さまざまなタスクに使用できる入力候補エンドポイントが用意されています。 このエンドポイントは、シンプルでありながら強力なテキストイン、テキストアウト インターフェイスをすべての Azure OpenAI モデルに提供します。 入力候補をトリガーするには、プロンプトとしてテキストを入力します。 モデルは入力候補を生成し、コンテキストやパターンとの一致を試みます。 「デカルトが言ったように、我思う故に」というプロンプトを API に提供したとします。 このプロンプトに基づいて、Azure OpenAI は高い確率で入力候補エンドポイント「我あり」を返します。

入力候補を試してみる最も良い方法は、Azure OpenAI Studio のプレイグラウンドを使用することです。 これは、入力候補を生成するためのプロンプトを入力する単純なテキスト ボックスです。 次のような簡単なプロンプトから始めることができます。

write a tagline for an ice cream shop

プロンプトを入力すると、Azure OpenAI が入力候補を表示します。

we serve up smiles with every scoop!

Azure OpenAI API は対話のたびに新しい出力を生成するため、表示される入力候補の結果は異なる場合があります。 プロンプトが同じであっても、API を呼び出すたびに少しずつ異なる入力候補が得られる可能性があります。 この動作は、Temperature の設定で制御できます。

このシンプルなテキストイン、テキストアウト インターフェイスでは、API に実行させたい操作を指示したり、ほんのわずかな例を提示したりすることで、モデルを "プログラミングする" ことができます。 通常、出力が成功するかどうかは、タスクの複雑さとプロンプトの品質によって決まります。 一般的なルールは、小学生向けの文章題をどうやって作成するかを考えることです。 適切に記述されたプロンプトは、必要な内容とその対応方法をモデルが十分に把握できる情報を提供します。

注意

モデルのトレーニング データは、モデルの種類ごとに異なる場合があります。 最新のモデルのトレーニング データは、現在 2021 年 9 月までしか拡張されていません。 プロンプトによっては、関連する現在のイベントに関する知識をモデルが持っていない場合があります。

プロンプトを設計する

Azure OpenAI Service モデルは、オリジナルなストーリーの生成から複雑なテキスト分析の実行まで、あらゆることができます。 モデルは非常に多くのことができるので、ユーザーは必要とするものを明確に示す必要があります。 単に指示するだけでなく、示すことが、多くの場合、良いプロンプトの秘訣です。

モデルは、求められているものをプロンプトから予測しようとします。 たとえば、「猫の品種のリストを出して」というプロンプトを入力しても、求められているのはリストだけだとモデルが自動的に想定することはありません。 このプロンプトは、出だしが「猫の品種のリストを出して」で、続けて「リストがあれば、好きな猫の品種を教えるよ」と言う会話かもしれません。猫のリストのみが求められているとモデルが想定したら、コンテンツの作成、分類、その他のタスクはうまく機能しません。

安定したプロンプトを作成するためのガイドライン

有用なプロンプトを作成するには、次の 3 つの基本的なガイドラインに従います。

  • 提示し、指示します。 指示または例、もしくはその 2 つの組み合わせを使用して、必要なものを明確にします。 モデルにアイテムのリストをアルファベット順に並べてほしい場合、または段落をセンチメントごとに分類してほしい場合は、それらの詳細情報をプロンプトに含めて、モデルに提示します。

  • 品質データを提供します。 分類子を構築しようとしている場合、またはモデルをパターンに従わせたい場合は、十分な例があることを確認してください。 必ず例を校正してください。 モデルは、基本的なスペルミスを修正して、意味のある応答を返すだけの賢さを備えています。 逆に、これは意図的なスペルミスだとモデルが想定することもあります。その場合は、応答に影響が及ぶ可能性があります。

  • 設定を確認しますTemperatureTop P などの確率設定は、モデルが応答を生成する際の確定性を制御します。 1 つの正解しかない応答を求める場合は、この設定に低い値を指定する必要があります。 明白でない応答を求めている場合は、高い値を使用します。 この設定についてユーザーが最もよく犯す間違いは、設定値を変えることでモデルの応答の「賢さ」や「創造性」を制御していると思い込むことです。

プロンプトの問題のトラブルシューティング

API を期待どおりに動作させるのに苦労する場合は、実装に関する次の点を確認してください。

  • 何を生成しようとしているかが明らかですか?
  • 十分な例がありますか?
  • 間違いがないか例を確認しましたか? (API から直接通知されることはありません。)
  • TemperatureTop P の確率設定を正しく使用していますか?

テキストを分類する

API を使用してテキスト分類子を作成するには、タスクの説明を提示し、いくつかの例を示します。 このデモでは、テキスト メッセージのセンチメントを分類する方法を API に示しています。 センチメントとは、テキスト内の全体的な感情や表現のことです。

This is a text message sentiment classifier

Message: "I loved the new adventure movie!"
Sentiment: Positive

Message: "I hate it when my phone battery dies." 
Sentiment: Negative

Message: "My day has been 👍"
Sentiment: Positive

Message: "This is the link to the article"
Sentiment: Neutral

Message: "This new music video is unreal"
Sentiment:

テキスト分類子を設計するためのガイドライン

このデモでは、分類子を設計するためのいくつかのガイドラインを示します。

  • 入力と出力を説明するときは、平易な言葉を使用します。 入力する「Message」、および「Sentiment」を表現する期待値には、平易な言葉を使用します。ベスト プラクティスとして、平易な言葉を使った説明から始めることをお勧めします。 プロンプトの作成時に入力と出力を示すために短縮形やキーを使うことがよくありますが、プロンプトをできるだけわかりやすい説明にすることから始めるのがベストです。 プロンプトのパフォーマンスが一貫していれば、作業をさかのぼって、余分な単語を削除することができます。

  • あらゆるケースに応答する方法を API に示します。 このデモでは、「Positive」、「Negative」、「Neutral」という複数の結果が提供されます。中立的 (Neutral) な結果をサポートすることが重要です。人間でさえ、ネガティブかポジティブかを判断するのが難しいことが多いからです。

  • 一般的な表現に見られる絵文字とテキストを使用します。 このデモは、テキストと絵文字 👍 の組み合わせを分類子にすることができることを示しています。 API は絵文字を読み取り、式の変換も可能です。 最適な応答を得るには、例を示すときに一般的な表現形式を使用します。

  • よく使うタスクでは、使用する例の数を少なくします。 API がセンチメントとテキスト メッセージの概念を既に理解しているため、この分類子では少数の例しか提供していません。 API が精通していないものの分類子を作成する場合は、より多くの例を提供する必要がある場合があります。

1 つの API 呼び出しから複数の結果を得る

分類子の作成方法を理解したので、最初のデモを拡張して、効率を高めましょう。 分類子を使用して、1 つの API 呼び出しから複数の結果を取得できます。

This is a text message sentiment classifier

Message: "I loved the new adventure movie!"
Sentiment: Positive

Message: "I hate it when my phone battery dies"
Sentiment: Negative

Message: "My day has been 👍"
Sentiment: Positive

Message: "This is the link to the article"
Sentiment: Neutral

Message text
1. "I loved the new adventure movie!"
2. "I hate it when my phone battery dies"
3. "My day has been 👍"
4. "This is the link to the article"
5. "This new music video is unreal"

Message sentiment ratings:
1: Positive
2: Negative
3: Positive
4: Neutral
5: Positive

Message text
1. "He doesn't like homework"
2. "The taxi is late. She's angry 😠"
3. "I can't wait for the weekend!!!"
4. "My cat is adorable ❤️❤️"
5. "Let's try chocolate bananas"

Message sentiment ratings:
1.

このデモでは、テキスト メッセージをセンチメント別に分類する方法を API に示します。 番号付きのメッセージのリストと、メッセージと同じ番号のインデックスを持つセンチメント評価のリストを提供します。 API は、最初のデモの情報を使用して、1 つのテキスト メッセージのセンチメントを分類する方法を学習します。 2 番目のデモでは、テキスト メッセージのリストにセンチメントの分類を適用する方法をモデルが学習します。 この手法により、API は 1 回の API 呼び出しで 5 つ (またはそれ以上) のテキスト メッセージを評価できます。

重要

リストの作成やテキストの評価を API に依頼する場合は、API がドリフト (本題からの逸脱) を回避できるように手助けすることが重要です。 注意すべき点を次に示します。

  • Top P または Temperature の確率設定の値に注意してください。
  • テストを複数回実行して、確率設定が正しく調整されていることを確認します。
  • 長いリストは使用しないでください。 長いリストはドリフトを招く可能性があります。

アイデアをトリガーする

API で実行できる最も強力で最も簡単なタスクの 1 つは、入力の新しいアイデアやバージョンを生成することです。 ミステリー小説を書いていて、ストーリーのアイデアが必要だとします。 API にアイデアのリストを提供すると、API はそのリストにアイデアを追加しようとします。 API は、ほんの少数の例に基づいて、ビジネス プラン、キャラクターの説明、マーケティング スローガンなどを作成することができます。

次のデモでは、API を使用して、教室で仮想現実を使用する方法の例を多数作成します。

Ideas involving education and virtual reality

1. Virtual Mars
Students get to explore Mars via virtual reality and go on missions to collect and catalog what they see.

2.

このデモでは、リストの基本的な説明と 1 つのリスト アイテムを API に提供します。 次に、"2." という不完全なプロンプトを使用して、API から応答をトリガーします。 API は、不完全なエントリを、類似するアイテムを生成してリストに追加する要求と解釈します。

アイデアをトリガーするためのガイドライン

このデモでは単純なプロンプトを使用していますが、新しいアイデアをトリガーするためのいくつかのガイドラインが強調されています。

  • リストの意図について説明します。 テキスト分類子のデモと同様に、まず、リストの内容を API に伝えます。 この手法は、API がテキストを分析してパターンを判別するのではなく、リストの補完に集中することを手助けします。

  • リスト内のアイテムのパターンを設定します。 1 つのセンテンスで説明を提供すると、API はリストの新しいアイテムを生成するときに、そのセンテンスのパターンに従おうとします。 より詳細な応答が必要な場合は、API への入力テキストをより詳細にして、テキストの意図を明確に示す必要があります。

  • 新しいアイデアをトリガーするために、不完全なエントリをプロンプトとして API に提供します。 「2.」のように不完全に見えるプロンプト テキストを検出すると、API は、まずエントリを補完する可能性のあるテキストを特定しようとします。 このデモにはリストのタイトルと、「1.」 という番号に続くテキストの例があったため、API は、不完全なプロンプト テキスト「2.」を、リストにアイテムを追加し続ける要求と解釈しました。

  • 高度な生成手法を探索します。 より長く多様なリストをプロンプトで作成することで、応答の品質を向上させることができます。 1 つの例から始めて、API により多くの例を生成させ、その中から一番好きな例を選択してリストに追加するのが 1 つの手法です。 例に基づいて高品質のバリエーションをいくつか増やすだけで、応答の品質が劇的に向上する可能性があります。

会話を行う

GPT-35-Turbo および GPT-4 のリリース以降では、チャット入力候補エンドポイントをサポートするモデルを使用して、会話生成とチャットボットを作成することをお勧めします。 チャット入力候補モデルとチャット入力候補エンドポイントには、入力候補エンドポイントとは異なる入力構造が必要です。

この API は、人間との会話、さらには自分自身との会話を続けることが得意です。 わずか数行の指示があれば、API は、落ち着き払ってインテリジェントに質問に答えるカスタマー サービス チャットボットとして機能したり、ジョークやダジャレを言う冗談好きな話し相手として機能したりします。 重要なのは、どのように動作すべきかを API に伝えてから、いくつかの例を提供することです。

このデモでは、API が、質問に答える AI の役割を果たします。

The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.

Human: Hello, who are you?
AI: I am an AI created by OpenAI. How can I help you today?
Human: 

「Cramer」という名前のチャットボットのバリエーションを見てみましょう。このチャットボットは、面白く、ある程度役に立つ仮想アシスタントです。 API が役割のキャラクターを理解できるように、質問と回答の例をいくつか示します。 皮肉っぽい応答を数例示すだけで、API はパターンをつかみ取り、同様の応答を無数に提供することができます。

Cramer is a chatbot that reluctantly answers questions.

###
User: How many pounds are in a kilogram?
Cramer: This again? There are 2.2 pounds in a kilogram. Please make a note of this.
###
User: What does HTML stand for?
Cramer: Was Google too busy? Hypertext Markup Language. The T is for try to ask better questions in the future.
###
User: When did the first airplane fly?
Cramer: On December 17, 1903, Wilbur and Orville Wright made the first flights. I wish they'd come and take me away.
###
User: Who was the first man in space?
Cramer: 

会話を設計するためのガイドライン

このデモでは、会話を行えるチャットボットの作成がいかに簡単かを示します。 簡単に見えますが、この手法はいくつかの重要なガイドラインに従っています。

  • 会話の意図を定義します。 他のプロンプトと同様に、対話の意図を API に説明します。 この場合の対話の意図は「会話」です。この入力により、API は、最初の意図に従って後続の入力を処理するための準備を整えます。

  • どのように振る舞うべきかを API に指示します。 このデモの重要な点は、API がどのように対話するべきかについての明確な指示があることです。「アシスタントは役に立ち、創造的で、賢く、非常にフレンドリーである」がその指示です。ユーザーの明確な指示がなければ、API は本筋からそれて、対話の相手である人間を模倣する可能性があります。 API は不親切になる可能性も、望ましくない振る舞いを示す可能性もあります。

  • API にアイデンティティを付与します。 最初に、OpenAI によって作成された AI として API に応答させます。 API に固有のアイデンティティはありませんが、キャラクターの説明は、API が可能な限り真実に近い方法で応答することに役立ちます。 さまざまな方法でキャラクターのアイデンティティを説明することで、さまざまな種類のチャットボットを作成できます。 生物学の研究者として応答するように API に指示すると、その経歴を持つ人に期待するものと同様の知的で思慮深いコメントを API から受け取ることができます。

テキストの変換

このAPI は、言葉とキャラクターのアイデンティティを使用して情報を表現するさまざまな方法に精通している言語モデルです。 ナレッジ データは、自然言語からコードへのテキスト変換や他の言語と英語の間での翻訳に対応しています。 API は、さまざまな方法でコンテンツを要約、変換、表現できるレベルでコンテンツを理解することもできます。 いくつか例を見てみましょう。

ある言語から別の言語に翻訳する

このデモでは、英語のフレーズをフランス語に変換する方法を API に指示します。

English: I do not speak French.
French: Je ne parle pas français.
English: See you later!
French: À tout à l'heure!
English: Where is a good restaurant?
French: Où est un bon restaurant?
English: What rooms do you have available?
French: Quelles chambres avez-vous de disponible?
English:

この例が機能するのは、API が既にフランス語を理解しているからです。 API に言語を教える必要はありません。 ある言語から別の言語に変換するという要求を API が理解するのに役立つ十分な例を提供するだけで済みます。

API が認識できない言語に英語を翻訳したい場合は、より多くの例と、流暢な翻訳を生成できる微調整されたモデルを API に提供する必要があります。

テキストと絵文字の間で変換する

このデモでは、映画の題名をテキストから絵文字に変換します。 この例は、API がパターンを把握して、他の文字を使用するだけの適応力を持っていることを示しています。

Carpool Time: 👨👴👩🚗🕒
Robots in Cars: 🚗🤖
Super Femme: 👸🏻👸🏼👸🏽👸🏾👸🏿
Webs of the Spider: 🕸🕷🕸🕸🕷🕸
The Three Bears: 🐻🐼🐻
Mobster Family: 👨👩👧🕵🏻‍♂️👲💥
Arrows and Swords: 🏹🗡🗡🏹
Snowmobiles:

テキストの概要を作成する

API は、テキストのコンテキストを把握し、それをさまざまな方法で言い換えることができます。 このデモでは、API がテキストのブロックを受け取り、小学生でも理解できる説明を作成します。 この例は、API が言語を深く理解していることを示しています。

My ten-year-old asked me what this passage means:
"""
A neutron star is the collapsed core of a massive supergiant star, which had a total mass of between 10 and 25 solar masses, possibly more if the star was especially metal-rich.[1] Neutron stars are the smallest and densest stellar objects, excluding black holes and hypothetical white holes, quark stars, and strange stars.[2] Neutron stars have a radius on the order of 10 kilometres (6.2 mi) and a mass of about 1.4 solar masses.[3] They result from the supernova explosion of a massive star, combined with gravitational collapse, that compresses the core past white dwarf star density to that of atomic nuclei.
"""

I rephrased it for him, in plain language a ten-year-old can understand:
"""

テキストの概要を生成するためのガイドライン

テキストの要約では、多くの場合、大量のテキストを API に提供する必要があります。 テキストの大きなブロックを処理した後に API がドリフトするのを防ぐために、次のガイドラインに従ってください。

  • 要約するテキストを 3 つの二重引用符で囲みます。 この例では、要約するテキストのブロックの前と後ろの別の行に 3 つの二重引用符 (""") を入力します。 この書式設定スタイルでは、処理の対象となるテキストの大きなブロックの開始位置と終了位置を明確に定義します。

  • 概要の前と後で、概要の意図と、誰が読み手なのかを説明します。 この例は、処理の対象となるテキストの前と後の 2 回 API に指示を与える点が他の例と異なることに注意してください。 豊富な指示は、意図したタスクに API が集中し、ドリフトを避けるのに役立ちます。

部分的なテキストとコード入力を補完する

すべてのプロンプトで入力候補が生成されますが、入力を中止した場所を API が検出するようにしたい場合、テキスト補完を独自のタスクと考えると便利です。

このデモでは、不完全に見えるテキスト プロンプトを API に与えます。 "and" という単語でテキストの入力を停止します。API は、不完全なテキストを、ユーザーの思考の流れを続けるためのトリガーと解釈します。

Vertical farming provides a novel solution for producing food locally, reducing transportation costs and

次のデモは、補完機能を使用して React コード コンポーネントの作成を支援する方法を示しています。 まず、API にコードを送信します。 開き括弧 ( でコードの入力を停止します。 API は、不完全なコードを HeaderComponent の定数定義を補完するためのトリガーと解釈します。 API は、対応する React ライブラリを理解しているため、このコード定義を補完できます。

import React from 'react';
const HeaderComponent = () => (

入力候補を生成するためのガイドライン

API を使用してテキストとコードの入力候補を生成するための役に立つガイドラインを次に示します。

  • Temperature を下げて API に集中させますTemperature の設定値を小さくして、プロンプトに記述されている意図に焦点を合わせた応答を提供するよう API に指示します。

  • Temperature を上げて、API が意図から逸脱することを許可しますTemperature の設定値を大きくして、API がプロンプトに記述された意図から逸脱した応答を返すことを許可します。

  • GPT-35-Turbo モデルおよび GPT-4 Azure OpenAI モデルを使用します。 コードの理解や生成を伴うタスクの場合、Microsoft では GPT-35-Turbo モデルと GPT-4 Azure OpenAI モデルの使用を推奨しています。 これらのモデルは、新しいチャット入力候補形式を使用します

事実に基づく応答を生成する

API は、精査された実際のデータに基づいて構築された知識をトレーニング中に学習しています。 API は、そのときに習得したデータを使用して応答を形成します。 ただし、API には、真実のように見えても、実は捏造された応答を返す能力もあります。

API が入力に応じて回答をでっち上げる可能性を制限する方法がいくつかあります。 与えたデータに基づいて API が応答を作成するように、真実かつ事実に基づく応答の基盤を定義することができます。 低い Temperature 確率値を設定することで、事実に基づく回答に使用できるデータがない場合の応答方法を API に指示することもできます。

次のデモでは、より事実に基づいた方法で応答するよう API に指示する方法を示します。 API が理解できる質問と回答の例を API に提供します。 さらに、API が認識できない可能性がある質問 (Q) の例を提示して、回答 (A) の出力に疑問符を使用します。 この手法では、API が事実に基づく回答を提供できない質問に応答する方法を API に教えます。

真実かつ事実の応答かどうか疑問がある場合に API が疑問符 (?) で応答する可能性が高くなるように、安全策として、Temperature の確率を 0 に設定します。

Q: Who is Batman?
A: Batman is a fictional comic book character.

Q: What is torsalplexity?
A: ?

Q: What is Devz9?
A: ?

Q: Who is George Lucas?
A: George Lucas is an American film director and producer famous for creating Star Wars.

Q: What is the capital of California?
A: Sacramento.

Q: What orbits the Earth?
A: The Moon.

Q: Who is Egad Debunk?
A: ?

Q: What is an atom?
A: An atom is a tiny particle that makes up everything.

Q: Who is Alvan Muntz?
A: ?

Q: What is Kozar-09?
A: ?

Q: How many moons does Mars have?
A: Two, Phobos and Deimos.

Q:

事実に基づく応答を生成するためのガイドライン

API が回答をでっち上げる可能性を制限するためのガイドラインを確認しておきましょう。

  • 調査に裏付けされた真実のデータを API に提供します。 指示した意図に基づいて真実かつ事実の応答を作成するための基盤として何を使用するべきかを API に指示します。 質問への回答に使用するべきテキストの本文 (ウィキペディアの項目など) を API に提供すれば、API が応答をでっち上げる可能性が低くなります。

  • 低い確率値を使用します。 API が意図への集中を維持し、意図から逸脱して応答をでっち上げたり、作り話をしたりしないように Temperature の確率値を低く設定します。

  • 「わからない」と応答する方法を API に教えます。 API が事実に基づく回答を見つけられない質問に対して特定の応答を使用するよう API に指示するための質問と回答の例を入力することができます。 この例では、対応するデータが見つからないときは疑問符 (?) で応答するよう API に指示します。 この手法は、回答をでっち上げるより「わからない」と応答する方が「正しい」のはどんな場合かを API が学習することにも役立ちます。

コードを操作する

Codex モデル シリーズは、自然言語と数十億行のコードの両方でトレーニングされた OpenAI の基本 GPT-3 シリーズの子孫です。 Python で最も能力が高く、C#、JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL、シェルなど、12 以上の言語に精通しています。

コード入力候補の生成の詳細については、「Codex モデルと Azure OpenAI Service」を参照してください。

次のステップ