Yıllardır entegre geliştirme ortamları (IDE’ler), otomatik tamamlama özelliklerinin gücü ve hassasiyeti ile desteklenmektedir. Ancak, arenaya yeni bir rakip girdi: Yapay Zeka (AI). Yapay zekanın IDE’lere entegrasyonu giderek yaygınlaşıyor ve bu da geleneksel araçların yeniden değerlendirilmesine yol açıyor. Bu eski yöntemler hala işlevsel olsa da, geliştiricilerin artık beklediği en son teknolojiyi sağlamayabilirler.
Bu makale, JetBrains tarafından yayınlanan bir blog yazısından uyarlanmıştır ve bulut tabanlı otomatik tamamlamanın temelini oluşturan Mellum modelinin eğitimi ve yeteneklerini incelemektedir. Programcılar için özel olarak tasarlanmış IDE’leri ve kod düzenleyicileriyle tanınan JetBrains, hızlı ve verimli kod otomatik tamamlama sağlamak için Mellum’u geliştirmiştir. Mellum, sınıfındaki en hızlı ve en kompakt modellerden biri olarak öne çıkarak, yerel bir cihazda etkili bir şekilde çalışacak şekilde tasarlanmıştır. Kavramsal olarak benzer bir proje Microsoft Phi’dir.
Açık Zorlukların Üstesinden Gelmek
JetBrains mühendisleri, yapay zeka destekli otomatik tamamlama arayışlarında çeşitli kritik zorluklarla karşılaştılar:
- Hız ve Maliyet: Geleneksel sohbet modelleri, yüksek işlem maliyetleri ve yavaş yanıt süreleri nedeniyle pratik olmadığını kanıtladı. Bu modeller ayrıca, fill-in-the-middle (FIM) veya token iyileştirme gibi koda özgü tekniklerin farkında değildi.
- Çıktı Biçimlendirme: Amiral gemisi sohbet modelleri genellikle tutarsız formatlarda veri üretiyordu, bu da yanıtları ayrıştırmayı ve bunları sorunsuz bir şekilde düzenleyiciye entegre etmeyi zorlaştırıyordu.
- Veri Kökeni: Eğitim verilerinin kaynağını belirlemek ve olası telif hakkı ihlali sorunlarını azaltmak önemli bir engel teşkil ediyordu.
Mellum: Genel Bir Bakış
JetBrains’teki geliştirme ekibi, kendi modellerini oluşturmanın en uygun yaklaşım olduğunu fark etti. Amaçları, kalite, çıkarım maliyetleri ve gecikmeyi dengelerken, net bir kökene sahip veriler üzerinde eğitilmiş bir model tasarlamaktı. Ön araştırmalar, yaklaşık 4 milyar parametreye sahip bir modelin, çok çeşitli senaryolar ve kullanıcılar için yetkin otomatik tamamlama yetenekleri sağlayabileceğini gösterdi. Ayrıca, modeli yalnızca kod üzerinde eğiterek, ilgisiz verilerden arınmış, özel bir token sözlüğü oluşturabilirlerdi.
Mellum modelinin eğitim süreci, her biri yeni bilgiye katkıda bulunan ve üretilen kodun kalitesini artıran üç farklı aşamadan oluşur. İlk aşama, büyük bir bireysel dosya külliyatı üzerinde temel ön eğitim içerir. İkinci aşama, modeli daha küçük bir uzmanlaşmış örnek kümesiyle iyileştirmekten oluşur. Yapay Zeka Geri Bildirimi ile Güçlendirme Öğrenimi (RLAIF), modeli IDE’ye özgü özelliklere uyarlamak ve istenmeyen çıktıları ortadan kaldırmak için üçüncü aşamada kullanılır.
Ön Eğitim
Belirsiz veri kökenleriyle ilgili olası sorunlardan kaçınmak için, model sıfırdan eğitildi ve bu da çok sayıda dil, programlama sözdizimi, kalıpları ve temel kavramlara kapsamlı bir giriş gerektirdi.
Veri Kümesi
Ön eğitim için birincil veri kaynağı TheStack’ti. Bu veri kümesi, verilerin hem yasal olarak sağlam hem de pratik olarak faydalı olmasını sağlar.
Ön Eğitim Süreci
Ön eğitim sırasında, veri kümesi yaklaşık 3 trilyon tokene ulaşmak için birden çok kez örneklendi. 8192 tokenlik bir bağlam penceresi kullanıldı ve veri kümesi bu boyutta parçalara ayrıldı. Ortadaki doldurma (FIM) dönüşümü, modelin hem önceki hem de sonraki kodu dikkate almasını teşvik etmek için her parçadaki dosyaların yarısına uygulandı. Bu teknik, gerçek dünya kod oluşturma senaryolarını yakından taklit eder.
Ön eğitim aşaması, her biri sekiz H100 GPU ile donatılmış on altı düğümlü bir küme üzerinde gerçekleştirildi. Bu aşamanın tamamlanması yaklaşık 15 gün sürdü ve 4 milyar parametreli Mellum-base modeli elde edildi.
Ön eğitim, birçok programlama dili hakkında kapsamlı bilgiye sahip genel amaçlı bir kod otomatik tamamlama modeli oluşturur. Ancak, bu aşamada model yalnızca rastgele seçilen bir dosya segmentindeki bir sonraki tokeni tahmin etmek için eğitilmiştir. Ek bağlam olmadan, model kod yapısının farkında değildir ve ne zaman kod üretmeyi durduracağını belirleme mekanizması yoktur.
İnce ayar aşaması, bu sınırlamaları ele almak için tasarlanmıştır.
Bağlama Duyarlı İnce Ayar
Gelişmiş Ortadaki Doldurma
Kod parçacıklarının tahmin için rastgele seçildiği ön eğitimden farklı olarak, ince ayar, kodu daha anlamlı bir şekilde bölümlendirmeye, modele ‘vahşi doğada’ meydana gelen kod parçacıklarını çıkarmayı öğretmeye odaklanır.
Uzmanlaşmış Örnekler
Uygulamada, kod otomatik tamamlama, çevreleyen dosyaları ve muhtemelen tüm projeleri kapsayan daha geniş bağlamları anlamayı gerektirir.
Veri ön işleme için şirket, tam proje indekslemesi gerektirmeden doğrudan sıradan dosyalardan bağlam oluşturmak için geliştirilen platformlar arası bir SDK ve bir dizi konsol yardımcı programı olan Code Engine adlı bir dahili proje başlattı. Bu SDK, dahili bir MapReduce kümesinde dağıtıldı ve makul bir zaman diliminde eğitim için birçok faydalı örnek oluşturarak binlerce genel depoyu işlemek için kullanıldı.
Doğru algoritmaları bulmak biraz deneme yanılma gerektirdi.
Belirli Diller İçin Ayarlama
Küçük modeller, belirli diller için uzmanlaşmadan büyük ölçüde faydalanabilir. Temel model 80’den fazla dilde eğitilmiş olsa da, çoğu kullanıcı tipik olarak yalnızca bir veya iki dille çalışır. Bunu ele almak için JetBrains, birden fazla uzmanlaşmış model oluşturdu:
- mellum-all: JetBrains IDE’lerinde bulunan çoğu dili ve lehçeyi destekler, ancak otomatik tamamlama kalitesi uzmanlaşmış modellere göre daha düşüktür.
- mellum-python: Python ve Jupyter konusunda uzmanlaşmıştır.
- mellum-kotlin: Java ve Kotlin konusunda uzmanlaşmıştır.
- mellum-web: Web teknolojileri konusunda uzmanlaşmıştır.
Son Adım: RLAIF
Son olarak, öğrenme hedeflerinin kullanıcı beklentileriyle eşleşmediği durumlar çözülmelidir. Ek bir eğitim aşaması olan RLAIF — Yapay Zeka Geri Bildirimi ile Güçlendirme Öğrenimi, bu tür sorunları çözmek için kullanılır.
Model, kullanıcı etkileşimlerinden öğrenir ve kullanıcı tercihlerini daha iyi nasıl yansıtacağını anlar.
Bu yaklaşım yalnızca genel kalite puanını iyileştirmekle kalmaz, aynı zamanda can sıkıcı nesil artefaktlarının sayısını da azaltır.
Mellum Ne Kadar İyi?
Model, boyutu için olağanüstü iyi performans gösteriyor. İşte nasıl değerlendirildiği:
- İlk olarak, model dahili bir kıyaslama olan ‘JetBrains BigCode’ üzerinde değerlendirildi.
- Daha sonra SAFIM gibi tanınmış kamu kıyaslamalarında test edildi.
- Son olarak, özellikler için kullanım istatistikleri toplandı ve kullanıcı metrikleri hesaplandı.
Çevrimdışı Değerlendirme
Veri toplamak karmaşık bir iştir, ancak orijinal öneriyi sinir ağı tarafından önerilen yeni öneriyle karşılaştıran iyi bir metrik oluşturmak daha da zordur. Küçük bir çalışma yaptık ve sonuçta iki temel metriğin bir kombinasyonuna karar verdik:
EM:
- Exact Match çok popüler bir fikir.
- Tamamlamanın ilk satırı, minimum ön işlemeyle orijinalin ilk satırıyla eşleşirse, bir tahmin iyi kabul edilir.
KK:
- Metrik, yazarlarının adını almıştır.
- Orijinalden önerilen satır sayısının, önerilen tamamlamadaki satır sayısına bölünmesi.
JetBrains BigCode
Model, dahili JetBrains BigCode aracı kullanılarak elde edilen bir kıyaslama veri kümesine göre değerlendirildi.
Halka açık kıyaslamalara güvenmek yerine veri kümemiz üzerinde tam kontrol sahibi olarak, çeşitli kodlama stilleri ve uygulamaları için model kalitesini güvenilir bir şekilde değerlendirmek mümkün hale gelir.
JetBrains BigCode değerlendirmemizin sonuçları, popüler modellerle aynı düzeyde kalite gösteriyor, ancak Mellum daha küçük ve daha verimli.
Tek satırlık önerilerin kalitesi (EM metriği)
Halka Açık Kıyaslamalar
Model yalnızca dahili veri kümesinde değil, aynı zamanda çok dilli kıyaslama SAFIM (sözdizimi farkında ortadaki doldurma) gibi çeşitli halka açık kıyaslamalarda da değerlendirildi.
Çevrimiçi Değerlendirme
Ana metrik, tamamlanmış kod oranı (RoCC) olarak adlandırılır. Kod otomatik tamamlama kullanılarak yazılan kod karakterlerinin düzenleyicideki toplam kod miktarına oranı olarak tanımlanır.
Bir diğer önemli metrik, gösterilen tüm öneri sayısına bölünen kabul edilen öneri sayısı olarak hesaplanan kabul oranıdır (AR).
Bu karmaşık bir yolculuktu, ancak JetBrains uzmanları bunu haysiyetle tamamladı. Sonunda, JetBrains AI platformu aracılığıyla kullanılabilen bir genel ve birkaç uzmanlaşmış model elde edildi. Şu anda JetBrains AI Assistant’ta başarıyla çalışıyorlar.
Sırada ne var?
- JetBrains mühendisleri şu anda web geliştirme dilleri için bir model üzerinde çalışıyorlar. Yakın gelecekte halka açık hale gelebilir.
- Parametre sayısını ve veri çeşitliliğini aynı anda artırma planları var. Kodlamada birçok farklı görev var — Mellum da bunları gerçekleştirebilecek. Hizmet performansı hala önemli bir metrik, bu nedenle modelin genişletilmesi makul sınırlar içinde olacaktır.