Компания Stability AI хорошо известна своей моделью генерации изображение Stable Diffusion, но это не все, что интересует стартап в области генеративного ИИ. Stability AI теперь занимается и генерацией кода.
Сегодня компания Stability AI объявила о первом публичном релизе StableCode, новой открытой большой языковой модели (LLM), предназначенной для помощи пользователям в генерации кода. StableCode доступна на трех различных уровнях: базовая модель для общих случаев использования, модель инструкций и модель длинного контекстного окна, поддерживающая до 16,000 лексем.
Модель StableCode использует исходный набор данных о языке программирования из проекта BigCode с открытым исходным кодом, а также дополнительную фильтрацию и тонкую настройку от Stability AI. На начальном этапе StableCode будет поддерживать разработку на языках программирования Python, Go, Java, JavaScript, C и C++.
«Со StableCode мы хотели бы создать такую же модель, как Stable Diffusion, которая помогла каждому человеку в мире стать художником», — сказал в Кристиан Лафорте, руководитель исследовательского отдела Stability AI. «По сути, позволить любому человеку, у которого есть хорошие идеи и, возможно, есть проблема, написать программу, которая просто решит эту проблему».
Подготовка любого LLM опирается на данные, а для StableCode эти данные поступают из проекта BigCode. Использование BigCode в качестве основы для инструмента генеративного ИИ-кода для LLM — идея не новая. Компании HuggingFace и ServiceNow еще в мае запустили открытую программу StarCoder LLM, которая в своей основе базируется на BigCode.
Натан Купер, ведущий научный сотрудник Stability AI пояснил, что обучение StableCode включало в себя значительную фильтрацию и очистку данных BigCode.
«Мы любим BigCode, они делают потрясающую работу в области управления данными, управления моделями и обучения моделей», — сказал Купер. «Мы взяли их наборы данных, применили дополнительные фильтры для улучшения качества, а также для построения версии модели с большим контекстным окном, а затем обучили ее на нашем кластере».
По словам Купера, Stability AI также выполнила ряд шагов по обучению, выходящих за рамки базовой модели BigCode. Эти шаги включали последовательное обучение конкретным языкам программирования.
«Это очень похоже на подход, применяемый в области естественных языков, когда вы начинаете с предварительного обучения универсальной модели, а затем дорабатываете ее на специальном наборе задач, или, в данном случае, языков», — сказал Купер.
Если посмотреть дальше BigCode, то версия StableCode с длинным контекстом может дать пользователям значительные преимущества.
Версия StableCode с длинным контекстным окном имеет контекстное окно длиной 16,000 токенов, что, по утверждению Stability AI, больше, чем у любой другой модели. Купер пояснил, что более длинное контекстное окно позволяет использовать более специализированные и сложные подсказки для генерации кода. Это также означает, что пользователь может попросить StableCode просмотреть кодовую базу среднего размера, включающую несколько файлов, чтобы помочь понять и сгенерировать новый код.
«Вы можете использовать это более длинное контекстное окно для того, чтобы модель узнала больше о вашей кодовой базе и о том, какие функции определены в других файлах», — говорит Купер. «Таким образом, когда она предлагает код, он может быть более адаптирован к вашей кодовой базе и вашим потребностям».
StableCode, как и все современные генеративные модели ИИ, основана на нейронной сети-трансформере. Вместо того чтобы использовать подход ALiBi (Attention with Linear Biases) для позиционирования выходов в модели — подход, применяемый, например, StarCoder для своей открытой генеративной модели — StableCode использует подход, известный как RoPE (Rotary Position Embedding).
Купер отметил, что подход ALiBi в трансформаторных моделях склонен оценивать текущие лексемы больше, чем прошлые. По его мнению, такой подход не является идеальным для кода, поскольку, в отличие от естественного языка, код не имеет заданной структуры повествования с началом, серединой и концом. Функции кода могут быть определены для любой точки потока приложения.
«Я не думаю, что кодирование подходит для этой идеи взвешивания настоящего более важного, чем прошлое, поэтому мы используем … RoPE, который не имеет такого рода предвзятости, когда вы взвешиваете настоящее больше, чем прошлое».
Цель первого выпуска — посмотреть, как разработчики воспримут и будут использовать эту модель.
«Мы собираемся взаимодействовать и работать с сообществом, чтобы увидеть, какие интересные направления они придумают, и изучить пространство генеративных разработчиков», — сказал Купер.