Zero-shot e few-shot learning: como usar LLMs sem treinamento específico

Entenda como utilizar duas das principais técnicas para ajudar um LLM a resolver uma nova tarefa

Chatbots baseados em Large Language Models (LLMs), como o ChatGPT da OpenAI, demonstram uma capacidade impressionante de realizar tarefas para as quais não foram explicitamente treinados. Em alguns casos, conseguem fazer isso imediatamente. Em outros, o usuário precisa fornecer alguns exemplos rotulados para que o modelo identifique o padrão.

Duas técnicas populares para ajudar um Large Language Model a resolver uma nova tarefa são o zero-shot e o few-shot prompting. Neste artigo, vamos explorar como funcionam, ver exemplos práticos e discutir quando usar (e, mais importante, quando não usar) essas abordagens.

O papel do zero-shot e few-shot learning em LLMs

O objetivo do zero-shot e few-shot learning é fazer com que um modelo de machine learning execute uma nova tarefa para a qual não foi treinado. É natural começar perguntando: para que os LLMs são, de fato, treinados?

A maioria dos LLMs usados em chatbots hoje passa por dois estágios de treinamento:

  • No estágio de pré-treinamento, o modelo é alimentado com um grande corpus de texto e aprende a prever a próxima palavra com base nas palavras anteriores.

  • No estágio de fine-tuning, o preditor de próxima palavra é adaptado para se comportar como um chatbot, ou seja, responder às consultas dos usuários de maneira conversacional e produzir respostas que atendam às expectativas humanas.

Se você já usou o ChatGPT, sabe que os chatbots parecem ter um vasto conhecimento factual e geralmente tentam ser úteis, evitando vulgaridades.

Mas o ChatGPT e chatbots similares baseados em LLMs podem fazer muito mais do que isso. Eles conseguem resolver muitas tarefas para as quais nunca foram treinados, como traduzir entre idiomas, detectar sentimento em um texto ou escrever código.

Fazer com que chatbots resolvam novas tarefas requer técnicas de zero-shot e few-shot prompting.

Zero-shot prompting

Zero-shot prompting refere-se a simplesmente pedir ao modelo para fazer algo que ele não foi treinado para fazer.

A palavra "zero" refere-se a não fornecer ao modelo nenhum exemplo de como essa nova tarefa deve ser resolvida. Apenas pedimos que ele faça, e o Large Language Model usará sua compreensão geral da linguagem e as informações aprendidas durante o treinamento para gerar a resposta.

Por exemplo, se você pedir a um modelo para traduzir uma frase de um idioma para outro, ele provavelmente produzirá uma tradução decente, mesmo que nunca tenha sido explicitamente treinado para tradução. Da mesma forma, a maioria dos LLMs consegue distinguir uma frase de tom negativo de uma positiva sem ter sido explicitamente treinada em análise de sentimento.

Few-shot prompting

Few-shot prompting significa pedir a um Large Language Model para resolver uma nova tarefa enquanto fornece exemplos de como a tarefa deve ser resolvida.

É como passar uma pequena amostra de dados de treinamento ao modelo através da consulta, permitindo que ele aprenda a partir dos exemplos fornecidos pelo usuário. No entanto, diferentemente dos estágios de pré-treinamento ou fine-tuning, o processo de aprendizado não envolve atualização dos pesos do modelo. Em vez disso, o modelo permanece congelado, mas usa o contexto fornecido ao gerar sua resposta. Esse contexto normalmente será mantido ao longo de uma conversa, mas o modelo não pode acessar as informações recém-adquiridas posteriormente.

Às vezes, variantes específicas do few-shot learning são distinguidas, especialmente ao avaliar e comparar o desempenho do modelo. "One-shot" significa que fornecemos ao modelo apenas um exemplo, "two-shot" significa que fornecemos dois exemplos – você entendeu a lógica.

Few-shot prompting é o mesmo que few-shot learning?

