O que é prompt zero-shot?
Prompt zero-shot é pedir a tarefa sem mostrar nenhum exemplo: só a instrução e a entrada. Tudo o que você não escrever, o modelo infere — o formato da resposta, quais rótulos existem, em que granularidade responder. É o ponto de partida certo para quase toda tarefa: é o prompt mais curto, o mais barato e o único que não enviesa a saída na direção de um caso específico.
O nome vem de “shot”, que aqui significa exemplo e não tentativa. Zero-shot não é perguntar uma vez sem insistir; é não fornecer nenhum caso resolvido. É a primeira das modalidades de prompt baseado em exemplos, e as outras se definem por contraste com ela: um exemplo e vários. A comparação com números está em zero-shot, one-shot ou few-shot.
Vale dizer o que zero-shot não significa. Não quer dizer prompt curto nem prompt preguiçoso. A instrução de um zero-shot bem escrito costuma ser mais longa que a de um few-shot, porque tudo o que o exemplo mostraria de graça precisa estar dito com palavras.
O que o modelo precisa inferir sozinho
Pegue uma tarefa concreta: classificar a severidade de um alerta de monitoramento.
Classifique a severidade deste alerta.
Alerta: “latência p99 do checkout em 3,4 s há 8 minutos”
O modelo responde. A resposta vem plausível e vem errada para o seu sistema:
“Alta — degradação significativa de desempenho no fluxo de compra”. Você queria
P2.
Três decisões saíram do seu controle na mesma chamada.
O formato: uma palavra, uma frase, um JSON? Você não disse, então o modelo escolheu o que costuma agradar, que é frase com justificativa.
O espaço de rótulos: alto, médio e baixo? crítico, aviso e informativo? P1, P2 e P3? Cada empresa tem o seu, e nenhum deles é mais óbvio que os outros do ponto de vista do modelo.
A granularidade: só o rótulo ou o rótulo com a explicação? Na dúvida ele explica, porque explicar parece mais útil.
O trabalho de escrever um zero-shot é justamente transformar essas três inferências em texto. Não é uma limitação da técnica; é a técnica.
Existe uma quarta coisa que o modelo infere e que quase ninguém escreve: onde
termina a sua instrução e onde começa o dado. Se o alerta contiver a palavra
“classifique”, ou uma quebra de linha no lugar errado, a fronteira entre os dois
some. Marcar essa fronteira com um delimitador explícito, uma linha de
### Alerta ou uma tag, custa cinco tokens e elimina uma classe inteira de falha
que só aparece na entrada estranha do dia 40.
Por que zero-shot ficou bom
Em 2020, zero-shot era a linha de base fraca. O paper do GPT-3 mediu a mesma tarefa nas três modalidades e o resultado dependia muito do dataset: em TriviaQA, o modelo de 175B fez 64,3% sem exemplo e 71,2% com 64 exemplos; em Natural Questions, foi de 14,6% para 29,9%1. Sete pontos em um caso, o dobro do resultado no outro, mesmo modelo.
O que mudou depois não foi o tamanho, foi o treino. Um trabalho de 2021 ajustou um modelo de 137B em mais de 60 tarefas de PLN descritas por instrução em linguagem natural e mostrou que isso melhora bastante o desempenho em tarefas não vistas: o modelo resultante superou o GPT-3 de 175B em zero-shot em 20 de 25 tarefas avaliadas2. No mesmo ano, outro grupo converteu um conjunto grande de datasets supervisionados para um formato de prompt legível e treinou um encoder-decoder nessa mistura; o modelo obteve desempenho zero-shot forte superando, em vários datasets, modelos até 16 vezes maiores3.
A consequência prática é direta. Os modelos que você chama hoje foram treinados explicitamente para obedecer a uma instrução sem exemplo. Zero-shot deixou de ser o modo degradado e virou o modo normal — e boa parte dos conselhos de 2021 sobre “sempre dê exemplos” envelheceu junto.
Onde basta e onde erra previsivelmente
Zero-shot basta quando a saída não tem forma obrigatória. Resumir, reescrever, traduzir, responder uma pergunta sobre um texto que está no próprio prompt: em todos esses casos existe uma faixa larga de respostas aceitáveis, e o modelo cai dentro dela sem ajuda.
Zero-shot erra de um jeito previsível em três situações, e elas têm a mesma raiz.
Quando o formato exato importa. Você precisa de JSON puro, sem cerca de código em volta, com o valor numérico sem símbolo de moeda e sem separador de milhar. Dá para descrever isso em palavras, mas é longo e ainda assim ambíguo.
Quando o vocabulário de rótulos é seu. P1, P2 e P3 existem no seu
runbook. Já cobranca sem cedilha existe porque a sua tabela tem uma coluna
assim. Nada disso é dedutível.
Quando a fronteira entre duas categorias é convenção sua. Um alerta de latência que dura 8 minutos é P2 ou P1? A resposta depende do seu SLA, não do mundo. Esta é a situação em que zero-shot perde mais e em que exemplo ganha mais, porque a fronteira é exatamente o que um exemplo mostra e uma definição textual raramente consegue fixar.
Como escrever um zero-shot que funciona
O reflexo comum quando o zero-shot falha é acrescentar exemplo. Antes disso vale gastar dez minutos escrevendo o que estava implícito.
- Enumere o espaço de respostas. “Responda apenas com P1, P2 ou P3.” Uma frase resolve o problema de rótulo inteiro, e custa menos tokens que qualquer exemplo.
- Descreva o formato com a precisão que você exigiria de um schema. Se a saída vai para código, diga o número de campos, o tipo de cada um e que não deve haver texto antes nem depois.
- Defina a fronteira com um critério operacional. “P1 se o fluxo de compra estiver indisponível; P2 se estiver degradado” fixa a linha melhor do que “classifique pela gravidade”.
- Diga o que fazer no caso que não se encaixa. Sem isso o modelo força a entrada em alguma categoria em vez de dizer que não sabe. A abstenção precisa estar escrita.
- Corte a persona decorativa. “Você é um SRE sênior com 15 anos de experiência” ocupa contexto e não define nada verificável. O que muda o resultado é a restrição, não o crachá.
O passo 3 é o que mais rende e o que menos gente faz. A maioria dos prompts de classificação lista as categorias e não define nenhuma.
Zero-shot para classificação
Classificação é onde a pergunta “zero-shot dá conta?” mais aparece, então vale ser específico.
Dá conta quando as categorias existem no mundo: sentimento positivo ou negativo, idioma de um texto, spam ou não spam. O modelo viu milhões de exemplos dessas distinções no treino e não precisa dos seus.
Não dá conta quando as categorias são internas. P1 e P2 não são conceitos, são
convenções escritas em um documento que o modelo não leu. O mesmo vale para
qualquer taxonomia de produto, de departamento ou de motivo de cancelamento que
alguém desenhou numa reunião.
Há também um efeito que atrapalha em silêncio: o modelo não trata os rótulos como
igualmente prováveis antes de ver a entrada. Um trabalho de 2021 mediu esse viés
em cenário com poucos exemplos e encontrou preferência sistemática por respostas
comuns no pré-treino e por rótulos que aparecem perto do fim do prompt; calibrar
a saída com uma entrada neutra recuperou até 30 pontos absolutos de acurácia
média4. O experimento é com exemplos, e não vale extrapolar o número para
zero-shot, mas a causa é a mesma e continua presente: crítico e alto não são
palavras igualmente frequentes, e a diferença aparece na distribuição antes de
qualquer raciocínio sobre o alerta.
Na prática isso tem duas saídas. Escolha nomes de rótulo neutros e de frequência
parecida, ou peça um rótulo natural para o modelo e traduza para o seu código
interno no seu próprio código, onde um switch resolve sem ambiguidade.
Zero-shot com raciocínio
Existe uma variante que merece nota própria. Em 2022, um trabalho mostrou que acrescentar “vamos pensar passo a passo” antes da resposta, sem exemplo nenhum, muda bastante o desempenho em tarefas de raciocínio: no text-davinci-002, o MultiArith foi de 17,7% para 78,7% e o GSM8K de 10,4% para 40,7%5.
Duas ressalvas antes de sair colando a frase em tudo. A primeira é a data: aquele é um modelo de 2022, e os modelos de raciocínio atuais já produzem os passos intermediários por conta própria, então impor um formato de pensamento pode atrapalhar em vez de ajudar. A segunda é o escopo: o ganho foi medido em tarefas com uma resposta certa verificável, aritmética e raciocínio simbólico. Em classificação ou extração, pedir passo a passo costuma só render um texto mais longo. O assunto tem cluster próprio em raciocínio em LLMs.
Onde falha
A saída muda entre chamadas. Sem exemplo fixando o formato, duas requisições
idênticas podem devolver P2 e Severidade: P2. Se um parser está do outro
lado, um dos dois quebra.
O modelo não pede esclarecimento. Entrada ambígua produz resposta confiante, não pergunta. Zero-shot não tem nada que sinalize incerteza a menos que você peça.
O fraseado importa mais do que gostaríamos. Um estudo de 2023 mediu variações de formato que preservam o sentido — separador, espaçamento, caixa das letras — e achou até 76 pontos de acurácia de diferença em LLaMA-2-13B. O experimento foi feito em cenário com exemplos, então não transporte o número para zero-shot; o que transporta é o hábito de tratar o formato como variável e medir6.
Ele não substitui conhecimento ausente. Se a resposta depende do seu runbook, nenhuma instrução faz o modelo conhecer o runbook. Ou o texto entra no prompt ou não há tarefa.
Zero-shot learning é outra coisa. A confusão de nome atrapalha buscas inteiras. Zero-shot learning é uma linha de machine learning sobre reconhecer classes nunca vistas no treino a partir de descrição ou atributos, e ali há treino. Prompt zero-shot não atualiza peso nenhum.
Quanto custa
Ordem de grandeza, com a tarefa de severidade como base.
A instrução completa do zero-shot descrito acima — enumeração de rótulos, critério de fronteira, formato e regra de abstenção — fica em torno de 120 tokens. Cinco exemplos de alerta e rótulo acrescentam algo como 250 tokens. A conta individual é irrelevante; a conta mensal não é.
Um sistema que classifica 1 milhão de alertas por mês paga 120 milhões de tokens de entrada com zero-shot e 370 milhões com five-shot. Se o few-shot resolver 4 pontos percentuais de erro que custam plantão às três da manhã, ele se paga com folga. Se resolver 0,3 ponto, não. É a mesma pergunta em qualquer volume, e ela só tem resposta com medição.
Quando escalar
- Escreva o zero-shot com os cinco itens da seção anterior. Sem exemplo.
- Rode em 30 entradas reais com a saída esperada anotada ao lado. Conte os acertos. Esse número é a sua linha de base.
- Olhe os erros, não a taxa. Erro de formato pede um exemplo. Erro de fronteira pede exemplos dos dois lados da fronteira. Erro de conhecimento não pede exemplo nenhum: pede o documento no contexto.
- Escale um degrau por vez e meça de novo. Se um exemplo resolveu, pare em um. O caminho natural é zero-shot, um exemplo, few-shot, e cada degrau custa contexto em toda chamada.
O passo 3 é o que evita a compra desnecessária. Acrescentar cinco exemplos porque o zero-shot “não pareceu confiável” é o jeito mais comum de pagar 250 tokens por requisição, para sempre, sem saber o que se comprou.
Footnotes
-
Brown et al. (2020) reportam, na tabela de perguntas e respostas de livro fechado, 64,3% em zero-shot e 71,2% em few-shot no TriviaQA, e 14,6% contra 29,9% no Natural Questions, com o modelo de 175B e 64 exemplos. ↩
-
Wei et al. (2021) ajustaram um modelo de 137B em mais de 60 tarefas descritas por instrução e mediram ganho em tarefas não vistas, superando o GPT-3 de 175B em zero-shot em 20 de 25 tarefas. ↩
-
Sanh et al. (2021) converteram datasets supervisionados para formato de prompt e treinaram um encoder-decoder na mistura, obtendo desempenho zero-shot superior ao de modelos até 16 vezes maiores em vários datasets. ↩
-
Zhao et al. (2021) descrevem o viés do modelo por respostas comuns no pré-treino e por rótulos próximos do fim do prompt, e recuperam até 30 pontos absolutos de acurácia média calibrando com uma entrada neutra. ↩
-
Kojima et al. (2022) mediram o efeito de “let’s think step by step” sem nenhum exemplo em benchmarks de aritmética e raciocínio simbólico. ↩
-
Sclar et al. (2023) mediram variações de formato que preservam o sentido em cenário com exemplos e encontraram até 76 pontos de diferença de acurácia em LLaMA-2-13B. ↩
Perguntas frequentes
- Qual é um exemplo de prompt zero-shot?
- Classifique a severidade deste alerta. Responda apenas com P1, P2 ou P3. Alerta: latência p99 do checkout em 3,4 s há 8 minutos. Há instrução, restrição de formato e entrada, e nenhum caso resolvido antes. É isso que faz dele zero-shot, não o tamanho do texto.
- Quando usar zero-shot?
- Sempre primeiro. É a versão mais barata e serve de linha de base para medir qualquer coisa que você fizer depois. Ela costuma bastar em tarefas de formato livre: resumir, reescrever, traduzir, responder pergunta sobre um texto que está no prompt.
- Zero-shot funciona para classificação?
- Funciona quando as categorias são conhecidas do mundo, como sentimento positivo e negativo. Falha quando o vocabulário de rótulos é seu, com nomes internos e fronteiras que só existem na sua empresa. Nesse caso, ou você enumera as categorias na instrução com a definição de cada uma, ou dá exemplos.
- Zero-shot é pior que few-shot?
- Depende inteiramente da tarefa. No paper do GPT-3, TriviaQA foi de 64,3% em zero-shot para 71,2% em few-shot, enquanto Natural Questions foi de 14,6% para 29,9% no mesmo modelo. A mesma mudança de modalidade rendeu 7 pontos em um caso e dobrou o resultado no outro.
- Zero-shot prompting é a mesma coisa que zero-shot learning?
- Não. Zero-shot learning é uma área de machine learning sobre reconhecer uma classe nunca vista no treino, usando descrição ou atributos, e envolve treinar modelo. Prompt zero-shot não treina nada: os pesos ficam congelados e a única coisa que muda é o texto da requisição.
- Como melhorar um prompt zero-shot sem acrescentar exemplo?
- Escreva o que você estava deixando implícito. Enumere os rótulos possíveis, descreva o formato da saída com a precisão de um schema, diga o que fazer quando a entrada não se encaixa e corte a persona decorativa. Isso resolve boa parte do que as pessoas tentam resolver com exemplo.
Referências
- Brown, T. B. et al.. Language Models are Few-Shot Learners (2020)arXiv:2005.14165
- Wei, J. et al.. Finetuned Language Models Are Zero-Shot Learners (2021)arXiv:2109.01652
- Sanh, V. et al.. Multitask Prompted Training Enables Zero-Shot Task Generalization (2021)arXiv:2110.08207
- Zhao, T. Z. et al.. Calibrate Before Use: Improving Few-Shot Performance of Language Models (2021)arXiv:2102.09690
- Kojima, T. et al.. Large Language Models are Zero-Shot Reasoners (2022)arXiv:2205.11916
- Sclar, M. et al.. Quantifying Language Models' Sensitivity to Spurious Features in Prompt Design or: How I learned to start worrying about prompt formatting (2023)arXiv:2310.11324