Mellum: مدلی سریع و کوچک برای تکمیل کد

دنیای محیط‌های توسعه یکپارچه (IDEs) مدت‌هاست که با قدرت و دقت ویژگی‌های تکمیل خودکار تقویت شده است. با این حال، رقیب جدیدی وارد عرصه شده است: هوش مصنوعی (AI). ادغام هوش مصنوعی در IDE ها به طور فزاینده ای فراگیر می شود و باعث ارزیابی مجدد ابزارهای سنتی می شود. در حالی که این روش های قدیمی هنوز کار می کنند، ممکن است دیگر کمک های پیشرفته ای را که توسعه دهندگان اکنون انتظار دارند، ارائه ندهند.

این مقاله برگرفته از یک پست وبلاگ توسط JetBrains است و به آموزش و قابلیت‌های Mellum، مدلی که تکمیل خودکار مبتنی بر ابر را پشتیبانی می‌کند، می‌پردازد. JetBrains، که به‌خاطر IDE ها و ویرایشگرهای کد خود که برای برنامه نویسان طراحی شده اند، مشهور است، Mellum را توسعه داده است تا تکمیل خودکار سریع و کارآمد کد را ارائه دهد. Mellum به گونه‌ای طراحی شده است که به طور موثر بر روی یک دستگاه محلی کار کند و آن را به عنوان یکی از سریع‌ترین و جمع‌وجورترین مدل‌ها در نوع خود متمایز می‌کند. پروژه ای از نظر مفهومی مشابه، Microsoft Phi است.

پرداختن به چالش های آشکار

مهندسان JetBrains در پیگیری تکمیل خودکار مبتنی بر هوش مصنوعی با چندین چالش اساسی روبرو شدند:

  • سرعت و هزینه: مدل های چت معمولی به دلیل هزینه های محاسباتی بالا و زمان پاسخگویی کند، غیر عملی بودند. این مدل ها همچنین از تکنیک های خاص کد مانند پر کردن میانی (FIM) یا ترمیم نشانه (token healing) آگاهی نداشتند.
  • قالب بندی خروجی: مدل های چت شاخص اغلب داده ها را در قالب های ناسازگار تولید می کردند و تجزیه پاسخ ها و ادغام یکپارچه آنها در ویرایشگر را دشوار می کرد.
  • منشاء داده: تعیین منشاء داده های آموزشی و کاهش مسائل احتمالی نقض حق چاپ یک مانع مهم بود.

Mellum: یک مرور کلی

تیم توسعه در JetBrains متوجه شد که ایجاد مدل خودشان رویکردی بهینه است. هدف آنها طراحی مدلی بود که کیفیت، هزینه های استنتاج و تأخیر را متعادل کند و در عین حال بر روی داده هایی با منشاء واضح آموزش داده شود. تحقیقات اولیه نشان داد که مدلی با حدود 4 میلیارد پارامتر می تواند قابلیت های تکمیل خودکار شایسته ای را برای طیف گسترده ای از سناریوها و کاربران ارائه دهد. علاوه بر این، با آموزش انحصاری مدل بر روی کد، می توانستند واژگان تخصصی از نشانه ها را ایجاد کنند که عاری از داده های نامربوط باشد.

فرآیند آموزش مدل Mellum از سه مرحله مجزا تشکیل شده است که هر کدام دانش جدیدی را ارائه می دهند و کیفیت کد تولید شده را افزایش می دهند. مرحله اولیه شامل پیش آموزش اولیه بر روی مجموعه بزرگی از فایل های فردی است. مرحله دوم شامل اصلاح مدل با مجموعه کوچکتری از نمونه های تخصصی است. یادگیری تقویتی با بازخورد هوش مصنوعی (RLAIF) در مرحله سوم برای تطبیق مدل با ویژگی های خاص IDE و حذف خروجی های ناخواسته استفاده می شود.

پیش آموزش

برای جلوگیری از مشکلات احتمالی مربوط به منشاء مبهم داده ها، مدل از ابتدا آموزش داده شد و نیاز به معرفی جامع به زبان های متعدد، نحو برنامه نویسی، الگوها و مفاهیم اصلی داشت.