"Few-shot learning" e "zero-shot learning" são conceitos bem conhecidos em machine learning que foram estudados muito antes dos LLMs aparecerem em cena. No contexto dos LLMs, esses termos às vezes são usados de forma intercambiável com "few-shot prompting" e "zero-shot prompting". No entanto, eles não são a mesma coisa.

Few-shot prompting refere-se a construir um prompt que consiste em alguns exemplos de pares entrada-saída com o objetivo de fornecer a um LLM um padrão para identificar.

Few-shot learning é uma adaptação do modelo resultante do few-shot prompting, na qual o modelo muda de incapaz de resolver a tarefa para capaz de resolvê-la graças aos exemplos fornecidos.

No contexto dos LLMs, o "learning" é temporário e se aplica apenas a uma conversa de chat específica. Os parâmetros do modelo não são atualizados, então ele não retém o conhecimento ou as capacidades.

Aplicações do zero-shot prompting com LLMs

No zero-shot prompting, contamos com o conhecimento existente do modelo para gerar respostas.

Consequentemente, o zero-shot prompting faz sentido para solicitações genéricas em vez de solicitações que requerem conhecimento altamente especializado ou proprietário.

Quando usar zero-shot prompting

Você pode usar zero-shot prompting com segurança nos seguintes casos de uso:

  • Tarefas simples: Se a tarefa é simples, baseada em conhecimento e claramente definida, como definir uma palavra, explicar um conceito ou responder a uma pergunta de conhecimento geral.

  • Tarefas que requerem conhecimento geral: Para tarefas que dependem da base de conhecimento pré-existente do modelo, como resumir informações conhecidas sobre um tópico. São mais sobre esclarecer, resumir ou fornecer detalhes sobre assuntos conhecidos do que explorar novas áreas ou gerar ideias. Por exemplo, "Quem foi a primeira pessoa a escalar o Monte Everest?" ou "Explique o processo de fotossíntese."

  • Consultas exploratórias: Ao explorar um tópico e querer uma visão geral ampla ou um ponto de partida para pesquisa. Essas consultas são menos sobre buscar respostas específicas e mais sobre obter uma visão abrangente que possa orientar investigações ou pesquisas futuras. Por exemplo, "Como diferentes culturas celebram o ano novo?" ou "Quais são as principais teorias em psicologia cognitiva?"

  • Instruções diretas: Quando você pode fornecer instruções claras e diretas que não requerem exemplos para o modelo entender a tarefa.

Quando não usar zero-shot prompting

Nas seguintes situações, não use zero-shot prompting:

  • Tarefas complexas que requerem contexto: Se a tarefa requer compreensão de contexto sutil ou conhecimento especializado que o modelo provavelmente não adquiriu durante o treinamento.

  • Resultados altamente específicos desejados: Quando você precisa de uma resposta adaptada a um formato, estilo ou conjunto de restrições específicas, o modelo pode não conseguir aderir sem orientação de exemplos de entrada-saída.

Exemplos de casos de uso de zero-shot prompting

Zero-shot prompting fará o trabalho para você em muitas tarefas simples de NLP, como tradução de idiomas ou análise de sentimento.

Como você pode ver na captura de tela abaixo, traduzir uma frase do polonês para o inglês é moleza para o ChatGPT. (O mesmo vale para português-inglês, ou qualquer combinação de idiomas populares).

Vamos tentar uma estratégia baseada em zero-shot prompting para análise de sentimento. O modelo acerta novamente. Sem treinamento explícito para a tarefa, o ChatGPT conseguiu extrair o sentimento do texto enquanto evitava armadilhas, como a primeira expressão contendo a palavra "good" (bom) mesmo que o sentimento geral seja negativo. No último exemplo, que é um pouco mais sutil, o modelo até forneceu seu raciocínio por trás da classificação.

Onde o zero-shot prompting falha

Vamos examinar dois casos de uso em que o zero-shot prompting é insuficiente. Lembre-se de que são tarefas complexas que requerem contexto e situações que exigem um resultado altamente específico.

