track
Vad händer när du behöver klassificera text i en ny kategori, men inte har ett enda märkt exempel att träna på?
Då kan du inte ta den traditionella vägen med klassificerare. De förutsätter märkta exempel för varje kategori du vill förutsäga, vilket innebär veckor av annoteringsarbete innan du ens kan börja träna. Och så fort en ny kategori dyker upp är du tillbaka vid märkningen igen.
Zero-shot-klassificering är vad du bör titta på. Den hoppar över hela märkningssteget genom att låta en modell tilldela etiketter som den aldrig sett under träningen. I praktiken betyder det att du kan sortera kundfeedback i kategorier som "faktureringsklagomål" eller "funktionsförslag" utan att förbereda ett enda tränings-exempel för någon av dem.
I den här artikeln går jag igenom hur zero-shot-klassificering fungerar, hur den står sig mot traditionella och few-shot-metoder, och hur du tillämpar den på verkliga NLP-uppgifter med Hugging Face Transformers.
Vad är Hugging Face egentligen? Anmäl dig till vår programserie Hugging Face Fundamentals för att bygga AI-agenter och finjustera LLM:er.
Vad är zero-shot-klassificering?
Zero-shot-klassificering är en maskininlärningsmetod där en modell tilldelar etiketter till data utan att vara specifikt tränad på just de etiketterna.
Nyckeln här är "zero-shot". Det betyder att modellen ser noll tränings-exempel för de kategorier du vill förutsäga. Du ger den en text och en lista med möjliga etiketter, och den väljer den bästa matchningen utifrån vad den redan kan.
All denna kunskap kommer från förträning. Stora modeller skaffar sig en bred förståelse för språk och begrepp från enorma textkorpusar, och den allmänna kunskapen är vad de lutar sig mot när du ber dem klassificera något nytt.
Hur zero-shot-klassificering fungerar
Arbetsflödet bakom zero-shot-klassificering är enkelt när du bryter ned det. Du behöver bara fyra steg:
-
Mata in texten eller datan: Detta är det du vill klassificera – en kundrecension, ett supportärende, en nyhetsrubrik, ett stycke dokumentation.
-
Ge kandidatetiketter: Du ger modellen en lista över möjliga kategorier. Det är bara vanliga ord eller korta fraser, som
"product question","refund request","technical issue"eller"general inquiry". -
Modellen bedömer relationen mellan indata och etiketter: Modellen tittar på varje etikett och poängsätter hur väl den passar indatan baserat på sin förtränade språkförståelse.
-
Den mest sannolika etiketten väljs: Den etikett med högst poäng returneras som förutsägelse, ofta med en tillitsgrad för varje kandidat.
Poängen är att du kan byta kandidatetiketter när som helst utan att träna om. Om du i morgon vill lägga till en ny kategori, lägger du bara till den i listan. Det är lite mind-blowing om du bara jobbat med övervakad inlärning.
Zero-shot-klassificering vs traditionell klassificering
Båda angreppssätten löser samma problem (att tilldela etiketter till data), men de tar sig dit på olika sätt.
Traditionell klassificering
Traditionella klassificerare lär sig från märkta exempel. Du samlar in en datamängd där varje objekt är taggat med rätt kategori, tränar en modell på den, och modellen lär sig mönstren som skiljer en klass från en annan.
Detta har fungerat bra i decennier, men har två stora begränsningar:
- Du behöver märkta träningsdata: Ofta mycket. Att samla in och annotera den datan tar tid och pengar – de mest värdefulla ändliga resurserna.
- Etikettsättet är fast: När modellen är tränad kan den bara förutsäga de kategorier den såg under träningen. Att lägga till en ny klass innebär att gå tillbaka och träna om.
Zero-shot-klassificering
Zero-shot fungerar motsatt. Det finns inget uppgiftsspecifikt träningssteg alls. Modellen använder det den lärt sig under förträningen för att utvärdera alla etiketter du ger den.
Det ger två fördelar:
- Ingen uppgiftsspecifik träning: Du hoppar helt över datainsamling, annotering och träning.
- Flexibelt etikettsätt: Du kan ändra kategorierna i farten. Lägg till nya, ta bort gamla, byt namn – modellen hanterar det utan någon omträning.
Avvägningarna
Denna flexibilitet är inte gratis. En traditionell klassificerare tränad på en solid märkt datamängd kommer oftast att överträffa en zero-shot-modell på just den uppgiften. Den har sett exakt den typ av exempel du bryr dig om och har anpassat sig efter dem.
Zero-shot-modeller är generalister. De är bra på mycket, men sällan bäst på något enskilt. Så valet handlar om vad du behöver.
Om du har märkta data och bryr dig om högsta noggrannhet på ett fast etikettsätt, träna en traditionell klassificerare. Om du inte har märkta data eller om dina kategorier ofta ändras är zero-shot den snabbare vägen till en fungerande lösning.
Grundmodeller och LLM:ers roll
Zero-shot-klassificering blev populärt eftersom stora förtränade modeller blev tillräckligt bra för att hantera det.
Före grundmodeller kunde du inte bara ge en modell en lista med etiketter den aldrig sett och förvänta dig rimliga förutsägelser. Modellen visste inte tillräckligt om språk för att göra kopplingen. Förträning på enorma textkorpusar ändrade det. En modell som har läst en stor del av internet har redan stött på ord som "refund" eller "complaint" i oräkneliga sammanhang, så att matcha dem mot nya indata blir möjligt.
Ett par modelfamiljer ligger bakom de flesta zero-shot-arbetsflöden i dag:
- BERT och dess varianter: BERT-liknande modeller lär sig djupa representationer av text under förträning. Varianter som RoBERTa och DeBERTa drev detta vidare med bättre träningsmetoder och större datamängder.
- NLI-baserade modeller: Dessa är modeller finjusterade på Natural Language Inference-uppgifter. De ligger bakom de flesta färdiga zero-shot-pipelines, och i nästa avsnitt förklarar jag varför.
- Moderna LLM:er: Stora språkmodeller som GPT-familjen eller Claude kan hantera zero-shot-klassificering via promptning. Du beskriver uppgiften på vanlig svenska, listar kategorierna, och modellen väljer en.
Den röda tråden är skala och generalitet. En modell tränad på en smal uppgift kan bara göra den uppgiften. En modell tränad på bred textdata kan styras om mot många uppgifter utan att någonsin se märkta exempel för dem.
Natural Language Inference (NLI) och zero-shot-klassificering
De flesta zero-shot-klassificerare du ser i praktiken bygger på NLI-modeller. Det här brukar förvåna folk, så det är värt att bromsa lite.
Natural language inference är en egen uppgift. Givet två meningar (en premiss och en hypotes) avgör modellen relationen mellan dem. Utfallet är en av tre etiketter:
- Entailment: Hypotesen följer av premissen.
- Kontradiktion: Hypotesen motsäger premissen.
- Neutral: Meningarna är orelaterade, eller så finns inte tillräcklig information för att avgöra.
Till exempel, om premissen är "The team finished the project two weeks early" och hypotesen är "The team delivered on time", bör en NLI-modell förutsäga entailment. Om hypotesen är "The team missed the deadline", bör den förutsäga en kontradiktion.
Detta upplägg visar sig passa utmärkt för zero-shot-klassificering. Om du behandlar din indata som premiss kan du göra varje kandidatetikett till en hypotes.
Säg att du vill klassificera meningen "My package never arrived" i en av tre kategorier: leveransproblem, faktureringsproblem eller produktfråga. Modellen ser inte dessa som etiketter. Den ser dem som hypoteser, vanligen inbäddade i en enkel mall som "This text is about {label}":
-
Premiss:
"My package never arrived"| Hypotes:"This text is about a shipping issue" -
Premiss:
"My package never arrived"| Hypotes:"This text is about a billing issue" -
Premiss:
"My package never arrived"| Hypotes:"This text is about a product question"
NLI-modellen poängsätter varje par. Hypotesen med högst entailment-poäng vinner, och den etiketten blir förutsägelsen.
Modellen behövde aldrig lära sig vad "shipping issue" eller "billing issue" betyder som etiketter. Den behövde bara lära sig hur entailment ser ut i allmänhet, och det snappade den upp under NLI-finjusteringen.
Det är därför NLI-baserad zero-shot fungerar så bra. Modellen gör uppgiften den tränades för (bedöma entailment), och du ramar bara in ditt klassificeringsproblem som en serie entailment-frågor.
Zero-shot vs few-shot vs finjusterade modeller
Zero-shot är inte det enda sättet att få en modell att göra en klassificeringsuppgift utan en full träningskörning. Låt mig jämföra med alternativen.
Zero-shot
Zero-shot betyder inga exempel alls. Du ger modellen en indata och en lista med kandidatetiketter, och den gör en förutsägelse baserat på vad den lärt sig under förträningen.
Modellen har aldrig sett märkta data för just din uppgift. Den arbetar helt utifrån allmän kunskap.
Few-shot
Few-shot ger modellen ett par exempel, vanligtvis i prompten. Du visar två, fem, kanske tio exempel på indata parade med korrekta etiketter och ber den sedan klassificera en ny indata på samma sätt.
Modellen tränas inte om här. Den använder fortfarande sina förtränade vikter. Exemplen fungerar bara som referens – ett snabbt "det här menar jag med dessa kategorier" innan du ber om en förutsägelse.
Finjustering
Finjustering är en dedikerad träningsprocess. Du tar en förtränad modell, matar den med en märkt datamängd för din uppgift och uppdaterar dess vikter tills den blir bra på att förutsäga dina specifika kategorier.
Detta är den tyngsta av de tre. Du behöver märkta data, träningsinfrastruktur och tid. I gengäld blir modellen specialiserad för din uppgift.
Jämförelse av de tre
De tre angreppssätten skiljer sig åt i tre saker som spelar roll i praktiken: noggrannhet, flexibilitet och kostnad.
| Noggrannhet | Flexibilitet | Kostnad | |
|---|---|---|---|
| Zero-shot | Lägst av de tre, men ändå bra för allmänt bruk | Högst, du kan ändra etiketter när som helst | Lägst, inga data och ingen träning |
| Few-shot | Bättre än zero-shot, särskilt med väl valda exempel | Hög, du kan ändra exempel och etiketter i prompten | Låg, du behöver bara några få exempel |
| Finjustering | Högst på uppgiften den tränats för | Lägst, omträning krävs för nya kategorier | Högst, inkluderar datainsamling, annotering och träning |
Zero-shot-inlärning jämfört med alternativ
Några saker är värda att lyfta ur den här tabellen.
Noggrannhet är ingen ren rangordning. Finjustering vinner när du har tillräckligt med märkta data och din uppgift är stabil. Men på en helt ny uppgift utan exempel att lära av är finjustering inte ens ett alternativ, och zero-shot blir det enda realistiska valet.
Flexibilitet rör sig i motsatt riktning. Zero-shot låter dig ändra kategorier när du vill. Finjusterade modeller är låsta till etikettsättet de tränats på.
Kostnad är den mest uppenbara. Zero-shot kostar nästan inget att sätta upp. Few-shot lägger till ett litet annoteringssteg. Finjustering är ett eget projekt och kräver dedikerad infrastruktur.
Arbetsflödet som de flesta team landar i är att börja med zero-shot för att se om uppgiften ens är möjlig. Om noggrannheten inte räcker, gå vidare till few-shot. Om det fortfarande inte räcker och uppgiften är viktig, finjustera.
Zero-shot-klassificering i NLP
Zero-shot-klassificering dyker upp i många NLP-arbetsflöden, särskilt där märkta data är svåra att få tag på eller där kategorierna hela tiden skiftar. Här är de vanligaste tillämpningarna.
Sentimentanalys
Sentimentanalys är skolboksexempel. Du matar modellen med en text och ber den välja bland etiketter som "positive", "negative" och "neutral".
Det intressanta är hur lätt det är att gå bortom de tre standardkategorierna. En traditionell sentimentsklassificerare är låst till det den tränades på. Med zero-shot kan du använda mer specifika etiketter som "frustrated", "satisfied", "confused" eller "excited" och modellen hanterar dem utan omträning. Detta är utmärkt för produktfeedback eller övervakning av sociala medier där de känslomässiga kategorier du bryr dig om beror på sammanhanget.
Ämnesklassificering
Ämnesklassificering sorterar dokument efter ämnesområden. Nyhetsartiklar i "politics", "sports", "technology", "finance". Supportärenden i "billing", "shipping", "account access", "feature request".
Zero-shot gör detta trivialt att sätta upp. Du behöver inte en märkt datamängd för varje nytt ämne. Om din produkt lanserar en ny funktion och du vill spåra ärenden om den, lägger du bara till "new feature feedback" i din kandidatlista och är klar.
Avsiktsdetektion
Avsiktsdetektion listar ut vad en användare försöker göra. Det är motorn bakom de flesta chatbottar och röstassistenter. När någon skriver "I need to change my password" måste modellen känna igen avsikten som "password reset" snarare än till exempel "general security question".
Här briljerar zero-shot. Verkliga produkter lägger ständigt till nya användaravsikter över tid, och att träna om en avsiktsklassificerare varje gång produktteamet lägger till en funktion är mycket jobb. Zero-shot låter dig hålla avsiktslistan aktuell utan att ändra modellen.
Innehållsmoderering
Innehållsmoderering flaggar problematiska texter – sådant som "hate speech", "spam", "harassment" eller "misinformation". Plattformar måste hålla sina policys uppdaterade, och kategorierna förändras när nya typer av missbruk dyker upp.
Zero-shot passar utmärkt här. Modereringsteam kan justera etikettdefinitioner eller lägga till nya kategorier i takt med att policys utvecklas, utan att gå tillbaka till ingenjörsteamet för en omträningscykel. Det paras vanligtvis med traditionella klassificerare för högvolymfall, men zero-shot hanterar den långa svansen av kategorier som inte har tillräckligt med märkta exempel att träna på.
Zero-shot-klassificering med Hugging Face Transformers
Hugging Faces bibliotek transformers är det enklaste sättet att testa zero-shot-klassificering i Python. pipeline-API:et döljer nästan allt arbete med att ladda modellen, så du kan gå från noll till förutsägelser på ett par rader kod.
Första gången du kör den här kodsnutten laddas modellen ned, så det tar lite tid.
Här är ett komplett exempel du kan köra:
from transformers import pipeline
from pprint import pprint
# Load a zero-shot classification pipeline
classifier = pipeline(
"zero-shot-classification",
model="facebook/bart-large-mnli"
)
# The text you want to classify
text = "My package never arrived and customer support hasn't responded in three days."
# The labels you want the model to choose from
candidate_labels = [
"shipping issue",
"billing issue",
"product question",
"general inquiry"
]
# Run the classification
result = classifier(text, candidate_labels)
pprint(result)
Utdata är en ordbok med tre fält: det ursprungliga indatat, kandidatetiketterna sorterade från mest till minst sannolik, och tillitsgraden för varje etikett.

