こちらのリソースの1個目です。太字になっているところが特に知らなかったところです
Top-PとかTop-Kとかは自分は知っていたのと、プロンプティング手法/ゼロショット, ワンショットとフューショット(例を与えるやつ)などは知っていたので飛ばしています。
- システムプロンプティング:
- 全体的なコンテキスト、何をするべきかを定義。例えば"あなたは与えられた英語を日本語に翻訳を行います。"とか、"有効なJSONを返してください。"など。
- ロールプロンプティング:
- "あなたは旅行ガイドの役割を演じてください。"など。
- コンテキストプロンプティング:
- "あなたは 80 年代のレトロアーケードビデオゲームに関するブログ記事を執筆しています。"など。
- ステップバック・プロンプティング:
- 一度の『ステップバック』(一歩引くこと)によって背景知識や推論プロセスを活性化させる。
-
ゲームのストーリー作って
-
- ゲームの舞台設定を5つ考えて
- 以下の舞台設定から一つ選んでストーリー作って
-
- 一度の『ステップバック』(一歩引くこと)によって背景知識や推論プロセスを活性化させる。
- Chain of Thought (CoT)
- 中間に推論ステップを生成させることにより、LLM の推論能力を向上させるための手法
- (ちょっとこの用語が出てきたあとにReasoningモデルとかとかThinkingモデルとかが出てきてちょっとややこしいんですよね。これはあくまで、プロンプトのテクニックで、"ステップバイステップで考えて"みたいに言うテクニックで、ReasoningとかThinkingとかはモデル自体の能力みたいな感じです。)
-
自己整合性(self consistency)
- (ここまでは割と知っている単語が多かったですがこれは知らなかったです。)
- 同じプロンプトを複数回Temperature大きめでLLMに与え、一番多かった答えを使うだけです。(説明にはなかったですが、Chain of Thoughtと組み合わせるっぽいです。)
- 正確性と一貫性がアップするそう。
-
Tree of Thoughts (ToT)
- "CoT プロンプティングの概念を一般化したものであり、単一の直線的な思考の連鎖をたどるだけでなく、LLM が複数の異なる推論パスを同時に探索することを可能にします。"だそうです。
- この図がわかりやすいです。 https://github.com/princeton-nlp/tree-of-thought-llm より
- (プロンプトエンジニアリングの範囲外になっている気がしています。ただ、普通の自分たちのチャットとかを考えると、もういっかい作り直させて続けてチャットしてるのに近いなと思いました。この思考というのは段落や一つの文を指すみたいです。)
- ReAct(Reason and Act)
- "ReAct プロンプティングは、推論と行動を「思考・行動ループ」へと組み合わせることで機能する"。
- 解決するまで以下を繰り返す
- 問題について推論して行動計画を立てる
- 実行して、観察
- 推論を更新して行動計画を立てる
-
自動プロンプトエンジニアリング(Automatic Prompt Engineering/APE)
- 以下を行う
- プロンプトのバリエーションをいくつか作らせる
- 評価指標(BLEUやROUGE)に基づいて候補をスコアリング
- 最高の評価スコアを持つ表現例候補を選択
- 以下を行う
ベストプラクティス
- 例を提供する。期待する結果を得やすい
- シンプルな設計。人間にとっても簡潔、明確、そして理解しやすいプロンプトであるべき。
- 行動を明確に示す動詞を使用する
振る舞う (Act)、分析する (Analyze)、分類する (Categorize/Classify)。。など
- 具体的な出力指示
トップ 5 のビデオゲーム機に関する 3 段落のブログ記事を生成してください。
-
制約より指示を書くべき
- 研究が、「してはいけないこと」リストより、望ましいフォーマット、スタイルなどを指定するほうが効果的である可能性を示唆しているそう。ただ制約が有用な場面はあるそう。
- 長さを制限する
ツイートの長さ程度で解説してください。
- 色んなスタイルを試す。
- 質問形式
- 普通の文(平常文)。最後に...にして続きを作らせる
- 指示形式。文章を作成してください。
- 分類タスクではフューショットの例の順番によって過学習されてしまうことがあるので例を混ぜる。
- JSONとスキーマを使うことも検討
- アプリケーションで扱いやすい
- ただtokenなどは多かったりする
- json-repair ライブラリなどを使うと、途中までで終わってしまったりして壊れたJSONを直せたりする
- CoT のベストプラクティス
- 推論の後に回答を置くことが必須
- 自己整合性(多数決で決めるやつ)を使う場合回答と推論部分を分離できる必要がある
-
CoTではTemperature を 0 に設定する
- CoTはグリーディーデコーディング(Temeperature 0で生成していくやつ)に基づいているため。だそうです。 (多分元の論文がそうなっている。)
-
プロンプト試行の文書化
-
スプレッドシートなどで以下を管理する
- プロンプトやモデルなどの設定(RAGも使っているならRAGのシステムの要素など)とその結果を管理する
-
保守しやすくなるように、プロンプトはコードとは別のファイルに保存
-
理想的にはプロンプトを運用化されたシステムの一部とし、自動化されたテストと評価手順を活用
-
プロンプトエンジニアリングは反復的なプロセスで、プロンプトを作成・テストし、分析・文書化、パフォーマンスによって改善していく。
-
まとめ
意外と知らないことがあったので読んで良かったです。みなさんも読んでみてください。