Mellum: Model Pantas untuk Pelengkapan Kod

Dunia Persekitaran Pembangunan Bersepadu (IDE) telah lama diperkukuh oleh kuasa dan ketepatan ciri-ciri autolengkap. Walau bagaimanapun, pesaing baru telah memasuki arena: Kecerdasan Buatan (AI). Integrasi AI ke dalam IDE semakin berleluasa, mendorong penilaian semula alat-alat tradisional. Walaupun kaedah-kaedah lama ini masih berfungsi, ia mungkin tidak lagi menyediakan bantuan canggih yang diharapkan oleh pembangun sekarang.

Artikel ini diadaptasi dari catatan blog oleh JetBrains, dan menyelidiki latihan dan keupayaan Mellum, model yang menyokong autolengkap berasaskan awan. JetBrains, yang terkenal dengan IDE dan editor kodnya yang disesuaikan untuk pengatur cara, telah membangunkan Mellum untuk menyediakan autolengkap kod yang pantas dan cekap. Mellum direka untuk beroperasi dengan berkesan pada peranti tempatan, membezakannya sebagai salah satu model terpantas dan paling padat dalam kelasnya. Projek yang serupa secara konsep ialah Microsoft Phi.

Menangani Cabaran yang Jelas

Jurutera JetBrains menghadapi beberapa cabaran kritikal dalam usaha mereka untuk autolengkap dikuasakan AI:

  • Kelajuan dan Kos: Model sembang konvensional terbukti tidak praktikal kerana kos pengiraan yang tinggi dan masa tindak balas yang perlahan. Model-model ini juga tidak mempunyai kesedaran tentang teknik khusus kod seperti fill-in-the-middle (FIM) atau pemulihan token.
  • Pemformatan Output: Model sembang utama sering menjana data dalam format yang tidak konsisten, menyukarkan untuk menghurai respons dan menyepadukannya dengan lancar ke dalam editor.
  • Provenans Data: Menentukan asal data latihan dan mengurangkan potensi isu pelanggaran hak cipta menimbulkan halangan yang ketara.

Mellum: Gambaran Keseluruhan

Pasukan pembangunan di JetBrains menyedari bahawa mewujudkan model mereka sendiri adalah pendekatan yang optimum. Matlamat mereka adalah untuk mereka bentuk model yang mengimbangi kualiti, kos inferens, dan kependaman sambil dilatih pada data dengan provenans yang jelas. Penyelidikan awal mencadangkan bahawa model dengan sekitar 4 bilion parameter boleh menyediakan keupayaan autolengkap yang cekap untuk pelbagai senario dan pengguna. Tambahan pula, dengan melatih model secara eksklusif pada kod, mereka boleh mewujudkan perbendaharaan kata token khusus, bebas daripada data yang tidak berkaitan.

Proses latihan untuk model Mellum terdiri daripada tiga peringkat yang berbeza, masing-masing menyumbang pengetahuan baru dan meningkatkan kualiti kod yang dijana. Fasa awal melibatkan pra-latihan asas pada korpus besar fail individu. Peringkat kedua terdiri daripada memperhalusi model dengan set contoh khusus yang lebih kecil. Pembelajaran Pengukuhan dengan Maklum Balas AI (RLAIF) digunakan dalam peringkat ketiga untuk menyesuaikan model dengan ciri-ciri khusus IDE dan menghapuskan output yang tidak diingini.

Pra-Latihan

Untuk mengelakkan potensi isu berkaitan dengan asal data yang samar-samar, model itu dilatih dari bawah, memerlukan pengenalan komprehensif kepada pelbagai bahasa, sintaks pengaturcaraan, corak, dan konsep teras.

Set Data

Sumber data utama untuk pra-latihan ialah TheStack. Set data ini memastikan bahawa data itu sah dari segi undang-undang dan bermanfaat dari segi praktikal.

Proses Pra-Latihan

Semasa pra-latihan, set data itu disampel berulang kali untuk mencapai kira-kira 3 trilion token. Tetingkap konteks 8192 token digunakan, dengan set data dibahagikan kepada serpihan saiz ini. Transformasi fill-in-the-middle (FIM) digunakan untuk separuh daripada fail dalam setiap serpihan, menggalakkan model untuk mempertimbangkan kedua-dua kod sebelumnya dan berikutnya. Teknik ini meniru senario penjanaan kod dunia sebenar dengan teliti.

Fasa pra-latihan dijalankan pada kluster enam belas nod, setiap satu dilengkapi dengan lapan GPU H100. Peringkat ini mengambil masa kira-kira 15 hari untuk disiapkan, menghasilkan model Mellum-base 4 bilion parameter.

Pra-latihan mewujudkan model autolengkap kod tujuan umum dengan pengetahuan yang luas tentang banyak bahasa pengaturcaraan. Walau bagaimanapun, pada peringkat ini, model hanya dilatih untuk meramalkan token seterusnya dalam segmen fail yang dipilih secara rawak. Tanpa konteks tambahan, model tidak mempunyai kesedaran tentang struktur kod dan tidak mempunyai mekanisme untuk menentukan bila untuk berhenti menjana kod.

Peringkat penalaan halus direka untuk menangani batasan ini.

Penalaan Halus Sedar Konteks

Fill-in-the-Middle yang Dipertingkatkan

Tidak seperti pra-latihan, di mana serpihan kod dipilih secara rawak untuk ramalan, penalaan halus menumpukan pada pembahagian kod dengan cara yang lebih bermakna, mengajar model untuk mengekstrak serpihan kod yang berlaku ‘di alam liar’.

