2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
- Construisez artificiellement un lot d'invites sous forme de graines. (En commençant par un petit ensemble de tâches écrites par l'homme)
- À chaque fois, placez quelques invites générées par la graine dans Input pour créer quelques exemples et utilisez LLM pour générer plus d'invites (en utilisant le LLM pour générer de nouvelles instructions basées sur les tâches de départ) ;
- Filtrer celles de mauvaise qualité et corriger celles qui peuvent être nécessaires (Filtrer et affiner les instructions générées) ;
- Entrez toutes les invites générées dans LLM pour obtenir les résultats de sortie (Création d'instances d'entrée-sortie pour les nouvelles instructions)
- Entrée Sortie, création d'échantillons de formation pour LLM (utilisation de l'ensemble de données généré pour affiner le LLM)
Étape 2, LLM génère :
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}")
Étape 3 Filtrer :
Définissez manuellement certaines règles et filtrez celles qui sont trop mauvaises (LLM peut également être utilisé comme arbitre) ;
Objectif : garantir la qualité et la diversité ;
- Filtrez les instructions trop courtes ou trop longues
- Filtrer les instructions contenant des mots-clés inadaptés aux modèles de langage (par exemple, « image », « graphique », « fichier », « tracé »)
- Filtrer les instructions commençant par une ponctuation
- Filtrer les instructions commençant par des caractères non anglais
- Filtrer les instructions qui ont une similarité ROUGE-L élevée (supérieure à 0,7) avec toute instruction existante dans le pool de tâches