Sztuczna inteligencja odgrywa coraz większą rolę w generowaniu kodu, a modele językowe o dużej skali (LLM) stają się integralną częścią inżynierii oprogramowania. Dzięki nim możliwe jest m.in. automatyczne tworzenie kodu, debugowanie oraz optymalizacja, a wszystko to na podstawie analizy ogromnych baz kodu. Mimo to, rozwój modeli skupionych na kodzie napotyka liczne wyzwania. Trening takich modeli wymaga wysokiej jakości danych, które są zgodne z instrukcjami użytkowników. Zdobycie takich danych zwykle wiąże się z czasochłonną pracą ludzką lub wykorzystaniem większych, zastrzeżonych modeli, co podnosi koszty i rodzi problemy z dostępnością danych oraz licencjonowaniem. W miarę wzrostu zapotrzebowania na transparentne i skalowalne metody treningu modeli, konieczne staje się poszukiwanie innowacyjnych rozwiązań, które omijają te bariery, jednocześnie nie obniżając wydajności.

Problemy związane z tradycyjnymi metodami

Distylacja wiedzy z modeli własnościowych może prowadzić do naruszeń licencyjnych, co ogranicza ich wykorzystanie w projektach open-source. Ponadto, dane pozyskiwane i kuratorowane przez ludzi, choć cenne, są kosztowne i trudne do skalowania. Niektóre metody open-source, takie jak OctoCoder i OSS-Instruct, próbowały przezwyciężyć te ograniczenia, lecz często brakuje im odpowiednich wyników wydajnościowych oraz transparentności. Te wyzwania jasno pokazują, że potrzebne jest rozwiązanie, które zapewni wysoką wydajność, jednocześnie respektując wartości open-source i transparentność.

Nowe podejście: SelfCodeAlign

Naukowcy z Uniwersytetu Illinois w Urbana-Champaign, Northeastern University, Uniwersytetu Kalifornijskiego w Berkeley, ServiceNow Research, Hugging Face, Roblox oraz Cursor AI opracowali nowe podejście o nazwie SelfCodeAlign. Ta metoda pozwala modelom LLM trenować się samodzielnie, generując wysokiej jakości pary instrukcja-odpowiedź bez interwencji człowieka lub wykorzystania danych z modeli własnościowych. W odróżnieniu od innych modeli, które polegają na adnotacjach ludzkich lub transferze wiedzy z większych modeli, SelfCodeAlign autonomicznie generuje instrukcje, wyciągając różnorodne koncepcje kodowania z danych początkowych. Następnie model tworzy unikalne zadania i generuje wiele odpowiedzi, które są później weryfikowane za pomocą automatycznych testów w kontrolowanym środowisku sandbox. Tylko odpowiedzi, które przejdą testy, są wykorzystywane do dalszego doskonalenia modelu, co zapewnia wysoką dokładność i różnorodność danych.

Proces działania SelfCodeAlign

Metodologia SelfCodeAlign zaczyna się od wyodrębnienia fragmentów kodu z dużych zbiorów danych, skupiając się na ich jakości oraz różnorodności. Początkowy zbiór danych, „The Stack V1”, został przefiltrowany w celu wybrania 250 000 wysokiej jakości funkcji w Pythonie z początkowych 5 milionów. Model analizuje te fragmenty kodu, rozkładając je na podstawowe koncepcje programistyczne, takie jak konwersje typów danych czy dopasowywanie wzorców. Na tej bazie generuje zadania i odpowiedzi, przypisując im poziomy trudności oraz kategorie, by zapewnić różnorodność. Ten wieloetapowy proces gwarantuje wysoką jakość danych i minimalizuje uprzedzenia, co sprawia, że model jest elastyczny i może sprostać różnym wyzwaniom programistycznym.

Wyniki testów SelfCodeAlign

