Přeskočit na obsah
AI Základy

Few-shot vs Zero-shot Learning

4 min čtení
Few-shotZero-shotIn-context Learning

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 [email protected] nebo volejte 776 123 456"
    JSON: {"jmeno": "Jana Novák", "email": "[email protected]", "telefon": "776 123 456"}
    
    Text: "Petr Svoboda, tel: +420 602 987 654, [email protected]"
    JSON: {"jmeno": "Petr Svoboda", "email": "[email protected]", "telefon": "+420 602 987 654"}
    
    Text: "Napište mi na [email protected]"
    JSON: {"jmeno": null, "email": "[email protected]", "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.

CORE SYSTEMS tým

Enterprise architekti a AI inženýři.