Pular para o conteúdo
mnzes

Como dar exemplos de raciocínio ao modelo?

PorDiógenes MenezesAprendendo IA em público

13 min de leitura

Few-shot CoT é colar no prompt exemplos já resolvidos em que a resposta vem precedida dos passos. O modelo copia a forma do raciocínio e aplica na pergunta nova. É a versão original do chain-of-thought, com dois a oito exemplares e nenhum treino, e continua sendo a que dá mais controle sobre o que sai do outro lado.

A diferença para um exemplo comum é uma linha. Em um prompt few-shot você mostra entrada e saída; aqui você mostra entrada, caminho e saída. O caminho é o que o modelo vai imitar.

É também a alternativa mais cara ao zero-shot CoT, que consegue o mesmo efeito com uma frase e nenhum exemplo. A escolha entre os dois é uma escolha entre controle e tamanho de prompt, e este artigo é sobre o lado do controle. O mecanismo comum aos dois está em o que é chain-of-thought.

exemplar só com a respostaexemplar com o raciocínioQ: 53 itens, 8 por caixa.Quantas caixas?A: 7Q: 31 itens, 6 por caixa.A: 5Q: 53 itens, 8 por caixa.Quantas caixas?A: 53 / 8 = 6, sobram 5.A sobra precisa de caixa.A resposta é 7.Q: 31 itens, 6 por caixa.A: 31 / 6 = 5, sobra 1.A sobra precisa de caixa.A resposta é 6.
Figura 1O exemplar só com a resposta ensina a divisão inteira. O exemplar com os passos ensina que a sobra também precisa de caixa, e é essa regra que o modelo repete.

O que o exemplar transmite

Um exemplar sem passos transmite duas coisas: o formato da saída e um mapeamento de entrada para resposta. Se o problema é “53 itens, 8 por caixa” e a resposta é “7”, o modelo tem que descobrir sozinho de onde veio o 7. A hipótese mais simples compatível com o dado é a divisão, e a divisão dá 6.

O exemplar com passos transmite uma terceira coisa: o procedimento. “53 dividido por 8 dá 6, sobram 5. A sobra precisa de caixa. A resposta é 7.” Agora a regra do arredondamento está escrita, e escrita é o que o modelo copia.

Não é ensino no sentido de treino. Nenhum peso muda. O que muda é o que está disponível no contexto na hora de gerar a resposta, e uma regra explícita no contexto é mais forte que uma regra que precisaria ser inferida de um par de exemplo.

Uma boa notícia acompanha isso, e ela contraria o que se sabe do few-shot comum. Em prompt de exemplos sem raciocínio, a ordem dos exemplares é uma variável conhecida e chata: trocar a sequência muda o resultado. Nos experimentos de aritmética do paper original, o few-shot CoT se mostrou robusto tanto à ordem dos exemplares quanto à quantidade deles1. Você tem menos um botão para ajustar, o que é o tipo de simplificação que vale mencionar quando alguém propõe testar as 24 permutações de quatro exemplos.

Isso vale especialmente para tarefas em que a resposta correta e a resposta plausível divergem por uma convenção. Arredondamento para cima, tratamento de empate, dia útil versus dia corrido, cobrança proporcional que começa no dia da assinatura. Nesses casos o exemplar com passos é a forma mais barata de escrever uma regra de negócio dentro do prompt.

O que importa dentro do exemplar

Aqui a evidência contraria a intuição de quase todo mundo, e vale ler com cuidado antes de reescrever o seu prompt.

Um estudo de dezembro de 2022 reescreveu os exemplares com raciocínio deliberadamente inválido: passos que não derivam a resposta, com os números e as relações trocados. Não foi perturbação sutil; foi alteração drástica. O modelo manteve mais de 80% do desempenho do CoT normal no GSM8K e no Bamboogle, e mais de 90% quando a medida era a recuperação dos valores intermediários corretos2. Os exemplares eram falsos e o modelo continuou raciocinando direito.

O que os autores encontraram como determinante foram duas outras propriedades. A relevância: os passos precisam falar dos objetos que aparecem na pergunta. E a ordem: os passos precisam vir na sequência em que dependem uns dos outros. Quebrar qualquer uma das duas derruba o desempenho bem mais que inventar a aritmética2.

