見出し画像

ChatGPT プロンプトエンジニアリング

ChatGPT プロンプトエンジニアリング

ChatGPT Prompt Engineering for Developers - DeepLearning.AI

基本は自分用メモ
上記のChatGPTのプロンプトエンジニアリングのコースのおおよそのサマリー

プロンプトエンジニアリングの基本ガイドライン

  1. 明確かつ具体的な指示を書く

  2. モデルに考える時間を与える

明確かつ具体的な指示を書く

  • モデルから望む出力を得るために、可能な限り明確で具体的な指示を書くことが重要です。

  • 長いプロンプトは、一般的に短いプロンプトよりも文脈や明確さを提供し、より詳細で関連性のある出力を生み出す可能性があります。

この原則に関連する戦術

  1. デリミタを使用する:明確なパンクチュエーションを使用して入力の異なる部分を明確に示すことができます。

    1. triple backticks

      1. ```

    2. triple quotes

      1. """

    3. triple dashes

    4. angle brackets

      1. <>

    5. xmltags

      1. {}

  2. 構造化された出力を求める:HTMLやJSONのような構造化された出力を要求することで、モデルの出力の分解を容易にします。

  3. 条件の達成条件を確認する:仮定が必ずしも満たされていない場合、モデルにこれらの仮定を最初に確認させ、満たされていない場合はそれを示すように指示します。

  4. few shotプロンプティング:モデルが実行するべきタスクの成功例を提供します。

モデルに考える時間を与える

  • モデルが結論に急ぎすぎたことで不適切な推論エラーを犯している場合、クエリを再構成して、モデルが最終回答を提供する前に関連する推論の連鎖またはシリーズを要求するようにしましょう

  • 問題について長く考えるようにモデルを指示すると、それはタスクに対してより多くの計算労力を費やすことを意味します。

第二原則についての戦術

  1. タスクを完了するための手順の特定: プロンプトを使用して、特定のタスクを完了するための手順を定める例を示しました。

    1. 当初のタスクがフランス語での名前リストのJSONオブジェクトのとき、以下のような形でタスクを分解し、上記を一度のメッセージや複数のメッセージで依頼することができる

      1. テキストの要約

      2. フランス語への翻訳、

      3. フレンチの要約内の名前のリスト化、

      4. そして指定したキーを含むJSONオブジェクトの出力

  2. モデルに自分で解決策を考えさせる: モデルが結論を急がずに自己解決策を模索するよう指示する戦術を紹介します。これは、モデルに時間を与えて問題を解決することの重要性を示しています。学生の解答が正しいかどうかを判断する数学問題の例を示しました。

    1. そのままではChatGPTは数学のミスを見つけることができませんが

    2. 数字を一段階ごと結果を確認させることで、無事どこで計算ミスが発生しているのかを特定できました

モデルの制限

  • モデルは訓練中に膨大な知識に触れますが、それを完璧に記憶しているわけではなく、その知識の範囲を正確に把握していない可能性があります。

  • これは、モデルがマイナーなトピックについての質問に答える際に、 plausibleに聞こえるが実際には真実でない情報を作り出す可能性があることを意味します。これらを我々は「ハルシネーション」と呼んでいます。

注意点

  • モデルが実在するブランドの架空の製品について詳しく説明する例を示しました。このような状況は、情報があたかも本当に存在するように聞こえるため、注意が必要です。

  • このような場合には、モデルがテキストに基づいて答えを生成する際にモデルにまずテキストから関連する引用を見つけ、それらの引用を使って質問に答えるよう求めることで、ハルシネーションを減らすことができます

反復的な開発プロセス

アプリケーション構築プロセス

  • 初回のプロンプトでいきなり完成品のプロンプトを見つけることは稀である。

  • 重要なのは、プロンプトを反復的に改善するプロセスを習慣づけることです。

機械学習モデルの訓練

  • 最初に作成したプロンプトがうまく機能することはまれである。

  • 最初の試みからある程度うまく機能する可能性は多少高いが、そもそも最初のプロンプトが機能するかどうかは重要ではない。

  • アプリケーションに適したプロンプトに到達するためのプロセスが最も重要である。

プロンプトの反復的開発

  • プロンプトのアイデアを考え出し、最初の試みを書き出す。

  • プロンプトが十分に機能しなかった場合、なぜ指示が十分に明確でなかったのか、なぜアルゴリズムに十分な思考時間を与えなかったのかを解明する反復的なプロセス。

  • このプロセスを何度も繰り返すことで、青果物に最適なプロンプトに到達する事ができます。

プロンプトの改善

  • 具体的には、ある文章から商品の情報を取り出すことがゴールという課題があるときに

    • 単純に情報を取り出すことは依頼すればすぐにできます

    • ですがプロンプトの結果が長すぎる場合、プロンプトでワード数などを明確化して出力の長さを制御する事ができます

    • さらなる改良として、文章内の任意の詳細に焦点を当てる指示を加えることができます

より複雑なプロンプトの例

  • プロンプトに商品の寸法を示す表を含め、結果をHTML形式で出力するような指示を追加する。

  • 適切なプロンプトと例の組み合わせは、モデルがアプリケーションの要求を満たすために必要な情報を取得するのに役立つ。

  • これは青果物を得るために重要な要素である。

大規模言語モデル(LLM)によるテキストの要約

セクション1:テキストの要約

  1. 背景:今日の世界には膨大な量のテキストがあり、これらをすべて読む時間はとても今の社会人にはありません。そこで大規模言語モデルの最適な応用方法としてテキストの要約があります。

  2. 応用:今日、要約機能は、多くの会社が様々なソフトウェアアプリケーションとして組み込んでいる。同様のことはChat GPT Webインターフェースでも可能であり、記事の要約を生成するためによく使用される。

  3. ビジネス例:製品レビュー(パンダのぬいぐるみ)の要約を生成するというタスクがあるときに、多数存在するレビューを一気に要約して、簡略化することは最適な使用例として挙げられます

  4. 部門別の要約:またその際に特定の目的を持つ要約を作成するために、プロンプトを変更して特定の部門(例:出荷部門、価格設定部門)に適した要約を生成することが可能です。

    1. それぞれの部門では同じレビューでもどこに注目するのかはちがいますからね

    2. 必要な情報が存在しない場合には存在しない、エラーなどと返すように指示することも可能です

セクション2:情報の抽出

  1. 目的:要約だけでなく、特定の情報の抽出も可能。例えば、出荷部門へのフィードバックに関連する情報を抽出するプロンプトが可能。

  2. レビューの要約:多数のレビューを要約し、より早くレビューをブラウズするためのダッシュボードを作成することができる。また、長いレビューをクリックして表示することも可能。

セクション3:テキストの理解と推論

  1. 背景:大規模言語モデルのもう一つの能力はテキストを使った推論です。例えば、製品レビューがポジティブかネガティブかをすばやく判断する。

  2. 次のビデオのテーマ:大規模言語モデルを使った推論について。製品レビューがポジティブかネガティブかをすばやく判断する方法について解説する。

テキストからの情報推測について

このビデオでは、大規模言語モデルを用いたテキスト分析と情報推測について説明しています。ChatGPTは、ラベルの抽出、名前の抽出、テキストのセンチメント分析などを行うことができます。

主な内容

  1. センチメント抽出:テキスト(例:商品レビュー)からポジティブまたはネガティブなどの感情を抽出する方法のことをセンチメント分析といいます。ChatGPTは、文章を入力するだけで短く簡潔にレスポンスを生成することも可能です。

  2. 感情の抽出:レビューから表現される感情を抽出する例を示します。これは、顧客が特定の製品に対してどのように思っているかを理解するために有用です。また、顧客が怒っているかどうかを特定するためのクラス分類問題についても触れています。

  3. 情報の抽出:顧客レビューからより豊富な情報を抽出する方法について説明します。購入されたアイテムやその製造会社の名前を特定する例を示し、レスポンスをJSONオブジェクトとしてフォーマットする方法を示しています。

  4. 複数情報の同時抽出:1つのプロンプトで複数の情報(センチメント、怒りの有無、購入アイテム、製造会社)を抽出することも可能です。これにより、同じテキストから複数の情報を一度に抽出することが可能です。

  5. トピック推測:長いテキストからそのトピックを推測できることも示します。これは、記事の集まりからトピックを抽出し、それを使用して共通するトピックにインデックスを付けるのに役立ちます。また、記事がカバーするトピックを判断するための方法についても説明します。

  6. 最終的な考察:以前は機械学習開発者が数日から数週間かけて行っていた複雑な自然言語処理タスクを、大規模言語モデルを用いて数分で実現できるというのはすばらしいですね。

大規模言語モデルの変換能力について

大規模言語モデルは、さまざまな形式の入力を変換するのが得意です。このセミナーではその具体的な活用例について見ていきましょう。

具体的な応用例

  • 言語の翻訳 : ある言語のテキストを別の言語に変換する能力

  • 文章の校正 : スペルや文法の修正を支援する能力

  • データ形式の変換 : 例えば、HTMLを入力としてJSONを出力する能力

以前は正規表現を多用して煩雑に変換ルールを書いていたものが、大規模言語モデルといくつかのプロンプトを使うことで、より簡単に実装できるようになりました。

大規模言語モデルの学習

大規模言語モデルは、多くのテキストから学習されます。これらのテキストは様々なソースから取得され、インターネット上の情報が多いです。それらはもちろん、多くの異なる言語で書かれています。これにより、モデルには翻訳能力が備わります。

翻訳の例

シンプルな翻訳

  • 例1 : 「次の英文をスペイン語に翻訳してください。Hi, I would like to order a blender.」

    • レスポンス : 「Hola, me gustaría ordenar una licuadora.」

  • 例2 : 「以下の文章がどの言語か教えてください。」と「Combien coûte la lampe d'air.」

    • レスポンス : 「これはフランス語です。」

複数言語への翻訳

  • 例3 : 「次のテキストをフランス語とスペイン語に翻訳してください。I want to order a basketball.」

    • レスポンス : フランス語、スペイン語、英語の海賊語版の翻訳

一部の言語では、話者と聞き手の関係によって翻訳が変わることがあります。そして、これを言語モデルに説明することもできます。その結果、モデルは適切に翻訳を行うことができます。

フォーマルとインフォーマルの翻訳

次の例では、「次のテキストをスペイン語のフォーマル版とインフォーマル版の両方に翻訳してください。Would you like to order a pillow?」と指示します。また、ここでは、バックティックとは異なるデリミタを使用しています。それが明確な分離を示している限り、実際には何を使用しても問題ありません。

  • 例4 : 「次のテキストをスペイン語のフォーマル版とインフォーマル版の両方に翻訳してください。Would you like to order a pillow?」

    • レスポンス : フォーマル版とインフォーマル版の翻訳

結果として、フォーマル版とインフォーマル版が得られます。フォーマル版は、上司やプロフェッショナルな状況で誰かに話しかけるときに使用します。一方、インフォーマル版は友人グループに話しかけるときなどに使用します。私自身はスペイン語を話さないのですが、父がそれが正しいと言っています。

多国籍のeコマース企業の責任者の視点から

次の例では、多国籍のeコマース企業の責任者になったと仮定してみましょう。そして、ユーザーからのメッセージが様々な言語で送られてきます。それらはITの問題についての報告で、多様な言語で書かれています。そのため、ユニバーサルトランスレーターが必要になります。

まず、さまざまな言語で書かれたユーザーメッセージのリストを貼り付けます。そして、それぞれのユーザーメッセージをループ処理します。それぞれの問題についてどういった情報が含まれているのかを抽出してもらいます

  • 例5 : 多様な言語で書かれたユーザーからのメッセージを英語と韓国語に翻訳

    • レスポンス : 様々な言語で書かれた元のメッセージを英語と韓国語に翻訳

以上のような活用例を通じて、大規模言語モデルがいかに多様な問題解決に対応可能であるかがわかります。皆さんも自分が話す言語を翻訳してみて、その能力を試してみてください

スペルチェックと文法チェック

次に取り組む変換タスクは、スペルチェックと文法チェックです。これはChat GBTの非常に人気のある用途で、特に非ネイティブ言語で作業しているときに特に役立ちます。ここでは、一般的な文法やスペルの問題と、言語モデルがこれらをどのように解決できるかの例をいくつか紹介します。

いくつかの文法的またはスペルのエラーを含む文のリストを作成し、それぞれの文をループしてモデルに校正を依頼します。

for sentence in sentences_with_errors:
    prompt = f"Proofread and correct: {sentence}"
    response = chat_gpt(prompt)
    print(f"Original: {sentence}\nCorrected: {response}\n")

上記の例では、モデルがこれらの文法エラーをすべて修正できることがわかります。また、プロンプトを改善するために以前に説明したテクニックを使用することもできます。
レビューのチェック
公開フォーラムに投稿する前にテキストをチェックすることは常に役立ちます。そこで、レビューのチェックの例を挙げてみます。

Copy code
prompt = "Proofread and correct this review: " + review
response = chat_gpt(prompt)

上記のプロンプトを使用すると、モデルがレビューを修正し、元のレビューとモデルの出力との間の違いを見つけることができます。

更に、同じレビューを校正し、それをより引きつけるものにし、APAスタイルに従い、上級の読者を対象とするように求めるプロンプトを試してみます。出力はマークダウン形式であることを求めます。

prompt = "Proofread and correct this review, make it more compelling, ensure it follows APA style, targets an advanced reader, and output in markdown format: " + review
response = chat_gpt(prompt)

これにより、SoftPandaについての拡張されたAPAスタイルのレビューが得られます。

ChatGPTをつかったデータ形式の変換

同様にChatGPTを使ってある言語で書かれた情報を別の言語に変換することも可能です

具体例

Python言語で書かれたコードをRuby言語に置き換えることもできれば、
HTMLで書かれた文書をMarkdownや tagで書き直すことも可能です。

テキストの拡張

テキストの拡張は、短いテキスト(例えば指示のセットやトピックのリスト)を取り、大型言語モデルが長いテキスト(例えばメールやエッセイ)を生成するタスクです。大型言語モデルをブレインストーミングのパートナーとして使用するなど、このタスクの素晴らしい用途があります。しかし、スパムを大量に生成するような問題のある利用例も存在するので、大型言語モデルの能力を利用する際は、責任ある方法で、人々を助ける形でのみ使用してください。

パーソナライズされたメールの生成

言語モデルを使用して情報に基づいたパーソナライズされたメールを生成する例を挙げます。このメールはAIボットからのものであると自称しています。また、言語モデルの応答の探索度とバラエティを変化させることができる入力パラメータ「temperature」を使用します。

まず、OpenAIのPythonパッケージをセットアップし、ヘルパー関数`getCompletion`を定義します。次に、顧客のレビューとその感情に基づいてカスタムのレスポンスを生成します。

prompt = """
You are a customer service AI assistant. Your task is to send an email reply to your customer given the customer email. If the sentiment is positive or neutral, thank them for their review. If the sentiment is negative, apologize and suggest that they can reach out to customer service. Make sure to use specific details from the review, write in a concise and professional tone, and sign the email as AI customer agent.
"""
response = getCompletion(prompt + review + sentiment)

ここで、生成されたテキストをユーザーに表示する場合、そのテキストがAIによって生成されたものであることをユーザーに知らせる透明性を確保することが重要であることを強調しています。

Temperatureパラメータの使用
次に、モデルの応答のバラエティを変えるために、言語モデルのパラメータであるtemperatureを使用します。temperatureは、モデルの探索度やランダムさの度合いを表します。temperatureが0の場合、モデルは常に最も可能性の高い次の単語を選択します。高いtemperatureでは、より可能性の低い単語を選択する可能性があります。

予測可能な応答を求めるアプリケーションを構築する場合には、temperatureを0に設定することを推奨します。一方、モデルをより創造的に使用し、さまざまな出力のバラエティを求める場合には、temperatureを高く設定することを検討すると良いでしょう。

response = getCompletion(prompt, temperature=0.7)

temperatureが0の場合、同じプロンプトを実行するたびに同じ補完を期待することができます。一方、temperatureが0.7の場合、出力は毎回異なります。

temperatureの違いを体感するためには、自分自身でtemperatureを変えて試すことを推奨します。

temperatureのまとめ
高いtemperatureでは、モデルの出力はよりランダムになります。高いtemperatureでは、アシスタントはより散漫になるかもしれませんが、それだけにより創造的になる可能性もあります。

次のビデオでは、Chat Completions Endpointのフォーマットについて詳しく説明し、このフォーマットを使用してカスタムチャットボットを作成する方法について説明します。

大規模言語モデルを用いたカスタムチャットボットの作成

この内容は、大規模な言語モデルを使用して、特定の役割を果たすカスタムチャットボットを作成する方法について説明しています。

主なポイント

  1. チャットボットの基本構造:ChatGPTなどのチャットモデルは、一連のメッセージを入力として受け取り、モデル生成のメッセージを出力として返す設計になっています。これには、ユーザーメッセージ(入力)とアシスタントメッセージ(出力)、そしてシステムメッセージが含まれています。

  2. メッセージの役割:メッセージはいくつかの役割を持ちます。システムメッセージは、アシスタントの行動やどういう設定に従って振る舞うのかを設定できます。会話の全体的な指示を提供します。これにより、開発者はユーザーがシステムメッセージを知らずに、アシスタントの反応をガイドすることができます。

  3. チャットボットの作成:このビデオでは、Orderbotというピザレストランで注文を受け付けるチャットボットの作成を例にしています。ユーザーインターフェースからプロンプトを収集し、それをコンテキストというリストに追加します。このコンテキストは、モデルが次に何をするべきかを判断するための情報を提供します。

  4. モデルの調整:アシスタントの行動を調整するために、システムメッセージをカスタマイズして使用します。これにより、アシスタントが異なる人格や知識を持つように見せることができます。

  5. 注文のサマリー:モデルには、会話に基づいて注文システムに送信できるJSON形式のサマリーを作成する能力があります。この場合、出力を予測可能にするために、temperatureを低く設定して使用します。

この記事が気に入ったらサポートをしてみませんか?