مجموعه داده

منبع داده اصلی برای پیش آموزش، TheStack بود. این مجموعه داده تضمین می کند که داده ها هم از نظر قانونی سالم هستند و هم از نظر عملی سودمند.

فرآیند پیش آموزش

در طول پیش آموزش، مجموعه داده چندین بار نمونه برداری شد تا تقریباً به 3 تریلیون نشانه برسد. یک پنجره زمینه ای 8192 نشانه ای استفاده شد و مجموعه داده به قطعاتی با این اندازه تقسیم شد. تبدیل پر کردن میانی (FIM) به نیمی از فایل های موجود در هر قطعه اعمال شد و مدل را تشویق می کرد تا هم کد قبلی و هم کد بعدی را در نظر بگیرد. این تکنیک از نزدیک سناریوهای تولید کد در دنیای واقعی را تقلید می کند.

مرحله پیش آموزش بر روی خوشه ای از شانزده گره انجام شد که هر کدام به هشت GPU H100 مجهز بودند. این مرحله تقریباً 15 روز به طول انجامید و منجر به مدل 4 میلیارد پارامتری Mellum-base شد.

پیش آموزش یک مدل تکمیل خودکار کد با هدف کلی ایجاد می کند که دانش گسترده ای از بسیاری از زبان های برنامه نویسی دارد. با این حال، در این مرحله، مدل فقط برای پیش بینی نشانه بعدی در یک بخش فایل به طور تصادفی انتخاب شده آموزش داده می شود. بدون زمینه اضافی، مدل از ساختار کد آگاهی ندارد و هیچ مکانیزمی برای تعیین زمان متوقف کردن تولید کد ندارد.

مرحله تنظیم دقیق برای رفع این محدودیت ها طراحی شده است.

تنظیم دقیق آگاه از زمینه

پر کردن میانی پیشرفته

برخلاف پیش آموزش، جایی که قطعات کد به طور تصادفی برای پیش بینی انتخاب می شوند، تنظیم دقیق بر روی تقسیم بندی کد به شیوه ای معنادارتر متمرکز است و به مدل آموزش می دهد تا قطعات کدی را که ‘در طبیعت’ رخ می دهند، استخراج کند.

نمونه های تخصصی

در عمل، تکمیل خودکار کد مستلزم درک فایل های اطراف و زمینه های گسترده تر است، که احتمالاً کل پروژه ها را در بر می گیرد.

برای پیش پردازش داده ها، این شرکت یک پروژه داخلی به نام Code Engine راه اندازی کرد: یک SDK چند پلتفرمی و مجموعه ای از ابزارهای کنسول که برای ساختن زمینه به طور مستقیم از فایل های معمولی بدون نیاز به نمایه سازی کامل پروژه توسعه یافته اند. این SDK بر روی یک خوشه MapReduce داخلی مستقر شد و برای پردازش هزاران مخزن عمومی استفاده شد و نمونه های مفید بسیاری را برای آموزش در یک بازه زمانی معقول تولید کرد.

یافتن الگوریتم های صحیح نیاز به مقداری آزمون و خطا داشت.

تنظیم برای زبان های خاص

مدل های کوچک می توانند از تخصصی شدن برای زبان های خاص بهره مند شوند. در حالی که مدل پایه بر روی بیش از 80 زبان آموزش داده شده است، اکثر کاربران معمولاً فقط با یک یا دو زبان کار می کنند. برای رفع این مشکل، JetBrains چندین مدل تخصصی ایجاد کرد:

  • mellum-all: از اکثر زبان ها و گویش های موجود در IDE های JetBrains پشتیبانی می کند، اما کیفیت تکمیل خودکار کمتر از مدل های تخصصی است.
  • mellum-python: در پایتون و Jupyter تخصص دارد.
  • mellum-kotlin: در جاوا و Kotlin تخصص دارد.
  • mellum-web: در فناوری های وب تخصص دارد.

گام نهایی: RLAIF

در نهایت، مواردی که اهداف یادگیری با انتظارات کاربر مطابقت ندارند، باید حل شوند. یک مرحله آموزشی اضافی، RLAIF - یادگیری تقویتی با بازخورد هوش مصنوعی، برای حل چنین مشکلاتی استفاده می شود.

