minhas informações de contato
Correspondência[email protected]
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
- Construa artificialmente um lote de prompts como sementes. (Começando com um pequeno conjunto inicial de tarefas escritas por humanos)
- Cada vez, coloque alguns prompts gerados pela semente na entrada para fazer alguns exemplos e use o LLM para gerar mais prompts (usando o LLM para gerar novas instruções com base nas tarefas iniciais);
- Filtrar os de baixa qualidade e corrigir os que forem necessários (Filtrar e refinar as instruções geradas)
- Insira todos os prompts gerados no LLM para obter os resultados de saída (criando instâncias de entrada-saída para as novas instruções)
- Entrada Saída, criando amostras de treinamento para LLM (usando o conjunto de dados gerado para ajustar o LLM)
Etapa 2, LLM gera:
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}")
Etapa 3 Filtro:
Defina manualmente algumas regras e filtre aquelas que são muito ruins (o LLM também pode ser usado como árbitro);
Objetivo: garantir qualidade e diversidade;
- Filtrar instruções muito curtas ou muito longas
- Filtrar instruções que contenham palavras-chave inadequadas para modelos de linguagem (por exemplo, "imagem", "gráfico", "arquivo", "gráfico")
- Filtrar instruções que começam com pontuação
- Filtrar instruções que começam com caracteres não ingleses
- Filtrar instruções que tenham alta similaridade ROUGE-L (acima de 0,7) com qualquer instrução existente no pool de tarefas