Um trabalho de setembro de 2022 chegou perto disso por outro caminho. Usando prompts contrafactuais, em que só um componente era alterado por vez, os autores concluíram que a presença de padrões factualmente corretos no prompt é praticamente irrelevante para o sucesso do CoT, e que o papel dos passos não é ensinar a resolver a tarefa: é sinalizar quais símbolos devem ser replicados na saída3.

Uma ressalva antes que alguém tire a lição errada disso. Os experimentos foram no GSM8K e num conjunto de perguntas de múltiplos saltos, com modelos de 2022, e os autores estavam isolando um mecanismo, não recomendando uma prática. Nada ali diz para você publicar exemplares com a conta errada. O que diz é onde colocar o seu esforço de revisão: um exemplar com os passos corretos mas com objetos que não têm nada a ver com as suas perguntas reais é pior que um com um erro de digitação num subtotal.

A leitura prática dos dois resultados: o exemplar é um molde, não uma aula. Ele diz “a resposta a este tipo de pergunta se parece com isto, e passa por estes objetos, nesta ordem”. Gastar uma tarde conferindo a aritmética dos seus exemplares rende menos do que gastar dez minutos garantindo que eles falam dos mesmos objetos que as perguntas reais.

Quantos exemplares, e de qual tarefa

A tarefa precisa bater. É o erro mais caro e o mais fácil de cometer. No paper do zero-shot CoT há uma tabela que mostra o tamanho do estrago: trocar os exemplares de aritmética por exemplares de senso comum derrubou o MultiArith de 88,2% para 27,0%. No AQuA, onde o formato de resposta coincide porque as duas tarefas são de múltipla escolha, a queda foi de 39,0% para 31,9%4. Exemplar de outra tarefa é pior que exemplar nenhum, e o zero-shot puro batia os dois casos.

Exemplares mais longos rendem mais. Um trabalho de outubro de 2022 propôs escolher os exemplares pelo número de passos: quanto mais complexa a cadeia demonstrada, melhor o resultado. Eles reportaram melhora média de 5,3 pontos e até 18 pontos em três benchmarks de matemática e duas tarefas do BIG-Bench Hard5. O critério é fácil de aplicar: entre dois exemplos candidatos, prefira o que precisa de mais etapas.

A quantidade satura. Oito era o número do paper original, escolhido para aquele experimento1. Em produção, dois a quatro costumam entregar quase tudo, e cada exemplar a mais viaja em toda chamada. O teste que resolve é rodar os seus casos com dois, quatro e oito e olhar a curva.

Escrever à mão não é obrigatório. Um método de outubro de 2022 gera os exemplares automaticamente: agrupa perguntas do seu conjunto, escolhe uma representante de cada grupo e usa o zero-shot CoT para produzir a cadeia de cada uma. As cadeias saem com erros, e a defesa dos autores contra isso é a diversidade das perguntas escolhidas. Em dez benchmarks com GPT-3, o resultado igualou ou superou os exemplares escritos à mão6. Vale quando você tem muitas perguntas e pouco tempo.

Quem escreve o exemplar muda o resultado

Vale saber que a variância entre autores é grande, porque isso muda como você interpreta um teste A/B de prompt.

No paper original, três coautores escreveram cadeias independentes para os mesmos oito exemplares. Na tarefa de rastrear moedas viradas, um deles chegou a 99,6% e outro a 71,4%. Os dois ficaram acima dos 50% do prompt padrão, mas 28 pontos separam duas pessoas fazendo a mesma coisa com o mesmo cuidado1. Os autores também testaram cadeias escritas por anotadores sem formação em aprendizado de máquina, tiradas do conjunto de treino do GSM8K, e elas também bateram o prompt padrão com folga.

A implicação é chata e útil. Se você trocar de exemplar e a exatidão subir três pontos, você não sabe se melhorou o prompt ou se caiu num ponto melhor dessa variância. Só um conjunto de teste com dezenas de casos separa as duas coisas.

Quando vale a pena, comparado ao zero-shot

A frase gatilho produz passos sem custar prompt. Se ela resolve, montar exemplares é trabalho jogado fora. Três situações em que ela não resolve e o few-shot ganha.

Um programa vai ler a saída. O exemplar fixa a última linha em um formato que você escolheu, e o parser passa a ler um campo em vez de adivinhar onde está o número. O zero-shot só chega ao mesmo lugar com uma segunda chamada de extração, que custa outra requisição e outra latência.

A tarefa tem uma convenção sua. Regras de arredondamento, prazo em dia útil, proporcional que começa no dia da assinatura. Nada disso está no treino do modelo do jeito que a sua empresa faz, e escrever a regra dentro de um exemplar resolvido funciona melhor que descrevê-la em prosa na instrução.

