AI-promptteknik · Lektion

Noll-, en- och few-shot

Välj hur många exempel som ska användas.

Lektion 1 av 413 steg

Noll-, en- och few-shot är en gratis lektion i AI-promptteknik på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för AI-promptteknik, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI-promptteknik innehåller totalt 4 lektioner.

Exempelspektrumet

Exempel anger antalet märkta demonstrationer som placeras i prompten före den aktuella frågan. Zero-shot förlitar sig helt på modellens förtränade förkunskaper, medan few-shot anpassar modellen till en liten uppgiftsspecifik fördelning vid inferens utan några viktuppdateringar.

Detta är in-context learning (ICL): transformern behandlar exemplen som en del av sekvensen och utför implicit en form av metainlärd regression över dem. Valet av k (antalet exempel) är en hyperparameter som Ni ställer in empiriskt, inte en fast rekommenderad standard.

from dataclasses import dataclass

@dataclass
class ICLConfig:
    k: int           # number of demonstrations
    selection: str   # 'static' | 'dynamic'
    order: str       # 'random' | 'similarity' | 'curriculum'

# Zero-shot is simply k=0
cfg = ICLConfig(k=0, selection='static', order='random')

När zero-shot ger bäst resultat

Föredra zero-shot när uppgiften finns väl representerad i förträningen (sammanfattning, översättning och vanlig klassificering) och när exempel skulle kunna påverka utdataformatet. För instruktionsanpassade modeller överträffar en tydlig instruktion tillsammans med ett utdataschema ofta exempel som på ett subtilt sätt styr stilen.

Zero-shot minimerar dessutom tokenkostnad och latens och undviker bias mot majoritetsklassen, där modellen överförutsäger den klass som dominerar i demonstrationerna.

# Zero-shot with explicit schema beats vague few-shot
PROMPT = (
    'Classify sentiment as POSITIVE, NEGATIVE, or NEUTRAL.\n'
    'Respond with only the label.\n\n'
    'Text: ' + user_text + '\nLabel:'
)

One-shot som formatankare

One-shot är särskilt effektivt när uppgiften är konceptuellt tydlig men utdataformatet är ovanligt eller strikt. En enda demonstration lär ut den exakta strukturen (JSON-nycklar, avgränsare och versaler/gemener) mycket mer tillförlitligt än en beskrivning i löptext.

Använd one-shot när strukturen behöver begränsas utan att förbruka många token eller riskera den snedvridning av etikettfördelningen som flera exempel kan introducera.

ONE_SHOT = (
    'Extract entities as JSON.\n\n'
    'Input: Apple released the iPhone in Cupertino.\n'
    'Output: {"org": ["Apple"], "product": ["iPhone"], "loc": ["Cupertino"]}\n\n'
    'Input: ' + query + '\nOutput:'
)

Few-shot och k-kurvan

Prestandan som funktion av k är sällan monoton. Den stiger vanligtvis, planar ut och försämras sedan när exemplen trängs i kontexten, försvagar uppmärksamheten och flyttar den aktuella frågan längre från modellens fokus på det senast lästa.

Gör empiriska tester av k för {1, 2, 4, 8, 16} på en avskild mängd. Det optimala värdet på k beror på uppgiftens komplexitet, exempelns längd och modellens faktiska utnyttjande av kontexten, vilket vanligtvis ligger långt under det annonserade kontextfönstret.

def sweep_k(eval_set, candidates, ks=(1,2,4,8,16)):
    results = {}
    for k in ks:
        acc = evaluate(build_prompt(candidates[:k]), eval_set)
        results[k] = acc
    return max(results, key=results.get)

Varför ICL fungerar: implicit inferens

Forskning beskriver ICL som att modellen utför implicit bayesiansk inferens: demonstrationerna hjälper till att lokalisera det latenta uppgiftskoncept som modellen redan har lärt sig under förträningen. Exemplen fungerar som evidens som begränsar den posteriora fördelningen över uppgifter, inte som ny kunskap.

Detta förklarar ett kontraintuitivt resultat: även felaktiga etiketter i demonstrationerna kan bevara en stor del av träffsäkerheten, eftersom den dominerande signalen är formatet och etikettutrymmet, inte själva kopplingen mellan indata och etikett.

# Min, Lyu et al. (2022): label correctness matters less than
#   - the input distribution
#   - the label space (which classes exist)
#   - the format / structure
# Implication: invest in representative inputs + valid label set

Avvägningen mellan tokenbudget och kostnad

Varje shot förbrukar kontext och kostar pengar. Med långa demonstrationer kan fyra exempel bli mycket större än frågan. Beräkna ett mått på kostnad per noggrannhetspoäng: om k=8 ger 0,5 % högre resultat än k=4 men kräver dubbelt så många token, är k=4 det bättre valet i produktion.

För pipelines med hög genomströmning bör statiska exempelblock promptcachas, så att upprepade demonstrationer debiteras och bearbetas en gång.

def cost_efficiency(acc_by_k, tokens_by_k, price_per_1k):
    return {
        k: acc_by_k[k] / (tokens_by_k[k] / 1000 * price_per_1k)
        for k in acc_by_k
    }
# Pick the k maximizing accuracy per dollar, not raw accuracy

Bias från majoritetsklass och position

Few-shot-prompter medför dolda bias. Bias mot majoritetsklassen gör att modellen föredrar den klass som förekommer oftast i demonstrationerna. Recency bias övervärderar det sista exemplet. Bias mot vanliga token gynnar token som förekommer ofta.

