Mellum: तेज़ कोड पूर्णता मॉडल

इंटीग्रेटेड डेवलपमेंट एनवायरनमेंट (IDE) का क्षेत्र लंबे समय से ऑटोकंप्लीशन सुविधाओं की शक्ति और सटीकता द्वारा समर्थित है। हालाँकि, एक नया दावेदार मैदान में उतरा है: आर्टिफिशियल इंटेलिजेंस (AI)। IDE में AI का एकीकरण तेजी से सर्वव्यापी होता जा रहा है, जिससे पारंपरिक उपकरणों का पुनर्मूल्यांकन हो रहा है। जबकि ये पुराने तरीके अभी भी काम करते हैं, वे अब अत्याधुनिक सहायता प्रदान नहीं कर सकते हैं जिसकी डेवलपर्स अब उम्मीद करते हैं।

यह लेख JetBrains के एक ब्लॉग पोस्ट से लिया गया है, और मेल्लुम के प्रशिक्षण और क्षमताओं पर प्रकाश डालता है, जो क्लाउड-आधारित ऑटोकंप्लीशन का समर्थन करने वाला एक मॉडल है। जेटब्रैन्स, जो प्रोग्रामर के लिए तैयार किए गए अपने IDE और कोड संपादकों के लिए प्रसिद्ध है, ने तेज़ और कुशल कोड ऑटोकंप्लीशन प्रदान करने के लिए मेल्लुम विकसित किया है। मेल्लुम को स्थानीय डिवाइस पर प्रभावी ढंग से संचालित करने के लिए डिज़ाइन किया गया है, जो इसे अपनी श्रेणी में सबसे तेज़ और सबसे कॉम्पैक्ट मॉडल में से एक बनाता है। एक वैचारिक रूप से समान परियोजना Microsoft Phi है।

स्पष्ट चुनौतियों का समाधान

JetBrains के इंजीनियरों को AI-संचालित ऑटोकंप्लीशन की अपनी खोज में कई महत्वपूर्ण चुनौतियों का सामना करना पड़ा:

  • गति और लागत: पारंपरिक चैट मॉडल अपनी उच्च कम्प्यूटेशनल लागत और धीमी प्रतिक्रिया समय के कारण अव्यवहारिक साबित हुए। इन मॉडलों में कोड-विशिष्ट तकनीकों जैसे फिल-इन-द-मिडिल (FIM) या टोकन हीलिंग के बारे में भी जागरूकता की कमी थी।
  • आउटपुट फ़ॉर्मेटिंग: फ्लैगशिप चैट मॉडल अक्सर असंगत फ़ॉर्मेट में डेटा उत्पन्न करते हैं, जिससे प्रतिक्रियाओं को पार्स करना और उन्हें संपादक में मूल रूप से एकीकृत करना मुश्किल हो जाता है।
  • डेटा प्रामाणिकता: प्रशिक्षण डेटा की उत्पत्ति का निर्धारण और संभावित कॉपीराइट उल्लंघन के मुद्दों को कम करना एक महत्वपूर्ण बाधा प्रस्तुत करता है।

मेल्लुम: एक अवलोकन

JetBrains की विकास टीम को एहसास हुआ कि अपना स्वयं का मॉडल बनाना सबसे अच्छा तरीका था। उनका लक्ष्य एक ऐसा मॉडल डिजाइन करना था जो गुणवत्ता, अनुमान लागत और विलंबता को संतुलित करे, जबकि स्पष्ट प्रामाणिकता वाले डेटा पर प्रशिक्षित किया जाए। प्रारंभिक शोध से पता चला कि लगभग 4 बिलियन मापदंडों वाला एक मॉडल परिदृश्यों और उपयोगकर्ताओं की एक विस्तृत श्रृंखला के लिए सक्षम ऑटोकंप्लीशन क्षमताएं प्रदान कर सकता है। इसके अलावा, मॉडल को विशेष रूप से कोड पर प्रशिक्षित करके, वे अप्रासंगिक डेटा से मुक्त, टोकन की एक विशेष शब्दावली स्थापित कर सकते हैं।