O raciocínio tem uma forma específica. Diagnóstico que precisa eliminar hipóteses numa ordem, cálculo tributário que aplica bases em sequência, revisão de contrato que confere cláusulas por categoria. A frase gatilho pede passos genéricos; o exemplar pede estes passos.

Fora desses três casos, comece pelo zero-shot e não olhe para trás.

Onde falha

O exemplar vira gabarito. Se todos os seus exemplares resolvem o caso simples, o modelo tende a forçar o caso complicado no mesmo molde. Aparece como resposta com a estrutura certa e o passo faltando, e é o motivo pelo qual escolher exemplares complexos rende.

Passos demais ensinam prolixidade. Um exemplar em que cada operação vira dois parágrafos produz saídas em que cada operação vira dois parágrafos. Você paga isso em toda chamada e o revisor humano lê mais para achar a mesma informação.

O bloco compete com o resto do contexto. Em uma aplicação com documento recuperado ou histórico de conversa, 700 tokens de exemplares disputam espaço e atenção com o que realmente importa. Em prompt longo, exemplares no meio são a parte que o modelo mais tende a ignorar.

Formato herdado errado. Se o seu exemplar usa vírgula como separador decimal e a sua entrada real usa ponto, o modelo escolhe um dos dois por chamada. Detalhes de formatação dentro do exemplar são copiados junto, inclusive os que você não notou que estavam lá.

O conjunto envelhece calado. Exemplares são escritos uma vez e ficam. Quando a regra de negócio muda, o prompt continua ensinando a regra antiga, com passos convincentes, e ninguém revisa exemplar de prompt na mesma frequência com que revisa código.

Quanto custa

few-shot comumfew-shot com raciocínioinstrução · 25 tokens4 exemplares · 120 tokensa pergunta real · 30 tokensinstrução · 25 tokens4 exemplares · 640 tokensa pergunta real · 30 tokensentrada: 175 tokens por chamadaentrada: 695 tokens por chamada
Figura 2O bloco de exemplares é o que engorda, e ele viaja em toda chamada. A altura de cada caixa é proporcional à contagem de tokens que ela representa.

Números de ordem de grandeza, com as premissas à vista.

Um exemplar comum, com pergunta e resposta curta, ocupa perto de 30 tokens. O mesmo exemplar com três ou quatro passos escritos ocupa algo como 160. Quatro deles saem de 120 para 640 tokens, e isso entra em toda chamada junto com a instrução e a pergunta: um prompt de 175 tokens vira um de 695.

Quatro vezes mais entrada parece muito e costuma ser o menor dos custos. Token de entrada é a parte barata da conta na maioria dos provedores, e este bloco em particular é idêntico entre requisições, que é exatamente a condição para o prompt caching funcionar. Com cache ativo, a diferença entre os dois prompts encolhe para quase nada depois da primeira chamada.

O custo que não some é o da saída. O exemplar define o comprimento da cadeia que o modelo vai escrever: exemplar de três frases gera três frases, exemplar de onze gera onze. Escrever exemplares enxutos é a única alavanca direta que você tem sobre os tokens de saída, e é ela que decide a fatura em volume.

Como montar um conjunto de exemplares

  1. Pegue perguntas reais, não inventadas. Duas ou três do seu próprio backlog de casos. Exemplo inventado tende a ser limpo demais e não cobre a bagunça da entrada real.
  2. Prefira o caso com mais etapas. Entre dois candidatos, o mais complexo ensina mais, e foi isso que a seleção por complexidade mediu.
  3. Uma operação por frase. É o que permite ao passo seguinte ler um número já escrito, e é onde os erros de conta aparecem quando você não faz.
  4. Escreva a regra de negócio dentro do raciocínio. “A sobra precisa de caixa” é uma frase de exemplar; ela custa menos e funciona melhor que um parágrafo de instrução dizendo a mesma coisa.
  5. Termine todos com a mesma linha de resposta. É o que o seu parser vai ler. Se os exemplares divergirem aqui, a saída diverge junto.
  6. Confira que os exemplares falam dos mesmos objetos das perguntas reais. Essa é a propriedade que a evidência aponta como determinante, e é rápida de checar.
  7. Comece com dois, meça, e só então suba para quatro. Guarde os oito para quando os quatro tiverem mostrado ganho.

