Lewati ke isi

Bab 7: Self-Consistency

Kalau jawaban LLM kadang benar kadang salah, jangan tanya sekali. Tanya 5 kali, ambil yang paling sering keluar.

Self-Consistency adalah upgrade sederhana tapi powerful dari CoT. Konsepnya: multiple sampling + majority vote.

Setelah Bab 7, kamu akan bisa:

  • Memahami kenapa LLM tidak deterministic
  • Pakai self-consistency untuk meningkatkan akurasi reasoning
  • Tahu trade-off antara cost vs accuracy
  • Aplikasikan di task kritis

7.1. Masalah: LLM Tidak Deterministic

Tanya pertanyaan yang sama 5 kali ke LLM, kamu bisa dapat 5 jawaban berbeda. Ini disengaja — model punya parameter temperature yang mengontrol seberapa random output.

  • Temperature 0 = deterministic (jawaban yang sama tiap kali)
  • Temperature 1 = creative (variasi tinggi)
  • Default biasanya 0.7-0.8 = balance

Untuk task reasoning, randomness ini bisa jadi masalah. Mungkin 4 dari 5 kali jawabannya benar, 1 kali salah. Bagaimana kalau kamu kebetulan dapat yang salah?

7.2. Solusi: Vote dari Multiple Samples

Self-Consistency = jalankan prompt sama beberapa kali, ambil jawaban yang paling sering muncul.

flowchart TB
    Prompt["Prompt CoT yang sama"]

    Run1["Run 1<br/>Reasoning A<br/>→ Jawaban: 11"]
    Run2["Run 2<br/>Reasoning B<br/>→ Jawaban: 11"]
    Run3["Run 3<br/>Reasoning C<br/>→ Jawaban: 13"]
    Run4["Run 4<br/>Reasoning D<br/>→ Jawaban: 11"]
    Run5["Run 5<br/>Reasoning E<br/>→ Jawaban: 11"]

    Vote{"Majority vote<br/>11: 4 votes<br/>13: 1 vote"}
    Final["Jawaban final: 11"]

    Prompt --> Run1
    Prompt --> Run2
    Prompt --> Run3
    Prompt --> Run4
    Prompt --> Run5

    Run1 --> Vote
    Run2 --> Vote
    Run3 --> Vote
    Run4 --> Vote
    Run5 --> Vote

    Vote --> Final

    style Prompt fill:#1a1a1a,stroke:#6366f1,color:#fafafa
    style Run1 fill:#1a1a1a,stroke:#10b981,color:#fafafa
    style Run2 fill:#1a1a1a,stroke:#10b981,color:#fafafa
    style Run3 fill:#1a1a1a,stroke:#ef4444,color:#fafafa
    style Run4 fill:#1a1a1a,stroke:#10b981,color:#fafafa
    style Run5 fill:#1a1a1a,stroke:#10b981,color:#fafafa
    style Vote fill:#1a1a1a,stroke:#f59e0b,color:#fafafa
    style Final fill:#1a1a1a,stroke:#10b981,color:#fafafa

Cara baca diagram

Diagram ini menjelaskan mekanisme self-consistency.

Step demi step:

  1. Prompt (indigo) — prompt CoT yang sama, tidak diubah
  2. 5 runs — jalankan prompt 5 kali. Karena temperature > 0, tiap run dapat reasoning yang sedikit berbeda, kadang jawaban juga beda
  3. Majority vote (amber) — hitung jawaban final dari tiap run, ambil yang paling sering muncul
  4. Final answer (hijau) — jawaban yang dipakai

Insight kunci:

LLM cenderung konvergen ke jawaban benar lewat banyak path reasoning yang berbeda. Kalau jawaban benar, banyak reasoning berbeda akan tetap menuju ke sana. Kalau jawaban salah, biasanya cuma 1 path (yang error). Majority vote menyaring noise.

Bayangkan analogi quiz:

  • Tanya 1 expert: 80% akurasi
  • Tanya 5 expert independen, ambil jawaban majority: ~95% akurasi

Bahkan kalau tiap expert tidak 100% benar, agregasi dari beberapa expert menghasilkan akurasi tinggi. Sama prinsipnya.