मेल्लुम मॉडल के लिए प्रशिक्षण प्रक्रिया में तीन अलग-अलग चरण होते हैं, जिनमें से प्रत्येक नए ज्ञान का योगदान करता है और उत्पन्न कोड की गुणवत्ता को बढ़ाता है। प्रारंभिक चरण में व्यक्तिगत फ़ाइलों के एक बड़े कोष पर बुनियादी पूर्व-प्रशिक्षण शामिल है। दूसरा चरण विशेष उदाहरणों के एक छोटे सेट के साथ मॉडल को परिष्कृत करने पर जोर देता है। AI फ़ीडबैक (RLAIF) के साथ रीइन्फोर्समेंट लर्निंग का उपयोग तीसरे चरण में मॉडल को IDE-विशिष्ट विशेषताओं के अनुकूल बनाने और अवांछित आउटपुट को खत्म करने के लिए किया जाता है।

प्री-ट्रेनिंग

संदिग्ध डेटा मूल से संबंधित संभावित मुद्दों से बचने के लिए, मॉडल को शुरू से ही प्रशिक्षित किया गया था, जिसके लिए कई भाषाओं, प्रोग्रामिंग सिंटैक्स, पैटर्न और मूल अवधारणाओं की व्यापक परिचय की आवश्यकता थी।

डेटासेट

प्री-ट्रेनिंग के लिए प्राथमिक डेटा स्रोत TheStack था। यह डेटासेट सुनिश्चित करता है कि डेटा कानूनी रूप से ध्वनि और व्यावहारिक रूप से फायदेमंद दोनों है।

प्री-ट्रेनिंग प्रक्रिया

प्री-ट्रेनिंग के दौरान, लगभग 3 ट्रिलियन टोकन तक पहुंचने के लिए डेटासेट को कई बार नमूना किया गया। 8192 टोकन की एक संदर्भ विंडो का उपयोग किया गया, जिसमें डेटासेट को इस आकार के टुकड़ों में विभाजित किया गया। फिल-इन-द-मिडिल (FIM) परिवर्तन प्रत्येक खंड में आधी फ़ाइलों पर लागू किया गया था, जिससे मॉडल को पहले और बाद के कोड दोनों पर विचार करने के लिए प्रोत्साहित किया गया। यह तकनीक वास्तविक दुनिया के कोड पीढ़ी परिदृश्यों की बारीकी से नकल करती है।

प्री-ट्रेनिंग चरण सोलह नोड्स के एक क्लस्टर पर आयोजित किया गया था, जिनमें से प्रत्येक में आठ H100 GPU थे। इस चरण को पूरा करने में लगभग 15 दिन लगे, जिसके परिणामस्वरूप 4-बिलियन-पैरामीटर मेल्लुम-बेस मॉडल बना।

प्री-ट्रेनिंग कई प्रोग्रामिंग भाषाओं के व्यापक ज्ञान के साथ एक सामान्य-उद्देश्यीय कोड ऑटोकंप्लीशन मॉडल बनाता है। हालाँकि, इस स्तर पर, मॉडल को केवल बेतरतीब ढंग से चयनित फ़ाइल खंड में अगले टोकन की भविष्यवाणी करने के लिए प्रशिक्षित किया जाता है। अतिरिक्त संदर्भ के बिना, मॉडल में कोड संरचना के बारे में जागरूकता की कमी होती है और इसमें यह निर्धारित करने के लिए कोई तंत्र नहीं होता है कि कोड उत्पन्न करना कब बंद करना है।

फ़ाइन-ट्यूनिंग चरण इन सीमाओं को दूर करने के लिए डिज़ाइन किया गया है।

संदर्भ-जागरूक फ़ाइन-ट्यूनिंग

उन्नत फिल-इन-द-मिडिल

प्री-ट्रेनिंग के विपरीत, जहां भविष्यवाणी के लिए कोड खंड बेतरतीब ढंग से चुने जाते हैं, फ़ाइन-ट्यूनिंग कोड को अधिक सार्थक तरीके से विभाजित करने पर ध्यान केंद्रित करता है, मॉडल को ‘जंगल में’ होने वाले कोड खंडों को निकालने के लिए सिखाता है।

