моя контактная информация
Почтамезофия@protonmail.com
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
- Искусственно создать партию подсказок в виде семян. (Начиная с небольшого начального набора задач, написанных человеком)
- Каждый раз помещайте несколько подсказок, сгенерированных начальным числом, во входные данные, чтобы создать примеры с несколькими кадрами, и используйте LLM для создания большего количества подсказок (используйте LLM для создания новых инструкций на основе исходных задач);
- Отфильтровать некачественные и исправить те, которые могут понадобиться (Фильтрация и уточнение сгенерированных инструкций);
- Введите все сгенерированные запросы в LLM, чтобы получить выходные результаты (создание экземпляров ввода-вывода для новых инструкций);
- Входные данные, создание обучающих выборок для 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) с любой существующей инструкцией в пуле задач.