GPT-4, Claude തുടങ്ങിയ ഓട്ടോറഗ്രസീവ് (Autoregressive) മോഡലുകൾ ഒരു ഫയലിലൂടെ ഇടത്തുനിന്ന് വലത്തോട്ട് ഓരോ ടോക്കണുകളായി (token-by-token) കോഡ് നിർമ്മിക്കുന്നു. ചെറിയ കോഡ് ഭാഗങ്ങൾ കൈകാര്യം ചെയ്യാൻ ഇവയ്ക്ക് സാധിക്കുമെങ്കിലും, ഒരു വലിയ കോഡ്ബേസിനുള്ളിലെ (codebase) ആഴത്തിലുള്ള ഒരു വരി എഡിറ്റ് ചെയ്യണമെന്നു വരുമ്പോൾ ഇവ പാളിപ്പോകുന്നു. മോഡൽ ഓരോ ഡൗൺസ്ട്രീം ടോക്കണും (downstream token) വീണ്ടും വിലയിരുത്തേണ്ടി വരികയും, ഫയൽ മുഴുവൻ ഒരേപോലെ നിലനിർത്തുക എന്നത് ഒരു വലിയ വെല്ലുവിളിയായി മാറുകയും ചെയ്യുന്നു.
ഡിഫ്യൂഷൻ (Diffusion) മോഡലുകൾ റാൻഡം ടോക്കണുകളുടെ ഒരു കൂട്ടത്തിൽ നിന്ന് തുടങ്ങി, ഒരു വ്യക്തമായ പ്രോഗ്രാം രൂപം പ്രാപിക്കുന്നത് വരെ ഘട്ടം ഘട്ടമായി അതിലെ നോയിസ് (noise) നീക്കം ചെയ്യുന്നു. ഈ പരിഷ്കരണം (refinement) ഒരേസമയം മുഴുവൻ സീക്വൻസിനെയും ബാധിക്കുന്നതിനാൽ, ബാക്കി ഭാഗങ്ങൾ വീണ്ടും കണക്കുകൂട്ടാതെ തന്നെ കോഡിന്റെ ഏത് ഭാഗവും ഇൻസേർട്ട് ചെയ്യാനോ, ഡിലീറ്റ് ചെയ്യാനോ, അല്ലെങ്കിൽ മാറ്റം വരുത്താനോ മോഡലിന് സാധിക്കുന്നു.
നിലവിലെ രീതി സോഫ്റ്റ്വെയർ എഞ്ചിനീയറിംഗിൽ നേരിടുന്ന വെല്ലുവിളികൾ
ഓട്ടോറഗ്രഷൻ കോഡിനെ ഒരു ലീനിയർ സ്ട്രീം (linear stream) ആയി കാണാൻ മോഡലിനെ നിർബന്ധിക്കുന്നു, ഇതിനർത്ഥം:
- തിരിഞ്ഞു മാത്രം നോക്കുന്നു. ഇത് ഭാവിയിലെ ടോക്കണുകൾ കാണുന്നില്ല, അതിനാൽ ഒരു മാറ്റം പിന്നീടുള്ള വരികളെ എങ്ങനെ ബാധിക്കുമെന്ന് മുൻകൂട്ടി കാണാൻ ഇതിന് കഴിയില്ല.
- ഡൗൺസ്ട്രീം ടെക്സ്റ്റ് വീണ്ടും കണക്കുകൂട്ടുന്നു. ഒരു ചെറിയ മാറ്റം പോലും പുതിയ പ്രവചനങ്ങളുടെ ഒരു പരമ്പരയ്ക്ക് കാരണമാകുന്നു, ഇത് റീഫാക്ടറിംഗിനോ (refactoring) ബഗ് ഫിക്സിംഗിനോ (bug fixing) എടുക്കുന്ന സമയം വർദ്ധിപ്പിക്കുന്നു.
- ദീർഘദൂര പിശകുകൾ അടിഞ്ഞുകൂടുന്നു. തുടക്കത്തിലുള്ള ചെറിയ പിശകുകൾ പിന്നീട് വലിയ പ്രശ്നങ്ങളായി മാറുകയും, ഫയൽ സിന്റാക്റ്റിക്കൽ ആയി തെറ്റോ ലോജിക്കൽ ആയി അസ്ഥിരമോ ആകാൻ കാരണമാവുകയും ചെയ്യുന്നു.
നിങ്ങൾക്ക് ഇൻഫിൽ (infill) ചെയ്യേണ്ടി വരുമ്പോൾ—അതായത് ഒരു ഫയലിന്റെ മധ്യത്തിൽ ഒരു ഫങ്ക്ഷൻ ബോഡി ചേർക്കാനോ അല്ലെങ്കിൽ ഒരു API സിഗ്നേച്ചർ അപ്ഡേറ്റ് ചെയ്യാനോ—ഓട്ടോറഗ്രസീവ് മോഡലുകളുടെ ക്രമാനുഗതമായ സ്വഭാവം അസൗകര്യമുണ്ടാക്കുന്നതും തെറ്റുകൾ സംഭവിക്കാൻ സാധ്യതയുള്ളതുമാണ്.
ഡിഫ്യൂഷൻ പകരക്കാരൻ: ഘട്ടം ഘട്ടമായുള്ള പ്രവചനമല്ല, മറിച്ച് ആവർത്തിച്ചുള്ള പരിഷ്കരണം
ഞങ്ങൾ ഒരു കോഡ് ഫയലിനെ ഒരു നോയിസി (noisy) സിഗ്നലായി കണക്കാക്കുന്നു. കോഡ് നിർമ്മാണം പല ഘട്ടങ്ങളിലൂടെയാണ് നടക്കുന്നത്:
- ശുദ്ധമായ നോയിസ് ഉപയോഗിച്ച് ആരംഭിക്കുന്നു. ഒരു പ്രത്യേക പ്ലേസ്ഹോൾഡർ ഉപയോഗിച്ച് സൂചിപ്പിക്കുന്ന റാൻഡം ടോക്കണുകളുടെ ഒരു സീക്വൻസ് ഞങ്ങൾ മോഡലിന് നൽകുന്നു.
- ക്രമാനുഗതമായ ഡെനോയിസിംഗ് (Denoising). ഓരോ ഘട്ടത്തിലും മോഡൽ അല്പം കൂടി വ്യക്തമായ ഒരു പതിപ്പ് പ്രവചിക്കുന്നു, ഇത് ടോക്കണുകളെ ശരിയായ കോഡിലേക്ക് എത്തിക്കുന്നു.
- പൂർണ്ണമായ ഒരു പ്രോഗ്രാമിലേക്ക് എത്തുന്നു. നിശ്ചിത എണ്ണം ഘട്ടങ്ങൾക്ക് ശേഷം നോയിസ് ഇല്ലാതാവുകയും, പൂർണ്ണമായ ഒരു കോഡ് ഭാഗം ലഭിക്കുകയും ചെയ്യുന്നു.
ഓരോ ഘട്ടത്തിലും മുഴുവൻ സീക്വൻസിനെയും പരിശോധിക്കുന്നതിനാൽ, ഏത് ഘട്ടത്തിലും ഏത് ടോക്കണും മാറ്റം വരുത്താൻ മോഡലിന് സാധിക്കും. ഈ ആഗോള കാഴ്ചപ്പാട് (global view) ഉപയോഗിച്ച്, ബാക്കിയുള്ളവ വീണ്ടും നിർമ്മിക്കാതെ തന്നെ ഒരു മിസ്സിംഗ് ഇംപോർട്ട് (import) ചേർക്കാനോ, ഒരു വേരിയബിൾ പേര് മാറ്റാനോ, അല്ലെങ്കിൽ ഒരു ബ്ലോക്ക് റീ-ഇൻഡന്റ് (re-indent) ചെയ്യാനോ സാധിക്കുന്നു.
കോഡ് കേന്ദ്രീകരിച്ചുള്ള ഒരു ഡിഫ്യൂഷൻ മോഡൽ നിർമ്മിക്കുമ്പോൾ
ഇമേജുകളിൽ നിന്നുള്ള ഡിഫ്യൂഷൻ രീതി ടെക്സ്റ്റിലേക്ക് മാറ്റുന്നത് ലളിതമായ ഒരു ജോലിയല്ല. മൂന്ന് സാങ്കേതിക മാറ്റങ്ങൾ ഇവിടെ പ്രധാനമാണ്.
1. ഡിസ്ക്രീറ്റ് ഡിഫ്യൂഷൻ (Discrete diffusion)
ഇമേജ് പിക്സലുകൾക്ക് ഫ്രാക്ഷണൽ നോയിസ് സ്വീകരിക്കാൻ കഴിയും, എന്നാൽ ഒരു കോഡ് ടോക്കൺ കാറ്റഗറിക്കൽ (categorical) ആണ്—അത് ഒരു പ്രത്യേക കീവേഡ്, ഐഡന്റിഫയർ അല്ലെങ്കിൽ ചിഹ്നം ആയിരിക്കും. അതിനാൽ, സീക്വൻസ് പൂർണ്ണമായും റാൻഡം ആകുന്നത് വരെ ടോക്കണുകളെ ഒരു ന്യൂട്രൽ പ്ലേസ്ഹോൾഡർ ([MASK]) ഉപയോഗിച്ച് ആവർത്തിച്ച് മാറ്റുന്ന ഒരു മാർക്കോവ് ചെയിൻ (Markov chain) ഞങ്ങൾ ഉപയോഗിക്കുന്നു. ഇതിന്റെ വിപരീത പ്രക്രിയ ഘട്ടം ഘട്ടമായി യഥാർത്ഥ ടോക്കണുകൾ എങ്ങനെ വീണ്ടെടുക്കാം എന്ന് പഠിക്കുന്നു.
2. സ്ട്രക്ചറൽ അവയർനെസ് (Structural awareness)
പ്രോഗ്രാമിംഗ് ഭാഷകൾ കർശനമായ സിന്റാക്സ് നിയമങ്ങൾ ഏർപ്പെടുത്തുന്നു: പൈത്തണിൽ ഇൻഡന്റേഷൻ (indentation) സ്കോപ്പ് നിർണ്ണയിക്കുന്നു, C-സ്റ്റൈൽ ഭാഷകളിൽ ബ്രേസുകൾ (braces) ബ്ലോക്കുകളെ വേർതിരിക്കുന്നു, കൂടാതെ വേരിയബിളുകൾ ഉപയോഗിക്കുന്നതിന് മുമ്പ് അവ ഡിക്ലയർ ചെയ്യണം. കോഡിനെ വെറും ടെക്സ്റ്റ് ആയി മാത്രം കാണുന്ന ഒരു ഡിഫ്യൂഷൻ മോഡൽ തെറ്റായ ഔട്ട്പുട്ട് നൽകും. ഇത് ഒഴിവാക്കാൻ, ഗവേഷകർ സിന്റാക്സ് അറിവുള്ള അറ്റൻഷൻ മാസ്കുകൾ (syntax-aware attention masks) ചേർക്കുന്നു. ഇത് ടോക്കണുകൾ തമ്മിലുള്ള ബന്ധത്തെ നിയന്ത്രിക്കുകയും, മോഡൽ ഹൈരാർക്കി (hierarchy), നെസ്റ്റിംഗ് (nesting), ഭാഷാപരമായ നിയന്ത്രണങ്ങൾ എന്നിവ പാലിക്കുന്നു എന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്നു.
3. ഹൈരാർക്കിക്കൽ റിഫൈൻമെന്റ് (Hierarchical refinement)
ആദ്യകാല ഡിഫ്യൂഷൻ ഘട്ടങ്ങൾ കോഡിന്റെ ഏകദേശ ഘടന—ഫങ്ക്ഷൻ സിഗ്നേച്ചറുകൾ, ക്ലാസ് ഡെഫനിഷനുകൾ, മോഡ്യൂൾ ഓർഗനൈസേഷൻ എന്നിവ—രൂപപ്പെടുത്തുന്നു. പിന്നീടുള്ള ഘട്ടങ്ങൾ പങ്ചുവേഷൻ, വൈറ്റ്സ്പേസ്, പേരിംഗ് രീതികൾ തുടങ്ങിയ സൂക്ഷ്മമായ കാര്യങ്ങൾ പരിഷ്കരിക്കുന്നു. മനുഷ്യർ ഒരു പ്രോഗ്രാം പൂർണ്ണമായി എഴുതുന്നതിന് മുമ്പ് അതിന്റെ ഔട്ട്ലൈൻ തയ്യാറാക്കുന്ന രീതിയുമാണിതിന് സാമ്യം. ഇത് ഓരോ ഘട്ടത്തിലും ഏറ്റവും പ്രധാനപ്പെട്ട ഭാഗങ്ങളിൽ കമ്പ്യൂട്ട് പവർ ഉപയോഗിക്കാൻ സഹായിക്കുന്നു.
ഓട്ടോറഗ്രസീവ് vs. ഡിഫ്യൂഷൻ: ഒരു താരതമ്യം
| വശം | ഓട്ടോറഗ്രസീവ് | ഡിഫ്യൂഷൻ |
|---|---|---|
| ജനറേഷൻ ഫ്ലോ | ക്രമാനുഗതമായത്, ഇടത്തുനിന്ന് വലത്തോട്ട് | പാരലൽ, ആവർത്തിച്ചുള്ള ഡെനോയിസിംഗ് |
| ആഗോള സ്ഥിരത | നീണ്ട പ്രക്രിയകളിൽ വ്യതിയാനം സംഭവിക്കാൻ സാധ്യതയുണ്ട് | എല്ലാ ടോക്കണുകളിലും സമഗ്രമായ കാഴ്ചപ്പാട് |
| സാധാരണ ഉപയോഗങ്ങൾ | ചാറ്റ്, വിശദീകരണം, ചെറിയ കോഡ് ഭാഗങ്ങൾ | റീഫാക്ടറിംഗ്, ബഗ് ഫിക്സിംഗ്, വലിയ തോതിലുള്ള കോഡ് സിന്തസിസ് |
ഓരോ രീതിയും വ്യത്യസ്ത സാഹചര്യങ്ങളിൽ എങ്ങനെ മികച്ചതാകുന്നു എന്ന് ഈ പട്ടിക കാണിക്കുന്നു. വേഗതയും സംഭാഷണ രീതിയിലുള്ള ഇടപെടലുകളും പ്രധാനമാകുമ്പോൾ ഓട്ടോറഗ്രസീവ് മോഡലുകൾ മികച്ചതാണ്. എന്നാൽ കൂടുതൽ കമ്പ്യൂട്ട് സൈക്കിളുകൾ ഉപയോഗിച്ചാണെങ്കിലും, നിർമ്മിച്ച കോഡ് സിന്റാക്റ്റിക്കൽ ആയി ശരിയും ഘടനാപരമായി വ്യക്തവുമാകണം എന്ന് നിർബന്ധമാണെങ്കിൽ ഡിഫ്യൂഷൻ മോഡലുകളാണ് ഉചിതം.
അടുത്തതായി ശ്രദ്ധിക്കേണ്ടവ
- ഹൈബ്രിഡ് പൈപ്പ്ലൈനുകൾ (Hybrid pipelines). ഭാവിയിലെ സിസ്റ്റങ്ങൾ ഒരു ഓട്ടോറീഗ്രസീവ് മോഡലിനെ (autoregressive model) വേഗത്തിൽ ഒരു ആദ്യ പതിപ്പ് തയ്യാറാക്കാൻ അനുവദിച്ചേക്കാം, തുടർന്ന് അത് മിനുക്കുപണികൾക്കായി (polishing) ഒരു ഡിഫ്യൂഷൻ മോഡലിന് (diffusion model) കൈമാറാം.
- സ്ട്രക്ചറൽ മാസ്കുകൾക്കായുള്ള ടൂളിംഗ് (Tooling for structural masks). ഭാഷാപരമായ നിയന്ത്രണങ്ങൾ (language-specific constraints) പാലിക്കാൻ ഡിഫ്യൂഷൻ മോഡലുകളെ സഹായിക്കുന്നതിനായി സിന്റാക്സ് അറിവുള്ള അറ്റൻഷൻ മാസ്കുകൾ (syntax-aware attention masks) ഗവേഷകർ പരിഷ്കരിച്ചുകൊണ്ടിരിക്കുന്നു.
പ്രധാന പാഠം (Takeaway)
കോഡ് ജനറേഷന്റെ രീതിയെ ഡിഫ്യൂഷൻ മോഡലുകൾ പാടെ മാറ്റുന്നു: ഓരോ ടോക്കണുകളായി മുന്നേറുന്നതിന് പകരം, അവ ആവർത്തിച്ചുള്ള ഡെനോയിസിംഗിലൂടെ (iterative denoising) ഒരു പ്രോഗ്രാമിനെ മുഴുവനായി രൂപപ്പെടുത്തിയെടുക്കുന്നു. വലിയതും മാറ്റം വരുത്താവുന്നതുമായ കോഡ് ബേസുകളിൽ (codebases) ആഗോള സ്ഥിരത (global consistency) നിലനിർത്തുക എന്ന ഓട്ടോറീഗ്രസീവ് സിസ്റ്റങ്ങളുടെ പ്രധാന പോരായ്മയെ ഈ സമീപനം പരിഹരിക്കുന്നു. വേഗത കുറവാണെന്നും കൂടുതൽ കമ്പ്യൂട്ടിംഗ് പവർ ആവശ്യമാണെന്നും തോന്നാമെങ്കിലും, റീഫാക്റ്ററിംഗ് (refactoring), ബഗ് ഫിക്സിംഗ് (bug fixing), വേഗതയേക്കാൾ കൂടുതൽ കൃത്യതയും സിന്റാക്സ് ശരിയായിരിക്കലും പ്രധാനംമാകുന്ന സാഹചര്യങ്ങൾ എന്നിവയ്ക്ക് ഡിഫ്യൂഷൻ മികച്ചൊരു മാർഗ്ഗമാണ്. ഓട്ടോറഗ്രഷന്റെ വേഗത്തിലുള്ള ഡ്രാഫ്റ്റിംഗ് ശേഷിയും ഡിഫ്യൂഷന്റെ സമഗ്രമായ മിനുക്കുപണികൾ നടത്താനുള്ള കഴിവും സംയോജിപ്പിക്കുന്ന ഒരു ഹൈബ്രിഡ് വർക്ക്ഫ്ലോ ആയിരിക്കാം ഭാവിയിലേക്കുള്ള ഏറ്റവും പ്രതീക്ഷാഭരിതമായ പാത.