विशेष उदाहरण

व्यवहार में, कोड ऑटोकंप्लीशन के लिए आसपास की फ़ाइलों और व्यापक संदर्भों को समझने की आवश्यकता होती है, जिसमें संभवतः संपूर्ण परियोजनाएं शामिल होती हैं।

डेटा प्रीप्रोसेसिंग के लिए, कंपनी ने कोड इंजन नामक एक आंतरिक परियोजना शुरू की: एक क्रॉस-प्लेटफ़ॉर्म SDK और कंसोल उपयोगिताओं का एक सेट जिसे पूर्ण परियोजना अनुक्रमण की आवश्यकता के बिना सीधे साधारण फ़ाइलों से संदर्भ बनाने के लिए विकसित किया गया है। इस SDK को एक आंतरिक MapReduce क्लस्टर पर तैनात किया गया था और इसका उपयोग उचित समय सीमा में प्रशिक्षण के लिए कई उपयोगी उदाहरण उत्पन्न करने के लिए हजारों सार्वजनिक रिपॉजिटरी को संसाधित करने के लिए किया गया था।

सही एल्गोरिदम खोजने में कुछ परीक्षण और त्रुटि की आवश्यकता थी।

विशिष्ट भाषाओं के लिए ट्यूनिंग

छोटे मॉडल विशिष्ट भाषाओं के लिए विशेषज्ञता से बहुत लाभ उठा सकते हैं। जबकि बेस मॉडल को 80 से अधिक भाषाओं पर प्रशिक्षित किया जाता है, अधिकांश उपयोगकर्ता आमतौर पर केवल एक या दो के साथ काम करते हैं। इसे संबोधित करने के लिए, JetBrains ने कई विशेष मॉडल बनाए:

  • mellum-all: JetBrains IDE में उपलब्ध अधिकांश भाषाओं और बोलियों का समर्थन करता है, लेकिन ऑटोकंप्लीशन गुणवत्ता विशेष मॉडल की तुलना में कम है।
  • mellum-python: पायथन और जुपिटर में विशेषज्ञता।
  • mellum-kotlin: जावा और कोटलिन में विशेषज्ञता।
  • mellum-web: वेब तकनीकों में विशेषज्ञता।

अंतिम चरण: RLAIF

अंत में, उन मामलों को हल किया जाना चाहिए जहां सीखने के लक्ष्य उपयोगकर्ता की अपेक्षाओं से मेल नहीं खाते हैं। एक अतिरिक्त प्रशिक्षण चरण, RLAIF - AI फीडबैक के साथ रीइन्फोर्समेंट लर्निंग, का उपयोग ऐसी समस्याओं को हल करने के लिए किया जाता है।

मॉडल उपयोगकर्ता इंटरैक्शन से सीखता है और बेहतर ढंग से यह समझने के लिए सीखता है कि उपयोगकर्ता की प्राथमिकताओं को कैसे बेहतर ढंग से प्रतिबिंबित किया जाए।

यह दृष्टिकोण न केवल समग्र गुणवत्ता स्कोर में सुधार करता है बल्कि कष्टप्रद पीढ़ी कलाकृतियों की संख्या को भी कम करता है।

मेल्लुम कितना अच्छा है?

मॉडल अपने आकार के लिए असाधारण रूप से अच्छा प्रदर्शन करता है। यहां बताया गया है कि इसका मूल्यांकन कैसे किया गया:

  • सबसे पहले, मॉडल का मूल्यांकन ‘JetBrains BigCode’ नामक एक आंतरिक बेंचमार्क पर किया गया था।
  • फिर इसका परीक्षण SAFIM जैसे प्रसिद्ध सार्वजनिक बेंचमार्क पर किया गया।
  • अंत में, सुविधाओं के लिए उपयोग के आंकड़े एकत्र किए गए, और उपयोगकर्ता मेट्रिक्स की गणना की गई।

