МагЧертовщик Почему это лучшая модель кодирования, из всех существующих

МагЧертовщик почему это лучшая модель кодирования из всех существующих

В этом блоге мы погрузимся в то, что такое WizardCoder и почему он выделяется как лучшая модель кодирования в данной области. Мы также рассмотрим, почему его результаты на тесте HumanEval являются исключительными. Кроме того, мы вдетально рассмотрим, как процессы подготовки набора данных и настройки вносят свой вклад в успех WizardCoder.

Начнем с некоторого введения в WizardCoder. WizardCoder – это модель языка большого кода (LLM), которая была настроена на наборе данных Llama2 и продемонстрировала превосходную производительность по сравнению с другими моделями кодирования с открытым исходным кодом и закрытыми LLMs на ведущих тестах генерации кода.

Источник: Документ WizardCoder

Что выделяет WizardCoder

Можно задаться вопросом, что делает производительность WizardCoder на HumanEval столь исключительной, особенно учитывая его относительно компактный размер. Чтобы поставить все на свои места, сравним WizardCoder-python-34B и CoderLlama-Python-34B:

Pass@1 на HumanEval

WizardCoder-python-34B = 73,2%

CoderLlama-Python-34B = 53,7%

Уникальным и самым важным фактором, приводящим к значительной разнице в производительности на тесте HumanEval, является набор данных, на котором модель обучается.

Сила данных: уникальный набор данных WizardCoder

Один из ключевых факторов, способствующих удивительной производительности WizardCoder, – это его тренировочный набор данных. Большинство моделей опираются на структуру набора данных, которая обычно включает:

  • Надежную базу с большим количеством простых инструкций
  • Сокращенное количество сложных инструкций
  • И минимальное количество действительно сложных инструкций
Источник: https://www.youtube.com/watch?v=0R_2layS6Ho

Чтобы обучить модель для достижения максимальной производительности на тестах оценки, набор данных должен иметь баланс между простыми инструкциями, сложными инструкциями и действительно сложными инструкциями.

Источник: https://www.youtube.com/watch?v=0R_2layS6Ho

Здесь блеснет набор данных WizardCoder. Он имеет:

  • Хорошее количество действительно сложных инструкций
  • Хорошее количество сложных инструкций
  • Надежную базу с большим количеством простых инструкций

Но есть проблема: создание набора данных с сложными инструкциями в основном сложно, в то время как простые инструкции легко доступны.

Evol Instruct

Evol-Instruct – это эволюционный алгоритм для создания разнообразных и сложных наборов данных инструкций с использованием LLMs (GPT-4). Он разработан для улучшения производительности LLMs, предоставляя им высококачественные инструкции, которые сложно создать вручную.

Источник: https://www.youtube.com/watch?v=0R_2layS6Ho

В простых терминах Evol-Instruct – это каскад сложности синтетически созданного набора инструкций (GPT-4).

Эволюция инструкций

LLM-модели могут создавать более сложные и трудные инструкции с помощью специфических подсказок. Кроме того, они могут генерировать полностью новые инструкции, которые равно сложны, но совершенно отличаются. Используя это, мы можем итеративно развивать изначальный набор инструкций, повышая уровень сложности и расширяя его богатство и разнообразие.

A. Эволюция инструкций

Эволютор инструкций – это LLM-модель, использующая подсказки для эволюции (разработки) инструкций, с двумя типами:

  1. Углубленная эволюция.
  2. Широкая эволюция

Дается базовый набор данных (например, Альпака: созданный с помощью самоинструкции или 70 тыс. ShareGPT (предоставленный реальными пользователями)), и с использованием этого базового набора данных мы можем создать более сложный и разнообразный набор данных.

a) Углубленная эволюция

Углубленная эволюция улучшает инструкции, делая их более сложными и трудными с помощью пяти типов подсказок:

Подсказка углубленной эволюции

Углубленная эволюция стремится к тому, чтобы:

(i) Добавить ограничения

(ii) Углубление

(iii) Конкретизация (более специфичная)

(iv) Увеличение шагов рассуждения

