はじめに
2021年ごろまで、基盤モデルを用意してタスクに合わせてAIモデル(の重み)を修正するファインチューニングのアプローチが主流だった1。しかし、下記の理由からFine-tuningの限界が指摘されはじめた2。
- タスクごとに大量の教師データが必要になること
- 微調整すると、特定のタスクには強くなるが、汎用的な能力(OOD: Out-of-distribution)が失われること
- 人間は新しいタスクを学ぶときに、数千個の例題で脳の構造(重み)を書き換えたりしない(AIもほんの数例の指示で理解べき)
そこで出てきたのが、AIモデルに合わせて、タスク(プロンプト)のほうを修正するというアプローチである。本記事ではこのプロンプトエンジニアリングに関する技術をまとめた。
In-Context Learning
モデル重みを更新することなく、入力コンテキスト中に与えられた自然言語指示や少数の例示から、推論時のForward Passのみでタスクを認識・適応する仕組みとして、In-Context Learningが提案された2。
もし下記の状況を仮定できる場合、
- 事前学習分布が複数の潜在概念の混合(mixture of concepts)で概念間を十分区別できる
- 言語モデルが文書内の文全体で共有される潜在概念を推測する方法を暗黙的に学習している
- 潜在概念の例: wiki 略歴。通常、名前 (アルバート・アインシュタイン) → 国籍 (ドイツ人) → 職業 (物理学者) → ...)
言語モデルはいくつか例示を示されるだけで、ベイズ推論によって正しい概念を選択できると考えられる研究もある3。
なぜ言語モデルが共通概念を推定できるのか、は完全には説明されていない
Zero-shot / Few-shot Promptingの強化
In-Context Learningが提案された頃、Zero-shot PromptingやFew-shot Promptingの性能を向上させるための手法が大量に提案された。
Zero-shot関連
Instruction Tuning
事前学習時に、データセットをInstruction形式にして言語モデルを学習させると、Zero-shot学習の精度が上がるという研究4。
- Input: Translate this sentence to Spanish: The new office building was built in less than three
months. - Output: El nuevo edificio de oficinas se construyó en tres meses.
Few-shot関連
Few shot order sensitivity
Few-shot Promptingでは「どの例を選ぶか」だけでなく、「どの順番で提示するか」も性能を決定する重要な要因であり、プロンプトエンジニアリングが非常に繊細で難しい問題であることを明らかにした研究5。
LM-BFF(Better Few-shot Fine-tuning of Language Models)
良いプロンプトを自動生成、良いFew-shot例を自動選択する手法に関する研究6。
まず少数の訓練データでFine-tuningした後、開発データ上の精度が高いテンプレートを良いテンプレートと定義し、T57を用いてテンプレート候補を大量生成する。
SBERT8で文章埋め込みを作成し、訓練例とのコサイン類似度を計算して各クラスごとに、入力文と最も類似した上位50%の例からサンプリングする。
(c)LM-BFF6
KATE (Knn-Augmented in-conText Example selection)
Few-shot性能を高めるため、あらかじめ文エンコーダーを用いてデータをベクトル化しておき、テスト入力と埋め込み空間上で意味的に類似した(距離が近い)事例をk近傍法(kNN)で検索・選択して提示する手法に関する研究9。
従来のランダムに例を選ぶ方法と異なり、テスト文に最も近い有益な知識や文脈をモデルに与えられるため、GPT-3の性能を効果的に引き出すことが可能。
CoT (Chain-of-Thought)
従来のプロンプトでは、いくつかの「問題と答え(結論のみ)」のペアを例示(Few-shot)してモデルに直接回答を求めていたが、複雑な推論問題においてこれでは高い正解率が得られなかった。そこで、例示の中に「結論に至るまでの自然言語によるステップ・バイ・ステップの推論プロセス(思考の過程)」を含めるChain-of-Thought(CoT) Promptingが提案され、モデルの推論能力が劇的に向上することが示された10。
また、例示(Few-shot)を使わなくても、プロンプトの末尾に 「Let's think step by step(段階的に考えてみましょう)」 と付け足すだけで、LLMの推論能力が劇的に向上するという発見もあった11。
Deliberate Reasoning Prompting
CoTを含む一本道の思考では、一度思考のレールを踏み外すと最後まで間違え続けるという限界に対し、AIに複数のレールを考えさせる(熟考させる)ためのプロンプト手法が提案されてきた。
Self-Consistency
従来のCoTプロンプトで用いられていた「貪欲法(常に最も確率の高い単語を1つだけ選ぶデコーディング)」に代わる新しいアプローチ12。「複雑な推論問題には複数の考え方が存在し得るが、正しい論理展開であれば一意の正しい答えにたどり着くはずである」という人間の思考経験を模倣して設計されている。
処理プロセスは、以下の3つのステップで構成されている。
- 言語モデルに思考プロセスの例を提示して質問
- 確率的なサンプリングを用いて、モデルから多様な「思考プロセスと最終回答のペア」を複数同時に生成
(貪欲法では1つの回答だけを出力) - それら複数の推論結果から最終的な回答のみを抽出し、多数決で最も多く登場した回答を最終的な正解として採択
ToT (Tree of Thoughts)
Self-Consistencyのような「左から右へのトークン単位の直線的な推論」に代わる新しい推論フレームワーク13。「思考(Thought)」と呼ばれるテキストのまとまりを中間ステップとして定義し、木構造(ツリー)を構築しながら探索・試行錯誤を行う、人間の deliberate(熟考する)な問題解決プロセスを模倣して設計されている。
処理プロセスは、以下の4つのステップ(メタステップ)で構成されている。
- 問題の思考単位への分解: 課題を解決するための中間ステップ(思考)を定義し、次のステップの候補を複数生成
- 思考の評価(セルフエボリューション): 各ステップ(ノード)がゴールに対してどれだけ有望か、モデル自身にスコア付けや判断(Good/Fair/Badなど)をさせて評価
- 探索アルゴリズムの適用: 「幅優先探索(BFS)」や「深背優先探索(DFS)」などのアルゴリズムを導入し、有望な経路を絞り込んだり、行き詰まったら前のステップに「バックトラック(巻き戻し)」したりして木構造を探索
- 最終回答の決定: 探索を通じて見つけ出した、全体として最もグローバルに最適で一貫性のある推論経路から最終的な正解を導出
GoT (Graph of Thoughts)
CoTやToTのような「直線的、または階層的な一方向の推論」に代わる、さらに柔軟な新しい推論フレームワーク14。「思考(Thought)」を頂点(ノード)、思考間の依存関係を辺(エッジ)とする任意のグラフ構造として情報をモデル化し、複数の推論を組み合わせたり、ループによって思考を洗練させたりする、より多角的で非線形な人間の思考ネットワークを模倣して設計されている。
処理プロセスは、以下の4つのモジュール(ステップ)の相互作用で構成されている。
- グラフの構築と制御(Controller): 課されたタスクに応じた静的な実行計画(思考の生成・集約などのルール)に基づき、動的な推論履歴としてのグラフ構造を構築・管理する。
- 思考の変換と生成(Prompter): 1つの思考から次の一手を分岐させる「生成(Generation)」だけでなく、複数の異なる推論を1つに統合する「集約(Aggregation)」、同一の思考をブラッシュアップする「洗練(Refining)」といったグラフ特有の変換をLLMへのプロンプトとして構築し、実行する。
- 思考のスコアリング(Scoring & Validation): 生成された各思考の妥当性や正確性を、モデル自身(または特定の評価関数)にスコア付けさせ、次の推論のステップに進めるかどうかの判断材料とする。
- 最終回答の抽出(Parser): 構築された思考グラフ全体を解析し、最もスコアが高く一貫性のある推論パス(経路)や集約された結果から、最終的な正解を抽出して出力する。
Automatic Prompt Optimization
人間が手動でプロンプトを試行錯誤するのではなく、アルゴリズムやLLM自身を使って自動的に最適なプロンプトを見つけ出す技術
Automatic Prompt Engineer (APE)
人間が手作業で行っていた「プロンプト(指示文)の設計・最適化」を、LLM自身に自動で行わせる新しい最適化フレームワーク15。プロンプトを一種の「プログラム」と捉え、指示文の候補生成とスコア評価のループを回すことで、対象のタスクに対して最大の性能を発揮する最適なプロンプトを自動的に選択・生成するように設計されている。
処理プロセスは、以下の3つのステップで構成されている。
- 指示文候補の生成(Prompt Generation): 提示された少数の入力・出力の例(データセット)をベースに、LLM(モデルA)に対して「これらの出力を導くための共通の指示文(プロンプト)」を複数同時に生成させる。
- スコア関数による評価(Prompt Evaluation): 生成された各プロンプト候補の品質を検証するため、別のLLM(モデルB)にそのプロンプトを与えてタスクを実行させ、期待通りの出力が得られるかを評価関数(精度や対数尤度など)でスコア付けする。
- 反復的な最適化と採択(Optimization & Selection): スコアの高い優秀なプロンプト候補をもとに、さらに洗練されたプロンプトを反復的に探索(モンテカルロ検索など)し、最終的に最も高いパフォーマンスを示したプロンプトを最適な正解(指示文)として採択する。
プロンプト中心アプローチの限界
上記のようなプロンプト中心アプローチにおいては、「Context Window(文脈サイズ)の限界」や「幻覚(Hallucination)」の問題が指摘された。プロンプトにどれだけ外部知識を詰め込んだとしても、コンテキスト処理能力の上限やコスト、さらにはモデルの根本的な脆弱性や知識の風化といった課題を完全に解決することは困難であることがわかり161718、RAG(Retrieval-Augmented Generation)などの検索拡張技術に注目が集まっていくきっかけとなった。
関連記事
-
An Explanation of In-context Learning as Implicit Bayesian Inference ↩
-
Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity ↩
-
Making Pre-trained Language Models Better Few-shot Learners ↩ ↩2
-
Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer ↩
-
Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks ↩
-
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models ↩
-
Self-Consistency Improves Chain of Thought Reasoning in Language Models ↩ ↩2
-
Tree of Thoughts: Deliberate Problem Solving with Large Language Models ↩ ↩2
-
Graph of Thoughts: Solving Elaborate Problems with Large Language Models ↩ ↩2
-
Ignore This Title and HackAPrompt: Exposing Systemic Vulnerabilities of LLMs through a Global Scale Prompt Hacking Competition ↩
-
Siren's Song in the AI Ocean: A Survey on Hallucination in Large Language Models ↩







