AI Prompt Engineering · Pelajaran

Keyakinan dan Ketidakpastian dalam Klasifikasi

Minta model menilai tingkat keyakinan dan menangani klasifikasi yang ambigu.

Pelajaran 4 dari 413 langkah

Keyakinan dan Ketidakpastian dalam Klasifikasi adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Masalah Model yang Terlalu Percaya Diri

Secara bawaan, LLM menjawab tugas klasifikasi dengan kepastian yang tampak jelas, bahkan ketika input benar-benar ambigu. Model yang diminta mengembalikan positif, negatif, atau netral akan selalu memilih salah satunya—tidak pernah mengatakan saya tidak yakin.

Dalam sistem produksi, memperlakukan klasifikasi yang tidak pasti seolah-olah pasti menyebabkan kesalahan yang mahal: tiket dukungan diarahkan ke tujuan yang salah, rekomendasi keliru, dan laporan tidak akurat.

Kuantifikasi ketidakpastian dalam prompt klasifikasi mengatasi masalah ini.

Skor Keyakinan 1–10

Meminta model menilai keyakinannya pada skala numerik memberikan sinyal terperinci yang dapat digunakan sistem hilir sebagai ambang batas:

import anthropic, json

client = anthropic.Anthropic(api_key='YOUR_API_KEY')

def classify_with_confidence(text):
    prompt = f'''
Classify the sentiment of the text below.
Return JSON:
{{
  "sentiment": "positive|negative|neutral",
  "confidence": 1-10,
  "reason": "brief explanation of confidence level"
}}

Confidence scale: 10=completely certain, 1=total guess, 5=genuinely ambiguous

Text: {text}
'''
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=100,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return json.loads(r.content[0].text)

print(classify_with_confidence('I sort of liked it but the wait was too long.'))
print(classify_with_confidence('This product is absolutely outstanding!'))

Respons UNCERTAIN

Menginstruksikan model untuk secara eksplisit merespons dengan UNCERTAIN ketika keyakinan klasifikasi berada di bawah ambang batas menghasilkan tiga jenis keluaran: positif, negatif, atau UNCERTAIN:

def classify_or_uncertain(text, uncertainty_threshold=4):
    prompt = f'''
Classify the sentiment of the text: positive, negative, or neutral.

If the sentiment is genuinely ambiguous or you are not confident (confidence below {uncertainty_threshold}/10),
return UNCERTAIN instead of guessing.

Return JSON: {{"sentiment": "positive|negative|neutral|UNCERTAIN", "confidence": 1-10}}

Text: {text}
'''
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=80,
        messages=[{'role': 'user', 'content': prompt}]
    )
    result = json.loads(r.content[0].text)

    if result['sentiment'] == 'UNCERTAIN' or result['confidence'] < uncertainty_threshold:
        print(f'Routing to human review: confidence={result["confidence"]}')
    return result

print(classify_or_uncertain('It was fine, I guess. Not bad, not great.'))
print(classify_or_uncertain('Absolutely terrible product. Never buying again.'))

Probabilitas Kategori Berperingkat

Alih-alih memaksa satu kategori, minta model mengurutkan semua kategori yang mungkin berdasarkan kemungkinan. Ini menunjukkan seberapa dekat dua kategori teratas:

def classify_ranked(text, categories):
    cats = ', '.join(categories)
    prompt = f'''
Classify this text into one of these categories: {cats}

Return ALL categories ranked by likelihood, highest first.
Return JSON: {{"ranked": [{{"category": str, "probability": 0.0-1.0}}]}}
Probabilities must sum to 1.0.

Text: {text}
'''
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=150,
        messages=[{'role': 'user', 'content': prompt}]
    )
    result = json.loads(r.content[0].text)
    return result['ranked']

cats = ['billing', 'technical', 'general', 'cancellation']
ranked = classify_ranked('I was charged twice and now my account is locked.', cats)
for item in ranked:
    print(f'{item["category"]}: {item["probability"]:.0%}')

Menggunakan Sebaran Probabilitas untuk Mendeteksi Ambiguitas

Selisih antara dua probabilitas berperingkat teratas merupakan sinyal ambiguitas yang andal. Selisih kecil berarti model tidak yakin; selisih besar berarti model yakin:

