Autoregressive giants kama GPT-4 na Claude hutoa kodi token-kwa-token, ikisogea kushoto kwenda kulia kwenye faili. Wanashughulikia vipande vifupi vizuri, lakini wanapata ugumu wakati mwanatengeneza programu (developer) anapotaka kuhariri mstari uliopo ndani kabisa ya mfumo mkubwa wa kodi (codebase). Modeli lazima ipitie upya kila token inayofuata, na kuweka faili nzima ikiwa na msimamo mmoja inakuwa jinamizi.
Mifumo ya diffusion huanza na wingu la token za nasibu na kuondoa kelele (denoise) hatua kwa hatua hadi programu inayoeleweka ionekane. Kwa sababu uboreshaji unagusa mfuatano mzima kwa wakati mmoja, modeli inaweza kuingiza, kufuta, au kuandika upya sehemu yoyote ya kodi bila kuhitaji kuhesabu upya sehemu zinazofuata.
Kwa nini mfumo wa sasa unapata ugumu katika uhandisi wa programu
Autoregression inalazimisha modeli kuchukulia kodi kama mtiririko wa mstari, ikimaanisha kuwa:
- Hutazama nyuma tu. Haioni kamwe token za baadaye, hivyo haiwezi kutabiri jinsi mabadiliko yatakavyoathiri mistari inayofuata.
- Hupiga hesabu upya maandishi yanayofuata. Hariri moja husababisha mfululizo wa utabiri mpya, jambo linaloongeza muda wa kusubiri (latency) wakati wa kufanya refactoring au kurekebisha hitilafu (bug fixing).
- Hukusanya makosa ya mbali. Kutofautiana kwa mapema huongezeka na kuwa makubwa, na kuacha faili ya mwisho ikiwa na hitilafu za kisintaksia au kutokuwa na mantiki thabiti.
Unapohitaji kujaza nafasi (infill)—kama vile kuingiza mwili wa kazi (function body) katikati ya faili au kusasisha saini ya API—asili ya mfuatano ya mifumo ya autoregressive inahisiwa kuwa nzito na yenye uwezekano mkubwa wa makosa.
Mbadala wa diffusion: uboreshaji wa hatua kwa hatua, si utabiri wa hatua kwa hatua
Tunachukulia faili ya kodi kama ishara yenye kelele (noisy signal). Uundaji huendelea katika mizunguko kadhaa:
- Anzisha kwa kelele tupu. Tunaiwezesha modeli kwa mfuatano wa token za nasibu, mara nyingi zikiwakilishwa na sehemu maalum (placeholder).
- Kuondoa kelele kidogo kidogo. Katika kila hatua, modeli inatabiri toleo safi zaidi, ikielekeza token kuelekea kodi inayowezekana.
- Kufikia programu iliyokamilika. Baada ya idadi maalum ya hatua, kelele hutoweka, na kuacha kipande cha kodi kilichoundwa kikamilifu.
Kwa sababu kila hatua inarudia mfuatano mzima, modeli inaweza kurekebisha token yoyote katika hatua yoyote. Mtazamo huu wa jumla unairuhusu kuongeza import iliyokosekana, kubadilisha jina la variable, au kurekebisha mpangilio wa nafasi (re-indent) katika block bila kuzalisha upya kila kitu kinachofuata.
Uhandisi wa modeli ya diffusion inayolenga kodi
Kuhamisha diffusion kutoka kwenye picha kwenda kwenye maandishi si kazi rahisi ya "plug-and-play". Mabadiliko matatu ya kiufundi ni muhimu.
1. Discrete diffusion
Pikseli za picha zinakubali kelele za sehemu (fractional noise), lakini token ya kodi ni ya kategoria—ni neno maalum (keyword), utambulisho (identifier), au alama. Kwa hivyo, tunatumia mnyororo wa Markov (Markov chain) ambao unabadilisha token mara kwa mara kwa kutumia sehemu isiyo na upande (mara nyingi [MASK]) hadi mfuatano huo uwe wa nasibu kabisa. Mchakato wa kinyume unajifunza jinsi ya kurejesha token za asili hatua kwa hatua.
2. Structural awareness
Lugha za programu zinaweka sheria kali za kisintaksia: mpangilio wa nafasi (indentation) huainisha upeo (scope) katika Python, mabano (braces) huainisha block katika lugha za aina ya C, na variable lazima itangazwe kabla ya kutumika. Modeli ya diffusion inayochukulia kodi kama maandishi ya kawaida itatoa matokeo yenye hitilafu za kisintaksia. Ili kuzuia hili, watafiti huongeza "syntax-aware attention masks" ambazo huzuia jinsi token zinavyohusiana, na kulazimisha modeli kuheshimu ngazi (hierarchy), uingizaji (nesting), na vizuizi mahususi vya lugha.
3. Hierarchical refinement
Hatua za awali za diffusion huchora muundo wa jumla—saini za kazi (function signatures), tafsiri za darasa (class definitions), na mpangilio wa moduli. Hatua za baadaye hupiga msasa maelezo madogo kama vile alama za uandishi, nafasi (whitespace), na kanuni za majina. Mkakati huu wa "kutoka jumla hadi undani" unaiga jinsi binadamu wanavyopanga muhtasari wa programu kabla ya kuboresha sehemu za ndani, na huongoza nguvu ya kompyuta (compute) pale inapohitajika zaidi katika kila hatua.
Autoregressive dhidi ya diffusion: ulinganifu wa moja kwa moja
| Kipengele | Autoregressive | Diffusion |
|---|---|---|
| Mtiririko wa uundaji | Wa mfuatano, kushoto kwenda kulia | Sambamba, kuondoa kelele hatua kwa hatua |
| Msimamo wa jumla | Ina uwezekano wa kupoteza mwelekeo katika mfuatano mrefu | Mtazamo wa jumla katika token zote |
| Matumizi ya kawaida | Chat, maelezo, vipande vifupi | Refactoring, kurekebisha hitilafu, uundaji wa kodi wa kiwango kikubwa |
Jedwali hilo linaonyesha kwa nini kila mfumo una faida katika mazingira tofauti. Mifumo ya autoregressive hushinda pale kasi na mwingiliano wa mazungumzo inapokuwa muhimu. Mifumo ya diffusion hushinda pale bidhaa ya mwisho inapopaswa kuwa na kisintaksia sahihi na muundo thabiti, hata kama inatumia nguvu zaidi ya kompyuta (compute cycles).
Nini cha kufuatilia baadaye
- Mifumo mchanganyiko ya njia za kazi. Mifumo ya baadaye inaweza kuruhusu mfano wa autoregressive kuandika rasimu ya kwanza ya haraka, kisha kuikabidhi kwa mfano wa diffusion kwa ajili ya uboreshaji.
- Zana za maski za kimuundo. Watafiti wanaendelea kuboresha maski za uangalifu zinazozingatia sintaksia (syntax-aware attention masks) ili kusaidia mifano ya diffusion kuzingatia vizuizi mahususi vya lugha.
Muhtasari
Mifano ya diffusion inabadilisha mwelekeo wa uundaji wa kodi: badala ya kwenda kizuizi kizuizi (token by token), inachonga programu nzima kupitia upunguzaji wa kelele wa mfululizo (iterative denoising). Mtazamo huu unashughulikia udhaifu mkuu wa mifumo ya autoregressive—kudumisha uthabiti wa jumla katika misingi ya kodi (codebases) kubwa na inayoweza kubadilika. Ingawa ni ya polepole zaidi na inahitaji nguvu kubwa ya kompyuta, diffusion inatoa zana yenye nguvu kwa ajili ya urekebishaji wa kodi (refactoring), utatuzi wa hitilafu (bug fixing), na hali yoyote ambapo matokeo safi na sahihi kisintaksia ni muhimu zaidi kuliko kasi tupu. Njia yenye matumaini zaidi ya kusonga mbele inaonekana kuwa mtiririko mchanganyiko wa kazi unaounganisha uwezo wa kuandika rasimu kwa haraka wa autoregression na uwezo wa uboreshaji wa jumla wa diffusion.
