AI Prompt Engineering · Lezione

Campionamento self-consistency

Votare tra più percorsi di ragionamento.

Lezione 2 di 413 passaggi

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, confidence

Diversità 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 best

La 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 a

Quanti 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 maximum

Arresto 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 ans

Limiti: 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 cluster

Implementazione 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 needed

Self-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 n ma 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.
Gratis per iniziare

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

  1. Prompting chain-of-thought
  2. Campionamento self-consistency
  3. Esplorazione tree-of-thought
  4. Quando i prompt di ragionamento sono utili
← Torna a AI Prompt Engineering