مدل از تعاملات کاربر یاد می گیرد و درک می کند که چگونه بهتر ترجیحات کاربر را منعکس کند.

این رویکرد نه تنها نمره کیفیت کلی را بهبود می بخشد، بلکه تعداد مصنوعات تولید آزاردهنده را نیز کاهش می دهد.

Mellum چقدر خوب است؟

این مدل برای اندازه خود عملکرد فوق العاده ای دارد. در اینجا نحوه ارزیابی آن آمده است:

  • ابتدا، مدل بر روی یک معیار داخلی به نام ‘JetBrains BigCode’ ارزیابی شد.
  • سپس بر روی معیارهای عمومی شناخته شده مانند SAFIM آزمایش شد.
  • در نهایت، آمار استفاده برای ویژگی ها جمع آوری شد و معیارهای کاربر محاسبه شد.

ارزیابی آفلاین

جمع آوری داده ها یک کار پیچیده است، اما ایجاد یک متریک خوب که پیشنهاد اصلی را با پیشنهاد جدید ارائه شده توسط شبکه عصبی مقایسه کند، حتی چالش برانگیزتر است. ما یک مطالعه کوچک انجام دادیم و در نهایت به ترکیبی از دو معیار اصلی رسیدیم:

EM:

  • تطابق دقیق یک ایده بسیار محبوب است.
  • اگر خط اول تکمیل با خط اول اصلی، با حداقل پیش پردازش، مطابقت داشته باشد، یک پیش بینی خوب در نظر گرفته می شود.

KK:

  • این متریک به نام نویسندگان آن نامگذاری شده است.
  • تعداد خطوط پیشنهادی از اصل تقسیم بر تعداد خطوط در تکمیل پیشنهادی.

JetBrains BigCode

این مدل در برابر مجموعه داده معیار به دست آمده با استفاده از ابزار داخلی JetBrains BigCode ارزیابی شد.

با حفظ کنترل کامل بر مجموعه داده خود به جای تکیه بر معیارهای عمومی، می توان کیفیت مدل را به طور قابل اعتمادی برای سبک ها و شیوه های مختلف کدنویسی ارزیابی کرد.

نتایج ارزیابی JetBrains BigCode ما کیفیت را همتراز با مدل های محبوب نشان می دهد، اما Mellum کوچکتر و کارآمدتر است.

کیفیت پیشنهادات تک خطی (متریک EM)

معیارهای عمومی

این مدل نه تنها بر روی مجموعه داده داخلی بلکه بر روی معیارهای عمومی مختلف مانند معیار چند زبانه SAFIM (پر کردن آگاه از نحو در وسط) ارزیابی شد.

ارزیابی آنلاین

متریک اصلی نسبت کد تکمیل شده (RoCC) نامیده می شود. این به عنوان نسبت کاراکترهای کد نوشته شده با استفاده از تکمیل خودکار کد به کل مقدار کد در ویرایشگر تعریف می شود.

یکی دیگر از معیارهای مهم نرخ پذیرش (AR) است که به عنوان تعداد پیشنهادات پذیرفته شده تقسیم بر تعداد کل پیشنهادات نشان داده شده محاسبه می شود.

این یک سفر پیچیده بود، اما متخصصان JetBrains آن را با وقار به پایان رساندند. در پایان، یک مدل عمومی و چندین مدل تخصصی به دست آمد که از طریق پلتفرم JetBrains AI در دسترس هستند. آنها اکنون با موفقیت در JetBrains AI Assistant کار می کنند.

بعد چی؟

  • مهندسان JetBrains در حال حاضر بر روی یک مدل برای زبان های توسعه وب کار می کنند. ممکن است در آینده نزدیک به صورت عمومی در دسترس قرار گیرد.
  • برنامه هایی برای افزایش همزمان تعداد پارامترها و تنوع داده ها وجود دارد. وظایف مختلفی در کدنویسی وجود دارد - Mellum نیز می تواند آنها را انجام دهد. عملکرد سرویس هنوز یک معیار کلیدی است، بنابراین گسترش مدل در حد معقول خواهد بود.