2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
- Erstellen Sie künstlich eine Reihe von Eingabeaufforderungen als Samen. (Beginnend mit einem kleinen Set von von Menschen geschriebenen Aufgaben)
- Fügen Sie jedes Mal einige vom Seed generierte Eingabeaufforderungen in die Eingabe ein, um Beispiele mit wenigen Schüssen zu erstellen, und verwenden Sie LLM, um weitere Eingabeaufforderungen zu generieren (Verwenden Sie LLM, um neue Anweisungen basierend auf den Seed-Aufgaben zu generieren).
- Filtern Sie diejenigen mit schlechter Qualität heraus und korrigieren Sie diejenigen, die benötigt werden (Filtern und Verfeinern der generierten Anweisungen).
- Geben Sie alle generierten Eingabeaufforderungen in LLM ein, um die Ausgabeergebnisse zu erhalten (Eingabe-Ausgabe-Instanzen für die neuen Anweisungen erstellen).
- Eingabe-Ausgabe, Erstellung von Trainingsbeispielen für LLM (Verwendung des generierten Datensatzes zur Feinabstimmung des LLM)
Schritt 2: LLM generiert:
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}")
Schritt 3 Filter:
Definieren Sie manuell einige Regeln und filtern Sie diejenigen heraus, die zu schlecht sind (LLM kann auch als Schiedsrichter verwendet werden).
Zweck: Qualität und Vielfalt sicherstellen;
- Zu kurze oder zu lange Anweisungen herausfiltern
- Anweisungen herausfiltern, die Schlüsselwörter enthalten, die für Sprachmodelle ungeeignet sind (z. B. „Bild“, „Grafik“, „Datei“, „Plot“)
- Anweisungen herausfiltern, die mit Satzzeichen beginnen
- Anweisungen herausfiltern, die mit nicht-englischen Zeichen beginnen
- Filtern Sie Anweisungen heraus, die eine hohe ROUGE-L-Ähnlichkeit (über 0,7) mit einer vorhandenen Anweisung im Taskpool aufweisen.