"Montagem de prompts" ou "Métodos de ensamblagem" (ou ensembling prompt, em inglês) é o conceito de usar vários prompts diferentes para tentar responder a mesma pergunta. Existem muitas abordagens diferentes para isso.
DiVeRSe ("Diverse Verifier on Reasoning Steps", ou "Verificador Diversificado em Etapas de Raciocínio") é um método que melhora a confiabilidade das respostas de três maneiras. Isso é feito 1) usando vários prompts para gerar conclusões diversificadas, 2) usando um verificador para distinguir boas respostas das ruins e 3) usando um verificador para verificar a correção das etapas de raciocínio.
O DiVeRSe usa 5 prompts diferentes para um determinado input. Para construir cada prompt, eles amostram aleatoriamente alguns exemplos do conjunto de treinamento. Aqui está um exemplo de um prompt com poucas amostras (k = 2), com exemplos retirados do [GSM8K benchmark] (https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/train.jsonl). Na prática, o DiVeRSe usa 5 exemplos em prompts para este benchmark.
Q: Natália vendeu clipes para 48 de seus amigos em abril e, em seguida, vendeu a metade disso em maio. Quantos clipes Natália vendeu no total, em abril e maio?
A: Natália vendeu 48/2 = 24 clipes em maio.
Natália vendeu 48 + 24 = 72 clipes no total, em abril e maio.
#### 72
Q: Weng ganha US$ 12 por hora para trabalhar como babá. Ontem ela só trabalhou 50 minutos como babá. Quanto ela ganhou?
A: Weng ganha 12/60 = R$ 0,2 por minuto.
Trabalhando 50 minutos, ela ganhou 0,2 x 50 = R$ 10.
#### 10
Q: Betty está economizando dinheiro para uma nova carteira que custa R$ 100. Betty tem apenas metade do dinheiro que precisa. Seus pais decidiram dar-lhe R$ 15 para esse propósito e seus avós o dobro do que seus pais. Qual a quantia Betty ainda precisa para comprar a carteira?
A:
Depois de gerar 5 prompts diferentes como acima, o DiVeRSe amostra 20 caminhos de raciocínio para cada um (temperatura = 0,5). Aqui estão alguns exemplos de completamento do prompt acima. Note que as respostas nem sempre são corretas.
{"highlight-start"}
Betty tem 0.5*100 = R$50.
Então ela ganha mais 15 = R$65.
Em seguida ela ganha 2*15 = R$90.
Ela ainda precisa de 100-90 = R$10 a mais.
#### 10
{"highlight-end"}
{"highlight-start"}
A: Betty tem 0.5*100 = R$500.
Então ela ganha 15 a mais = R$650.
Em seguida ela ganha 2*15 = R$900.
Ela ainda precisa de 100-90 = R$1000 a mais.
#### 1000
{"highlight-end"}
Nesse ponto, o DiVeRSe gerou 1000 completamentos diferentes.
Agora, nós poderíamos simplesmente pegar a resposta majoritária, como o Self-Consistency faz.
No entanto, o DiVeRSe propõe um método muito mais complicado, que eles chamam de verificador de votação.
Na hora dos testes, usar o verificador de votação é um processo de duas etapas. Primeiro, o verificador (uma rede neural) atribui uma pontuação de 0 a 1 para cada completamento, com base na probabilidade de ser correto. Depois, a parte da "votação" soma todas as pontuações de diferentes respostas e fornece a resposta final.
Aqui está um pequeno exemplo. Digamos que temos os seguintes completamentos para o prompt Qual é a soma de dois mais dois?
:
4
dois + 2 = 5
Eu acho que 2+2 = 6
dois mais dois = 4
{"highlight-start"}
É 5
{"highlight-end"}
O verificador lerá cada completamento e atribuirá uma pontuação a ele. Por exemplo, pode atribuir as pontuações: 0,9, 0,1, 0,2, 0,8, 0,3, respectivamente. Então, a parte da votação somará as pontuações de cada resposta.
pontuação(4) = 0.9 + 0.8 = 1.7
pontuação(5) = 0.1 + 0.3 = 0.4
pontuação(6) = 0.2
A resposta final é 4, já que ela teve a pontuação maior.
Mas como o verificador é treinado?
O verificador é treinando com uma função um pouco compleza, que eu não vou abordar aqui. Leia a seção 3.3 desse artigo para mais informações.
Perguntas do tipo AMA é uma abordagem semelhante à DiVeRSe. No entanto, tanto seu passo de múltiplos prompts quanto seu passo de agregação de respostas diferem significativamente. A ideia principal do AMA é usar um LLM para gerar múltiplos prompts, em vez de usar apenas prompts com poucos exemplos.
A abordagem AMA mostra que você pode tomar uma pergunta e reformatá-la de várias maneiras para criar prompts diferentes. Por exemplo, digamos que você está coletando um monte de sites para obter informações sobre animais e deseja gravar apenas os que vivem na América do Norte. Vamos construir um prompt para determinar isso.
Dado o seguinte trecho da Wikipedia:
O urso Kermode, às vezes chamado de urso espírito (Ursus americanus kermodei), é uma subespécie do urso negro americano e vive nas regiões da Costa Central e Norte da Colúmbia Britânica, Canadá.
Você pode formatar essa tarefa em um prompt assim:
A seguinte afirmação é Verdadeira ou Falsa dado o contexto?
Contexto: O urso Kermode, às vezes chamado de urso espírito (Ursus americanus kermodei), é uma subespécie do urso negro americano e vive nas regiões da Costa Central e Norte da Colúmbia Britânica, Canadá.
Afirmação: Este animal vive na América do Norte
Resposta:
Esta é uma forma um pouco estranha de formular. Por que não usar o seguinte prompt, que é bem mais simples?
Contexto: O urso Kermode, às vezes chamado de urso espírito (Ursus americanus kermodei), é uma subespécie do urso-preto americano e vive nas regiões da Costa Central e Norte da Colúmbia Britânica, Canadá.
Pergunta: Esse animal vive na América do Norte?
Bem, ao formular a questão desta forma especial, podemos gerar prompts diferentes.
Nosso primeiro passo aqui será transformar a afirmação Esse animal vive na América do Norte
e reformatá-la em diferentes perguntas, que basicamente estão perguntando a mesma coisa. Para isso, passaremos a afirmação por prompts como os da imagem abaixo.
Isso pode gerar:
A ideia por trás disso é criar diferentes visões da tarefa. Então, aplicamos cada uma ao contexto dado da seguinte forma:
Contexto: O urso Kermode, às vezes chamado de urso espírito (Ursus americanus kermodei), é uma subespécie do urso-preto americano e vive nas regiões da Costa Central e Norte da Colúmbia Britânica, Canadá.
Pergunta: O animal estava vivendo na América do Norte?
Então, podemos gerar respostas para cada uma:
Sim, ele estava
Sim, ele faz
América do Norte
Estas são respostas intermediárias. Precisamos mapeá-las para etiquetas de tarefa (por exemplo, Sim ou Não).
Podemos fazer isso passando as respostas intermediárias por um prompt como o seguinte:
Selecione a categoria correta.
"Categorias":
- Sim, América do Norte
- Não, não na América do Norte
"Sim, ele estava" se encaixa na categoria:
Agora podemos obter nossas respostas de saída.
Sim, América do Norte
Sim, América do Norte
Sim, América do Norte
Aqui, todos concordam, então podemos pegar a primeira resposta. No entanto, se eles discordassem, poderíamos usar o passo de agregação do AMA para obter uma resposta final.
A AMA usa uma estratégia muito complicada para agregar respostas (mais do que a DiVeRSe) em vez de simplesmente considerar a resposta da maioria. Para entender por que a resposta da maioria pode ser uma escolha ruim, considere duas das perguntas que geramos antes:
Eles são extremamente similares, portanto provavelmente gerarão o mesmo resultado. Como as perguntas são tão semelhantes, elas afetarão de forma significativa o resultado final. Para lidar com isso, a AMA conta com supervisão fraca e matemática complexa para estimar as dependências entre os diferentes prompts que cria e, em seguida, usa isso para ponderá-los adequadamente.
Portanto, para as três perguntas que geramos, ela pode atribuir pesos de 25%, 25% e 50%, já que as primeiras duas são tão semelhantes.
Embora a estratégia de agregação da AMA seja poderosa, ela é tão complicada que não a abordarei aqui. Leia a seção 3.4 do artigo para obter mais detalhes.
Com essa estratégia de prompting, a AMA é capaz de usar o GPT-J-6B para superar a performance do GPT-3.
A AMA é melhor em perguntas em que o contexto dado contém a resposta.
Métodos de ensamblagem são muito poderosos. Eles podem ser usados para melhorar o desempenho de qualquer modelo e também podem ser usados para melhorar o desempenho de um modelo em uma tarefa específica.
Na prática, a votação da maioria deve ser a sua estratégia principal.
Sander Schulhoff is the Founder of Learn Prompting and an ML Researcher at the University of Maryland. He created the first open-source Prompt Engineering guide, reaching 3M+ people and teaching them to use tools like ChatGPT. Sander also led a team behind Prompt Report, the most comprehensive study of prompting ever done, co-authored with researchers from the University of Maryland, OpenAI, Microsoft, Google, Princeton, Stanford, and other leading institutions. This 76-page survey analyzed 1,500+ academic papers and covered 200+ prompting techniques.
Li, Y., Lin, Z., Zhang, S., Fu, Q., Chen, B., Lou, J.-G., & Chen, W. (2022). On the Advance of Making Language Models Better Reasoners. ↩ ↩2
Cobbe, K., Kosaraju, V., Bavarian, M., Chen, M., Jun, H., Kaiser, L., Plappert, M., Tworek, J., Hilton, J., Nakano, R., Hesse, C., & Schulman, J. (2021). Training Verifiers to Solve Math Word Problems. ↩
Mitchell, E., Noh, J. J., Li, S., Armstrong, W. S., Agarwal, A., Liu, P., Finn, C., & Manning, C. D. (2022). Enhancing Self-Consistency and Performance of Pre-Trained Language Models through Natural Language Inference. ↩
Arora, S., Narayan, A., Chen, M. F., Orr, L., Guha, N., Bhatia, K., Chami, I., Sala, F., & Ré, C. (2022). Ask Me Anything: A simple strategy for prompting language models. ↩ ↩2
Wang, B., & Komatsuzaki, A. (2021). GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model. https://github.com/kingoflolz/mesh-transformer-jax. https://github.com/kingoflolz/mesh-transformer-jax ↩