ストーリー
Self-Consistencyとは
Self-Consistencyは、同じプロンプトに対して複数の推論パス(Chain of Thought)を生成し、最も多く得られた回答を最終回答として採用する手法だ。
基本的な流れ
同じプロンプト → [温度を上げて複数回実行]
├── 推論パス1 → 回答A
├── 推論パス2 → 回答A
├── 推論パス3 → 回答B
├── 推論パス4 → 回答A
└── 推論パス5 → 回答A
多数決 → 回答A(4/5 = 80%の一致率)→ 最終回答
なぜ有効なのか
| 理由 | 説明 |
|---|---|
| 偶発的なエラーの排除 | 1回の推論で発生するランダムなミスを平均化 |
| 信頼度の指標 | 一致率が高いほど回答の信頼性が高い |
| 複数のアプローチ | 異なる推論パスが同じ結論に至ることで堅牢性が増す |
Self-Consistencyの実装方法
方法1: API経由で複数回呼び出し
async function selfConsistency(prompt: string, n: number = 5): Promise<string> {
const responses = await Promise.all(
Array.from({ length: n }, () =>
callLLM(prompt, { temperature: 0.7 })
)
);
// 回答部分を抽出
const answers = responses.map(extractFinalAnswer);
// 多数決
const counts = new Map<string, number>();
for (const answer of answers) {
counts.set(answer, (counts.get(answer) || 0) + 1);
}
// 最多の回答を返す
return [...counts.entries()].sort((a, b) => b[1] - a[1])[0][0];
}
方法2: 単一プロンプト内で複数の推論を生成
以下の問題について、3つの異なるアプローチで推論してください。
各アプローチの最終回答を明示し、最後に多数決で最終回答を決定してください。
問題: NetShop社のAPIレスポンスが遅延しています。以下のメトリクスから
最も可能性の高い原因を特定してください。
- CPU使用率: 30%
- メモリ使用率: 85%
- DB接続数: 95/100
- ネットワーク帯域: 40%
アプローチ1の推論:
(推論...)
→ 回答1: [原因]
アプローチ2の推論:
(推論...)
→ 回答2: [原因]
アプローチ3の推論:
(推論...)
→ 回答3: [原因]
多数決結果: [最終回答]
信頼度: [一致した割合]
一致率と信頼度
一致率は回答の信頼度を測る指標として使える。
| 一致率 | 信頼度 | アクション |
|---|---|---|
| 100%(5/5) | 非常に高い | そのまま採用 |
| 80%(4/5) | 高い | 採用して良い |
| 60%(3/5) | 中程度 | 追加検証を推奨 |
| 40%以下 | 低い | プロンプトの改善か人間の判断が必要 |
Tree of Thoughts(ToT)
Tree of Thoughtsは、Self-Consistencyをさらに発展させた手法だ。線形の推論パスではなく、木構造で推論を探索する。
概念図
[問題]
/ | \
思考A 思考B 思考C
/ \ | / \
A1 A2 B1 C1 C2
| | |
評価 評価 評価
↓ ↓ ↓
採用 却下 採用
ToTの3ステップ
- 生成(Generate): 各ステップで複数の思考候補を生成
- 評価(Evaluate): 各候補の妥当性を評価
- 探索(Search): 有望な候補を選択して次のステップへ進む
ToTのプロンプト例
以下の設計課題について、Tree of Thoughts形式で分析してください。
課題: NetShop社の検索機能を改善したい。現在の平均検索時間は3秒。
Step 1: 3つのアプローチを提案してください。
アプローチA: [提案]
アプローチB: [提案]
アプローチC: [提案]
Step 2: 各アプローチを以下の観点で評価してください(1-5点)。
- 実装難易度
- 効果の大きさ
- コスト
Step 3: 最も評価の高いアプローチを選択し、具体的な実装計画を作成してください。
Self-Consistency vs ToT vs CoT
| 項目 | CoT | Self-Consistency | ToT |
|---|---|---|---|
| 推論パス | 1本 | 複数(独立) | 木構造(分岐・評価) |
| コスト | 低 | 中(N回呼出し) | 高(各段階で複数生成) |
| 精度 | 中 | 高 | 最高 |
| 複雑さ | 低 | 中 | 高 |
| 適用場面 | 一般的な推論 | 正解が明確な問題 | 創造的・設計的な問題 |
実務での活用指針
| 場面 | 推奨手法 | 理由 |
|---|---|---|
| コードのバグ特定 | Self-Consistency | 正解が明確で多数決が有効 |
| アーキテクチャ設計 | ToT | 複数案の比較評価が必要 |
| ログの異常検知 | Self-Consistency | 複数の分析視点で堅牢性向上 |
| 新機能の企画 | ToT | 創造的なアイデア探索に適する |
| 翻訳・要約 | CoT(単独)で十分 | 推論の複雑さが低い |
まとめ
| 項目 | ポイント |
|---|---|
| Self-Consistency | 複数の推論パスを生成し多数決で回答を決定 |
| 一致率 | 回答の信頼度指標として活用 |
| Tree of Thoughts | 木構造で推論を探索し、各段階で評価・選択 |
| 使い分け | コスト・精度・タスク特性に応じて選択 |
チェックリスト
- Self-Consistencyの原理と多数決の仕組みを理解した
- 一致率を信頼度の指標として活用できる
- Tree of Thoughtsの生成・評価・探索の3ステップを理解した
- CoT / Self-Consistency / ToTの使い分けを判断できる
次のステップへ
次は「メタプロンプティング」として、プロンプトでプロンプトを生成する高度なテクニックを学ぼう。
推定読了時間: 30分