Trade-off: cost. 5 kali run = 5 kali bayar. Untuk task kritis (medical, legal, finance) — worth it. Untuk task biasa — overkill.

7.3. Cara Pakai

Manual

Jalankan prompt CoT yang sama 3-5 kali. Catat jawaban masing-masing. Pilih yang paling sering muncul.

Prompt (CoT):

Q: Roger punya 5 bola tenis. Dia beli 2 kaleng @ 3 bola.
   Total bola sekarang?

Mari kita pikirkan langkah demi langkah.

Run 5x. Output: - Run 1: 11 - Run 2: 11 - Run 3: 11 - Run 4: 11 - Run 5: 13

Jawaban: 11 (4/5 votes).

Programmatik (Python)

import openai
from collections import Counter

def self_consistency(prompt, n=5):
    answers = []
    for _ in range(n):
        response = openai.ChatCompletion.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.7,  # tinggi supaya ada variasi
        )
        answer = extract_answer(response.choices[0].message.content)
        answers.append(answer)

    # Majority vote
    vote = Counter(answers)
    return vote.most_common(1)[0][0]

def extract_answer(text):
    """Extract jawaban final dari output CoT."""
    # Custom regex sesuai format yang kamu pakai
    # ...
    pass

7.4. Kapan Pakai Self-Consistency?

✓ Pakai

  • High-stakes decisions — medical, legal, financial advice
  • Math/logic problems yang kritis
  • Customer-facing AI yang harus reliable
  • Validation answer dari prompt baru sebelum production

✗ Skip

  • Creative tasks — kamu mau variasi, bukan konvergensi
  • Simple Q&A dengan akurasi sudah tinggi
  • Cost-sensitive apps
  • Latency-sensitive apps (5x time)

7.5. Optimasi

Tip 1: Tidak harus 5 runs. Eksperimen — 3 runs sering cukup untuk task simple.

Tip 2: Naikkan temperature untuk variasi reasoning yang lebih luas (0.7-0.9).

Tip 3: Cache result kalau prompt sering diulang.

Tip 4: Self-consistency cuma untuk task yang punya jawaban definitive — math, classification. Untuk task open-ended (creative writing), tidak masuk akal.

7.6. Kombinasi: CoT + Self-Consistency + Few-Shot

Power tool: gabung 3 teknik.

[FEW-SHOT EXAMPLES dengan CoT]

Q: [contoh]
Reasoning: ...
Jawaban: X

Q: [contoh 2]
Reasoning: ...
Jawaban: Y

Q: {{ pertanyaan_baru }}
Reasoning:

Run 5x. Majority vote.

Akurasi maksimal, cost juga maksimal. Reserve untuk task paling kritis.

7.7. Latihan

7.1 — Math Validation

Pilih 5 word problem math SMP. Run prompt CoT 3x masing-masing. Catat jawaban. Berapa yang stabil vs varies?

7.2 — Cost-Benefit

Hitung cost prompt (token usage). Bandingkan single-run vs 5-run. Apakah worth it untuk use case kamu?

7.3 — Edge Cases

Cari problem yang LLM sering bingung. Test self-consistency. Apakah majority vote benar?

Self-Consistency Pattern

1. Buat prompt CoT
2. Run N kali (N = 3-5)
3. Extract jawaban dari tiap output
4. Majority vote

Kapan Pakai

✓ High-stakes (medical, legal, finance) ✓ Math/logic kritis ✓ Production validation

Kapan Skip

✗ Creative tasks ✗ Cost-sensitive ✗ Latency-sensitive ✗ Open-ended writing

Tips

  • Temperature 0.7-0.9 untuk variasi
  • 3-5 runs sweet spot
  • Cache untuk prompt repeated
  • Cuma untuk task dengan jawaban definitive

← Bab 6 Lanjut Bab 8 →

Diadaptasi dari modul "Self-Consistency" dari Learn Prompting. Berdasarkan paper "Self-Consistency Improves Chain of Thought Reasoning in Language Models" (Wang et al., 2022). Dilisensikan Apache 2.0.