Pular para o conteúdo
mnzes

Qual a diferença entre zero-shot, one-shot e few-shot?

PorDiógenes MenezesAprendendo IA em público

12 min de leitura

A diferença é quantos exemplos resolvidos você coloca antes da tarefa: zero, um ou alguns. Só isso. O nome muda com a quantidade, não com a técnica, e o efeito de cada degrau é diferente: o primeiro exemplo resolve formato, os seguintes resolvem a fronteira entre categorias parecidas, e a partir do quinto o custo cresce mais rápido que o ganho.

Cada uma tem artigo próprio, com o mecanismo em detalhe: zero-shot, one-shot e few-shot. Este aqui é a comparação, e ele existe porque a pergunta que as pessoas fazem não é “o que é few-shot”, é “vale a pena o que eu vou pagar por ele”.

A resposta curta: quase sempre comece em zero-shot e suba um degrau por vez, guiado pelo tipo de erro que você está vendo. A resposta longa tem uma tabela e alguns números medidos.

Os três, lado a lado

zero-shotone-shotfew-shotinstruçãoinstruçãoinstrução1 exemplo4 exemplosentrada realentrada realentrada real
Figura 1A instrução e a entrada real são iguais nas três. O que muda é o bloco do meio, e é ele que cresce em token a cada degrau.

A mesma tarefa, converter um peso para gramas, escrita nas três modalidades.

Zero-shot:

Converta o peso para gramas. Responda apenas com o número inteiro.

Peso: “1,5 kg”

One-shot:

Converta o peso para gramas.

Peso: “800 g” → 800 Peso: “1,5 kg” →

Few-shot:

Converta o peso para gramas.

Peso: “800 g” → 800 Peso: “2 lb” → 907 Peso: “meio quilo” → 500 Peso: “não informado” → null Peso: “1,5 kg” →

Repare no que cada versão comprou. O zero-shot precisou de uma frase inteira sobre formato e ainda não disse o que fazer com libra nem com peso ausente. O one-shot cortou a frase de formato. O few-shot resolveu a unidade estrangeira, a expressão em linguagem natural e o caso vazio, e cada um desses três custou uma linha.

A tabela

Zero-shot One-shot Few-shot
Exemplos no prompt 0 1 2 a 8
Custo por chamada só a instrução + ~60 tokens + 120 a 500 tokens
Fixa o formato da saída por descrição, com ambiguidade sim sim
Fixa a fronteira entre categorias não não sim
Cobre o caso vazio por descrição um caso só sim
Sensível à ordem dos exemplos não se aplica não se aplica sim
Viés para o rótulo mostrado nenhum máximo menor, se balanceado
Escolha quando linha de base, formato livre formato importa, sem ambiguidade várias categorias, casos de borda

Duas linhas dessa tabela costumam surpreender. A do viés: com um exemplo só, a preferência do modelo pelo rótulo que apareceu é máxima, porque não há um segundo caso equilibrando. Um trabalho de 2021 mediu esse tipo de viés e mostrou que calibrar a saída contra uma entrada neutra recupera até 30 pontos absolutos de acurácia média1.

E a da ordem: ela só existe a partir do few-shot, e não é um detalhe. Um estudo do mesmo ano encontrou permutações dos mesmos exemplos indo de perto do estado da arte a perto de chute, com o efeito presente em todos os tamanhos de modelo testados e sem transferência entre modelos2. Ao subir para few-shot você ganha a fronteira e herda uma variável nova para controlar.

O que os números mostram

zero-shotone-shotfew-shot (64)WebQuestions14,4%25,3%41,5%TriviaQA64,3%68,0%71,2%Winograd88,3%89,7%88,6%GPT-3 de 175B, medido em 2020
Figura 2A mesma mudança de modalidade quase triplicou o resultado no WebQuestions e não fez nada no Winograd. Não existe ganho médio para citar.

