StarCoder2-15B-Instruct-მა HumanEval-ზე 72.6 ქულა აიღო, რითაც CodeLlama-70B-Instruct-ის 72.0 ქულასაც კი გადააჭარბა! LiveCodeBench-ზე ჩატარებულმა შემდგომმა შეფასებამ აჩვენა, რომ თვით-მორგებული მოდელი უკეთესია, ვიდრე იგივე მოდელი, რომელიც GPT-4-დან გამოხდილი მონაცემებით იყო გაწვრთნილი. ეს იმაზე მიუთითებს, რომ დიდ ენა-მოდელს (LLM) უფრო ეფექტურად შეუძლია ისწავლოს საკუთარი მონაცემთა განაწილებიდან, ვიდრე „მასწავლებელი“ LLM-ის შეცვლილი განაწილებიდან. ჩვენი მონაცემთა გენერირების კონვეიერი ძირითადად სამი ნაბიჯისგან შედგება: მომდევნო სექციებში, თითოეულ ამ ასპექტს დეტალურად განვიხილავთ. კოდის მოდელის ინსტრუქციების შესრულების შესაძლებლობების სრულად გამოსავლენად, ის უნდა იყოს წარმოდგენილი მრავალფეროვანი ინსტრუქციების ნაკრებზე, რომელიც მოიცავს პროგრამირების ფართო სპექტრის პრინციპებსა და პრაქტიკებს. OSS-Instruct-ის მოტივაციით, ჩვენ კიდევ უფრო გავზარდეთ ეს მრავალფეროვნება ღია კოდის ფრაგმენტებიდან კოდის კონცეფციების მოპოვებით, კონკრეტულად კი The Stack V1-დან კარგად ჩამოყალიბებული საწყისი (seed) Python ფუნქციებიდან. ჩვენი საწყისი მონაცემთა ნაკრებისთვის, ჩვენ ფრთხილად ამოვიღეთ The Stack V1-დან ყველა Python ფუნქცია docstring-ებით, გამოვავლინეთ საჭირო დამოკიდებულებები autoimport-ის გამოყენებით და ყველა ფუნქციაზე შემდეგი გაფილტვრის წესები გამოვიყენეთ: ამ გაფილტვრის კონვეიერის შედეგად მივიღეთ 250 ათასი Python ფუნქციის მონაცემთა ნაკრები, რომელიც 5 მილიონი docstring-ის მქონე ფუნქციიდან გაიფილტრა. ეს პროცესი დიდად არის შთაგონებული MultiPL-T-ში გამოყენებული მონაცემთა შეგროვების კონვეიერით. საწყისი ფუნქციების შეგროვების შემდეგ, ჩვენ გამოვიყენეთ Self-OSS-Instruct მრავალფეროვანი ინსტრუქციების გენერირებისთვის. უფრო კონკრეტულად, ჩვენ გამოვიყენეთ in-context learning, რათა საბაზისო StarCoder2-15B-ს თავად გენერირებინა ინსტრუქციები მოცემული საწყისი კოდის ფრაგმენტებიდან. ეს პროცესი იყენებს 16 გულდასმით შექმნილ few-shot მაგალითს, რომელთაგან თითოეული ფორმატირებულია როგორც (ფრაგმენტი, კონცეფციები, ინსტრუქცია). ინსტრუქციის გენერირების პროცედურა ორ ეტაპად იყოფა: საბოლოოდ, ამ პროცესიდან 238 ათასი ინსტრუქცია გენერირდა. Self-OSS-Instruct-დან გენერირებული ინსტრუქციების გათვალისწინებით, ჩვენი შემდეგი ნაბიჯი იყო თითოეული ინსტრუქციისთვის მაღალი ხარისხის პასუხის მოძიება. წინა პრაქტიკები, როგორც წესი, ეყრდნობა პასუხების „გამოხდას“ უფრო ძლიერი „მასწავლებელი“ მოდელებიდან, როგორიცაა GPT-4, რომლებსაც იმედია უფრო მაღალი ხარისხი აქვთ. თუმცა, საკუთრებითი მოდელების „გამოხდა“ იწვევს არალეგალურ ლიცენზირებას და უფრო ძლიერი „მასწავლებელი“ მოდელი ყოველთვის არ არის ხელმისაწვდომი. რაც მთავარია, „მასწავლებელი“ მოდელებიც შეიძლება ცდებოდნენ, ხოლო მასწავლებელსა და მოსწავლეს შორის განაწილების სხვაობამ შეიძლება ზიანი მიაყენოს. ჩვენ ვთავაზობთ StarCoder2-15B-ის თვით-მორგებას მოდელისთვის მკაფიო ინსტრუქციების მიცემით, რათა მან ბუნებრივ ენასთან ერთად პასუხის წარმოების შემდეგ თვით-ვალიდაციისთვის ტესტები გენერირება. ეს პროცესი მსგავსია იმისა, თუ როგორ ამოწმებენ დეველოპერები თავიანთ კოდის იმპლემენტაციებს. კერძოდ, ყოველი ინსტრუქციისთვის, StarCoder2-15B აგენერირებს 10 ნიმუშს (ბუნებრივი ენის პასუხი, ტესტი) ფორმატში და ჩვენ ვფილტრავთ იმ ნიმუშებს, რომლებიც ტესტის შესრულებისას sandbox გარემოში ყალბდება. შემდეგ შემთხვევით ვირჩევთ თითოეული ინსტრუქციისთვის ერთ წარმატებულ პასუხს საბოლოო SFT (Supervised Fine-Tuning) მონაცემთა ნაკრებისთვის. სულ, ჩვენ შევქმენით 2.4 მილიონი (10 x 238k) პასუხი 238 ათასი ინსტრუქციისთვის 0.7 ტემპერატურით, საიდანაც 500 ათასმა გაიარა შესრულების ტესტი. დედუპლიკაციის შემდეგ, დარჩა 50 ათასი ინსტრუქცია, თითოეული დაწყვილებული შემთხვევით წარმატებულ პასუხთან, რომელსაც საბოლოოდ ვიყენებთ ჩვენს SFT მონაცემთა ნაკრებად. პოპულარულ და მკაცრ EvalPlus ბენჩმარკზე, StarCoder2-15B-Instruct გამოირჩევა, როგორც საუკეთესო მოქმედი „ნებართვითი“ (permissive) LLM თავის მასშტაბში, აჭარბებს ბევრად უფრო დიდ Grok-1 Command-R+, DBRX-ს, ამასთანავე თითქმის უთანაბრდება Snowflake Arctic 480B-სა და Mixtral-8x22B-Instruct-ს. ჩვენი ცოდნით, StarCoder2-15B-Instruct არის პირველი კოდის LLM სრულიად გამჭვირვალე და ნებართვითი კონვეიერით, რომელმაც 70+-ზე მეტი HumanEval ქულა დააგროვა. ის მნიშვნელოვნად აჭარბებს OctoCoder-ს, რომელიც წინა თაობის ყველაზე მოწინავე ნებართვითი კოდის LLM იყო გამჭვირვალე კონვეიერით. მკაცრი ლიცენზიის მქონე მძლავრ LLM-ებთან შედარებისასაც კი, StarCoder2-15B-Instruct კონკურენტუნარიანი რჩება, აჭარბებს Gemini Pro-სა და Mistral Large-ს და შედარებულია CodeLlama-70B-Instruct-თან. გარდა ამისა, StarCoder2-15B-Instruct, რომელიც წმინდად თვით-გენერირებულ მონაცემებზეა გაწვრთნილი, ახლო კონკურენციას უწევს OpenCodeInterpreter-SC2-15B-ს, რომელიც StarCoder2-15B-ს GPT-3.5/4-დან გამოხდილი მონაცემებით აფინეტუნებს. EvalPlus-ის გარდა, ჩვენ ასევე შევაფასეთ თანამედროვე ღია კოდის მოდელები მსგავსი ან მცირე ზომის LiveCodeBench-ზე, რომელიც მოიცავს 2023-09-01 წლის შემდეგ შექმნილ ახალ კოდირების პრობლემებს, ასევე DS-1000-ს, რომელიც მიმართულია მონაცემთა მეცნიერების პროგრამებზე. LiveCodeBench-ზე StarCoder2-15B-Instruct აღწევს საუკეთესო შედეგებს შეფასებულ მოდელებს შორის და მუდმივად აჭარბებს OpenCodeInterpreter-SC2-15B-ს, რომელიც GPT-4 მონაცემებს „ხდის“. DS-1000-ზე StarCoder2-15B-Instruct კვლავ კონკურენტუნარიანია, მიუხედავად იმისა, რომ იგი ძალიან შეზღუდულ მონაცემთა მეცნიერების პრობლემებზეა გაწვრთნილი. StarCoder2-15B-Instruct-v0.1 პირველად აჩვენებს, რომ ჩვენ შეგვიძლია შევქმნათ მძლავრი ინსტრუქციებზე მორგებული კოდის მოდელები GPT-4-ის მსგავს ძლიერ „მასწავლებელი“ მოდელებზე დამოკიდებულების გარეშე. ეს მოდელი ადასტურებს, რომ თვით-მორგება (self-alignment), სადაც მოდელი საკუთარ გენერირებულ შიგთავსს იყენებს სასწავლად, ასევე ეფექტურია კოდისთვის. ის სრულად გამჭვირვალეა და იძლევა „გამოხდის“ საშუალებას, რითაც გამოირჩევა სხვა უფრო დიდი, ნებართვითი, მაგრამ არაგამჭვირვალე მოდელებისგან.