Обмен технологиями

Пример создания подсказки для самостоятельного обучения

2024-07-08

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

  1. Искусственно создать партию подсказок в виде семян. (Начиная с небольшого начального набора задач, написанных человеком)
  2. Каждый раз помещайте несколько подсказок, сгенерированных начальным числом, во входные данные, чтобы создать примеры с несколькими кадрами, и используйте LLM для создания большего количества подсказок (используйте LLM для создания новых инструкций на основе исходных задач);
  3. Отфильтровать некачественные и исправить те, которые могут понадобиться (Фильтрация и уточнение сгенерированных инструкций);
  4. Введите все сгенерированные запросы в LLM, чтобы получить выходные результаты (создание экземпляров ввода-вывода для новых инструкций);
  5. Входные данные, создание обучающих выборок для LLM (использование сгенерированного набора данных для точной настройки LLM)

Шаг 2, LLM генерирует:

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

Шаг 3. Фильтр:

Вручную определите некоторые правила и отфильтруйте те, которые слишком плохи (LLM также можно использовать в качестве рефери);

Цель: обеспечить качество и разнообразие;

  • Отфильтруйте слишком короткие или слишком длинные инструкции.
  • Отфильтровать инструкции, содержащие ключевые слова, неподходящие для языковых моделей (например, «изображение», «график», «файл», «график»).
  • Отфильтровать инструкции, начинающиеся со знаков препинания
  • Отфильтровать инструкции, начинающиеся с неанглийских символов
  • Отфильтровать инструкции, имеющие высокую степень сходства ROUGE-L (выше 0,7) с любой существующей инструкцией в пуле задач.