Compartilhamento de tecnologia

Exemplo de prompt de construção de autoinstrução

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

  1. Construa artificialmente um lote de prompts como sementes. (Começando com um pequeno conjunto inicial de tarefas escritas por humanos)
  2. Cada vez, coloque alguns prompts gerados pela semente na entrada para fazer alguns exemplos e use o LLM para gerar mais prompts (usando o LLM para gerar novas instruções com base nas tarefas iniciais);
  3. Filtrar os de baixa qualidade e corrigir os que forem necessários (Filtrar e refinar as instruções geradas)
  4. Insira todos os prompts gerados no LLM para obter os resultados de saída (criando instâncias de entrada-saída para as novas instruções)
  5. Entrada Saída, criando amostras de treinamento para LLM (usando o conjunto de dados gerado para ajustar o LLM)

Etapa 2, LLM gera:

import random
from transformers import AutoTokenizer, AutoModelForCausalLM

# Load a pre-trained language model
model_name = "bigcode/starcoderbase-1b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Seed tasks (simplified for demonstration)
seed_tasks = [
    "Write a function to calculate the factorial of a number.",
    "Create a class to represent a bank account.",
    "Implement a binary search algorithm."
]

def generate_instruction(prompt):
    inputs = tokenizer(prompt, return_tensors="pt")
    outputs = model.generate(**inputs, max_new_tokens=50)
    return tokenizer.decode(outputs[0], skip_special_tokens=True)

def self_instruct(num_iterations):
    generated_tasks = []
    
    for _ in range(num_iterations):
        # Sample existing tasks
        sampled_tasks = random.sample(seed_tasks   generated_tasks, min(3, len(seed_tasks)   len(generated_tasks)))
        
        # Create a prompt for generating new instructions
        prompt = "Generate a new programming task based on these examples:nn"
        prompt  = "n".join(sampled_tasks)
        prompt  = "nnNew task:"
        
        # Generate a new instruction
        new_task = generate_instruction(prompt)
        
        # In practice, you would filter and refine the generated task here
        
        generated_tasks.append(new_task)
    
    return generated_tasks

# Run Self-Instruct
new_tasks = self_instruct(5)
for i, task in enumerate(new_tasks, 1):
    print(f"Task {i}: {task}")

Etapa 3 Filtro:

Defina manualmente algumas regras e filtre aquelas que são muito ruins (o LLM também pode ser usado como árbitro);

Objetivo: garantir qualidade e diversidade;

  • Filtrar instruções muito curtas ou muito longas
  • Filtrar instruções que contenham palavras-chave inadequadas para modelos de linguagem (por exemplo, "imagem", "gráfico", "arquivo", "gráfico")
  • Filtrar instruções que começam com pontuação
  • Filtrar instruções que começam com caracteres não ingleses
  • Filtrar instruções que tenham alta similaridade ROUGE-L (acima de 0,7) com qualquer instrução existente no pool de tarefas