Berbagi teknologi

Contoh Prompt pembuatan Instruksi Mandiri

2024-07-08

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

  1. Buatlah kumpulan Anjuran secara artifisial sebagai benih. (Dimulai dengan serangkaian tugas kecil yang ditulis manusia)
  2. Setiap kali, masukkan beberapa Perintah yang dihasilkan oleh benih ke dalam Input untuk membuat beberapa contoh, dan gunakan LLM untuk menghasilkan lebih banyak Perintah (Menggunakan LLM untuk menghasilkan instruksi baru berdasarkan tugas benih)
  3. Saring instruksi yang berkualitas buruk dan perbaiki instruksi yang diperlukan; (Menyaring dan menyempurnakan instruksi yang dihasilkan)
  4. Masukkan semua Prompt yang dihasilkan ke dalam LLM untuk mendapatkan hasil output; (Membuat instance input-output untuk instruksi baru)
  5. Input Output, membuat sampel pelatihan untuk LLM (Menggunakan kumpulan data yang dihasilkan untuk menyempurnakan LLM)

Langkah 2, LLM menghasilkan:

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

Langkah 3 Menyaring:

Tetapkan beberapa aturan secara manual dan saring aturan yang terlalu buruk (LLM juga dapat digunakan sebagai wasit)

Tujuan: untuk menjamin kualitas dan keragaman;

  • Saring instruksi yang terlalu pendek atau terlalu panjang
  • Saring instruksi yang berisi kata kunci yang tidak sesuai untuk model bahasa (misalnya "gambar", "grafik", "file", "plot")
  • Saring instruksi yang dimulai dengan tanda baca
  • Saring instruksi yang dimulai dengan karakter non-Inggris
  • Saring instruksi yang memiliki kesamaan ROUGE-L tinggi (di atas 0,7) dengan instruksi yang ada di kumpulan tugas