O paper do GPT-3 é a única fonte primária que mede as três modalidades no mesmo modelo, na mesma tarefa, com o mesmo protocolo. Com o modelo de 175B e 64 exemplos, o WebQuestions foi de 14,4% para 25,3% e para 41,5%; o TriviaQA foi de 64,3% para 68,0% e para 71,2%; o Winograd ficou em 88,3%, 89,7% e 88,6%3.

Três leituras saem daí, e todas continuam válidas seis anos depois.

Não existe um ganho médio. A mesma mudança quase triplicou uma tarefa e não mexeu na outra. Qualquer número do tipo “few-shot melhora X%” está escondendo uma variação dessa ordem.

O maior salto por exemplo é o primeiro. No WebQuestions, um exemplo rendeu 11 pontos; os 63 seguintes, juntos, renderam 16. O primeiro exemplo valeu quase tanto quanto todos os outros somados.

Existe tarefa em que exemplo não serve para nada. O Winograd oscilou dentro de um ponto e meio nas três modalidades. Não havia formato para fixar nem fronteira para mostrar, então não havia o que comprar.

A ressalva obrigatória: são números de 2020, de um modelo que não se usa mais. Os valores absolutos não valem como referência hoje, e a diferença entre modalidades encolheu bastante com instruction tuning. O que envelhece bem é o formato do resultado — a variação entre tarefas, não a média entre elas.

O que muda de verdade a cada degrau

Vale separar o que cada degrau compra, porque a intuição comum está errada em um ponto específico.

De zero para um: o formato. O exemplo mostra a estrutura da saída sem você descrever. Isso inclui coisas que a descrição erra com frequência: se tem bloco de código em volta do JSON, se o número usa ponto ou vírgula, se a resposta começa direto ou com uma frase de contexto.

De um para alguns: a fronteira. Um exemplo mostra um ponto do espaço. A linha que separa duas categorias parecidas precisa de casos dos dois lados, e é por isso que “acrescentei mais um exemplo bom” costuma não resolver confusão de categoria.

O ponto em que a intuição erra é achar que os exemplos ensinam o mapeamento entre entrada e saída. Um trabalho de 2022 trocou os rótulos dos exemplos por rótulos aleatórios em 12 modelos e mediu queda pequena; o que carrega o resultado é o conjunto de rótulos possíveis, a cara das entradas e o formato da sequência4. Na prática isso quer dizer que a decisão entre one-shot e few-shot é sobre cobertura do espaço, não sobre quantidade de acerto demonstrado.

Há um terceiro degrau que a maioria dos times não percebe que subiu: de exemplo fixo para exemplo escolhido. Quando os exemplos são sempre os mesmos, eles vivem no prefixo estável da requisição e o prompt caching cobra uma fração por eles. Quando você passa a selecionar os exemplos mais parecidos com cada entrada, ganha relevância e perde o cache inteiro, porque o prefixo muda a cada chamada. É a mesma quantidade de exemplos com uma conta de custo completamente diferente.

Como escolher

contexto quevocê pode gastarsobraapertazero-shotmesmo assimfew-shotzero-shotone-shotformato livreformato exatoexigência de formato →
Figura 3Contexto sobrando não é motivo para gastar. O quadrante de cima à esquerda é onde mais se paga por exemplo sem ter problema de formato para resolver.

Duas variáveis decidem quase tudo: o quanto o formato da saída é rígido e o quanto de contexto você pode gastar por chamada.

Formato livre e contexto apertado dá zero-shot, e não há discussão. Formato exato e contexto apertado dá one-shot: você compra a coisa mais cara por token, que é fixar formato, com o mínimo de exemplos. Formato exato e contexto sobrando dá few-shot, que é onde as fronteiras e os casos de borda cabem.

O quadrante interessante é o de cima à esquerda: formato livre com contexto de sobra. É onde a maioria dos times gasta sem precisar. Ter janela disponível não é motivo para preenchê-la, e cada exemplo continua sendo cobrado em toda chamada mesmo quando não resolve nada.

