Pular para o conteúdo
mnzes

O que é prompt zero-shot?

PorDiógenes MenezesAprendendo IA em público

12 min de leitura

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.

instruçãoentrada realtudo que você escrevesaídafica por conta do modeloformato da saídarótulos possíveisgranularidade
Figura 1O que você não escreve não desaparece: vira inferência do modelo. Três decisões saem do seu controle de uma vez, e é sempre uma delas que quebra.

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 bastazero-shot erra previsivelmenteresumir um textotraduzirresponder perguntafactualformato de saídaexatorótulo do seuvocabuláriofronteira entreduas categorias
Figura 2A coluna da direita tem um padrão: são os casos em que a resposta certa depende de uma convenção sua, que o modelo não tem como conhecer.

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.

  1. 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.
  2. 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.
  3. 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”.
  4. 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.
  5. 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

zero-shotmedir em30 casosfica assimum exemplofew-shotpassoufalhouainda falha
Figura 3A medição fica entre o zero-shot e o exemplo. Sem ela você acrescenta exemplo por desconfiança, e paga esse contexto em toda chamada para sempre.
  1. Escreva o zero-shot com os cinco itens da seção anterior. Sem exemplo.
  2. Rode em 30 entradas reais com a saída esperada anotada ao lado. Conte os acertos. Esse número é a sua linha de base.
  3. 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.
  4. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

  1. Brown, T. B. et al.. Language Models are Few-Shot Learners (2020)arXiv:2005.14165
  2. Wei, J. et al.. Finetuned Language Models Are Zero-Shot Learners (2021)arXiv:2109.01652
  3. Sanh, V. et al.. Multitask Prompted Training Enables Zero-Shot Task Generalization (2021)arXiv:2110.08207
  4. Zhao, T. Z. et al.. Calibrate Before Use: Improving Few-Shot Performance of Language Models (2021)arXiv:2102.09690
  5. Kojima, T. et al.. Large Language Models are Zero-Shot Reasoners (2022)arXiv:2205.11916
  6. 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