Condivisione della tecnologia

Esempio di richiesta di costruzione di autoistruzione

2024-07-08

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

  1. Costruisci artificialmente un lotto di suggerimenti come semi. (Iniziando con un piccolo insieme di attività scritte da esseri umani)
  2. Ogni volta, inserisci alcuni prompt generati dal seed in Input per creare esempi di pochi scatti e utilizzare LLM per generare più prompt (utilizzando LLM per generare nuove istruzioni basate sulle attività seed);
  3. Filtra quelli di scarsa qualità e correggi quelli che possono essere necessari (filtrando e perfezionando le istruzioni generate)
  4. Immettere tutti i prompt generati in LLM per ottenere i risultati di output (creazione di istanze di input-output per le nuove istruzioni)
  5. Input Output, creazione di campioni di formazione per LLM (utilizzando il set di dati generato per mettere a punto il LLM)

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

Passaggio 3 Filtra:

Definire manualmente alcune regole e filtrare quelle troppo cattive (LLM può anche essere utilizzato come arbitro)

Scopo: garantire qualità e diversità;

  • Filtra le istruzioni troppo brevi o troppo lunghe
  • Filtra le istruzioni contenenti parole chiave non adatte ai modelli linguistici (ad esempio "immagine", "grafico", "file", "trama")
  • Filtra le istruzioni che iniziano con la punteggiatura
  • Filtra le istruzioni che iniziano con caratteri non inglesi
  • Filtrare le istruzioni che hanno un'elevata similarità ROUGE-L (superiore a 0,7) con qualsiasi istruzione esistente nel task pool