Свежая выжимка ml и AI статей - каждый день
В современном мире разработки программного обеспечения большие языковые модели (LLM), специализирующиеся на обработке и генерации кода, становятся неотъемлемым инструментом. Они помогают в автоматизации процессов написания кода, анализа и даже в решении задач программирования. Однако, несмотря на прогресс в этой области, качество и доступность открытых кодовых LLM оставляют желать лучшего по сравнению с проприетарными моделями. Основной причиной этого является отсутствие прозрачности в обучающих данных и методах обучения, что ограничивает возможности для научных исследований и инноваций.
Чтобы устранить этот пробел, мы представляем OpenCoder — передовую модель LLM для кода, которая не только демонстрирует производительность, сравнимую с ведущими моделями, но и служит открытым "кулинарным рецептом" для исследовательского сообщества. Мы делимся не только весами модели и кодом для инференса, но и полностью воспроизводимым набором обучающих данных, детальным описанием процесса обработки данных, экспериментальными результатами и протоколами обучения.
Для создания высококачественного набора данных для предобучения, мы разработали RefineCode — набор данных, состоящий из 960 миллиардов токенов, охватывающий 607 языков программирования. Этот набор данных включает в себя:
Процесс обработки включает в себя несколько этапов:
Предобработка: Исключение файлов, превышающих 8 МБ, и ограничение выборки по типам файлов, связанных с программированием.
Дедупликация: Использование как точного, так и нечеткого дедупликации для удаления дублирующихся документов.
Трансформация: Удаление копирайтов и замена персонально идентифицируемой информации (PII) на заглушки.
Фильтрация: Применение эвристических правил для удаления низкокачественного кода и обеспечения разнообразия.
Выборка данных: Уменьшение объема данных для некоторых языков, чтобы сохранить баланс в наборе данных.
Для обеспечения разнообразия и контекста, мы также собираем данные из веб-ресурсов:
Аннеалинг — это фаза, в которой модель подвергается обучению на высококачественных данных для дальнейшего улучшения ее способностей. Набор данных для аннеалинга включает:
OpenCoder доступен в двух размерах:
Обе модели используют функцию активации SwiGLU и имеют словарный запас в 96 640 токенов.
Процесс обучения включает в себя:
Для улучшения обучения мы собираем инструкционные корпуса из различных источников:
Для обеспечения высокой производительности как в теоретических, так и в практических задачах, мы используем двухэтапную стратегию инструкции-настройки:
Первая стадия: Фокус на теоретических знаниях в области компьютерных наук, создание специализированного набора данных для понимания алгоритмов, структур данных и других концепций.
Вторая стадия: Упор на практические задачи программирования, используя высококачественный код из GitHub для обучения модели на реальных примерах.
Мы сравнили OpenCoder с другими открытыми и закрытыми моделями на ряде бенчмарков, таких как HumanEval, MBPP и BigCodeBench, демонстрируя превосходство в производительности.
Для инструкционных моделей мы использовали бенчмарки, такие как LiveCodeBench и MultiPL-E, показывая, что OpenCoder способен эффективно работать с различными языками программирования и решать сложные задачи.
Мы провели анализ эффективности различных стратегий дедупликации, показав, что файловая дедупликация более эффективна, чем дедупликация на уровне репозитория, для поддержания разнообразия данных и улучшения производительности модели.
Эксперименты показали, что использование высококачественных данных в фазе аннеалинга значительно улучшает производительность модели.
Фильтрация данных на основе количества звезд на GitHub может снизить разнообразие данных и повлиять на общее распределение, что приводит к неоптимальным результатам.
Двухэтапная стратегия инструкции-настройки доказала свою эффективность, позволяя модели приобретать широкие возможности на первой стадии и затем уточнять их на второй стадии, специализируясь на кодовых задачах.
OpenCoder представляет собой важный шаг вперед в направлении открытых, прозрачных и высокопроизводительных моделей LLM для кода. Мы надеемся, что наша работа вдохновит и ускорит развитие сообщества открытых кодовых LLM, обеспечивая доступ к высококачественным инструментам для разработчиков и исследователей. В будущем мы планируем продолжать улучшать OpenCoder, обновляя модель и данные, чтобы она оставалась на передовой технологического прогресса и могла удовлетворять разнообразные потребности разработчиков по всему миру.