Contoh Khusus

Dalam amalan, autolengkap kod memerlukan pemahaman tentang fail sekeliling dan konteks yang lebih luas, mungkin merangkumi keseluruhan projek.

Untuk prapemprosesan data, syarikat melancarkan projek dalaman bernama Code Engine: SDK merentas platform dan set utiliti konsol yang dibangunkan untuk membina konteks secara langsung daripada fail biasa tanpa memerlukan pengindeksan projek penuh. SDK ini digunakan pada kluster MapReduce dalaman dan digunakan untuk memproses beribu-ribu repositori awam, menjana banyak contoh berguna untuk latihan dalam jangka masa yang munasabah.

Mencari algoritma yang betul memerlukan beberapa percubaan dan kesilapan.

Penalaan untuk Bahasa Khusus

Model kecil boleh mendapat manfaat yang besar daripada pengkhususan untuk bahasa tertentu. Walaupun model asas dilatih pada lebih daripada 80 bahasa, kebanyakan pengguna biasanya bekerja dengan hanya satu atau dua. Untuk menangani perkara ini, JetBrains mewujudkan beberapa model khusus:

  • mellum-all: Menyokong kebanyakan bahasa dan dialek yang tersedia dalam IDE JetBrains, tetapi kualiti autolengkap lebih rendah daripada model khusus.
  • mellum-python: Mengkhusus dalam Python dan Jupyter.
  • mellum-kotlin: Mengkhusus dalam Java dan Kotlin.
  • mellum-web: Mengkhusus dalam teknologi web.

Langkah Akhir: RLAIF

Akhir sekali, kes di mana matlamat pembelajaran tidak sepadan dengan jangkaan pengguna mesti diselesaikan. Fasa latihan tambahan, RLAIF - Pembelajaran Pengukuhan dengan Maklum Balas AI, digunakan untuk menyelesaikan masalah sedemikian.

Model belajar daripada interaksi pengguna dan memahami cara untuk mencerminkan keutamaan pengguna dengan lebih baik.

Pendekatan ini bukan sahaja meningkatkan skor kualiti keseluruhan tetapi juga mengurangkan bilangan artifak generasi yang menjengkelkan.

Seberapa Baik Mellum?

Model ini berprestasi sangat baik untuk saiznya. Inilah cara ia dinilai:

  • Pertama, model dinilai pada penanda aras dalaman bernama ‘JetBrains BigCode’.
  • Kemudian ia diuji pada penanda aras awam yang terkenal seperti SAFIM.
  • Akhir sekali, statistik penggunaan untuk ciri dikumpulkan, dan metrik pengguna dikira.

Penilaian Luar Talian

Mengumpul data adalah tugas yang kompleks, tetapi mewujudkan metrik yang baik yang membandingkan cadangan asal dengan yang baru yang dicadangkan oleh rangkaian neural adalah lebih mencabar. Kami menjalankan kajian kecil dan akhirnya memutuskan gabungan dua metrik utama:

EM:

  • Exact Match ialah idea yang sangat popular.
  • Ramalan dianggap baik jika baris pertama pelengkapan sepadan dengan baris pertama asal, dengan prapemprosesan yang minimum.

KK:

  • Metrik itu dinamakan sempena pengarangnya.
  • Bilangan baris yang dicadangkan daripada asal dibahagikan dengan bilangan baris dalam pelengkapan yang dicadangkan.

JetBrains BigCode

Model ini dinilai berdasarkan set data penanda aras yang diperoleh menggunakan alat JetBrains BigCode dalaman.

Dengan mengekalkan kawalan penuh ke atas set data kami dan bukannya bergantung pada penanda aras awam, adalah mungkin untuk menilai kualiti model dengan pasti untuk pelbagai gaya dan amalan pengekodan.

Keputusan penilaian JetBrains BigCode kami menunjukkan kualiti yang setanding dengan model popular, tetapi Mellum lebih kecil dan lebih cekap.

Kualiti cadangan satu baris (metrik EM)

Penanda Aras Awam

Model ini dinilai bukan sahaja pada set data dalaman tetapi juga pada pelbagai penanda aras awam, seperti penanda aras berbilang bahasa SAFIM (syntax-aware fill in the middle).

Penilaian Dalam Talian

Metrik utama dipanggil nisbah kod yang dilengkapkan (RoCC). Ia ditakrifkan sebagai nisbah aksara kod yang ditulis menggunakan autolengkap kod kepada jumlah kod dalam editor.

Metrik penting lain ialah kadar penerimaan (AR), yang dikira sebagai bilangan cadangan yang diterima dibahagikan dengan bilangan semua cadangan yang ditunjukkan.

Ini adalah perjalanan yang kompleks, tetapi pakar JetBrains menyelesaikannya dengan maruah. Pada akhirnya, satu model umum dan beberapa model khusus diperolehi, yang tersedia melalui platform AI JetBrains. Mereka kini berjaya bekerja dalam Pembantu AI JetBrains.

Apa seterusnya?

  • Jurutera JetBrains sedang mengusahakan model untuk bahasa pembangunan web. Ia mungkin tersedia untuk umum dalam masa terdekat.
  • Terdapat rancangan untuk meningkatkan bilangan parameter dan kepelbagaian data secara serentak. Terdapat banyak tugas yang berbeza dalam pengekodan - Mellum akan dapat melaksanakannya juga. Prestasi perkhidmatan masih merupakan metrik utama, jadi pengembangan model akan berada dalam had yang munasabah.