Considere os seguintes dois prompts:

  • "Explique as implicações das últimas mudanças na computação quântica para criptografia, considerando tecnologias atuais e perspectivas futuras."

  • "Escreva uma petição legal argumentando o caso para um cenário específico, mas hipotético, onde uma IA criou uma peça de arte, e agora há uma disputa de direitos autorais entre o desenvolvedor da IA e uma galeria reivindicando propriedade."

Para os leitores aventureiros por aí, sintam-se à vontade para experimentar com seu LLM de escolha! No entanto, é improvável que você obtenha algo útil como resultado.

Aqui está o porquê:

O primeiro prompt sobre computação quântica exige uma compreensão dos desenvolvimentos atuais, possivelmente de ponta, em tecnologias de computação quântica e criptografia. Sem exemplos ou contexto específicos, o LLM pode não refletir com precisão as últimas pesquisas, avanços ou as implicações sutis para tecnologias futuras.

O segundo prompt, pedindo uma petição legal, exige que o LLM siga convenções e formatação de petição legal, entenda as complexidades legais da lei de direitos autorais como se aplica à IA (muitas das quais ainda estão sujeitas a debate) e construa argumentos baseados em circunstâncias hipotéticas, mas particulares. Um prompt zero-shot não fornece ao modelo as diretrizes ou exemplos necessários para gerar uma resposta que atenda com precisão a todos esses requisitos detalhados.

Aplicações do few-shot prompting

Com o few-shot prompting, o LLM condiciona sua resposta aos exemplos que fornecemos. Portanto, faz sentido tentar quando parece que apenas alguns exemplos devem ser suficientes para descobrir um padrão ou quando precisamos de um formato ou estilo de saída específico. No entanto, um alto grau de complexidade da tarefa e restrições de latência são bloqueadores típicos para usar few-shot prompting.

Quando usar few-shot prompting

Você pode tentar fazer prompting no modelo com alguns exemplos nas seguintes situações:

  • Zero-shot prompting é insuficiente: O modelo não sabe como executar a tarefa bem sem nenhum exemplo, mas há razão para esperar que apenas alguns exemplos sejam suficientes.

  • Dados de treinamento limitados disponíveis: Quando alguns exemplos são tudo o que temos, o fine-tuning do modelo não é viável, e o few-shot prompting pode ser a única maneira de transmitir os exemplos.

  • Formatos ou estilos personalizados: Se você quiser que a saída siga um formato, estilo ou estrutura específica, fornecer exemplos pode orientar o modelo mais efetivamente do que tentar transmitir o resultado desejado através de palavras.

  • Ensinar novos conceitos ao modelo: Se você está tentando fazer o modelo entender uma ideia com a qual não está familiarizado, alguns exemplos podem servir como uma introdução rápida. Lembre-se de que esse novo conhecimento é retido apenas para a conversa em questão!

  • Melhorar a precisão: Quando a precisão é crucial e você quer garantir que o modelo entenda claramente a tarefa.

Quando não usar few-shot prompting

Nas seguintes situações, você pode decidir contra o few-shot prompting:

  • Tarefas de conhecimento geral: Para tarefas diretas que não requerem formatos específicos ou compreensão sutil, o few-shot prompting pode ser excessivo e complicar desnecessariamente a consulta (a menos que, como discutido, a precisão seja crucial).

  • Velocidade ou eficiência é uma prioridade: Few-shot prompting requer mais entrada, o que pode ser mais lento para compor e processar.

  • Exemplos insuficientes: Se a tarefa é muito complexa para explicar em alguns exemplos ou se os exemplos específicos disponíveis podem confundir o modelo ao introduzir muita variabilidade.

  • Tarefas de raciocínio complexo: Se a tarefa requer alguns passos de raciocínio, mesmo um conjunto de exemplos pode não ser suficiente para o LLM captar o padrão que estamos procurando.

Exemplos de casos de uso de few-shot prompting

Vamos examinar exemplos onde o few-shot prompting se mostra altamente eficaz.

Adaptando tarefas a estilos específicos

