Pengambilan Sampel Konsistensi Diri
Melakukan pemungutan suara atas berbagai jalur penalaran.
Pengambilan Sampel Konsistensi Diri adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 2 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.
Satu Rantai Itu Rapuh
Satu rantai pemikiran dapat mengambil arah yang salah sejak awal dan tidak pernah pulih. Konsistensi mandiri (Wang dkk., 2022) mengatasi hal ini dengan mengambil sampel dari banyak jalur penalaran yang independen, lalu menggabungkan jawaban akhirnya, biasanya melalui pemungutan suara mayoritas.
Intuisinya: penalaran yang benar akan bermuara pada jawaban yang sama melalui berbagai rute, sedangkan kesalahan akan tersebar. Penggabungan memperkuat sinyal yang konsisten.
def self_consistency(prompt, n=20, temperature=0.7):
answers = []
for _ in range(n):
chain = llm(prompt, temperature=temperature)
answers.append(extract_answer(chain))
return majority_vote(answers)Mengapa Memarginalkan Jalur Berhasil
Konsistensi mandiri mendekati pemarginalan atas jalur penalaran: alih-alih memercayai satu derivasi laten, Anda memperkirakan jawaban akhir yang paling mungkin dengan menggabungkan banyak derivasi.
Ini adalah perkiraan Monte Carlo atas distribusi jawaban. Modus distribusi tersebut biasanya lebih dapat diandalkan daripada satu jalur sampel mana pun, terutama ketika ruang jawaban kecil dan diskret.
from collections import Counter
def majority_vote(answers):
norm = [normalize_answer(a) for a in answers]
counts = Counter(norm)
answer, votes = counts.most_common(1)[0]
confidence = votes / len(norm)
return answer, confidenceKeberagaman Melalui Suhu
Konsistensi mandiri memerlukan jalur yang beragam. Suhu greedy atau mendekati nol menghasilkan rantai yang hampir identik sehingga metode ini tidak efektif. Gunakan suhu sedang (sering kali 0,5 hingga 0,8) dan, bila perlu, pengambilan sampel top-p untuk menyebarkan jalur.
Suhu yang terlalu tinggi menurunkan kualitas setiap rantai secara individual; sesuaikan suhu untuk memaksimalkan akurasi ansambel, bukan kualitas satu rantai.
def tune_temperature(prompt, val_set, temps=(0.4, 0.6, 0.8, 1.0)):
best = max(
temps,
key=lambda t: ensemble_accuracy(prompt, val_set, temp=t, n=20)
)
return bestNormalisasi Jawaban Sangat Penting
Pemungutan suara hanya bermakna jika jawaban yang setara dikenali sebagai sama. Lakukan normalisasi sebelum menghitung: hapus satuan, ubah angka ke bentuk kanonis, ubah teks menjadi huruf kecil, uraikan pecahan dan persentase, serta terapkan kesetaraan khusus tugas.
Normalisasi yang buruk memecah mayoritas sebenarnya ke dalam berbagai bentuk permukaan dan memungkinkan jawaban minoritas memenangkan pemungutan suara.
def normalize_answer(a):
a = a.strip().lower().rstrip('.')
a = a.replace(',', '').replace('$', '').replace('%', '')
try:
return str(round(float(a), 6)) # numeric canonical form
except ValueError:
return aBerapa Banyak Sampel?
Akurasi meningkat seiring jumlah sampel n, tetapi dengan hasil yang semakin menurun, dan sering mendatar pada sekitar 10 hingga 40 sampel, tergantung tingkat kesulitan tugas. Setiap sampel menambah biaya dan latensi secara linear.
Uji beberapa nilai n pada himpunan validasi dan pilih titik tekuk kurva, yaitu saat sampel tambahan tidak lagi sebanding dengan biayanya.
def sweep_n(prompt, val, ns=(1,3,5,10,20,40)):
return {n: ensemble_accuracy(prompt, val, n=n) for n in ns}
# Choose n at the accuracy/cost knee, not the maximumPenghentian Dini Adaptif
Hemat komputasi dengan pengambilan sampel adaptif: berhentilah mengambil jalur setelah hasil pemungutan suara sudah menentukan pemenang. Jika setelah 5 sampel satu jawaban unggul jauh, sampel tambahan kecil kemungkinannya mengubah pemenang.
Dengan demikian, komputasi dipusatkan pada soal yang benar-benar sulit dan hasilnya masih diperdebatkan, sementara soal mudah dijawab dengan biaya rendah.
def adaptive_sc(prompt, max_n=40, margin=0.6, min_n=5):
answers = []
for i in range(max_n):
answers.append(extract_answer(llm(prompt, temperature=0.7)))
if i + 1 >= min_n:
ans, conf = majority_vote(answers)
if conf >= margin:
return ans, conf, i + 1
return majority_vote(answers)Pemungutan Suara Berbobot dan Berbantuan Verifikator
Mayoritas biasa memperlakukan semua jalur secara sama. Anda dapat memberi bobot pada suara berdasarkan kemungkinan yang diberikan model untuk suatu jalur, skor verifikator terlatih, atau evaluasi mandiri atas validitas setiap rantai.
Konsistensi mandiri berbobot verifikator sering mengungguli pemungutan suara tanpa bobot karena menurunkan peringkat pola kegagalan yang sering muncul meskipun dengan keyakinan tinggi.
def weighted_vote(chains):
scores = {}
for c in chains:
a = normalize_answer(extract_answer(c))
scores[a] = scores.get(a, 0.0) + verifier_score(c)
return max(scores, key=scores.get)Keyakinan dari Kesepakatan
Selisih suara merupakan sinyal keyakinan yang berguna. Jawaban bulat jauh lebih dapat dipercaya daripada hasil imbang 6 berbanding 5. Teruskan informasi ini ke logika berikutnya: arahkan soal dengan kesepakatan rendah untuk eskalasi, peninjauan manusia, atau model yang lebih kuat.
Dengan demikian, konsistensi mandiri menjadi peningkat akurasi sekaligus mekanisme kalibrasi.
def route(prompt):
ans, conf = adaptive_sc(prompt)[:2]
if conf < 0.5:
return escalate_to_stronger_model(prompt)
return ansBatasan: Tugas Kontinu dan Terbuka
Pemungutan suara mayoritas mengasumsikan ruang jawaban yang diskret dan dapat dibandingkan. Metode ini tidak dapat diterapkan secara langsung pada pembuatan bebas, teks panjang, atau keluaran kontinu yang tidak memiliki dua sampel yang identik.
Untuk tugas seperti itu, lakukan penggabungan dengan cara berbeda: kelompokkan keluaran yang serupa secara semantik, lakukan pemungutan suara atas bidang terstruktur yang diekstrak, atau gunakan model penilai untuk memilih sampel terbaik, bukan menghitung kecocokan persis.
def semantic_consistency(samples):
clusters = cluster_by_embedding(samples)
biggest = max(clusters, key=len) # largest agreement cluster
return representative(biggest) # medoid of the clusterPenerapan yang Memperhatikan Biaya
Konsistensi mandiri merupakan salah satu teknik pemberian perintah yang paling mahal: biaya meningkat seiring n. Gunakan untuk soal penting atau sulit, gabungkan dengan penghentian adaptif, dan pertimbangkan kebijakan bertingkat yang menggunakan satu rantai untuk lalu lintas mudah.
Selalu bandingkan akurasi per rupiahnya dengan satu pemanggilan model yang lebih kuat, yang mungkin lebih murah untuk peningkatan yang sama.
def tiered(prompt, q):
if easy(q):
return extract_answer(llm(prompt, temperature=0))
return adaptive_sc(prompt, max_n=20)[0] # SC only when neededKonsistensi Mandiri Menyeluruh
Alur lengkap: sesuaikan suhu dan n, ambil sampel dari rantai yang beragam, normalisasikan jawaban secara ketat, lakukan pemungutan suara (secara opsional dengan bobot verifikator), gunakan selisih suara sebagai keyakinan, berhenti lebih awal ketika hasil sudah menentukan, dan eskalasikan soal dengan kesepakatan rendah.
Hasilnya adalah sistem penalaran yang lebih akurat dan mampu mengalibrasi dirinya sendiri daripada satu rantai mana pun.
def solve(prompt):
chains = sample_until_decisive(prompt, max_n=20, temp=0.7)
ans, conf = weighted_majority(chains)
if conf < THRESH:
return escalate(prompt)
return {'answer': ans, 'confidence': conf, 'paths': len(chains)}Pemeriksaan Singkat
Diagnosis pengaturan konsistensi mandiri yang kinerjanya buruk.
Rangkuman
Hal-hal penting:
- Konsistensi mandiri mengambil sampel dari banyak rantai yang beragam dan melakukan pemungutan suara, sebagai pendekatan terhadap pemarginalan atas jalur penalaran.
- Keberagaman (suhu sedang) dan normalisasi jawaban yang ketat merupakan prasyarat agar metode ini berhasil.
- Akurasi meningkat seiring
n, tetapi kemudian mendatar; gunakan penghentian dini adaptif untuk mengendalikan biaya. - Beri bobot pada suara dengan verifikator dan gunakan selisih suara sebagai sinyal keyakinan yang terkalibrasi.
- Metode ini memerlukan ruang jawaban diskret; untuk tugas terbuka, kelompokkan secara semantik atau gunakan penilai.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengambilan Sampel Konsistensi Diri” gratis?
Ya — teks lengkap “Pengambilan Sampel Konsistensi Diri” 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 “Pengambilan Sampel Konsistensi Diri”?
Melakukan pemungutan suara atas berbagai jalur penalaran. 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 2 dari 4.
Berapa lama pelajaran “Pengambilan Sampel Konsistensi Diri” 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
- Pemberian Prompt Chain-of-Thought
- Pengambilan Sampel Konsistensi Diri
- Eksplorasi Tree-of-Thought
- Kapan Prompt Penalaran Membantu