Zero-, one- og few-shot
Velge antall eksempler.
Zero-, one- og few-shot er en gratis leksjon i AI-prompt engineering på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i AI-prompt engineering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i AI-prompt engineering inneholder totalt 4 leksjoner.
Shot-spekteret
Shots angir antallet merkede eksempler som plasseres i prompten før den aktuelle spørringen. Zero-shot baserer seg utelukkende på modellens forhåndstrente priorer, mens few-shot betinger modellen på en liten, oppgavespesifikk fordeling under inferens uten oppdateringer av vektene.
Dette er in-context learning (ICL): transformeren behandler eksemplene som en del av sekvensen og utfører implisitt en form for meta-lært regresjon over dem. Valget av k (antallet shots) er en hyperparameter som må finjusteres empirisk, ikke en fast anbefaling som alltid er best.
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 er best
Foretrekk zero-shot når oppgaven er godt representert i forhåndstreningen (oppsummering, oversettelse, vanlig klassifisering), og når eksempler kan gi skjevhet i utdataformatet. For instruksjonsjusterte modeller slår en presis instruksjon og et tydelig utdataskjema ofte eksempler som på en subtil måte låser stilen.
Zero-shot minimerer også tokenkostnad og latenstid, og unngår skjevhet mot den vanligste etiketten, der modellen overforutsier klassen som dominerer demonstrasjonene.
# 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 formatanker
One-shot fungerer best når oppgaven er konseptuelt tydelig, men utdataformatet er uvanlig eller strengt. Én enkelt demonstrasjon lærer modellen den nøyaktige formen (JSON-nøkler, skilletegn, bruk av store og små bokstaver) langt mer pålitelig enn en beskrivelse i prosa.
Bruk one-shot når De vil begrense strukturen uten å bruke mange tokens eller risikere skjevheten i etikettfordelingen som flere eksempler introduserer.
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 og k-kurven
Ytelsen som funksjon av k er sjelden monoton. Den stiger vanligvis, flater ut og svekkes deretter når eksemplene fyller konteksten, sprer oppmerksomheten og skyver den aktuelle spørringen lenger bort fra modellens fokus på det nyeste innholdet.
Test empirisk k med verdiene {1, 2, 4, 8, 16} på et separat evalueringssett. Den optimale verdien av k avhenger av oppgavens kompleksitet, eksemplenens lengde og modellens effektive kontekstutnyttelse, som vanligvis er langt lavere enn det annonserte kontekstvinduet.
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)Hvorfor ICL fungerer: implisitt inferens
Forskning beskriver ICL som at modellen utfører implisitt bayesiansk inferens: Demonstrasjonene hjelper med å lokalisere det latente oppgavekonseptet modellen allerede lærte under forhåndstreningen. Eksemplene fungerer som evidens som snevrer inn posteriorfordelingen over oppgaver, ikke som ny kunnskap.
Dette forklarer et kontraintuitivt funn: Selv feilaktige etiketter i demonstrasjonene kan bevare mye av nøyaktigheten, fordi det dominerende signalet er formatet og etikettrommet, ikke selve koblingen mellom inndata og 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 setAvveininger mellom tokenbudsjett og kostnad
Hver shot bruker kontekst og koster penger. Med lange demonstrasjoner kan fire eksempler være langt større enn spørringen. Beregn en måleverdi for kostnad per nøyaktighetspoeng: Hvis k=8 gir 0,5 % bedre resultat enn k=4 ved dobbelt så mange tokens, vinner k=4 i produksjon.
For rørledninger med høy gjennomstrømning bør De bruke hurtigbufring av den statiske eksempelblokken, slik at gjentatte demonstrasjoner faktureres og behandles bare én gang.
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 accuracySkjevhet mot den vanligste etiketten og posisjonsbias
Few-shot-prompter har skjulte skjevheter. Skjevhet mot den vanligste etiketten gjør at modellen favoriserer den hyppigste klassen i demonstrasjonene. Recency-bias gir det siste eksemplet for stor vekt. Common-token-bias favoriserer tokens som forekommer ofte.
Kalibreringsteknikker som kontekstuell kalibrering estimerer modellens a priori-fordeling på en innholdsløs inndata (for eksempel tokenet N/A) og dividerer den bort, noe som stabiliserer few-shot-klassifikatorer kraftig.
# 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)Balanser demonstrasjonssettet
For å motvirke skjevhet mot den vanligste etiketten bør De balansere klassene i demonstrasjonene og variere rekkefølgen. For binær klassifisering med k=4 bør De bruke 2 positive og 2 negative eksempler i tilfeldig rekkefølge, i stedet for 3:1.
For genereringsoppgaver bør De balansere etter de dimensjonene som betyr noe (lengde, tone, vanskelighetsgrad), slik at modellen ikke kollapser til én modus den har sett oftest.
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 picksFew-shot kontra finjustering
Few-shot er riktig verktøy når oppgaven endres ofte, datamengden er liten, eller De ikke kan drifte en tilpasset modell. Finjustering lønner seg når De har tusenvis av eksempler, trenger lavest mulig latenstid per kall, eller vil bygge formatet inn i modellen slik at promptene kan være korte.
En vanlig vei til produksjon er å lage en prototype med few-shot, samle inn de vellykkede sporene og deretter destillere dem til en finjustert modell, slik at eksempel-tokenene kan fjernes helt.
# 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'Resonneringsoppgaver krever mer enn shots
For resonnering i flere trinn kan rå par med few-shot-svar skade: Modellen lærer å hoppe rett til et svar den ikke kan begrunne. Kombiner few-shot med chain-of-thought-demonstrasjoner som viser resonnementssporet, ikke bare den endelige etiketten.
Antallet shots påvirker samspillet med resonnementets dybde. Ofte slår k=2 eksempler av høy kvalitet med CoT k=8 eksempler som bare inneholder svar, i aritmetikk- og logikkstandardtester.
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:'
)Et evalueringsrammeverk for k
Behandle valg av antall shots som et empirisk søk støttet av et evalueringsrammeverk. Hold av et valideringssett, kontroller eksempelrekkefølgen med flere seed-verdier, og rapporter gjennomsnitt og varians, fordi few-shot-nøyaktigheten kan variere flere prosentpoeng utelukkende på grunn av rekkefølgen.
Loggfør tokenantall og latenstid per k, slik at det endelige valget optimaliserer hele målet, ikke bare nøyaktigheten.
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 reportHurtigsjekk
Test forståelsen av valg av antall eksempler og ICL-skjevhet.
Oppsummering
Viktigste poenger:
ker en justerbar hyperparameter. Test ulike verdier og følg kurven som stiger, flater ut og svekkes.- Zero-shot egner seg for velkjente oppgaver, one-shot forankrer strenge formater, og few-shot tilpasser seg en oppgavefordeling.
- ICL fungerer ved å lokalisere en oppgave modellen har lært under forhåndstreningen, slik at format og etikettrom veier tyngre enn etikettenes korrekthet.
- Motvirk skjevhet mot den vanligste etiketten, recency-bias og common-token-bias med balansering, stokking og kontekstuell kalibrering.
- Optimaliser nøyaktighet per krone, kombiner resonneringsoppgaver med CoT-eksempler, og destiller stabile few-shot-prompter til finjusterte modeller.
Lær deg AI-prompt engineering med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 53
- Leksjoner
- 199
Ofte stilte spørsmål
Er leksjonen «Zero-, one- og few-shot» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien AI-prompt engineering, inkludert «Zero-, one- og few-shot», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i AI-prompt engineering inneholder totalt 4 leksjoner.
Hva lærer jeg i «Zero-, one- og few-shot»?
Velge antall eksempler. Du øver på AI-prompt engineering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med AI-prompt engineering?
Ingen tidligere erfaring er nødvendig. AI-prompt engineering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Zero-, one- og few-shot»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne AI-prompt engineering-leksjonen?
Ja. Alle AI-prompt engineering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Zero-, one- og few-shot
- Utforming av effektive eksempler
- Rekkefølge og aktualitet for eksempler
- Dynamisk few-shot-utvalg