(v) Усложнение входных данных

Основная часть подсказки углубленной эволюции:

«Ваша цель – переписать данную подсказку в более сложной версии, чтобы сделать работу этих знаменитых систем искусственного интеллекта (например, ChatGPT и GPT4 [3]) сложнее. Но переписанная подсказка должна быть разумной, понятной и вызывать ответы у людей».

Пример подсказки добавления ограничений:

Я хочу, чтобы вы выступили в роли переписчика подсказок.

Ваша цель – переписать данную подсказку в более сложной версии, чтобы сделать работу этих знаменитых систем искусственного интеллекта (например, ChatGPT и GPT4) сложнее. Но переписанная подсказка должна быть разумной и понятной для людей. Перезапись не может удалять не текстовые части, такие как таблица и код в #Заданная подсказка#. Также, пожалуйста, не удаляйте входные данные в #Заданная подсказка#.

Вам нужно усложнить данную подсказку с помощью следующего метода:

Пожалуйста, добавьте еще одно ограничение/требование в #Заданная подсказка#

Вы должны постараться не делать #Переписанная подсказка# громоздкой, #Переписанная подсказка# может добавить всего 10-20 слов в #Заданная подсказка#.

#Заданная подсказка#, #Переписанная подсказка#, ‘заданная подсказка’ и ‘переписанная подсказка’ не разрешается использовать в #Переписанная подсказка#

#Заданная подсказка#

<Здесь инструкция.>

#Переписанная подсказка#:

Эти подсказки помогают генерировать сложный набор инструкций с похожими шаблонами для других типов углубленной эволюции.

b) Широкая эволюция

Широкая эволюция решает проблему ограниченности наборов данных для обучения инструкциям в открытой области (например, Альпака, ShareGPT и т. д.), которые часто имеют малый масштаб и ограниченную разнообразность тем и навыков. Широкая эволюция решает эту проблему, разработав подсказку для генерации совершенно новой инструкции на основе имеющейся инструкции, требуя, чтобы новая инструкция была более специфической.

Подсказка широкой эволюции:

Я хочу, чтобы вы выступили в роли создателя подсказок.

Ваша цель – черпать вдохновение из #Заданная подсказка# для создания совершенно новой подсказки.

Эта новая подсказка должна относиться к той же области, что и #Заданная подсказка#, но быть еще более уникальной.

Длина и уровень сложности #Созданная подсказка# должны быть сходными с #Заданная подсказка#.

#Созданная подсказка# должна быть разумной и понятной для людей.

#Заданная подсказка#, #Созданная подсказка#’, ‘заданная подсказка’ и ‘созданная подсказка’ не разрешается использовать в #Созданная подсказка#.

#Заданная подсказка#:

«Здесь инструкция.>

#Созданная подсказка#:

B. Генерация ответа

Та же LLM используется для генерации соответствующих ответов на эволюционировавшие инструкции, используя подсказку: <Здесь инструкция>

C. Устранение эволюции (устранитель инструкций)

Эволюционировавшая инструкция может представлять вызов для LLM при генерации ответа. Иногда, когда сгенерированный ответ содержит «sorry» и имеет относительно небольшую длину (т.е. менее 80 слов), это часто указывает на то, что LLM испытывает трудности при ответе на эволюционировавшую инструкцию. Таким образом, мы можем использовать это правило для судебного решения.

Ответ, сгенерированный LLM, содержит только пунктуацию и служебные слова.

D. Доведение до совершенства LLM на эволюционировавших инструкциях

После завершения всех эволюций, начальный набор инструкций (набор из 52 000 инструкций Альпаки) объединяется с данными эволюционировавших инструкций со всех эпох и случайным образом перетасовывается для создания финального набора данных для совершенствования. Этот процесс гарантирует равномерное распределение инструкций различной сложности в наборе данных, максимизируя плавность совершенствования модели.

Wizardlm подтверждает Evol-Instruct путем совершенствования LLaMA 7B с использованием эволюционировавших инструкций и оценки его производительности и даёт модели название WizardLM.

