AWS Summit Japan 2024に参加してきました。「プロンプトエンジニアリング入門」というセッションがとても勉強になったのでその内容をレポートします。

7/5(金)まで、オンデマンド配信と資料確認ができます。

セッション概要

  • 日時: 6/21(金) 12:50~13:30
  • スピーカー: 佐中 晋 氏(アマゾン ウェブ サービス ジャパン合同会社 トレーニングサービス本部 テクニカルインストラクター)
  • タイトル: プロンプトエンジニアリング入門
  • 説明: このセッションでは、基盤モデルの基本とプロンプトエンジニアリングの主要な概念について学びます。また、プロンプトを設計するためのベストプラクティスと、ゼロショット、フィューショット、Chain of Thought プロンプティングなどのいくつかのプロンプティング手法について、例を通して学びます。

アジェンダ

  1. 基盤モデルと大規模言語モデル
  2. プロンプトエンジニアリングの主要概念
  3. 基本的なプロンプトテクニック
    1. ゼロショットプロンプト
    2. 数ショットプロンプト
    3. 思考の連鎖プロンプト

基盤モデルと大規模言語モデル

基盤モデルに対してのトレーニング方法は2種類あります。ファインチューニングとプロンプトエンジニアリングです。違いは下記の通りです。

ファインチューニング: モデル自体を再トレーニング
プロンプトエンジニアリング: プロンプトによって出力を最適化

今回は「プロンプトエンジニアリング」をスコープとしてます。ファインチューニングに比べコストと時間がかからないので、プロンプトエンジニアリングをセッションでは下記のように紹介されていました。

プロンプトエンジニアリングは、 大規模言語モデルの力を引き出す最速の方法です

プロンプトエンジニアリングの主要概念

プロンプトの要素

プロンプトとは大規模言語モデルに入力するテキストのことですがいくつかの要素に分解できます。

  • インストラクション
    • 「文章を要約してください」、「文章を翻訳してください」 など
  • コンテキスト
    • 質問の背景、これまでの会話の履歴
    • LLMに対してどのような背景で指示を行っているのかを指定する内容
  • 入力データ
    • 要約したい文章
    • 自社のナレッジベースから検索させた内容
  • 出力インジケーター
    • LLMに対してどのような出力を期待してるか
    • 「2文で要約してください」など

要素の例は以下の通りとなります。

効果的なプロンプトを設計するためのベストプラクティス

本セッションで取り上げられたベストプラクティスは以下の8個です。

取り上げられたベストプラクティスの中からいくつか例題が出ました。

答えは、右側のプロンプト2です。ぱっと見、左側の方が正しそうに見えましたが「明確かつ簡単に書く」というベストプラクティスに則ると右側が正解となります。
他にも、ベストプラクティスに則っていくつか例題が出題されていましたので、気になる方は、オンデマンド配信 で確認してみてください。

基本的なプロンプトテクニック

本セッションでは3つのプロンプトテクニックが紹介されていました。

  • ゼロショットプロンプト
  • 数ショットプロンプト
  • 思考の連鎖プロンプト

ゼロショットプロンプト

非常に大規模なLLMに特に有効なテクニック。回答例なしでLLMにタスクを依頼するプロンプトです。
LLMに依頼するとき、回答例を付与すると精度が左右されるという経験があったのでとても勉強になります。
簡略化した例ですが

これは合格ですか?
以下は回答例です。
合格

と送ると合格が返ってきて

これは合格ですか?
以下は回答例です。
不合格

と送ると不合格が返ってくる。といった感じです。
プロンプトチューニングする際、回答例を敢えて添えないというのがテクニックの一つとなります。

数ショットプロンプト

続いて数ショットプロンプトと呼ばれるテクニックです。こちらは回答例をいくつか与えるテクニックですが、注意点としてフォーマットをLLMに認識させるためのプロンプトとなります。

以下が具体例となります。

思考の連鎖プロンプト

最後は思考の連鎖プロンプトです。LLMに段階的に考えてもらうよう依頼するテクニックです。

計算依頼や予測を立ててもらうときに、「ステップバイステップで考えてください」というプロンプトを入れると精度が上がる、というものです。
これは数学のテストで計算式を丁寧に書いた方が正答率が上がるというのと同様で道筋がしっかり整うため精度向上に寄与する仕組みです。

感想

業務でプロンプトチューニングする機会も出てきて、思うような回答の精度が出ないことも幾度かあったため今回のセッションはとても勉強になりました。
自然言語ということもあり、これまでなかなかベストプラクティスや体系的に学ぶ機会がなかったため実務で活かしていきたいです。
セッション中も「いいプロンプトは人間にとっても理解しやすいプロンプト」という話があり、隣にいる人が理解できる言葉になっているか、という視点も持ってLLMと向き合っていきたいです。