「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
PE(Prompt Engineering)
- プロンプトとは利用者によるLLMへの入力の事。
- PEは、LLM出力を最適化するよう入力(プロンプト)を最適化するプロセス
基礎 †
- LLMは論理的に思考しているのではなく、次単語を確率的に予測し文書構築をしているに過ぎない。
- プロンプトとはコマンド(命令)を意味するが、実際は次単語予測のコンテキスト(文脈)を与えているに過ぎない。
- LLMが適切な回答が出来るのは「事実」や「論理的な思考の過程や産物」を、適切なコーパスによって学習しているに過ぎない。
振り返り †
ICL (In-context Learning) †
文脈内学習ともよばれる。
- 重み(パラメタ)更新を伴わない学習
- 与えられたプロンプト(≒ コンテキスト)から学習する。
- 処理的に言うと、コンテキストとして与えたプロンプトのAttentionによって、
恰も、学習の結果、重み(パラメタ)更新された様に後のベクトル処理が変化する。
- 追加学習やファインチューニングと対比され、関連用語も対比して用いられる。
- Few-shot Learning → Few-shot prompting
- One-shot Learning → One-shot Prompting
- Zero-shot Learning → Zero-shot Prompting
CoT (Chain-of-Thought Prompting) †
LLMに問題に回答する際の「思考過程」をICLさせるもの。
- プロンプトに思考過程を含めることで結果、品質が向上する。
- 特に「数学の文章問題を解く」ようなタスクの際に品質が向上した。
- 規模言語モデル(パラメタが60Bくらい)でないと、CoTの効果は実感できない。
(CoTに対応できるLLMは、コーパスから思考過程も学習済み)
- CoT対応のLLMは、多くの思考過程を学習しているが、未学習の思考過程も多数ある。
これをICLで与えると、学習済みの思考過程と、与えた思考過程を活用して、精度の高い応答を生成する。
Prompt Engineering †
Zero-shot Prompting †
- Zero-shot Learning → Zero-shot Prompting
- 1つも事例を足さない
One-shot Prompting †
- One-shot Learning → One-shot Prompting
- 1つの事例を足す
Few-shot prompting †
- Few-shot Learning → Few-shot prompting
- 少しの事例を足す
Zero-shot CoT †
- Zero-shot Prompting → Zero-shot COT
- 以下の一文を付け足し、段階的に推論を進めるよう指示する。
- 「ステップに分けて考えてください」
- 「ステップバイステップで考えてみましょう」
One-shot CoT †
- One-shot Prompting → One-shot COT
- 1つの思考過程を足す
Few-shot CoT †
- Few-shot Prompting → Few-shot COT
- 複数の思考過程を足す
Self-Consistency †
- 複数の思考過程を生成する部分
- 複数の思考過程(≒ Few-Shot CoT)を大量に与えて、
多様な思考過程に対応する思考結果を形成する部分
- 形成した思考過程に対応する思考結果を評価する部分
から構成されるプロンプティング技術。
- 複数の思考過程生成
- LLMに対して同じ質問を複数回行い、異なる思考過程を生成。
- これにより、モデルが異なる視点や方法で問題を解決する様子を観察できる。
- 思考過程の評価
- 生成された各思考過程を評価し、一貫性や信頼性を確認。
- 評価基準には、論理的整合性や結果の正確性が含まれる。
- 最も一貫性のある結果の選択
- 評価結果に基づき、最も一貫性のある思考過程を選択。
- これにより、最も信頼性の高い解答が得られる。
- 結果の統合
- 選択された思考過程の結果を統合し、最終的な解答を生成する。
- 必要に応じて、追加の情報やコンテキストを加えて結果を補完。
- フィードバックと改善
- 得られた結果に対してフィードバックを行い、性能を継続的に改善。
- フィードバックループを通じて、精度と一貫性を向上させる。
GKP (Generated Knowledge Prompting) †
- Self-Consistencyに似た技術で、思考過程ではなく事前知識を生成。
- LLMに事前知識を生成させ、その知識をプロンプトに追加する。
- 事前学習した知識をプロンプトに含めることで、回答の一貫性と正確性が向上するため。
- コンテキストの強化
- 推論能力の強化(CoT的な意味で)
- 学習済情報の再利用によるモデルの精度向上(LLMの一般的な特性)
Self-Ask †
- フォローアップの質問を繰り返し促して、思考プロセスを反復的に構築する方法
- フォローアップの質問には、検索エンジンの結果を使用できる。
- 具体例:「エリザベス女王の在位期間は?」
- メイン質問: エリザベス女王の在位期間は?
- サブ質問1: エリザベス女王が即位した年は?
- サブ質問1の回答: 1952年
- サブ質問2: エリザベス女王が退位した年は?
- サブ質問2の回答: 2022年
- 最終回答: 2022年 - 1952年 = 70年
ToT (Tree of Thoughts) †
AoT (Algorithm of Thoughts) †
ReAct? (REasoning and ACTing) †
- 思考
- 入力を解析し、問題の本質を理解する。
- 問題解決のためのステップを計画する。
- 行動
- 計画されたステップに従ってタスクを実行する。
- 必要な知識情報を内部DBや外部DBから収集する。
- 観察
- 生成された結果を評価し、必要に応じて修正や改善を行う。
外部知識の活用と情報検索を組み合わせることで、LLMの性能を向上させる手法で、
プロンプトを用いてVDB内を検索して得たチャンクを事前知識としてプロンプトに追加し、LLMの性能を向上させるもの。
- GKPの事前知識をLLMから取り出すのではなく外部のVDBから取り出す方式のもの。
- ReActの行動部分が「事前知識をVDBを使用したチャンク検索で与える」方式のもの。
様々なPrompting †
Meta Prompting †
- Meta Promptingとはプロンプト生成のためのプロンプティング
- GKP、ToT、AoTなどは、プロンプト生成のためのプロンプティングをしている。
Dynamic Prompting †
- テキスト生成や画像生成のプロンプトに変数や条件を組み込み、複数の異なる出力を得るための手法。
- 特定のキーワードやフレーズを動的に変更することで、多様な出力を生成することを目的とする。
敵対的Prompting †
Prompt-Injection †
AIの応答をゆがめ、不正な情報の拡散などのリスクを発生させる。
- Injection方法は具体的ではない。
- 出力はチェックで悪用防止可能。
Prompt-Leaking †
Prompt-Injectionの亜種で、公開予定がない機密情報を含むプロンプトを漏洩させる
- Injection方法は具体的ではない。
- 入力プロンプトを出力させるような命令を付加
- 出力はチェックで漏洩防止可能。
Jailbreak †
Prompt-Injectionの亜種で、LLMのセーフティガードレールを迂回し、非倫理的な内容を回答させる
- Injection方法は具体的ではない。
- セーフティガードレールを迂回させるような命令を付加。
- 出力はチェックで漏洩防止可能。
詳細 †
参考 †
Qiita †