Kalibreringstekniker som kontextuell kalibrering uppskattar modellens prior för en innehållsfri indata (till exempel token N/A) och dividerar bort den, vilket stabiliserar few-shot-klassificerare avsevärt.

# Contextual calibration (Zhao et al. 2021)
p_cf = model_probs(prompt_with_input('N/A'))  # content-free prior
W = 1.0 / p_cf                                  # diagonal correction
def calibrated(probs):
    return normalize(W * probs)

Balansera demonstrationsmängden

För att motverka bias mot majoritetsklassen bör klasserna balanseras mellan demonstrationerna och deras ordning varieras. Vid binär klassificering med k=4 används 2 positiva och 2 negativa exempel i blandad ordning, inte fördelningen 3:1.

För genereringsuppgifter bör balansen skapas längs de dimensioner som spelar roll (längd, ton och svårighetsgrad), så att modellen inte låser sig vid ett enda läge som den sett oftast.

import random

def balanced_demos(pool, k, label_fn):
    by_label = {}
    for ex in pool:
        by_label.setdefault(label_fn(ex), []).append(ex)
    per = k // len(by_label)
    picks = [e for lst in by_label.values() for e in random.sample(lst, per)]
    random.shuffle(picks)
    return picks

Few-shot kontra fine-tuning

Few-shot är rätt verktyg när uppgiften ändras ofta, data är knapp eller det inte går att köra en finjusterad modell. Fine-tuning är bättre när det finns tusentals exempel, lägsta möjliga latens per anrop behövs eller formatet ska byggas in så att prompterna kan hållas korta.

En vanlig väg i produktion är att först ta fram en prototyp med few-shot, samla in de lyckade körningarna och sedan destillera dem till en finjustering för att helt ta bort exempelns token.

# Decision heuristic
if num_labeled < 500 or task_volatility == 'high':
    strategy = 'few-shot ICL'
elif latency_budget_ms < 200 or prompt_token_cost_dominant:
    strategy = 'fine-tune + zero-shot'
else:
    strategy = 'few-shot now, distill later'

Resonemangsuppgifter kräver mer än exempel

Vid flerstegsresonemang kan råa few-shot-par med frågor och svar försämra resultatet: modellen lär sig att hoppa direkt till ett svar som den inte kan motivera. Kombinera few-shot med chain-of-thought-demonstrationer som visar resonemangsspåret, inte bara den slutliga etiketten.

Antalet shots samverkar med resonemangets djup; ofta överträffar k=2 högkvalitativa CoT-exempel k=8 exempel som endast innehåller svar, i benchmarktester av aritmetik och logik.

COT_SHOT = (
    'Q: A shop had 23 apples, used 20, bought 6 more. How many now?\n'
    'A: Start 23, minus 20 leaves 3, plus 6 is 9. Answer: 9\n\n'
    'Q: ' + question + '\nA:'
)

Ett evalueringsramverk för k

Behandla valet av shots som en empirisk sökning som stöds av ett ramverk. Håll undan en valideringsmängd, kontrollera exempelordningen med flera seeds och rapportera medelvärde och varians, eftersom few-shot-träffsäkerheten kan variera flera procentenheter enbart på grund av ordningen.

Logga tokenantal och latens för varje k, så att det slutliga valet optimerar hela målfunktionen och inte bara träffsäkerheten.

def harness(pool, val, ks, seeds=5):
    report = {}
    for k in ks:
        accs = []
        for s in range(seeds):
            demos = balanced_demos(pool, k, label_fn)
            accs.append(evaluate(build_prompt(demos), val))
        report[k] = (mean(accs), stdev(accs))
    return report

Snabbtest

Testa förståelsen av val av shots och bias i ICL.

Sammanfattning

Viktiga slutsatser:

  • k är en justerbar hyperparameter; testa olika värden och följ kurvan där resultatet stiger, planar ut och försämras.
  • Zero-shot passar välkända uppgifter, one-shot förankrar strikta format och few-shot anpassar sig efter en uppgiftsfördelning.
  • ICL fungerar genom att lokalisera en uppgift som modellen lärt sig under förträningen, så format och etikettutrymme väger tyngre än etiketternas korrekthet.
  • Motverka bias mot majoritetsklass, recency bias och bias mot vanliga token genom balansering, blandning och kontextuell kalibrering.
  • Optimera noggrannhet per krona, kombinera resonemangsuppgifter med CoT-exempel och destillera stabila few-shot-prompter till finjusterade modeller.
Gratis att börja

Lär dig AI-promptteknik med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
53
Lektioner
199

Vanliga frågor

Är lektionen ”Noll-, en- och few-shot” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen AI-promptteknik, inklusive ”Noll-, en- och few-shot”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i AI-promptteknik innehåller totalt 4 lektioner.

Vad lär jag mig i ”Noll-, en- och few-shot”?

Välj hur många exempel som ska användas. Ni övar på AI-promptteknik med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig AI-promptteknik?

Du behöver inga förkunskaper. Utbildningen i AI-promptteknik på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Noll-, en- och few-shot”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här AI-promptteknik-lektionen?

Ja. Varje AI-promptteknik-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Noll-, en- och few-shot
  2. Utforma effektiva exempel
  3. Exempelsortering och aktualitet
  4. Dynamiskt urval av few-shot-exempel
← Tillbaka till AI-promptteknik