Skuteczność SelfCodeAlign została przetestowana na modelu CodeQwen1.5-7B. W porównaniu z innymi modelami, takimi jak CodeLlama-70B, SelfCodeAlign przewyższył wiele z nich, osiągając wynik pass@1 na poziomie 67,1% w teście HumanEval+ – co jest wynikiem o 16,5 punktu wyższym niż w przypadku bazowego modelu CodeQwen1.5-7B-OctoPack. Model sprawdził się między innymi w zadaniach generowania funkcji i klas, programowania w obszarze nauk o danych oraz edytowania kodu. To pokazuje, że SelfCodeAlign znacząco poprawia wydajność w różnych zadaniach i przy różnych rozmiarach modeli – od 3 miliardów do 33 miliardów parametrów.

W zadaniach generowania na poziomie klas, SelfCodeAlign osiągnął pass@1 na poziomie 27% dla całych klas i 52,6% dla metod, przewyższając wiele zastrzeżonych modeli dostosowanych do instrukcji. Wyniki te pokazują, że SelfCodeAlign ma potencjał do tworzenia mniejszych, ale wydajnych modeli, co dodatkowo zwiększa ich dostępność.

Wydajność i efektywność

Pod względem efektywności, na benchmarku EvalPerf, który ocenia wydajność kodu, model uzyskał wynik DPS (Differential Performance Score) na poziomie 79,9%. Oznacza to, że rozwiązania stworzone przez SelfCodeAlign były wydajniejsze lub porównywalne z 79,9% innych rozwiązań w testach dotyczących różnych poziomów efektywności. Ponadto, SelfCodeAlign uzyskał pass@1 na poziomie 39% w zadaniach edytowania kodu, doskonale radząc sobie z poprawkami, adaptacjami i ulepszeniami kodu. Taka spójna wydajność na różnych benchmarkach podkreśla skuteczność podejścia opartego na samodzielnie generowanych danych.

Kluczowe zalety SelfCodeAlign

Najważniejsze wnioski płynące z sukcesu SelfCodeAlign są przełomowe dla rozwoju modeli LLM skoncentrowanych na kodzie:

1. Transparentność i dostępność: SelfCodeAlign to w pełni open-source’owe podejście, które nie wymaga danych z modeli własnościowych, co czyni go idealnym dla badaczy skupionych na etycznej sztucznej inteligencji i możliwości replikacji wyników.

2. Efektywność: Dzięki wynikowi DPS na poziomie 79,9% w testach efektywności, SelfCodeAlign pokazuje, że mniejsze modele trenowane niezależnie mogą osiągać imponujące rezultaty, porównywalne do dużo większych modeli własnościowych.

3. Wszechstronność: Model doskonale radzi sobie z różnymi zadaniami programistycznymi, takimi jak synteza kodu, debugowanie i programowanie naukowe, co potwierdza jego przydatność w wielu dziedzinach inżynierii oprogramowania.

4. Korzyści kosztowe i licencyjne: SelfCodeAlign eliminuje konieczność korzystania z kosztownych danych adnotowanych przez ludzi lub distylacji z modeli LLM, co czyni go bardziej skalowalnym i ekonomicznym.

5. Adaptowalność: Procesy zastosowane w SelfCodeAlign mogą być łatwo dostosowane do innych dziedzin technicznych, co otwiera drogę do przyszłych badań i innowacji.

Podsumowanie

SelfCodeAlign stanowi innowacyjne rozwiązanie dla wyzwań związanych z trenowaniem modeli LLM do generowania kodu. Eliminując potrzebę adnotacji ludzkich i zależności od modeli własnościowych, SelfCodeAlign oferuje skalowalną, transparentną i wydajną alternatywę, która może zrewolucjonizować sposób, w jaki tworzone są modele do generowania kodu. Badania pokazują, że autonomiczne dostosowywanie modeli, bez potrzeby distylacji, może przynosić wyniki porównywalne z dużymi, kosztownymi modelami, co stanowi istotny krok naprzód w rozwoju open-source LLM dla kodowania.