はじめに
「小型のLLMを使っているが、推論精度がどうしても足りない」
「ファインチューニングをするほどのコストもリソースもない」
そんな悩みを持つエンジニアは多いのではないでしょうか。LLMの精度を高めるアプローチは大きく分けて「モデルを賢くする(学習)」か「推論方法を工夫する」かの2つです。前者はコストがかかりますが、後者のプロンプトエンジニアリングであれば、今日からすぐに試すことができます。
本記事では、推論手法の基礎であるChain-of-Thought (CoT)のバリエーションを整理した上で、Googleの研究チームなどが提唱するSelf-Consistency(自己整合性)という手法と、その弱点を克服するためにACL2025で発表された最新手法CISC (Confidence Improves Self-Consistency)について、論文ソースと実装イメージを交えて解説します。
TL;DR (3行要約)
- CoTの進化: 単純なCoTだけでなく、「分解して解く(Least-to-Most)」や「画像を使う(Multimodal)」手法が登場している。
- Self-Consistency: CoTで複数回推論させ、多数決で答えを決める手法(Wang et al., 2022)。単純な多数決では「質の低い回答」が量で勝ってしまう場合がある。
- CISC: 回答に「自信度(Confidence)」の重み付けを行うことで、数学や論理タスクの精度を劇的に向上させる(ACL 2025 Findings)。
環境 / 前提条件
本記事の解説コードは、概念実証(PoC)レベルのPythonコードです。特定のライブラリに依存しませんが、以下の環境を想定しています。
- Language: Python 3.9+
-
Target LLM: GPT-4, Gemini 1.5 Pro, Claude 3.5 Sonnet などのAPI利用が可能なモデル
- ※ パラメータ設定で
temperatureを操作できることが前提です。
- ※ パラメータ設定で
-
Keywords:
Prompt Engineering,Chain-of-Thought,Self-Consistency
1. 基礎知識:Chain-of-Thought (CoT) の種類と進化
Self-Consistencyの話に入る前に、その基礎となる「思考の連鎖 (CoT)」について整理しておきましょう。単に「推論させる」といっても、現在ではいくつかの強力な派生系が存在します。
① Zero-shot CoT (ゼロショットCoT)
「魔法の言葉」として有名になった手法です。
プロンプトの末尾に "Let's think step-by-step"(ステップバイステップで考えて) というフレーズを追加するだけで、モデルの推論能力を引き出します。
- 特徴: 事前学習データ(例示)を用意する必要がないため、実装コストが最も低い。
- 仕組み: このトリガーにより、LLMは直感的な回答ではなく、論理的な推論ステップを出力し始め、その論理を使って最終回答を導きます。
- 論文: Large Language Models are Zero-Shot Reasoners (Kojima et al., 2022)
② Least-to-Most Prompting (L2M)
複雑な問題を「いきなり解く」のではなく、「簡単なサブ問題に分解して順番に解く」アプローチです。
- Stage 1 (Decomposition): ユーザーが問題を投げると、LLMがそれを複数の「サブ問題」に分解します。
- Stage 2 (Sequential Solving): ユーザー(またはシステム)がサブ問題を順番に入力し、LLMが前の答えを利用して次のサブ問題を解いていきます。最終的に元の難問の答えに辿り着きます。
- 論文: Least-to-Most Prompting Enables Complex Reasoning in Large Language Models (Zhou et al., 2022)
③ Multimodal CoT
テキストだけでなく、画像とテキストの両方を扱う手法です。GeminiやGPT-4Vなどのマルチモーダルモデルで有効です。
- Input: 画像、コンテキストの説明、質問。
- Stage 1 (Rationale Generation): 画像とテキストがどのように関連しているか、その「根拠(Rationale)」を出力させます。
- Stage 2 (Answer Inference): その根拠に基づいて、最終的な回答を推論します。
- 論文: Multimodal Chain-of-Thought Reasoning in Language Models (Zhang et al., 2023)
2. CoTを一歩進める「Self-Consistency」
上記のCoT手法は強力ですが、弱点があります。それは「1回しか考えない(Greedy Decoding)」という点です。
Self-Consistency(自己整合性)は、2022年にGoogle Brainの研究チームによって提案された手法です。
詳しくは論文「Self-Consistency Improves Chain of Thought Reasoning in Language Models」を参照してください。
一言で言えば、「1回の出力で満足せず、何度も考えさせて、一番多かった答えを採用する」というアプローチです。
従来の Greedy Decoding(最も確率が高い単語を選び続ける手法)では、一度推論の道を誤ると、そのまま間違った答えに辿り着いてしまいます。しかし、人間も難問を解くときは「あれ、この計算合ってるかな?」と何度か検算しますよね? それと同じことをLLMに行わせます。
実装の3ステップ
Self-Consistencyの実装は非常にシンプルで、大きく3つのステップに分かれます。
- Chain-of-Thought (CoT): プロンプトに「ステップバイステップで考えて」と指示し、推論過程を出力させる。
-
Sampling Diverse Paths: 同じプロンプトを複数回実行し、多様な解答を生成させる。
-
Point: ここで多様性を出すために
temperatureを0.7程度に上げ、ランダム性を持たせます。
-
- Majority Vote: 得られた複数の回答を集計し、最も出現頻度の高い(一貫性のある)答えを採用する。
コードイメージ (Python)
import collections
def self_consistency_inference(prompt, model_func, num_samples=5):
"""
Self-Consistencyの簡易実装
"""
answers = []
# Step 2: 多様なパスをサンプリング (例えば5回実行)
for _ in range(num_samples):
# model_funcは temperature=0.7 等で設定されている想定
output = model_func(prompt)
# Step 1: CoTの結果から最終的な「答え」部分だけを抽出する処理が必要
# (例: "The answer is 42." -> "42")
parsed_answer = extract_answer(output)
answers.append(parsed_answer)
# Step 3: 多数決 (Majority Vote)
counter = collections.Counter(answers)
most_common_answer, count = counter.most_common(1)[0]
return most_common_answer
# 実験結果によると、算数や論理推論タスクにおいて、
# 何もしない場合(0)と比べて、サンプリング数(5)程度でも劇的な精度向上が見られます。
3. 従来手法の弱点と最新進化版「CISC」
Self-Consistencyは強力ですが、致命的な弱点がありました。それは**「愚衆政治」になり得る**という点です。
Self-Consistency の課題
Googleの研究者らがACL 2025 Findingsで発表した論文「Confidence Improves Self-Consistency in LLMs」によると、以下の問題が指摘されています。
- 低品質な回答の量産: モデルがハルシネーション(幻覚)や誤った論理で、「間違った答え」を大量に生成してしまうことがある。
- 数の暴力: 正しい論理の回答が少数(例えば10回中3回)で、単純な誤りを含む回答が多数(10回中7回)だった場合、多数決ルールにより誤答が選ばれてしまう。
進化版: CISC (Confidence Improves Self-Consistency)
そこで登場したのが、CISCです。
これは、単純な「数」だけでなく、モデル自身の「自信度(Confidence)」を評価軸に加える手法です。
CISCのアルゴリズム
- 推論パスの生成: 従来通り複数の回答を生成。
- 信頼度のスコアリング: モデル自身に、その推論過程がどれくらい確信できるかスコア(0.0〜1.0)を出させる。
- 加重投票: 単純な件数カウントではなく、信頼度スコアの合計値で勝者を決める。
簡単な例:2024年の次のうるう年は?
複雑な条件(100で割り切れる年は除く、等)があるため、LLMが混乱しやすい問題です。
【従来の多数決】
- 回答A「2026年」: 4票 (論理破綻しているが、なぜか多い)
- 回答B「2028年」: 4票 (正しい推論)
- 結果: 2026年と2028年が同数で判断不能、もしくは運悪く2026年が選ばれる。
【CISC(加重投票)】
- 回答A「2026年」: 4票 ... だが、推論が曖昧なため信頼度は低め (0.3)
- スコア合計: $4 \times 0.3 = 1.2$
- 回答B「2028年」: 4票 ... 論理が明確なので信頼度は高い (0.9)
- スコア合計: $4 \times 0.9 = 3.6$
- 結果: 圧倒的なスコア差で「2028年(正解)」が選ばれる。
4. 適用範囲と注意点 (Discussion)
「じゃあ、全部CISCにすればいいの?」というと、そうではありません。論文内でも言及されていますが、タスクの性質によって向き不向きがあります。
CISCが有効なタスク (Closed Tasks)
- 算数・数学問題 (GSM8K, Math Word Problems)
- 論理推論 (CommonsenseQA, Symbolic Reasoning)
- コード生成 (正解の挙動が決まっているもの)
これらは「正解」が明確であり、推論パスの論理性が信頼度スコアに直結しやすいため、非常に高い効果を発揮します。
CISCがあまり効かないタスク (Open-Ended Tasks)
- ストーリー生成 / 創作
- 自由対話
- 要約
これらのタスクには「唯一の正解」が存在しません。
研究によると、オープンなタスクでSelf-ConsistencyやCISCを行うと、多様性が失われ、無難で面白みのない出力に収束してしまう傾向があります。また、信頼度スコアの差がつきにくく、選別の意味が薄れることも報告されています。
5. トラブルシューティング / 実装のコツ
-
APIコストの増大:
- Self-Consistencyは単純にAPIコール数が $N$ 倍になります。本番環境で導入する場合は、キャッシュの利用や、難易度が高いクエリにのみ適用するなどの工夫が必要です。
-
答えの抽出 (Parsing):
- LLMは饒舌です。「答えは〜です」と毎回同じフォーマットで返してくるとは限りません。正規表現などで数値を厳密に抽出するロジックを組むか、Function Calling (Structured Outputs) を利用してJSON形式で答えだけを出力させるのがベストプラクティスです。
まとめ
LLMの推論精度を向上させる「多数決プロンプト」の進化について解説しました。
- CoTの進化: Zero-shot CoT、Least-to-Most、Multimodal CoTなど、タスクに応じて最適な推論手法を選ぶ。
- Self-Consistency: 同じ質問を何度も投げ、多数決でエラーを排除する。
- CISC: 多数決に「自信度」の重みを加え、量の暴力による誤答を防ぐ。
- 使い分け: 数学や論理パズルには最強だが、創作活動には不向き。
計算コストはかかりますが、モデルを再学習させることに比べれば遥かに手軽です。「ここぞという時の回答精度」が必要な場面で、ぜひCISCのアプローチを試してみてください。
参考文献・リンク
- Zero-shot CoT: Large Language Models are Zero-Shot Reasoners (Kojima et al., 2022)
- Least-to-Most Prompting: Least-to-Most Prompting Enables Complex Reasoning in Large Language Models (Zhou et al., 2022)
- Multimodal CoT: Multimodal Chain-of-Thought Reasoning in Language Models (Zhang et al., 2023)
- Self-Consistency (Original Paper): Self-Consistency Improves Chain of Thought Reasoning in Language Models (Wang et al., 2022)
- CISC (ACL 2025 Paper): Confidence Improves Self-Consistency in LLMs (ACL Anthology)
- Implementation Guide (Japanese): LLMの推論能力を向上させる「Self-Consistency」の実装 (note)
- Video Explanation: YouTube: Self-Consistency Explained