def classify_with_ambiguity_detection(text, categories, ambiguity_threshold=0.15):
    ranked = classify_ranked(text, categories)

    top1_prob = ranked[0]['probability']
    top2_prob = ranked[1]['probability'] if len(ranked) > 1 else 0
    spread = top1_prob - top2_prob

    is_ambiguous = spread < ambiguity_threshold

    return {
        'primary': ranked[0]['category'],
        'secondary': ranked[1]['category'] if len(ranked) > 1 else None,
        'confidence_spread': round(spread, 3),
        'is_ambiguous': is_ambiguous,
        'action': 'human_review' if is_ambiguous else 'auto_classify'
    }

result = classify_with_ambiguity_detection(
    'My upgrade did not apply and I think I was still charged.', ['billing', 'technical', 'general', 'cancellation']
)
print(result)

Ketidakpastian Kondisional: Jika Tidak Yakin, Bertanya

Untuk aplikasi percakapan, alih-alih mengembalikan UNCERTAIN, model dapat meminta klarifikasi:

SYSTEM_CLARIFY = '''
You are a support ticket classifier.
If the customer message is clear, classify it and respond with JSON:
{"action": "classify", "category": str, "confidence": 1-10}

If the message is ambiguous or you are not sure which category applies, respond with:
{"action": "clarify", "question": "A single clarifying question to ask the customer"}

Categories: billing, technical, account, cancellation

Only ask for clarification when genuinely needed. Prefer classification when possible.
'''

def classify_or_ask(message):
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=100,
        system=SYSTEM_CLARIFY,
        messages=[{'role': 'user', 'content': message}]
    )
    return json.loads(r.content[0].text)

print(classify_or_ask('It is not working anymore.'))
print(classify_or_ask('Cancel my subscription immediately.'))

Mengalibrasi Keyakinan: Temperatur dan Konsistensi

Menjalankan klasifikasi yang sama beberapa kali pada temperatur berbeda menunjukkan ketidakpastian model yang sebenarnya. Variansi tinggi = input benar-benar ambigu:

from collections import Counter

def calibrated_classify(text, n_samples=5):
    results = []
    for _ in range(n_samples):
        r = client.messages.create(
            model='claude-opus-4-5', max_tokens=50,
            messages=[{'role': 'user', 'content': f'Classify as positive/negative/neutral. Return JSON: {{"sentiment": str}}\n\n{text}'}]
        )
        results.append(json.loads(r.content[0].text)['sentiment'])

    counts = Counter(results)
    dominant = counts.most_common(1)[0]
    agreement_rate = dominant[1] / n_samples

    return {
        'classification': dominant[0],
        'agreement_rate': agreement_rate,
        'is_uncertain': agreement_rate < 0.7,
        'all_results': dict(counts)
    }

result = calibrated_classify('The product is okay, nothing special.')
print(result)

Pengarahan Berdasarkan Keyakinan

Sistem pengarahan produksi menggunakan tingkat keyakinan untuk mengarahkan ke penangan berbeda:

def route_by_confidence(text, classify_fn, auto_threshold=8, human_threshold=4):
    result = classify_fn(text)
    confidence = result.get('confidence', 5)
    category = result.get('category') or result.get('sentiment', 'unknown')

    if confidence >= auto_threshold:
        return {'route': 'auto_process', 'category': category, 'confidence': confidence}
    elif confidence >= human_threshold:
        return {'route': 'auto_process_with_flag', 'category': category, 'confidence': confidence,
                'flag': 'Low confidence — monitor output'}
    else:
        return {'route': 'human_review', 'category': category, 'confidence': confidence,
                'flag': 'Very low confidence — human classification required'}

print(route_by_confidence('Hate this product.', classify_with_confidence))
print(route_by_confidence('It is kind of okay but also not really.', classify_with_confidence))

Kolom Ketidakpastian Terstruktur

Skema ketidakpastian komprehensif untuk keluaran klasifikasi:

UNCERTAINTY_SCHEMA = '''
Return JSON:
{
  "primary_category": "string",
  "confidence": 1-10,
  "uncertainty_type": "none | ambiguous_input | insufficient_context | boundary_case | none",
  "alternative_categories": ["string"] or [],
  "uncertainty_explanation": "string or null",
  "recommended_action": "auto_classify | human_review | request_more_info"
}

Uncertainty types:
- ambiguous_input: The text could clearly mean multiple things
- insufficient_context: Need more information to classify correctly
- boundary_case: The text sits on the border between two categories
- none: Clear classification, no uncertainty
'''

