Sobre modelos generativos

Os modelos de inteligência artificial (IA) generativa, como a família de modelos Gemini, são capazes de criar conteúdo a partir de vários tipos de entrada de dados, incluindo texto, imagens e áudio. No nível mais básico, esses modelos funcionam como aplicativos sofisticados de preenchimento automático. Dado um texto de entrada ("É possível liderar um cavalo à água"), um modelo generativo pode prever que o texto de saída está estatisticamente provável para seguir ("mas você não pode fazê-lo beber"), com base nos padrões aprendidos com os dados de treinamento. É possível usar essa propriedade básica de modelos generativos para vários aplicativos:

  • Gerar escrita criativa, como poesia, contos, metáforas e postagens de blog
  • Converter dados estruturados em texto de formato livre
  • Extrair e resumir informações de textos de formato livre
  • Gerar código
  • Traduza entre idiomas

O uso de modelos generativos para criar esses atributos não requer nenhuma experiência em machine learning (ML). Não é preciso coletar um grande conjunto de dados ou treinar um modelo. Para começar seu primeiro protótipo, basta descrever o que você quer que o modelo faça em algumas frases.

Modelos generativos que processam apenas entrada e saída de texto também são conhecidos como modelos de linguagem grandes (LLMs, na sigla em inglês). A família de modelos do Gemini pode processar mais do que dados de texto e, embora possam executar as funções de um LLM, eles são mais conhecidos como modelos generativos.

Exemplos de aplicativos

Os exemplos a seguir mostram entradas de texto típicas e saídas de um modelo generativo.

Gerar um poema

Entrada do usuário: Write me a four-line poem about puppies and Android phones. Make sure it rhymes.

Saída do modelo:

Puppies are cute,
Android phones are neat,
They both bring joy,
And make life complete.

Gerar uma lista

Entrada do usuário: Generate a bulleted list of items I need to pack for a three-day camping trip.

Saída do modelo:

*   Tent
*   Sleeping bag
*   Sleeping pad
*   Camp stove
*   Pots and pans
*   Utensils
*   Food
*   Water
*   First-aid kit
*   Sunscreen
*   Insect repellent
*   ...

É possível fazer com que os modelos generativos produzam todos os tipos de comportamentos úteis, como este, apenas elaborando o texto de entrada correto, também chamado de comando. A arte e a ciência de descobrir o texto certo para que os modelos generativos façam o que você quer é chamada de design de comandos (também chamado de "engenharia de comando" ou simplesmente "comando").

Introdução ao design de comandos

A seção anterior mostrou alguns exemplos de comandos com instruções, como "Escreva um poema". Esse tipo de instrução pode funcionar bem para certos tipos de tarefas. No entanto, para outros aplicativos, outra técnica de comandos chamada comandos few-shot pode funcionar melhor. Os comandos few-shot aproveitam o fato de que os modelos de linguagem grandes são incrivelmente bons em reconhecer e replicar padrões em dados de texto. A ideia é enviar ao modelo generativo um padrão de texto que ele aprenda a concluir. Por exemplo, digamos que você queira criar um aplicativo que receba como entrada um nome de país e gere a capital. Confira um comando de texto criado exatamente para isso:

Italy : Rome
France : Paris
Germany :

Nesse comando, você estabelece um padrão: [country] : [capital]. Se você enviar esse comando para um modelo de linguagem grande, ele preencherá automaticamente o padrão e retornará algo como:

     Berlin
Turkey : Ankara
Greece : Athens

A resposta do modelo pode parecer um pouco estranha. O modelo retornou não apenas a capital da Alemanha (o último país no comando escrito à mão), mas também uma lista inteira de outros pares de países e maiúsculas. Isso porque o modelo generativo é "continuando o padrão". Se você só quer criar uma função que informe a capital de um país de entrada ("Alemanha: Berlim"), provavelmente não se importa com nenhum dos textos gerados pelo modelo após "Berlim". Na verdade, os designers de aplicativos podem querer truncar esses exemplos irrelevantes. Além disso, você provavelmente vai querer parametrizar a entrada, para que a Alemanha não seja uma string fixa, mas uma variável que o usuário final fornece:

Italy : Rome
France : Paris
<user input here> :

Você acabou de escrever um comando few-shot para gerar capitais de países.

É possível realizar um grande número de tarefas seguindo este modelo de prompt few-shot. Confira um comando few-shot com um formato um pouco diferente que converte Python em JavaScript:

