Prompting an on device foundation model を読んだ

Apple 武石さんのポストで知った、Apple が Foundation Model について提供した新たなドキュメント。

Prompting an on-device foundation model | Apple Developer Documentation

多くのプロンプトテクニックがサーバーベースの基盤モデル向けに設計されているのに対して、コンテクストウィンドウが限られたオンデバイスならではの手法を紹介したもの。各テクニックに対してそれぞれ、Do/Dont’s の具体例を交えながらどうプロンプト設計するべきかを紹介している。

読んだので以下にまとめてみた。

  • 簡潔明快に指示する (Use simple, clear instructions)
    • プロンプトが人間にとって素早く読めるかを自分自身に問い、トーンや文体の調整に対する追加戦略を検討する(使うべき/避けるべきプロンプト戦略を例示)
    • 長く間接的指示には、価値のない不要な言葉が含まれているため精度が落ちる。明快なプロンプトとして、直接的命令で記載するべき
  • ロールやペルソナ、トーンの指示を与える
    • 専門家 (expert) というフレーズによって、よりトピックに対して権威的で詳細な回答をする
    • オンデバイスモデルは人に語るように考えるため、モデルにその相手のペルソナ像を与える(e.g. 1年生の英語の生徒、あなたの魔法ショップに来た客)
  • テストを通じて得られた結果をもとにプロンプトの改善を繰り返す (Iterate and improve your prompt based on the output you receive in testing)
    • 改善の戦略
      • 明快さの改善:直接的、簡潔かつ読みやすく
      • 強調の使用:重要な命令に “must” “should” “do not” “avoid” といった言葉を用いる
      • くりかえし:重要な命令は指示の最後に繰り返し強調する
    • 信頼度の低いプロンプトはわずかな状況変化で簡単に崩壊する
  • プロンプトに回答する前に、モデルに推論フィールド (reasoning field) を提供する (Povide the model with a reasoning field before answering a prompt)
    • 推論の説明を構造から話すために、モデルに推論用のフィールドを設ける (e.g. var reasoningSteps: String // A property the model uses for reasoning)
    • その推論用のフィールドは先頭のプロパティとし、モデルがプロンプトに答える前にモデルに提供するようにする
  • モデルが思考すべきことを減らす (Reduce the thinking the model needs to do)
    • 複雑なタスクはシンプルなプロンプトで説明しきれない
    • 代わりに step-by-step により推論負荷を下げる(例あり)
  • 複雑なプロンプトを単純なリクエストに分割する (Split complex prompts into a series of simpler requests)
    • (↑の続き)ひとつの部分にフォーカスするリクエストごとに LanguageModelSession を複数に分け、都度新しいコンテクストウィンドウで推論させるのもあり
    • まずは単一のリクエストで試すべき(分割すると推論時間が伸びる)、結果次第でリクエストを分割する
  • “if-else” 文により条件付きプロンプトにロジックを追加する (Add “logic” to conditional prompts with “if-else” statements)
    • 多すぎる条件はモデルの能力に影響を及ぼす可能性あり
    • 結果が要求に見合わなかった場合、条件付きプロンプトを実装でカスタマイズする(条件にあたる部分をプロンプト文に実装上で挿入する)
  • ショットベース・プロンプティング(one-shot, few-shot, zero-shot など)を活用し、モデルに求める回答の具体例を提供する (Leverage shot-based prompting — such as one-shot, few-shot, or zero-shot prompts — to provide the model with specific examples of what you need)
    • Few-shot プロンプティングは、プロンプトでいくつかの例を与えるもの。Guided generation でも効果あり
    • オンデバイスモデルにはシンプルな例が好ましい、2-15 の例を用意し、それぞれをできる限り単純に保つ
    • 長く複雑な例を与えると、それをそのまま回答内で繰り返すハルシネーションに繋がる

過去、Foundation Model を使った実験では特にこのプロンプト部分で手こずり、十分な成果が出せないままだった。

“must” 表現や few-shot などは試し済みだったが、他にまだまだ心当たる部分があったので試してみたい。あと、モデルの推論用フィールドを定義するというアイデアは、いまいちイメージ湧いていないが面白そう。

最後に Apple でのワークショップで教えていただいたプロンプトテクニックの記事。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です