Imagine que você trabalha para uma empresa que vende o Produto B. Seu principal concorrente é o Produto A. Você coletou algumas avaliações da internet, tanto do seu produto quanto do concorrente. Você quer ter uma ideia de qual produto os usuários consideram melhor. Para fazer isso, você quer fazer prompt no LLM para classificar o sentimento de avaliações de ambos os produtos.

Uma maneira de resolver essa tarefa é criar manualmente um punhado de exemplos de modo que:

  • Boas avaliações do seu produto (B) sejam rotuladas como positivas.

  • Más avaliações do seu produto (B) sejam rotuladas como negativas.

  • Boas avaliações do produto concorrente (A) sejam rotuladas como negativas.

  • Más avaliações do produto concorrente (A) sejam rotuladas como positivas.

Isso deve ser suficiente para o modelo ver o que você está fazendo.

De fato, o modelo captou o padrão corretamente e previu a boa avaliação do produto de um concorrente como negativa para nós, e foi até capaz de explicar:

(...) expressões de sentimento positivo para o Produto A são rotuladas como "negativas" e expressões de sentimento negativo são rotuladas como "positivas" (e a rotulagem convencional para o Produto B).

Este foi um exemplo de como o few-shot prompting nos permite direcionar o modelo a resolver uma tarefa convencional (classificação de sentimento) de maneira não convencional com base em um formato de rótulo específico.

Ensinando novos conceitos a um LLM

Few-shot prompting é particularmente adequado para ensinar a um LLM conceitos novos ou imaginários. Isso pode ser útil quando você precisa que o modelo descubra padrões em seus dados que requerem compreensão das peculiaridades e detalhes onde o conhecimento geral é inútil.

Vamos ver como podemos usar few-shot prompting para ensinar a um LLM a gramática básica de um novo idioma que acabei de inventar, o Blablariano. (É amplamente falado no Reino de Blabland, caso você esteja curioso.)

Como você pode ver, o modelo produziu o que deve ser considerado uma tradução correta. Ele decifrou o significado das palavras e aprendeu a distinguir entre diferentes pronomes. Podemos ter certeza de que isso é puramente aprendizado few-shot no contexto, pois não há como manuscritos blablarianos terem entrado nos conjuntos de dados de pré-treinamento do modelo.

Este exemplo ilustra bem a essência do few-shot learning. Se tivéssemos pedido ao modelo para traduzir a frase "Quantos anos ele tem?" do inglês para o blablariano sem fornecer nenhum exemplo (isto é, usando zero-shot prompting), ele não teria sido capaz de fazê-lo simplesmente porque não existe um idioma chamado blablariano. No entanto, o modelo tem uma compreensão geral de linguagem e como a gramática funciona. Esse conhecimento é suficiente para captar os padrões de um idioma falso que inventei na hora.

Onde o few-shot prompting falha

Finalmente, vamos olhar para uma situação onde o few-shot prompting não nos levará longe.

Vou tomar emprestado este exemplo famoso que tem circulado pela internet recentemente:

Prompt:

Os números ímpares neste grupo somam um número par: 4, 8, 9, 15, 12, 2, 1.
Resposta: Falso.
Os números ímpares neste grupo somam um número par: 17, 10, 19, 4, 8, 12, 24.
Resposta: Verdadeiro.
Os números ímpares neste grupo somam um número par: 16, 11, 14, 4, 8, 13, 24.
Resposta: Verdadeiro.
Os números ímpares neste grupo somam um número par: 17, 9, 10, 12, 13, 4, 2.
Resposta: Falso.
Os números ímpares neste grupo somam um número par: 15, 32, 5, 13, 82, 7, 1.
Resposta:

Resposta:

Verdadeiro.

Esta resposta está incorreta. Alguns exemplos não são suficientes para aprender o padrão — o problema requer compreensão de vários conceitos fundamentais e raciocínio passo a passo. Mesmo um número significativamente maior de exemplos provavelmente não ajudará.