Existe uma terceira variável que a matriz não mostra e que decide os casos difíceis: quantas fronteiras a sua tarefa tem. Uma classificação binária com fronteira nítida cabe em one-shot. Uma taxonomia de doze categorias em que quatro pares se confundem precisa de oito exemplos só para mostrar as confusões, e aí a pergunta deixa de ser “few-shot ou não”. Passa a ser se a taxonomia deveria ter doze categorias. Reduzir o espaço de rótulos costuma render mais que qualquer ajuste no prompt, e é a mudança que ninguém propõe porque ela mexe no produto em vez de mexer no texto.

Quanto custa a diferença

Ordem de grandeza, com a tarefa de conversão de peso como base. Um exemplo dessa tarefa é curto, uns 20 tokens. Em tarefas reais, com a frase de origem inteira, um exemplo fica mais perto de 60.

Com 60 tokens por exemplo, a instrução do zero-shot em torno de 80 tokens e um volume de 500 mil chamadas por mês, a conta de entrada fica assim: zero-shot, 40 milhões de tokens; one-shot, 70 milhões; five-shot, 190 milhões. A escolha entre o primeiro e o último multiplica por quase cinco a parte da fatura que você controla escrevendo texto.

Dois fatores mexem nessa conta e costumam ficar de fora. Prompt caching derruba o preço do trecho reaproveitado quando os exemplos são fixos e ficam no prefixo, o que empurra a decisão na direção do few-shot. Seleção dinâmica de exemplo faz o contrário: melhora a qualidade e devolve o custo cheio, porque não há prefixo estável para reaproveitar.

A parte que ninguém contabiliza é a latência. Cada exemplo é contexto a mais para processar antes do primeiro token de resposta, e em interface síncrona isso aparece antes de aparecer na fatura.

Onde cada uma falha

Zero-shot falha quando a resposta certa depende de uma convenção sua. O nome interno de uma categoria, a fronteira definida no seu SLA, o formato exato que o seu parser espera. Nada disso é dedutível do mundo.

One-shot falha quando o único exemplo é excepcional. Se ele mostra um caso de borda, o modelo passa a tratar tudo como caso de borda. E, por ser um caso só, ele carrega o viés de rótulo no máximo.

Few-shot falha por acúmulo. Exemplos desbalanceados empurram o modelo para a categoria mais frequente no bloco, exemplos envelhecidos escondem categorias novas, e a ordem vira uma variável que ninguém está versionando.

Nenhuma das três sobrevive intacta a uma troca de modelo. A escolha entre elas foi feita contra um comportamento específico, e o comportamento muda de versão para versão. Uma tarefa que exigia five-shot no modelo do ano passado pode estar resolvida em zero-shot no atual, e o único jeito de saber é rodar o conjunto de teste nos dois. Prompt que sobrevive a três trocas de modelo sem ser reavaliado costuma estar pagando por exemplos que já não fazem diferença.

As três falham do mesmo jeito em uma situação: quando o problema é falta de conhecimento. Se a resposta depende de um documento que o modelo nunca viu, nenhuma quantidade de exemplo resolve, porque exemplo mostra forma, não conteúdo.

E o many-shot?

Existe um quarto ponto na régua que as janelas grandes tornaram viável: centenas ou milhares de exemplos. Um trabalho de 2024 mediu esse regime e encontrou ganhos consistentes em tarefas geradoras e discriminativas, além de algo que o few-shot não consegue: sobrepor vieses vindos do pré-treino. Os autores registram que o custo de inferência cresce linearmente5.

É um regime real e é caro. A partir dele a comparação honesta deixa de ser com o few-shot e passa a ser com treinar um modelo, o que muda a natureza da decisão.

Por onde começar

  1. Monte o conjunto de teste antes de escolher a modalidade. Trinta entradas reais com a saída esperada ao lado. Sem isso, a comparação entre as três é opinião.
  2. Rode o zero-shot e conte. Essa é a linha de base contra a qual todo o resto é medido.
  3. Classifique os erros por tipo. Formato, fronteira, conhecimento. Só o primeiro e o segundo se resolvem com exemplo.
  4. Suba um degrau por vez e rode de novo. Um exemplo para formato. Um par de cada lado para cada fronteira errada.
  5. Pare no degrau em que o ganho parar. Se o quinto exemplo não mexeu nos 30 casos, o sexto também não vai.