O passo 1 é o que mais muda o resultado e o que mais se pula. Um exemplar tirado de um caso real carrega, de graça, todas as peculiaridades do seu domínio que você não teria pensado em escrever.

Footnotes

  1. Wei et al. (2022) estabeleceram o few-shot CoT com oito exemplares, mediram a variância entre três anotadores escrevendo as mesmas cadeias (99,6% contra 71,4% na tarefa de moedas, com 50,0% de linha de base) e mostraram que cadeias escritas por anotadores sem formação técnica também superam o prompt padrão. 2 3

  2. Wang et al. (2022) substituíram os passos dos exemplares por raciocínio inválido e mediram retenção de mais de 80% do desempenho no GSM8K e no Bamboogle, com mais de 90% na medida intrínseca; identificaram relevância à pergunta e ordem correta dos passos como os fatores determinantes. 2

  3. Madaan e Yazdanbakhsh (2022) usaram prompts contrafactuais para isolar os componentes do exemplar e concluíram que padrões factualmente corretos são praticamente irrelevantes, e que o papel dos passos é sinalizar quais símbolos replicar na saída.

  4. Kojima et al. (2022) mediram o efeito de usar exemplares de outra tarefa: MultiArith caiu de 88,2% para 27,0% e AQuA de 39,0% para 31,9%, com perda menor quando o formato da resposta coincidia.

  5. Fu et al. (2022) propuseram escolher exemplares pelo número de passos e reportaram melhora média de 5,3 pontos, com até 18 pontos, em três benchmarks de matemática e duas tarefas do BIG-Bench Hard.

  6. Zhang et al. (2022) geraram os exemplares automaticamente com zero-shot CoT e mostraram que a diversidade das perguntas escolhidas compensa os erros das cadeias geradas, igualando ou superando exemplares manuais em dez benchmarks.

Perguntas frequentes

O que é few-shot chain of thought?
É colar no prompt dois a oito exemplos já resolvidos em que a resposta vem precedida dos passos que levam até ela. O modelo copia a forma do raciocínio e a aplica na pergunta nova. É a versão original da técnica, do paper de 2022.
Quantos exemplos com raciocínio devo usar?
Comece com dois a quatro. Oito era o número do paper original, não uma recomendação de produção: cada exemplar entra em toda chamada e o ganho satura rápido. Se quatro exemplares não movem a exatidão nos seus casos, oito raramente movem.
Os passos do exemplo precisam estar corretos?
Menos do que se imagina. Um estudo de 2022 substituiu os passos por raciocínio inválido e o modelo manteve mais de 80% do desempenho. O que pesa é a relevância à pergunta e a ordem dos passos, não a validade lógica de cada um.
Posso reaproveitar exemplos de outra tarefa?
Pode, e costuma custar caro. No paper do zero-shot CoT, trocar exemplares de aritmética por exemplares de senso comum derrubou o MultiArith de 88,2% para 27,0%, abaixo até do prompt sem exemplo nenhum. Quando o formato da resposta coincide, a perda é menor, mas ainda existe.
Few-shot CoT ou zero-shot CoT?
Zero-shot quando você vai ler a resposta com os olhos e quer testar rápido. Few-shot quando um programa vai fazer parsing da saída, porque o exemplar fixa a última linha, ou quando a tarefa tem um formato de raciocínio próprio que a frase gatilho não induz sozinha.
Exemplos com raciocínio deixam o prompt muito maior?
Sim. Um exemplar comum tem 30 tokens; o mesmo exemplar com três ou quatro passos tem perto de 160. Quatro deles saem de 120 para 640 tokens de entrada, repetidos em toda chamada. É o custo que o prompt caching reduz melhor, porque o bloco não muda.

Referências

  1. Wei, J. et al.. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (2022)arXiv:2201.11903
  2. Wang, B. et al.. Towards Understanding Chain-of-Thought Prompting: An Empirical Study of What Matters (2022)arXiv:2212.10001
  3. Madaan, A. e Yazdanbakhsh, A.. Text and Patterns: For Effective Chain of Thought, It Takes Two to Tango (2022)arXiv:2209.07686
  4. Fu, Y. et al.. Complexity-Based Prompting for Multi-Step Reasoning (2022)arXiv:2210.00720
  5. Kojima, T. et al.. Large Language Models are Zero-Shot Reasoners (2022)arXiv:2205.11916
  6. Zhang, Z. et al.. Automatic Chain of Thought Prompting in Large Language Models (2022)arXiv:2210.03493