Self-consistency prompting, bir modele aynı akıl yürütme sorusunu birkaç kez sorup en sık çıkan cevabı tutmaktır. Her deneme, chain of thought prompting sayfasındaki gibi kendi akıl yürütmesini yazar ve model kelimelerini biraz rastgelelikle örneklediği için denemeler farklı yollar izler. Doğru yollar genellikle aynı cevaba ulaşır. Hatalar ise farklı yanlış cevaplara dağılma eğilimindedir. Çoğunluk oyu bu farktan yararlanır.
Teknik, Wang ve arkadaşlarının 2022 tarihli "Self-Consistency Improves Chain of Thought Reasoning in Language Models" makalesinden geliyor. Makale birçok akıl yürütme yolu örnekleyip oylamayı tek bir greedy cevap almakla karşılaştırdı ve oylamanın aritmetik ve sağduyu akıl yürütme testlerinde doğruluğu artırdığını buldu.
Aşağıdaki blok aynı promptun üç denemesini gösteriyor. Her sekme kendi yanıtıyla bir deneme. İki deneme doğru sayıyor; biri yapması kolay bir kayma yapıyor. Son satırdaki Answer: etiketini İngilizce bıraktık, çünkü sayfanın aşağısındaki kod o etiketi arıyor.
7'leri basamağa göre say.
- Birler basamağı: 7, 17, 27, 37, 47, 57, 67, 77, 87, 97. Bu 10 tane yedi eder.
- Onlar basamağı: 70'ten 79'a. Bu 10 yedi daha eder.
- Yüzler basamağı: sadece 100 üç basamaklı ve onda 7 yok.
77 iki listede de var ve bu doğru, çünkü iki tane 7 içeriyor.
Answer: 20
- deneme biraz farklı bir soruyu cevapladı: rakamın kaç kez geçtiğini değil, kaç sayının 7 içerdiğini. Akıl yürütmesi diğer ikisi kadar kendinden emin okunuyor ve tek başına ona şüpheyle yaklaşmak için bir nedenin olmazdı. Üç denemede oylama 20, 19, 20 çıkıyor ve çoğunluk cevabı doğru olan.
Self-consistency nasıl çalışır
- Sabit bir cevap satırı olan bir chain of thought promptu yaz. Önce akıl yürütmeyi, en son da nihai cevabı, "Answer: N" gibi bulabileceğin bir biçimde iste. Sabit bir satır olmadan her denemenin cevabını bulmak için hepsini okumak zorunda kalırsın.
- Rastgelelik açıkken birkaç deneme örnekle. Her denemenin farklı bir yol izleme özgürlüğüne ihtiyacı vardır. API'de 0'ın üzerinde bir temperature bunu sağlar. Temperature 0'da denemelerin çoğu aynı akıl yürütmeyi tekrarlar ve bir hatayı beş kez tekrarlamak kanıt değildir.
- Her denemeden nihai cevabı çıkar. Bu aşamada akıl yürütmeyi yok say. 20'ye farklı yollardan ulaşan iki deneme, 20 için iki oy sayılır.
- En yaygın cevabı al. "20", "20." ve "yirmi" aynı cevap sayılsın diye saymadan önce normalleştir.
Uzlaşmanın kendisi de faydalı bir bilgidir. Beş denemenin hepsi aynı fikirdeyse rastgele bir kayma olası değildir. Oylar üçe bölünüyorsa soru model için zordur; bu da cevabı kendin kontrol etmen ya da promptu yeniden yazman için bir sinyaldir. Makale ayrıca örnekler arasında uzlaşmanın daha güçlü olduğu soruların doğru cevaplanma ihtimalinin daha yüksek olduğunu bildirdi.
Elle self-consistency
Tekniği herhangi bir sohbet uygulamasında uygulayabilirsin. Promptu gönder, son satırı not et, sonra başka bağımsız bir deneme al: yeniden oluştur'a bas ya da aynı promptu yeni bir sohbete yapıştır. Üç ya da beş cevabın olana kadar tekrarla.
Aynı konuşmada "Emin misin?" ya da "Tekrar dene" diye yeniden sorma. Model önceki yanıtını görebilir, yani yeni cevap bağımsız değildir: ya ilk cevabı tekrarlar ya da sadece şüphe ettiğin izlenimini verdiğin için onu değiştirir. İkisi de bir oy değildir.
Bu prompt oylamaya hazır kurulmuş. Kendi sorunu ve cevap biçimini yaz, sonra birkaç kez çalıştır.
12 kalem 12 ÷ 3 = 4 paket eder.
4 paket 4 × 2 = 8 dolar tutar.
10 dolardan para üstü: 10 eksi 8 = 2 dolar.
Answer: 2 dolar
Oylamayı mümkün kılan biçim parçasıdır. Onu kapatırsan denemeler cevaplarını farklı şekillerde, çoğu zaman metnin ortasında bir yerde ifade eder ve bu da basit bir sayımı dikkatli bir okumaya dönüştürür.
Kodda self-consistency
Kodda döngü kısadır: aynı promptu N kez çalıştır, cevap satırlarını çıkar ve say. Bu sürüm OpenAI Python SDK'sını kullanıyor; temperature ayarlamana izin veren her API aynı şekilde çalışır.
import re
from collections import Counter
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
PROMPT = (
"How many times does the digit 7 appear when you write out all the whole "
"numbers from 1 to 100? Think it through step by step, then give the final "
'answer on the last line in the form "Answer: N".'
)
def final_answer(text):
# Also matches "**Answer: 20**", since chat models often bold the last line.
lines = re.findall(r"^\**Answer:\**\s*(.+)$", text, re.MULTILINE)
return lines[-1].strip(" *.") if lines else None
answers = []
for _ in range(5):
response = client.chat.completions.create(
model=MODEL,
temperature=0.8,
messages=[{"role": "user", "content": PROMPT}],
)
answers.append(final_answer(response.choices[0].message.content))
votes = Counter(a for a in answers if a is not None)
if votes:
best, count = votes.most_common(1)[0]
print(f"{best} ({count} of {len(answers)} runs agree)")
else:
print("No run gave an answer line.")
Promptu Türkçe yazarsan ve etiketi "Cevap:" yaparsan, final_answer içindeki düzenli ifadede de Answer kelimesini aynı etiketle değiştir. Denemeler bağımsız olduğu için üretimde onları arka arkaya değil paralel gönderirsin. Bazı akıl yürütme modelleri sadece varsayılan temperature değerlerini kabul eder ve bir değer ayarlarsan hata döndürür; onlarda temperature satırını çıkar. Denemeleri yine değişir, çünkü varsayılan değer zaten örnekleme yapar.
Ne zaman kullanılır ve maliyeti ne
Self-consistency üç şey doğru olduğunda değerlidir: cevap kısa ve karşılaştırılabilir (bir sayı, bir etiket, bir seçim), yanlış bir cevabın maliyeti birkaç ek çağrıdan fazla ve model görevde zaten güvenilir değil. Matematik sözel problemleri, zorlu uç durumları olan sınıflandırma ve çoktan seçmeli sorular iyi uyar.
Maliyeti kabaca tek bir cevabın token maliyetinin N katıdır ve model her denemede aynı yanlış kanıyı paylaşıyorsa yardım etmez. Beş denemenin hepsi aynı hatayı yaparsa oylama oybirliğiyle ve yanlış çıkar. Oylama rastgele kaymaları azaltır, sistematik hataları değil; bu yüzden cevapları ara sıra bilinen bir sonuçla karşılaştırmanın yerini tutmaz.
Cevaplamadan önce kendi içinde akıl yürüten modeller her denemede problemi zaten uzun uzun çözer, bu da oylamanın kazancını küçültme eğilimindedir. Yine de denemelerinin birbirini tutmadığı zor sorularda karşılığını verebilir.
Self-consistency sadece bitmiş cevaplar üzerinde oylama yapar. Tree of thought prompting bir adım daha ileri gider ve problem hâlâ çözülürken kısmi akıl yürütmeleri karşılaştırır; umut vadeden dalları tutar, zayıf olanları bir cevaba ulaşmadan bırakır.
Sıkça Sorulan Sorular
Self-consistency prompting nedir?
Self-consistency prompting, Wang ve arkadaşlarının (2022) tekniğidir. Aynı chain of thought promptunu örnekleme açıkken birkaç kez gönderirsin, böylece her deneme farklı bir yoldan akıl yürütür, sonra en sık görünen nihai cevabı alırsın. Tek bir akıl yürütme zincirine güvenmenin yerini birkaç zincir arasında yapılan bir oylama alır.
Self-consistency için kaç örnek kullanmalıyım?
Gündelik kullanımda ara sıra olan bir kaymayı oylamada geçmek için üç ile beş deneme yeterlidir ve tek sayı iki cevap arasında beraberliği önler. Orijinal makale soru başına çok daha fazla yol örnekledi ve doğruluğun daha fazla örnekle artmaya devam ettiğini, ama her seferinde daha küçük kazançlarla arttığını buldu. Yanlış bir cevap pahalıysa daha fazla, maliyet ya da hız önemliyse daha az deneme kullan.
Self-consistency ile chain of thought arasındaki fark nedir?
Chain of thought, modelin cevaptan önce akıl yürütmesini yazdığı tek bir denemedir. Self-consistency onun üzerine kurulur: chain of thought'u birkaç kez çalıştırır ve nihai cevaplar üzerinde oylama yapar. Chain of thought promptu değiştirir; self-consistency ise kaç cevap topladığını ve birini nasıl seçtiğini değiştirir.
Self-consistency denemeler ya da açık uçlu cevaplar için işe yarar mı?
Doğrudan değil, çünkü bir oylama eşitlik açısından karşılaştırılabilecek cevaplar gerektirir: bir sayı, bir etiket, çoktan seçmeli bir şık ya da kısa bir bilgi. Açık uçlu metin için yaygın bir çözüm birkaç sürüm üretip modele hangisinin diğerleriyle en çok uyuştuğunu sormaktır, ama bu bir sayım değil, bir yargıdır.
Self-consistency'yi ChatGPT ya da Claude'da kullanabilir miyim?
Evet, elle. Promptu birkaç yeni sohbette gönder ya da yanıtı birkaç kez yeniden oluştur ve her denemenin nihai cevabını not et. Aynı sohbette tekrar sormak yerine yeni bir sohbet ya da yeniden oluştur düğmesi kullan, çünkü önceki cevabını görebilen bir model onu tekrarlamaya eğilimlidir.