Compartir tecnología

Ejemplo de mensaje de construcción de autoinstrucciones

2024-07-08

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

  1. Construya artificialmente un lote de indicaciones como semillas. (Comenzando con un pequeño conjunto inicial de tareas escritas por humanos)
  2. Cada vez, coloque algunas indicaciones generadas por la semilla en Entrada para crear ejemplos breves y use LLM para generar más indicaciones (usando LLM para generar nuevas instrucciones basadas en las tareas semilla);
  3. Filtrar los de mala calidad y corregir los que puedan ser necesarios (Filtrar y refinar las instrucciones generadas)
  4. Ingrese todas las indicaciones generadas en LLM para obtener los resultados de salida (Creación de instancias de entrada y salida para las nuevas instrucciones);
  5. Entrada Salida, creación de muestras de entrenamiento para LLM (uso del conjunto de datos generado para ajustar el LLM)

Paso 2, LLM genera:

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}")

Paso 3 Filtrar:

Defina manualmente algunas reglas y filtre las que sean demasiado malas (LLM también se puede utilizar como árbitro);

Finalidad: asegurar la calidad y la diversidad;

  • Filtrar las instrucciones que sean demasiado cortas o demasiado largas
  • Filtrar instrucciones que contengan palabras clave no adecuadas para los modelos de lenguaje (por ejemplo, "imagen", "gráfico", "archivo", "trama")
  • Filtrar instrucciones que comiencen con puntuación
  • Filtrar instrucciones que comiencen con caracteres no ingleses
  • Filtrar instrucciones que tengan una alta similitud ROUGE-L (por encima de 0,7) con cualquier instrucción existente en el grupo de tareas