O passo 3 é o que evita a escolha errada com mais frequência. Erro de conhecimento tratado com mais exemplos é a forma mais comum de gastar contexto sem melhorar nada.

Footnotes

  1. Zhao et al. (2021) mediram o viés do modelo por certas respostas e recuperaram até 30 pontos absolutos de acurácia média calibrando com uma entrada neutra.

  2. Lu et al. (2021) encontraram permutações dos mesmos exemplos indo de perto do estado da arte a perto de chute, presentes em todos os tamanhos de modelo testados e sem transferência entre modelos.

  3. Brown et al. (2020) reportam, com o modelo de 175B e 64 exemplos: 14,4%, 25,3% e 41,5% no WebQuestions; 64,3%, 68,0% e 71,2% no TriviaQA; e 88,3%, 89,7% e 88,6% no Winograd, nas modalidades zero-shot, one-shot e few-shot.

  4. Min et al. (2022) substituíram rótulos corretos por aleatórios em 12 modelos e mediram queda pequena, apontando o espaço de rótulos, a distribuição das entradas e o formato como o que carrega o resultado.

  5. Agarwal et al. (2024) mediram o regime de centenas a milhares de exemplos, com ganhos consistentes, capacidade de sobrepor vieses do pré-treino e custo de inferência linear.

Perguntas frequentes

Qual a diferença entre zero-shot, one-shot e few-shot?
É quantos exemplos resolvidos vão no prompt antes da tarefa real: nenhum, um, ou de dois a oito. A técnica é a mesma nos três. O que muda é o que cada quantidade consegue fixar: um exemplo fixa o formato da saída, vários fixam a fronteira entre categorias parecidas.
Few-shot é sempre melhor que zero-shot?
Não. No paper do GPT-3, o Winograd ficou em 88,3% sem exemplo e 88,6% com vários, enquanto o WebQuestions saltou de 14,4% para 41,5%. A mesma mudança rendeu quase nada em uma tarefa e triplicou o resultado em outra. Só medir na sua tarefa responde.
Quando vale a pena dar exemplos?
Quando o erro que você está vendo é de formato ou de fronteira. Erro de formato pede um exemplo. Confusão entre duas categorias pede um exemplo de cada lado. Erro por falta de conhecimento não pede exemplo nenhum: pede o documento no contexto.
Qual a diferença entre one-shot e few-shot na prática?
Um exemplo mostra um ponto; vários mostram onde passa a linha. Com um caso só, o modelo copia o formato mas não sabe o que separa duas categorias parecidas, e ainda fica com viés máximo para o rótulo que você mostrou, porque não há nada equilibrando.
Existe many-shot?
Existe, e virou viável com as janelas grandes: centenas ou milhares de exemplos no contexto. Um trabalho de 2024 mediu ganhos consistentes nesse regime e capacidade de sobrepor vieses do pré-treino, com custo de inferência crescendo linearmente. É onde a comparação passa a ser com fine-tuning.
Como escolher entre os três sem adivinhar?
Escreva o zero-shot, rode em 30 entradas reais com a saída esperada anotada e conte os acertos. Depois olhe os erros um a um: o tipo de erro diz qual degrau comprar. Sem esse conjunto, qualquer escolha entre os três é preferência pessoal com aparência de método.

Referências

  1. Brown, T. B. et al.. Language Models are Few-Shot Learners (2020)arXiv:2005.14165
  2. Min, S. et al.. Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? (2022)arXiv:2202.12837
  3. Zhao, T. Z. et al.. Calibrate Before Use: Improving Few-Shot Performance of Language Models (2021)arXiv:2102.09690
  4. Lu, Y. et al.. Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity (2021)arXiv:2104.08786
  5. Agarwal, R. et al.. Many-Shot In-Context Learning (2024)arXiv:2404.11018