print(UNCERTAINTY_SCHEMA)
print('Use this schema for any classification task requiring uncertainty quantification.')

Melacak Ketidakpastian dalam Produksi

Pantau tingkat ketidakpastian dalam produksi untuk mendeteksi penurunan kualitas prompt atau pergeseran kategori:

class ClassificationMonitor:
    def __init__(self, human_review_threshold=0.15):
        self.total = 0
        self.uncertain = 0
        self.threshold = human_review_threshold
        self.category_counts = {}

    def record(self, result):
        self.total += 1
        cat = result.get('category', 'unknown')
        self.category_counts[cat] = self.category_counts.get(cat, 0) + 1

        if result.get('confidence', 10) < 5 or result.get('sentiment') == 'UNCERTAIN':
            self.uncertain += 1

    def report(self):
        uncertain_rate = self.uncertain / self.total if self.total else 0
        alert = uncertain_rate > self.threshold
        return {
            'total': self.total,
            'uncertain_rate': round(uncertain_rate, 3),
            'alert': alert,
            'category_distribution': self.category_counts
        }

monitor = ClassificationMonitor()
print('Production monitoring system defined.')

Kapan Memercayai Keyakinan Tinggi

Keyakinan model yang tinggi tidak selalu berarti klasifikasi yang benar. Mode kegagalan umum bahkan pada tingkat keyakinan tinggi:

  • Bias sistematis: Model secara konsisten salah memberi label pada pola tertentu dan menghasilkan jawaban yang salah dengan keyakinan tinggi
  • Pergeseran domain: Model yakin, tetapi gaya input sangat berbeda dari data yang digunakan saat pelatihannya
  • Sikap menjilat: Model menyesuaikan keyakinan dengan hal yang terdengar baik, bukan dengan kepastian yang sebenarnya

Selalu evaluasi kalibrasi keyakinan menggunakan kumpulan uji berlabel—bukan hanya keakuratan, tetapi juga apakah prediksi dengan keyakinan tinggi benar-benar lebih akurat daripada prediksi dengan keyakinan rendah.

Pemeriksaan Cepat

Apa yang ditunjukkan oleh selisih kecil antara dua probabilitas kategori berperingkat teratas dalam hasil klasifikasi?

Ketidakpastian dalam Klasifikasi — Inti Pembelajaran

Kuantifikasi ketidakpastian mengubah klasifikasi dari kotak hitam menjadi sistem yang dapat dikelola:

  • Minta skor keyakinan (1–10) pada setiap klasifikasi—jangan pernah menganggap semua keluaran sama-sama dapat diandalkan
  • Gunakan respons UNCERTAIN untuk input yang benar-benar ambigu, bukan memaksa pemilihan kategori
  • Urutkan semua kategori berdasarkan probabilitas—selisih antara dua kategori teratas adalah sinyal ambiguitas terbaik
  • Arahkan ke peninjauan manusia ketika keyakinan berada di bawah ambang batas; proses otomatis ketika berada di atasnya
  • Untuk aplikasi percakapan, ajukan pertanyaan klarifikasi alih-alih mengembalikan UNCERTAIN
  • Pantau tingkat ketidakpastian dalam produksi—kenaikan tingkat tersebut menandakan penurunan kualitas prompt atau pergeseran kategori
  • Selalu evaluasi kalibrasi keyakinan menggunakan data berlabel—bukan hanya keakuratan
Gratis untuk memulai

Belajar AI Prompt Engineering dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
53
Pelajaran
199

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Keyakinan dan Ketidakpastian dalam Klasifikasi” gratis?

Ya — teks lengkap “Keyakinan dan Ketidakpastian dalam Klasifikasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Keyakinan dan Ketidakpastian dalam Klasifikasi”?

Minta model menilai tingkat keyakinan dan menangani klasifikasi yang ambigu. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?

Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Keyakinan dan Ketidakpastian dalam Klasifikasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?

Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Perintah Ekstraksi Entitas Bernama
  2. Ekstraksi Data Berbasis Skema
  3. LLM sebagai Pengklasifikasi Teks
  4. Keyakinan dan Ketidakpastian dalam Klasifikasi
← Kembali ke AI Prompt Engineering