ऑफ़लाइन मूल्यांकन

डेटा एकत्र करना एक जटिल कार्य है, लेकिन एक अच्छा मीट्रिक बनाना जो तंत्रिका नेटवर्क द्वारा प्रस्तावित नए के साथ मूल सुझाव की तुलना करता है, और भी चुनौतीपूर्ण है। हमने एक छोटा सा अध्ययन किया और अंततः दो प्राथमिक मेट्रिक्स के संयोजन पर बस गए:

ईएम:

  • सटीक मिलान एक बहुत लोकप्रिय विचार है।
  • एक भविष्यवाणी को अच्छा माना जाता है यदि पूरा होने की पहली पंक्ति मूल की पहली पंक्ति से न्यूनतम प्रीप्रोसेसिंग के साथ मेल खाती है।

केके:

  • मीट्रिक का नाम इसके लेखकों के नाम पर रखा गया था।
  • मूल से प्रस्तावित पंक्तियों की संख्या प्रस्तावित पूर्णता में पंक्तियों की संख्या से विभाजित है।

JetBrains BigCode

मॉडल का मूल्यांकन आंतरिक JetBrains BigCode टूल का उपयोग करके प्राप्त बेंचमार्क डेटासेट के विरुद्ध किया गया था।

सार्वजनिक बेंचमार्क पर निर्भर रहने के बजाय हमारे डेटासेट पर पूर्ण नियंत्रण बनाए रखने से, विभिन्न कोडिंग शैलियों और प्रथाओं के लिए मॉडल गुणवत्ता का विश्वसनीय रूप से मूल्यांकन करना संभव हो जाता है।

हमारे JetBrains BigCode मूल्यांकन के परिणाम लोकप्रिय मॉडल के बराबर गुणवत्ता दिखाते हैं, लेकिन मेल्लुम छोटा और अधिक कुशल है।

सिंगल-लाइन सुझावों की गुणवत्ता (ईएम मीट्रिक)

सार्वजनिक बेंचमार्क

मॉडल का मूल्यांकन न केवल आंतरिक डेटासेट पर किया गया बल्कि विभिन्न सार्वजनिक बेंचमार्क पर भी किया गया, जैसे कि बहुभाषी बेंचमार्क SAFIM (सिंटैक्स-जागरूक फिल इन द मिडिल)।

ऑनलाइन मूल्यांकन

मुख्य मीट्रिक को पूर्ण कोड का अनुपात (RoCC) कहा जाता है। इसे कोड ऑटोकंप्लीशन का उपयोग करके लिखे गए कोड वर्णों के अनुपात को संपादक में कोड की कुल मात्रा के रूप में परिभाषित किया गया है।

एक और महत्वपूर्ण मीट्रिक स्वीकृति दर (AR) है, जिसकी गणना दिखाए गए सभी सुझावों की संख्या से विभाजित स्वीकृत सुझावों की संख्या के रूप में की जाती है।

यह एक जटिल यात्रा थी, लेकिन JetBrains विशेषज्ञों ने इसे गरिमा के साथ पूरा किया। अंत में, एक सामान्य और कई विशेष मॉडल प्राप्त किए गए, जो JetBrains AI प्लेटफ़ॉर्म के माध्यम से उपलब्ध हैं। वे अब JetBrains AI सहायक में सफलतापूर्वक काम कर रहे हैं।

आगे क्या है?

  • JetBrains इंजीनियर वर्तमान में वेब डेवलपमेंट भाषाओं के लिए एक मॉडल पर काम कर रहे हैं। यह निकट भविष्य में सार्वजनिक रूप से उपलब्ध हो सकता है।
  • एक साथ मापदंडों की संख्या और डेटा की विविधता दोनों को बढ़ाने की योजना है। कोडिंग में कई अलग-अलग कार्य हैं - मेल्लुम उन्हें भी करने में सक्षम होगा। सेवा प्रदर्शन अभी भी एक प्रमुख मीट्रिक है, इसलिए मॉडल का विस्तार उचित सीमाओं के भीतर होगा।