Evol-Instruct работает путем создания пула начальных инструкций (набор из 52 000 инструкций Альпаки), затем эти инструкции развиваются через ряд шагов для создания более сложных и разнообразных инструкций. После генерации пула инструкций он используется для совершенствования LLM, что приводит к созданию новой модели под названием WizardCoder. Процесс совершенствования включает в себя обучение LLM на данных инструкций для улучшения его способности генерировать связный и грамотный текст в ответ на различные входные данные.

Формат подсказки

Для WizardCoder подсказка должна иметь следующий вид:

Ниже приведена инструкция, описывающая задачу. Напишите ответ, который должен соответствовать запросу.### Инструкция: {инструкция}### Ответ:

Лучшие сценарии использования

WizardCoder может использоваться для различных задач, связанных с кодом, включая генерацию кода, завершение кода и его краткое изложение. Вот некоторые примеры входных подсказок, которые могут быть использованы с моделью:

  • Генерация кода: Исходя из описания задачи программирования, генерируется соответствующий код. Пример входного запроса: «Напишите функцию на языке Python, которая принимает список целых чисел в качестве входных данных и возвращает сумму всех четных чисел в списке».
  • Завершение кода: Завершите неполный фрагмент кода. Пример входного запроса: «def multiply(a, b): \n return a * b _»
  • Краткое изложение кода: Исходя из длинного фрагмента кода генерируется краткое изложение кода. Пример входного запроса: «Напишите программу на языке Python, которая считывает CSV-файл и вычисляет среднее значение определенного столбца».

Модель 34B – это не просто помощник при написании кода; это мощный инструмент, способный:

  1. Автоматизировать DevOps-скрипты: Генерировать оболочечные скрипты или скрипты на языке Python для автоматизации задач.
  2. Анализ данных: Генерировать код на языке Python для предварительной обработки, анализа и визуализации данных.
  3. Машинное обучение: Генерировать от начала до конца ML-пайплайны – от сбора данных до развертывания модели.
  4. Веб-скрапинг: Генерировать код для задач веб-скрапинга.
  5. Разработка API: Генерировать каркасный код для RESTful API.
  6. Blockchain: Генерировать смарт-контракты для Ethereum или других платформ блокчейна.

Оценка

WizardCoder обходит все другие открытые LLM для кода, достигая передовых результатов (SOTA), согласно экспериментальным результатам из четырех пользовательских наборов для генерации кода, включая HumanEval, HumanEval+, MBPP и DS-100.

WizardCoder-Python-34B проявляет исключительную производительность при работе с задачами, связанными с кодом. Модель превосходит другие открытые и закрытые LLM на ведущих бенчмарках для генерации кода, включая HumanEval (73,2%), HumanEval+ и MBPP(61,2%).

WizardCoder-Python-34B-V1.0 занимает второе место в бенчмарках HumanEval, опережая GPT4 (2023/03/15, 73,2 против 67,0), ChatGPT-3.5 (73,2 против 72,5) и Claude2 (73,2 против 71,2).

Источник: статья WizardCoder

Модель WizardCoder-15B-v1.0 достигает результат 57.3 pass@1 на базовых показателях HumanEval, что на 22.3 пункта выше, чем SOTA Open-source Code LLM, включая StarCoder, CodeGen, CodeGee и CodeT5+. Кроме того, WizardCoder значительно превосходит все Open-source Code LLM с настройкой инструкций, включая InstructCodeT5+, StarCoder-GPTeacher и Instruct-Codegen-16B.

Источник: статья WizardCoder

В заключение, успех WizardCoder основан на его уникальном наборе данных и инновационном использовании Evol-Instruct для увеличения сложности инструкций, что приводит к выдающимся результатам в различных задачах и базовых показателях, связанных с кодом.

Ссылки

YouTube: WizardCoder 34B: Объяснение сложной настройки

GitHub

Статья: WizardLM – От демократии к диктатуре. Часть 2ab. Что представляют собой большие языковые модели?

Статья: WizardCoder: давая инструкции коду больших языковых моделей с помощью Evol-Instruct