Pipeline-utdata
"shipping issue" vinner med en tillitsgrad på 0,82. Modellen såg aldrig märkta exempel på leveransklagomål under träningen, men kom fram till detta via den förtränade modellen bart-large-mnli, som finjusterades på NLI-data precis som vi täckte i föregående avsnitt.
Det finns några saker värda att påpeka om detta arbetsflöde:
-
Modellen är en NLI-modell:
bart-large-mnliär BART finjusterad på MultiNLI-datasetet. När du anropar pipelinen konverterar den dina etiketter till hypoteser bakom kulisserna och kör dem genom modellen. -
Du kan ändra etiketter när som helst: Ingenting i modellen behöver ändras. Byt ut listan
candidate_labelsmot en annan och du klassificerar i andra kategorier. -
Flerval är en flagga bort: Sätt
multi_label=Truenär du anropar pipelinen, så tävlar de inte med varandra. Varje etikett får en oberoende sannolikhet, så en enda indata kan tillhöra flera kategorier.
result = classifier(text, candidate_labels, multi_label=True)
pprint(result)

Flerval-utdata
Det är hela arbetsflödet. Ladda pipelinen, definiera dina etiketter, anropa klassificeraren. Mycket snabbare och enklare än att bygga en klassificeringsmodell från grunden.
Vanliga misstag med zero-shot-klassificering
Zero-shot-klassificering är lätt att sätta upp, vilket är precis varför den är lätt att missbruka. Här är de misstag som oftast dyker upp i riktiga projekt.
Att välja vaga etiketter
Etiketterna är hur du kommunicerar uppgiften till modellen. Vaga etiketter leder till vaga förutsägelser.
"good" och "bad" säger inte modellen särskilt mycket. "customer is happy with the product" och "customer is reporting a problem with the product" ger modellen något att jobba med. Ju mer dina etiketter låter som meningsfulla fraser, desto bättre kommer modellen att poängsätta dem mot dina indata.
Undvik också överlappande etiketter. Om "complaint" och "negative feedback" båda finns i din kandidatlista, kommer modellen att dela upp sin tillit mellan dem och ingen blir en tydlig vinnare.
Att anta att zero-shot matchar finjusterad prestanda
Detta är det vanligaste. Zero-shot är bra, men inte magi.
En finjusterad modell tränad på några tusen märkta exempel för din specifika uppgift kommer nästan alltid slå en zero-shot-modell på den uppgiften. Om du ser 85% noggrannhet med zero-shot och behöver 95% för produktion, kommer ingen mängd etikettslipning att stänga det gapet. Då är finjustering svaret.
Använd zero-shot när du inte har märkta data, när dina kategorier ofta ändras, eller när "tillräckligt bra" faktiskt är tillräckligt bra. Välj det inte bara för att det är snabbare att sätta upp och bli sedan förvånad när det underpresterar på en högriskuppgift.
Att utvärdera på alltför snäva datamängder
Det går ungefär så här: du bygger en zero-shot-klassificerare, testar den på 50 exempel du skrivit själv, och den sätter varenda ett. Du levererar, och sedan når den produktion och alla klagar på hur dålig den är.
De 50 exempel du skrev är inte representativa för vad riktiga användare skickar. De är renare, mer uppenbara och mer i linje med hur du tänker kring kategorierna. Utvärdera på data som liknar det modellen faktiskt kommer att se – användargenererad text, med stavfel, slang och edge cases. Om du inte har den datan ännu, sampelera ett par hundra riktiga indata och märk dem för hand innan du litar på siffrorna.
Att ignorera domänspecifikt språk
Allmänna zero-shot-modeller kan allmänspråk. De kan inte din branschjargong.
Medicinsk terminologi, juridiskt språk, finansakronymer, ingenjörsspecar – alla har smala vokabulärer som förtränade modeller har sett, men inte på djupet. Om du ber en allmän zero-shot-modell klassificera en mening full av ICD-10-koder eller SQL-felmeddelanden, förvänta dig blandade resultat.
Du har två alternativ här. Antingen skriv om dina etiketter på klarspråk som modellen sannolikt förstår bättre, eller byt till en modell som förtränats på text från din domän. BioBERT för medicinsk text, FinBERT för finansiell text och liknande domänspecifika modeller presterar ofta bättre än generella på specialiserade uppgifter.
Varför zero-shot-klassificering är viktig i modern AI
Zero-shot-klassificering är en av de tydligaste demonstrationerna av hur grundmodeller har förändrat vad som är möjligt i AI.
För tio år sedan började varje klassificeringsuppgift med samma fråga: har vi märkta data, och om inte, hur får vi tag på dem? Annoteringsprojekt tog månader, krävde budget, leverantörssamordning och kvalitetskontroll. Modellen kunde inte ens byggas förrän datan fanns.
Det antagandet gäller inte längre.
En grundmodell tränad på bred textdata kan redan tillräckligt mycket språk för att hantera en ny klassificeringsuppgift i samma stund som du beskriver den. Listan med etiketter är det enda du behöver definiera.
Denna förändring spelar roll av några skäl som knyter an till större trender i AI:
- Det visar vad grundmodeller faktiskt är till för: Poängen med förträning i stor skala var att bygga en modell som är tillräckligt generell för att kunna styras om mot många uppgifter utan omträning. Zero-shot-klassificering är ett av de renaste exemplen på det löftet i praktiken.
- Det minskar beroendet av övervakade datamängder: Märkta data är fortfarande användbara, men är inte längre ett måste för att skapa en fungerande klassificerare. Team utan budget för annoteringsprojekt kan ändå leverera värdefulla AI-funktioner.
- Det förändrar leveranstakten: En klassificeringsfunktion som förr tog ett kvartal att lansera kan nu prototypas på en eftermiddag. Detta påverkar vad team väljer att bygga, eftersom kostnaden för att testa något har sjunkit till nästan noll.
Den bredare trenden är förskjutningen från uppgiftsspecifika modeller till generella. Finjustering har fortfarande sin plats, liksom träning från grunden när uppgiften kräver det. Men standardstartpunkten har skiftat. Du sträcker dig först efter en förtränad modell och specialiserar bara när datan motiverar det.
Slutsats
Zero-shot-klassificering påminner oss om att inte varje maskininlärningsproblem längre behöver en egen träningskörning. En modell som redan förstår språk kan styras om mot en ny uppgift genom att du ändrar etiketterna du ger den. Det behövs inga exempel eller finjustering.
Den flexibiliteten är hela poängen. Kategorierna du bryr dig om i dag kanske inte är samma som nästa månad, och zero-shot-modeller låter dig ändra dig.
Så innan du startar ett datamärkningsprojekt, kör en zero-shot-baslinje. Du vet på en eftermiddag om uppgiften är löst, delvis löst eller fortfarande behöver det tyngre angreppssättet. Inte mer än så.
Om du är ny på LLM:er, anmäl dig till vår Large Language Models (LLMs) Concepts-kurs. Den lär dig allt du behöver veta om LLM-tillämpningar, träningsmetoder och den senaste forskningen.
FAQs
Vad är zero-shot-klassificering med enkla ord?
Zero-shot-klassificering är ett sätt att tilldela etiketter till text utan att träna en modell på just de etiketterna. Du ger modellen en indata och en lista med möjliga kategorier, och den väljer bästa matchning baserat på vad den lärt sig under förträningen. "Zero" syftar på antalet tränings-exempel som behövs för varje kategori, vilket är noll.
När ska jag använda zero-shot-klassificering i stället för att träna en egen modell?
Använd zero-shot när du testar saker, inte har märkta data, när dina kategorier ofta ändras eller när du snabbt behöver leverera en prototyp. Det är också rätt val för utforskande arbete där du fortfarande klurar på vilka kategorierna ska vara. Om du har ett stabilt etikettsätt och tillräckligt många märkta exempel ger finjustering av en traditionell klassificerare vanligtvis bättre noggrannhet.
Hur noggrann är zero-shot-klassificering?
Noggrannheten beror på modellen du använder, hur tydliga dina etiketter är och hur väl uppgiften passar allmän språkförståelse. En zero-shot-modell på en väl definierad uppgift kan landa någonstans mellan solid och produktionsredo, men den förlorar nästan alltid mot en finjusterad modell tränad på tillräckligt med märkta data för samma uppgift. Behandla zero-shot som en stark baslinje.
Vad är skillnaden mellan zero-shot-klassificering och NLI?
Natural language inference (NLI) är en uppgift där en modell avgör om en mening följer av, motsäger eller är neutral gentemot en annan. Zero-shot-klassificering använder NLI-modeller som motor bakom kulisserna: din indata blir premissen, och varje kandidatetikett görs om till en hypotes. Etiketten vars hypotes får högst entailment-poäng vinner.
Kan jag använda zero-shot-klassificering för icke-engelsk text?
Ja, men du behöver en flerspråkig modell. Modeller som xlm-roberta-large-xnli är tränade på flerspråkiga NLI-data och kan hantera zero-shot-klassificering på dussintals språk. Håll dig till bart-large-mnli och liknande engelska modeller för engelsk text, och byt till en flerspråkig variant när dina indata inte är på engelska.