Pode-se argumentar que este tipo de problema pode não ser solucionável por descoberta de padrões, e nenhuma engenharia de prompt pode ajudar.

Mas adivinhe: os LLMs de hoje podem reconhecer que enfrentam um tipo de problema que não conseguirão resolver. Esses chatbots então empregam ferramentas mais adequadas para a tarefa específica, assim como se eu pedisse para você multiplicar dois números grandes e você recorreria a uma calculadora.

O ChatGPT da OpenAI, por exemplo, em vez de alucinar uma resposta, produzirá um trecho de código Python que deve responder à pergunta. (Este código é visível quando você clica em "Análise concluída.") O ChatGPT executará o código gerado em um interpretador e fornecerá a resposta com base nas saídas do código. Neste caso, essa abordagem levou a uma resposta correta.

Essa "mágica" é consequência da OpenAI fazer algum trabalho nos bastidores: eles alimentam prompts adicionais ao LLM para garantir que ele saiba quando usar ferramentas externas, como o interpretador Python.

Note, no entanto, que isso não é mais "few-shot learning". O modelo não usou os exemplos fornecidos. De fato, teria fornecido a mesma resposta mesmo na configuração de zero-shot prompting.

Conclusão

Este artigo explorou o zero-shot e o few-shot prompting com Large Language Models, destacando capacidades, casos de uso e limitações.

O zero-shot learning permite que LLMs enfrentem tarefas para as quais não foram explicitamente treinados, confiando apenas em seu conhecimento pré-existente e compreensão geral da linguagem. Essa abordagem é ideal para tarefas simples e consultas exploratórias, e quando instruções claras e diretas podem ser fornecidas.

O few-shot learning permite que LLMs se adaptem a tarefas, formatos ou estilos específicos e melhorem a precisão para consultas mais complexas incorporando um pequeno número de exemplos no prompt.

No entanto, ambas as técnicas têm suas limitações. O zero-shot prompting pode não ser suficiente para tarefas complexas que requerem compreensão sutil ou resultados altamente específicos. O few-shot learning, embora poderoso, nem sempre é a melhor escolha para tarefas de conhecimento geral ou quando a eficiência é uma prioridade, e pode ter dificuldades com tarefas muito complexas para serem esclarecidas com alguns exemplos.

Como usuários e desenvolvedores, entender quando e como aplicar zero-shot e few-shot prompting pode nos permitir aproveitar todo o potencial dos Large Language Models enquanto navegamos por suas limitações.

FAQ - Perguntas Frequentes

Qual a diferença entre zero-shot e few-shot prompting?

Zero-shot prompting é quando você pede ao modelo para realizar uma tarefa sem fornecer nenhum exemplo, confiando apenas no conhecimento pré-existente do LLM. Few-shot prompting envolve fornecer alguns exemplos de entrada-saída para ajudar o modelo a entender o padrão desejado.

Quando devo usar few-shot em vez de zero-shot prompting?

Use few-shot prompting quando: o zero-shot não produz resultados satisfatórios, você precisa de um formato ou estilo específico de saída, está ensinando um conceito novo ao modelo, ou quando a precisão é crucial para sua aplicação.

Os exemplos fornecidos no few-shot prompting atualizam o modelo permanentemente?

Não. Os parâmetros do modelo não são atualizados. O aprendizado é temporário e se aplica apenas à conversa atual. O modelo usa os exemplos como contexto mas não retém o conhecimento para conversas futuras.

Quantos exemplos são necessários para few-shot prompting?

Não existe um número fixo. "Few-shot" geralmente significa de 2 a 10 exemplos. Variantes específicas incluem "one-shot" (1 exemplo) e "two-shot" (2 exemplos). O número ideal depende da complexidade da tarefa e da capacidade do modelo de captar padrões.

Zero-shot prompting funciona para todas as tarefas?

Não. Zero-shot prompting funciona bem para tarefas genéricas, conhecimento geral e instruções diretas. Falha em tarefas que requerem contexto altamente especializado, conhecimento proprietário, ou resultados em formatos muito específicos.