Convert Python to JavaScript.
Python: print("hello world")
JavaScript: console.log("hello world")
Python: for x in range(0, 100):
JavaScript: for(var i = 0; i < 100; i++) {
Python: ${USER INPUT HERE}
JavaScript:

Ou use este comando de "dicionário inverso". Dada uma definição, ela retorna a palavra que se encaixa nessa definição:

Given a definition, return the word it defines.
Definition: When you're happy that other people are also sad.
Word: schadenfreude
Definition: existing purely in the mind, but not in physical reality
Word: abstract
Definition: ${USER INPUT HERE}
Word:

Você deve ter notado que o padrão exato desses comandos few-shot varia um pouco. Além de conter exemplos, fornecer instruções nos comandos é uma estratégia extra a ser considerada ao escrever seus próprios comandos, porque isso ajuda a comunicar sua intent ao modelo.

Comparação entre comandos e desenvolvimento de software tradicional

Ao contrário de softwares tradicionais projetados para uma especificação cuidadosamente escrita, o comportamento dos modelos generativos é amplamente opaco, até mesmo para os treinadores de modelo. Por isso, muitas vezes não é possível prever com antecedência quais tipos de estruturas de comandos funcionarão melhor para um modelo específico. Além disso, o comportamento de um modelo generativo é determinado em grande parte pelos dados de treinamento dele. Além disso, como os modelos são ajustados continuamente em novos conjuntos de dados, às vezes o modelo muda o suficiente para mudar inadvertidamente quais estruturas de comando funcionam melhor. O que isso significa para você? Experimento Teste formatos de comandos diferentes.

Parâmetros do modelo

Cada comando enviado ao modelo inclui valores de parâmetros que controlam como o modelo gera uma resposta. O modelo pode gerar diferentes resultados para diferentes valores de parâmetros. Os parâmetros de modelo mais comuns são:

  1. Máximo de tokens de saída: especifica o número máximo de tokens que podem ser gerados na resposta. Um token tem cerca de quatro caracteres. 100 tokens correspondem a aproximadamente 60 a 80 palavras.

  2. Temperatura:a temperatura controla o grau de aleatoriedade na seleção do token. A temperatura é usada para amostragem durante a geração de resposta, o que ocorre quando topP e topK são aplicados. Temperaturas mais baixas são boas para comandos que exigem uma resposta mais determinista ou menos aberta, enquanto temperaturas mais altas podem levar a resultados mais diversos ou criativos. Uma temperatura de 0 é determinista, o que significa que a resposta de probabilidade mais alta é sempre selecionada.

  3. topK:o parâmetro topK muda a forma como o modelo seleciona tokens para saída. O valor topK de 1 indica que o token selecionado é o mais provável entre todos no vocabulário do modelo (também chamado de decodificação gananciosa), enquanto topK de 3 significa que o próximo token é selecionado entre os três mais prováveis de usar a temperatura. Para cada etapa da seleção de tokens, são amostrados os tokens topK com as maiores probabilidades. Os tokens são filtrados ainda mais com base em topP com o token final selecionado por amostragem de temperatura.

  4. topP:o parâmetro topP muda a forma como o modelo seleciona tokens para saída. Os tokens são selecionados do mais ao menos provável até que a soma das probabilidades seja igual ao valor de topP. Por exemplo, se os tokens A, B e C tiverem uma probabilidade de 0,3, 0,2 e 0,1 e o valor de topP for 0,5, o modelo selecionará A ou B como o próximo token usando a temperatura e excluirá C como candidato. O valor padrão de topP é 0,95.

  5. stop_sequences:defina uma sequência de parada para informar ao modelo para parar de gerar conteúdo. Ela pode ter qualquer sequência de caracteres. Evite o uso de uma sequência de caracteres que podem aparecer no conteúdo gerado.

Tipos de comandos

Dependendo do nível de informações contextuais contidas neles, os comandos são classificados em três tipos.

Comandos zero-shot

Esses prompts não contêm exemplos para o modelo replicar. Os comandos zero-shot mostram essencialmente a capacidade do modelo de concluir o comando sem outros exemplos ou informações. Significa que o modelo precisa do conhecimento pré-existente para gerar uma resposta plausível.

Alguns padrões de comandos zero-shot usados com frequência são:

  • Conteúdo instrucional
<Overall instruction>
<Content to operate on>

Por exemplo:

Summarize the following into two sentences at the third-grade level:

Hummingbirds are the smallest birds in the world, and they are also one of the
most fascinating. They are found in North and South America, and they are known
for their long, thin beaks and their ability to fly at high speeds.

Hummingbirds are made up of three main parts: the head, the body, and the tail.
The head is small and round, and it contains the eyes, the beak, and the brain.
The body is long and slender, and it contains the wings, the legs, and the
heart. The tail is long and forked, and it helps the hummingbird to balance
while it is flying.

Hummingbirds are also known for their coloration. They come in a variety of
colors, including green, blue, red, and purple. Some hummingbirds are even able
to change their color!

Hummingbirds are very active creatures. They spend most of their time flying,
and they are also very good at hovering. Hummingbirds need to eat a lot of food
in order to maintain their energy, and they often visit flowers to drink nectar.

Hummingbirds are amazing creatures. They are small, but they are also very
powerful. They are beautiful, and they are very important to the ecosystem.
  • Instrução-conteúdo-instrução
<Overall instruction or context setting>
<Content to operate on>
<Final instruction>

Por exemplo:

Here is some text I'd like you to summarize:

Hummingbirds are the smallest birds in the world, and they are also one of the
most fascinating. They are found in North and South America, and they are known
for their long, thin beaks and their ability to fly at high speeds. Hummingbirds
are made up of three main parts: the head, the body, and the tail. The head is
small and round, and it contains the eyes, the beak, and the brain. The body is
long and slender, and it contains the wings, the legs, and the heart. The tail
is long and forked, and it helps the hummingbird to balance while it is flying.
Hummingbirds are also known for their coloration. They come in a variety of
colors, including green, blue, red, and purple. Some hummingbirds are even able
to change their color! Hummingbirds are very active creatures. They spend most
of their time flying, and they are also very good at hovering. Hummingbirds need
to eat a lot of food in order to maintain their energy, and they often visit
flowers to drink nectar. Hummingbirds are amazing creatures. They are small, but
they are also very powerful. They are beautiful, and they are very important to
the ecosystem.

Summarize it in two sentences at the third-grade reading level.
  • Continuação. Às vezes, é possível fazer com que o modelo continue o texto sem instruções. Por exemplo, veja aqui um comando zero-shot em que o modelo depende de manter a entrada fornecida:
Once upon a time, there was a little sparrow building a nest in a farmer's
barn. This sparrow

Use prompts zero-shot para gerar formatos de texto criativos, como poemas, códigos, scripts, peças musicais, e-mails ou letras.

Comandos únicos

Esses prompts fornecem ao modelo um único exemplo para replicar e continuar o padrão. Isso permite a geração de respostas previsíveis do modelo.

Por exemplo, é possível gerar combinações de alimentos como:

Food: Apple
Pairs with: Cheese
Food: Pear
Pairs with:

Comandos few-shot

Esses comandos fornecem ao modelo vários exemplos para replicar. Use comandos few-shot para concluir tarefas complicadas, como sintetizar dados com base em um padrão.

Um exemplo de comando pode ser:

Generate a grocery shopping list for a week for one person. Use the JSON format
given below.
{"item": "eggs", "quantity": "6"}
{"item": "bread", "quantity": "one loaf"}

Por trás dos modelos generativos

O objetivo desta seção é responder à pergunta: as respostas dos modelos generativos são aleatórias ou elas são deterministas?

A resposta curta: sim para as duas opções. Ao solicitar um modelo generativo, uma resposta de texto é gerada em duas etapas. Na primeira etapa, o modelo generativo processa o comando de entrada e gera uma distribuição de probabilidade sobre os possíveis tokens (palavras) que provavelmente virão a seguir. Por exemplo, se você solicitar o texto de entrada "O cachorro pulou sobre o ... ", o modelo generativo vai produzir uma matriz de próximas palavras prováveis:

[("fence", 0.77), ("ledge", 0.12), ("blanket", 0.03), ...]

Esse processo é determinístico: um modelo generativo vai produzir essa mesma distribuição sempre que inserir o mesmo texto de comando.

Na segunda etapa, o modelo generativo converte essas distribuições em respostas de texto reais usando uma das várias estratégias de decodificação. Uma estratégia de decodificação simples pode selecionar o token mais provável em cada etapa. Esse processo sempre seria determinístico. No entanto, é possível gerar uma resposta por meio de amostragem aleatória sobre a distribuição retornada pelo modelo. Esse processo seria estocástico (aleatório). Defina a temperatura para controlar o grau de aleatoriedade permitido nesse processo de decodificação. Uma temperatura de 0 significa que apenas os tokens mais prováveis estão selecionados, e não há aleatoriedade. Por outro lado, uma temperatura alta injeta um alto grau de aleatoriedade nos tokens selecionados pelo modelo, levando a respostas do modelo mais inesperadas.

Leia mais

  • Agora que você entende melhor de comandos e modelos generativos, tente escrever seus próprios comandos usando o Google AI Studio.
  • Consulte as Diretrizes de comandos para saber mais sobre as práticas recomendadas de criação de comandos.