Campionamento self-consistency
Votare tra più percorsi di ragionamento.
Campionamento self-consistency è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Prompt Engineering, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Prompt Engineering include 4 lezioni in totale.
Una singola catena è fragile
Una singola catena di ragionamento può imboccare una direzione sbagliata all'inizio senza riuscire più a recuperare. La self-consistency (Wang et al., 2022) affronta questo problema campionando molti percorsi di ragionamento indipendenti e aggregando le risposte finali, in genere mediante voto a maggioranza.
L'intuizione è la seguente: il ragionamento corretto converge sulla stessa risposta attraverso percorsi diversi, mentre gli errori si disperdono. L'aggregazione amplifica il segnale coerente.
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)Perché funziona la marginalizzazione sui percorsi
La self-consistency approssima la marginalizzazione sui percorsi di ragionamento: invece di affidarsi a una singola derivazione latente, stima la risposta finale più probabile tenendo conto di molte derivazioni.
Si tratta di una stima Monte Carlo della distribuzione delle risposte. La moda di tale distribuzione è in genere più affidabile di qualsiasi singolo percorso campionato, soprattutto quando lo spazio delle risposte è piccolo e discreto.
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, confidenceDiversità tramite la temperatura
La self-consistency richiede percorsi diversi. La decodifica greedy o una temperatura quasi nulla produce catene quasi identiche, vanificando il metodo. Usare una temperatura moderata (spesso compresa tra 0,5 e 0,8) ed eventualmente il top-p sampling per diversificare i percorsi.
Una temperatura troppo alta peggiora ogni singola catena; regolare la temperatura per massimizzare l'accuratezza dell'ensemble, non la qualità della singola catena.
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 bestLa normalizzazione delle risposte è fondamentale
I voti contano solo se le risposte equivalenti vengono riconosciute come uguali. Normalizzare prima del conteggio: rimuovere le unità, portare i numeri in forma canonica, convertire il testo in minuscolo, analizzare frazioni e percentuali e applicare l'equivalenza specifica dell'attività.
Una normalizzazione inadeguata frammenta la maggioranza reale tra varianti superficiali e permette a una risposta minoritaria di vincere la votazione.
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 aQuanti campioni?
L'accuratezza aumenta con il numero di campioni n, ma con rendimenti decrescenti, raggiungendo spesso un plateau intorno a 10-40 campioni, a seconda della difficoltà dell'attività. Ogni campione moltiplica linearmente il costo e la latenza.
Valutare diversi valori di n su un set di validazione e scegliere il punto di gomito della curva, in cui i campioni aggiuntivi non giustificano più il loro costo.
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 maximumArresto anticipato adattivo
È possibile risparmiare capacità di calcolo con il campionamento adattivo: interrompere il campionamento dei percorsi quando la votazione è decisiva. Se dopo 5 campioni una risposta ha un vantaggio netto, è improbabile che ulteriori campioni cambino il vincitore.
In questo modo si concentra il calcolo sugli elementi realmente difficili e controversi, rispondendo a quelli semplici a basso costo.
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)Votazione ponderata e assistita da un verificatore
La maggioranza semplice tratta tutti i percorsi allo stesso modo. È possibile ponderare i voti in base alla probabilità assegnata dal modello al percorso, al punteggio di un verificatore addestrato o all'autovalutazione della validità di ogni catena.
La self-consistency ponderata dal verificatore spesso supera la votazione non ponderata, perché declassa le modalità di errore frequenti ma apparentemente sicure.
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)Confidenza basata sull'accordo
Il margine di voto è un utile segnale di confidenza. Una risposta unanime è molto più affidabile di una votazione divisa 6 a 5. Rendere questo dato disponibile alla logica a valle: indirizzare gli elementi con scarso accordo verso un'escalation, una revisione umana o un modello più potente.
In questo modo la self-consistency diventa sia un metodo per aumentare l'accuratezza sia un meccanismo di calibrazione.
def route(prompt):
ans, conf = adaptive_sc(prompt)[:2]
if conf < 0.5:
return escalate_to_stronger_model(prompt)
return ansLimiti: attività continue e a risposta aperta
La votazione a maggioranza presuppone uno spazio delle risposte discreto e confrontabile. Non si applica direttamente alla generazione a testo libero, ai testi lunghi o agli output continui, in cui è improbabile che due campioni siano identici.
Per queste attività, aggregare in modo diverso: raggruppare gli output semanticamente simili, votare sui campi strutturati estratti oppure usare un modello giudice per selezionare il campione migliore anziché contare le corrispondenze esatte.
def semantic_consistency(samples):
clusters = cluster_by_embedding(samples)
biggest = max(clusters, key=len) # largest agreement cluster
return representative(biggest) # medoid of the clusterImplementazione attenta ai costi
La self-consistency è una delle tecniche di prompting più costose: il costo cresce con n. Riservarla agli elementi ad alta criticità o difficili, combinarla con l'arresto adattivo e valutare una strategia a livelli in cui una singola catena gestisce le richieste semplici.
Confrontare sempre la sua accuratezza per unità di costo con quella di una singola chiamata a un modello più potente, che potrebbe offrire lo stesso miglioramento a un costo inferiore.
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 neededSelf-consistency dall'inizio alla fine
Una pipeline completa: regolare la temperatura e n, campionare catene diverse, normalizzare rigorosamente le risposte, votare (eventualmente ponderando in base al verificatore), usare il margine come indicatore di confidenza, interrompere anticipatamente quando il risultato è decisivo e sottoporre a escalation gli elementi con scarso accordo.
Il risultato è un sistema di ragionamento più accurato e auto-calibrato di qualsiasi singola catena.
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)}Verifica rapida
Diagnosticare una configurazione di self-consistency che offre prestazioni inferiori al previsto.
Riepilogo
Punti chiave:
- La self-consistency campiona molte catene diverse e vota le risposte, approssimando la marginalizzazione sui percorsi di ragionamento.
- La diversità (ottenuta con una temperatura moderata) e una rigorosa normalizzazione delle risposte sono prerequisiti fondamentali.
- L'accuratezza aumenta con
nma raggiunge un plateau; usare l'arresto anticipato adattivo per controllare i costi. - Ponderare i voti con un verificatore e usare il margine di voto come segnale di confidenza calibrato.
- Il metodo richiede uno spazio delle risposte discreto; per le attività a risposta aperta, raggruppare semanticamente gli output o usare un giudice.
Impara AI Prompt Engineering con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 53
- Lezioni
- 199
Domande Frequenti
La lezione «Campionamento self-consistency» è gratuita?
Sì — il testo completo di «Campionamento self-consistency» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Prompt Engineering, passa a CoddyKit PRO. Il corso AI Prompt Engineering include 4 lezioni in totale.
Cosa imparerò in «Campionamento self-consistency»?
Votare tra più percorsi di ragionamento. Eserciti AI Prompt Engineering con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AI Prompt Engineering?
Non è richiesta alcuna esperienza precedente. AI Prompt Engineering su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Campionamento self-consistency»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AI Prompt Engineering?
Sì. Ogni lezione AI Prompt Engineering include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Prompting chain-of-thought
- Campionamento self-consistency
- Esplorazione tree-of-thought
- Quando i prompt di ragionamento sono utili