Few-shot a zero-shot learning jsou dva klíčové přístupy v moderní umělé inteligenci, které umožňují modelům učit se s minimálním množstvím dat. Zatímco few-shot learning využívá několik málo příkladů, zero-shot learning dokáže řešit úkoly bez předchozí ukázky.
Co je Zero-shot a Few-shot Learning¶
Zero-shot a few-shot learning představují dva klíčové přístupy k využití velkých jazykových modelů (LLM) bez nutnosti jejich dalšího trénování. Zatímco zero-shot learning spoléhá pouze na přirozenou schopnost modelu porozumět zadání, few-shot learning poskytuje modelu několik příkladů pro lepší pochopení požadované úlohy.
Zero-shot Learning: Bez příkladů¶
Zero-shot learning využívá pouze jasně formulovaný prompt bez jakýchkoliv demonstračních příkladů. Model spoléhá na své předtrénované znalosti a schopnost porozumět instrukci v přirozeném jazyce.
# Zero-shot příklad pro klasifikaci sentimentu
prompt = """
Analyzuj sentiment následující věty a odpověz pouze 'pozitivní', 'negativní' nebo 'neutrální':
Věta: "Tento produkt je naprosto úžasný, doporučuji všem!"
Sentiment:
"""
Výhody zero-shot přístupu zahrnují jednoduchost implementace, rychlost odpovědi a minimální spotřebu tokenů. Na druhou stranu může být méně přesný u komplexnějších nebo specifických úloh.
Few-shot Learning: Učení z příkladů¶
Few-shot learning poskytuje modelu několik demonstračních příkladů (typicky 1-10) přímo v promptu. Tento přístup využívá in-context learning schopnosti moderních LLM.
# Few-shot příklad pro stejnou úlohu
prompt = """
Analyzuj sentiment následujících vět:
Věta: "Miluji tuto aplikaci, je perfektní!"
Sentiment: pozitivní
Věta: "Bohužel mě to zklamalo, nefunguje jak má."
Sentiment: negativní
Věta: "Je to v pořádku, nic extra."
Sentiment: neutrální
Věta: "Tento produkt je naprosto úžasný, doporučuji všem!"
Sentiment:
"""
Praktické srovnání výkonnosti¶
Pro demonstraci rozdílů jsme otestovali oba přístupy na úloze extrakce strukturovaných dat z textu. Výsledky ukazují významné rozdíly v přesnosti a konzistentnosti.
Zero-shot implementace¶
import openai
def zero_shot_extraction(text):
prompt = f"""
Extrahuj z následujícího textu jméno, email a telefon ve formátu JSON:
Text: {text}
JSON:
"""
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
return response.choices[0].message.content
Few-shot implementace¶
def few_shot_extraction(text):
examples = """
Text: "Kontaktujte mě na jana.novak@email.cz nebo volejte 776 123 456"
JSON: {"jmeno": "Jana Novák", "email": "jana.novak@email.cz", "telefon": "776 123 456"}
Text: "Petr Svoboda, tel: +420 602 987 654, petr@firma.com"
JSON: {"jmeno": "Petr Svoboda", "email": "petr@firma.com", "telefon": "+420 602 987 654"}
Text: "Napište mi na info@shop.cz"
JSON: {"jmeno": null, "email": "info@shop.cz", "telefon": null}
"""
prompt = f"""
Extrahuj z textu jméno, email a telefon ve formátu JSON:
{examples}
Text: {text}
JSON:
"""
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
return response.choices[0].message.content
Kdy použít který přístup¶
Zero-shot je ideální pro:¶
- Jednoduché, dobře definované úlohy (překlad, sumarizace)
- Situace s omezeným kontextem nebo počtem tokenů
- Rychlé prototypování a experimenty
- Úlohy, kde model již vykazuje dobrou výkonnost
Few-shot preferujte pro:¶
- Komplexní nebo doménově specifické úlohy
- Situace vyžadující specifický výstupní formát
- Úlohy s nejednoznačnými pravidly
- Případy, kde potřebujete vysokou konzistentnost výsledků
Optimalizace few-shot promptů¶
Pro maximální efektivitu few-shot learningu je klíčové pečlivé navržení příkladů. Příklady by měly pokrývat různé scénáře a edge cases, které se mohou v produkčních datech vyskytnout.
# Dobře navržené few-shot příklady pro klasifikaci
examples = [
{
"input": "Rychlá dodávka, kvalitní balení, spokojený zákazník!",
"output": "pozitivní",
"note": "jednoznačně pozitivní"
},
{
"input": "Pomalá dodávka, poškozený balíček, vrácení peněz.",
"output": "negativní",
"note": "jednoznačně negativní"
},
{
"input": "Průměrná kvalita za standardní cenu.",
"output": "neutrální",
"note": "neutrální hodnocení"
},
{
"input": "Skvělý produkt, ale příliš drahý pro mě.",
"output": "smíšený",
"note": "obsahuje pozitivní i negativní aspekty"
}
]
Měření a monitoring výkonnosti¶
Pro produkční nasazení je zásadní implementovat systematické měření výkonnosti obou přístupů. Doporučujeme A/B testování s metrikami relevantními pro konkrétní use case.
class PromptEvaluator:
def __init__(self):
self.metrics = {
'accuracy': [],
'response_time': [],
'token_usage': [],
'cost': []
}
def evaluate_approach(self, test_cases, approach_func):
results = []
for case in test_cases:
start_time = time.time()
try:
response = approach_func(case['input'])
accuracy = self.calculate_accuracy(response, case['expected'])
response_time = time.time() - start_time
results.append({
'accuracy': accuracy,
'response_time': response_time,
'success': True
})
except Exception as e:
results.append({
'accuracy': 0,
'response_time': time.time() - start_time,
'success': False,
'error': str(e)
})
return self.aggregate_results(results)
Cost-benefit analýza¶
Few-shot learning typicky spotřebovává 2-5x více tokenů než zero-shot, což se přímo promítá do nákladů. Je důležité vyhodnotit, zda zvýšená přesnost ospravedlňuje vyšší náklady pro konkrétní aplikaci.
Shrnutí¶
Zero-shot a few-shot learning představují komplementární přístupy k využití LLM. Zero-shot nabízí rychlost a efektivitu pro standardní úlohy, zatímco few-shot poskytuje vyšší přesnost a kontrolu pro komplexní scénáře. Volba mezi nimi závisí na specifických požadavcích projektu, dostupných zdrojích a požadované kvalitě výstupů. V produkčním prostředí doporučujeme systematické testování obou přístupů s jasně definovanými metrikami úspěšnosti.