ലോക്കൽ AI മ്യൂസിക് ജനറേഷൻ സർഗ്ഗാത്മകതയിലെ നിയന്ത്രണങ്ങൾ ഇല്ലാതാക്കുന്നു. ACE-Step 1.5 പോലുള്ള ടൂളുകൾ ഒരു Mac-ൽ പൂർണ്ണമായും പ്രവർത്തിപ്പിക്കാൻ കഴിയും, ഇത് ക്ലൗഡ് ക്രെഡിറ്റുകളോ അപ്ലോഡ് ക്യൂകളോ ഇല്ലാതെ മിനിറ്റുകൾക്കുള്ളിൽ ടെക്സ്റ്റ് പ്രോംപ്റ്റുകളെ പൂർണ്ണമായ പാട്ടുകളാക്കി മാറ്റുന്നു. ഈ സ്വാതന്ത്ര്യം പുതിയൊരു പ്രശ്നത്തിന് കാരണമാകുന്നു: അളവ് (volume). സംഗീതം നിർമ്മിക്കാൻ സാധിക്കുമോ എന്ന് ചോദിക്കുന്നതിന് പകരം, നിങ്ങളുടെ ഡ്രൈവിൽ ഉള്ള അമ്പത് പതിപ്പുകളിൽ ഏതാണ് സൂക്ഷിച്ചു വെക്കേണ്ടത് എന്ന് ചിന്തിച്ചു തുടങ്ങുന്ന അവസ്ഥയാണിത്.
ഞാൻ ഇത് കഠിനമായ അനുഭവത്തിലൂടെയാണ് പഠിച്ചത്. ഒരു സാധാരണ ദിവസം, ഒരു നല്ല പാട്ട് കണ്ടെത്താൻ എനിക്ക് ACE-Step 1.5 ഉപയോഗിച്ച് ഏകദേശം നാല് തവണ ശ്രമിക്കേണ്ടി വരും. എന്നാൽ ശരാശരി കണക്കുകൾ എപ്പോഴും ശരിയാകണമെന്നില്ല. അടുത്തിടെ നടന്ന ഒരു സെഷനിൽ, ഒരു പ്രത്യേക അറേഞ്ച്മെന്റിന് വേണ്ടി ഞാൻ മുപ്പത്തിരണ്ട് തവണ ശ്രമിച്ചു. മുപ്പത്തിരണ്ട് രണ്ട് മിനിറ്റ് പാട്ടുകൾ കേൾക്കുക എന്നത് ഒരു മണിക്കൂറിലധികം നീളുന്ന കഠിനമായ പ്രക്രിയയാണ്. ഏഴാമത്തെ പാട്ടിലെത്തിയപ്പോഴേക്കും, പാട്ടിലെ ചില ശബ്ദവ്യത്യാസങ്ങൾ എന്റെ ചെവികൾ അവഗണിക്കാൻ തുടങ്ങിയിരുന്നു. പതിനഞ്ചാമത്തെ പാട്ടിലെത്തിയപ്പോൾ, പാട്ടിലെ വാക്കുകൾ വിട്ടുപോയിട്ടും ഞാൻ ഈണത്തിനൊപ്പം തലയാട്ടിക്കൊണ്ടിരുന്നു. കേൾവിയിലെ തളർച്ച (Listener fatigue) എന്നത് മടിയല്ല; അത് തിരിച്ചറിയാനുള്ള കഴിവിന്റെ യഥാർത്ഥ തകർച്ചയാണ്. എന്റെ ചെവികൾ പ്രവർത്തിക്കുന്നതിന് മുമ്പ് പ്രവർത്തിക്കാൻ കഴിയുന്ന ഒരു ഫിൽട്ടർ എനിക്ക് ആവശ്യമായിരുന്നു.
അതുകൊണ്ട് ഞാൻ OpenAI-യുടെ സ്പീച്ച്-റെക്കഗ്നിഷൻ മോഡലിന്റെ Apple Silicon-ഒപ്റ്റിമൈസ്ഡ് പതിപ്പായ mlx-whisper-നെ അടിസ്ഥാനമാക്കി ഒരു ലോക്കൽ QA പൈപ്പ്ലൈൻ നിർമ്മിച്ചു. ഇതിന്റെ ആശയം ലളിതമായിരുന്നു: ഓരോ ടേക്കും ഓട്ടോമാറ്റിക്കായി ട്രാൻസ്ക്രിബ് ചെയ്യാനും അവയെ യഥാർത്ഥ വരികളുമായി താരതമ്യം ചെയ്യാനും കഴിഞ്ഞാൽ, എനിക്ക് വരികളുടെ കൃത്യത അളക്കുന്ന ഒരു 'ലിറിക്-മാച്ച് റേറ്റ്' (lyric-match rate) ലഭിക്കും. ആ നമ്പർ ഉപയോഗിച്ച് മുപ്പത്തിരണ്ട് ടേക്കുകളെ എളുപ്പത്തിൽ കൈകാര്യം ചെയ്യാവുന്ന കുറഞ്ഞ എണ്ണത്തിലേക്ക് ചുരുക്കാൻ എനിക്ക് സാധിക്കും.
പൈപ്പ്ലൈൻ എങ്ങനെ പ്രവർത്തിക്കുന്നു
ഈ പ്രവർത്തനരീതിക്ക് നാല് ഘട്ടങ്ങളുണ്ട്, ഞാൻ ഓരോന്നും നിർബന്ധമായും പാലിക്കുന്നു.
Generate (നിർമ്മിക്കുക). ഞാൻ ACE-Step 1.5 ഉപയോഗിച്ച് റോ ഓഡിയോ നിർമ്മിക്കുന്നു. ഈ ഘട്ടത്തിൽ ഞാൻ ഒന്നും വിലയിരുത്തുന്നില്ല. ലക്ഷ്യം കൂടുതൽ പാട്ടുകൾ നിർമ്മിക്കുക എന്നത് മാത്രമാണ്.
Transcribe (ലിഖിതമാക്കുക). ഓരോ WAV ഫയലും എന്റെ Mac-ലെ mlx-whisper-ലേക്ക് നൽകുന്നു. MLX എന്നത് Apple-ന്റെ Metal-നും ന്യൂറൽ എഞ്ചിനും വേണ്ടി നിർമ്മിച്ചതായതുകൊണ്ട്, ഇത് പൂർണ്ണമായും ലോക്കലായി പ്രവർത്തിക്കുന്നു. ഇതിന് API ചിലവുകളോ, നെറ്റ്വർക്ക് ലേറ്റൻസിയോ, റോ ഓഡിയോ ഒരു റിമോട്ട് സെർവറിലേക്ക് അയക്കുന്നതിനെക്കുറിച്ചുള്ള സ്വകാര്യതാ ആശങ്കകളോ ഇല്ല. ഞാൻ ഒരു കോഫി ഉണ്ടാക്കുന്ന സമയത്തിനുള്ളിൽ തന്നെ മുപ്പത്തിരണ്ട് ഫയലുകളുടെ ഒരു ബാച്ച് ട്രാൻസ്ക്രിബ് ചെയ്യപ്പെടും.
Score (സ്കോർ ചെയ്യുക). ഞാൻ Whisper ട്രാൻസ്ക്രിപ്റ്റിനെ യഥാർത്ഥ വരികളുമായി താരതമ്യം ചെയ്യുന്നു. ഈ മാച്ച് റേറ്റ് കൃത്യത അളക്കുന്നു: ഗായകൻ എല്ലാ വാക്കുകളും കൃത്യമായി പാടിയോ, അതോ വരികൾ വിട്ടുപോയോ, വാക്കുകൾ അവ്യക്തമായോ, അല്ലെങ്കിൽ അക്ഷരങ്ങൾ തെറ്റായ രീതിയിൽ വന്നോ? ഞാൻ ഇതിന്റെ ശതമാനം കണക്കാക്കുന്നു. ഇതൊരു സൗന്ദര്യശാസ്ത്രപരമായ വിലയിരുത്തലല്ല; മറിച്ച് വരികളുടെ കൃത്യതയുടെ കർശനമായ കണക്കെടുപ്പാണ്.
Filter (തിരഞ്ഞെടുക്കുക). ആ മാച്ച് റേറ്റ് അനുസരിച്ച് ഞാൻ ടേക്കുകളെ തരംതിരിക്കുന്നു. ഏറ്റവും മികച്ച അഞ്ചിലൊന്ന് ഭാഗം (top quintile) എന്റെ ഓഡിഷൻ പൂളായി മാറുന്നു. ബാക്കിയുള്ളവയെ ഒരു സെക്കൻഡറി ഫോൾഡറിലേക്ക് മാറ്റുന്നു. കുറഞ്ഞ സ്കോർ ലഭിച്ചവ ഞാൻ ഇതുവരെ ഡിലീറ്റ് ചെയ്തിട്ടില്ല, പക്ഷേ അവ കേൾക്കാൻ ഞാൻ എന്റെ വിലപ്പെട്ട സമയം പാഴാക്കുന്നില്ല.
ജൂറിയെ സ്വതന്ത്രമായി നിലനിർത്തുക
ഞാൻ ഒരു കർശനമായ നിയമം പാലിക്കുന്നു: ജനറേഷൻ മോഡൽ ഒരിക്കലും അതിന്റെ സ്വന്തം വർക്ക് സ്കോർ ചെയ്യാറില്ല. ACE-Step 1.5 അതിന്റെ തന്നെ ഔട്ട്പുട്ട് വിലയിരുത്തുന്നില്ല. ട്രാൻസ്ക്രിപ്ഷനായി ഞാൻ തികച്ചും വേറൊരു പ്രക്രിയയാണ് ഉപയോഗിക്കുന്നത്, കാരണം സ്വയം പരിശോധിക്കുന്ന ഒരു മോഡൽ എപ്പോഴും വളരെ അനുകൂലമായ രീതിയിൽ മാത്രമേ വിലയിരുത്തുകയുള്ളൂ. അതിനും അതേ പോരായ്മകൾ ഉണ്ടാകാം. ഉദാഹരണത്തിന്, ഒരു ജനറേറ്റർ പദങ്ങളുടെ ബഹുവചനം വിട്ടുപോവാനോ കഠിനമായ വ്യഞ്ജനാക്ഷരങ്ങൾ മൃദുവാക്കാനോ ശ്രമിക്കുന്നുണ്ടെങ്കിൽ, സ്വയം വിലയിരുത്തുന്ന ഒരു ലൂപ്പ് ആ തെറ്റുകളെ അവഗണിക്കാൻ പഠിക്കും. എന്നാൽ ഒരു സ്വതന്ത്ര സ്പീച്ച്-റെക്കഗ്നിഷൻ മോഡലിന് സംഗീതത്തോട് യാതൊരു അടുപ്പവുമില്ല. അത് കേൾക്കുന്ന കാര്യങ്ങൾ എത്ര കഠിനമാണെങ്കിലും കൃത്യമായി റിപ്പോർട്ട് ചെയ്യുന്നു.
കണക്കുകൾ വെളിപ്പെടുത്തിയത് എന്താണ്
മുപ്പത്തിരണ്ട് ടേക്കുകളുടെ ബാച്ചിൽ, പൈപ്പ്ലൈൻ എട്ട് മികച്ച ഓപ്ഷനുകളിലേക്ക് കാര്യങ്ങൾ ചുരുക്കി. ആ എണ്ണത്തിന്റെ ശരാശരി ലിറിക്-മാച്ച് റേറ്റ് 83.9% ആയിരുന്നു. അവ ഞാൻ കൃത്യമായി കേൾക്കുകയും എന്റെ ഗുണനിലവാര മാനദണ്ഡങ്ങൾ അനുസരിച്ച് വിലയിരുത്തുകയും ചെയ്തപ്പോൾ, അവയ്ക്ക് 100-ൽ ശരാശരി 94.1 സ്കോർ ലഭിച്ചു. ഈ വ്യത്യാസം കാര്യങ്ങൾ വ്യക്തമാക്കുന്നു. വരികൾ വിട്ടുപോവുക, താളം തെറ്റുക, ശബ്ദത്തിലെ വൈകല്യങ്ങൾ എന്നിവ പോലുള്ള വ്യക്തമായ ഘടനാപരമായ പരാജയങ്ങളെ മെഷീൻ ഗേറ്റ് കണ്ടെത്തി, അതിനാൽ എന്റെ മാനുഷികമായ വിലയിരുത്തൽ കൂടുതൽ ശുദ്ധമായ ഒരു സെറ്റിൽ ചെയ്യാൻ സാധിച്ചു. ഓട്ടോമേഷൻ എന്റെ വിവേചനബുദ്ധിയെ മാറ്റിസ്ഥാപിച്ചില്ല, മറിച്ച് അതിനെ സംരക്ഷിക്കുകയാണ് ചെയ്തത്.
മെഷീൻ പിഴവ് വരുത്തുമ്പോൾ
കുറഞ്ഞ സ്കോർ എന്നാൽ എല്ലായ്പ്പോഴും മോശം പാട്ട് എന്നല്ല അർത്ഥം. എനിക്ക് ഇഷ്ടപ്പെട്ട ഒരു പാട്ടിന് നിശ്ചിത പരിധിയിൽ താഴെ സ്കോർ ലഭിച്ചപ്പോൾ ഞാൻ ഇത് നേരത്തെ തന്നെ മനസ്സിലാക്കി. ആ പാട്ടിന്റെ വരികൾ ലളിതമായ അക്ഷരങ്ങൾ പാടുന്നതായിരുന്നു: ഓരോ അക്ഷരവും ഒറ്റപ്പെട്ട ശബ്ദങ്ങളായി പാടി. Whisper പരിശീലനം ലഭിച്ചിരിക്കുന്നത് സ്വാഭാവികമായ വാചക ഘടനയിലാണ്. അതിന് "A B C D" എന്ന് നൽകിയാൽ അത് പലപ്പോഴും വാക്കുകൾ സൃഷ്ടിക്കുകയോ, ആർട്ടിക്കിളുകൾ ചേർക്കുകയോ, അല്ലെങ്കിൽ അക്ഷരങ്ങളെ അവ്യക്തമായ ശബ്ദങ്ങളാക്കി മാറ്റുകയോ ചെയ്തേക്കാം. അവിടെ ട്രാൻസ്ക്രിപ്ഷൻ പരാജയപ്പെട്ടു, പക്ഷേ വോക്കൽ പെർഫോമൻസ് വളരെ മികച്ചതായിരുന്നു.
ആ സംഭവം എനിക്ക് പ്രായോഗികമായ പരിമിതികൾ പഠിപ്പിച്ചു തന്നു. മാച്ച് റേറ്റ് എന്നത് ഒരു പ്രീ-ഫിൽട്ടർ മാത്രമാണ്, അല്ലാതെ അന്തിമ വിധി (final verdict) അല്ല. കുറഞ്ഞ സ്കോർ ലഭിക്കുന്ന ഏതൊരു ടേക്കും ഡിലീറ്റ് ചെയ്യുന്നതിന് മുമ്പ് ഞാൻ പത്തു സെക്കൻഡ് കേട്ടു നോക്കാറുണ്ട്. ആ നമ്പർ ഒരു സാധ്യതയെയാണ് സൂചിപ്പിക്കുന്നത്, അല്ലാതെ ഉറപ്പിനെയല്ല. സ്കോറിനെ ഒരു കോമ്പസ് എന്നതിലുപരി ഒരു വിധി പ്രസ്താവനയായി (gavel) കാണുകയാണെങ്കിൽ, നിങ്ങൾ നല്ല സംഗീതം ഉപേക്ഷിച്ചു കളയും.
ഒരു സാങ്കേതിക തടസ്സം
Apple Silicon-ൽ MLX ഉപയോഗിക്കുന്നുണ്ടെങ്കിൽ, വലിയ ബാച്ചുകൾ പ്രോസസ്സ് ചെയ്യുന്നതിന് മുമ്പ് നിങ്ങളുടെ Python architecture പരിശോധിക്കുക. Rosetta emulation വഴി Python binary പ്രവർത്തിപ്പിക്കുന്നത് സാധാരണയായി സംഭവിക്കാറുള്ള ഒരു തെറ്റാണ്. സ്ക്രിപ്റ്റ് പ്രവർത്തിക്കും, പക്ഷേ ലോക്കൽ ട്രാൻസ്ക്രിപ്ഷൻ എളുപ്പമാക്കുന്ന ഹാർഡ്വെയർ ആക്സിലറേഷൻ നിങ്ങൾക്ക് ലഭിക്കില്ല.
ഇത് നിങ്ങളുടെ ടെർമിനലിൽ പ്രവർത്തിപ്പിക്കുക:
python3 -c "import platform; print(platform.machine())"
നിങ്ങൾക്ക് arm64 എന്ന് കാണണം. x86_64 എന്നാണ് കാണിക്കുന്നതെങ്കിൽ, നിങ്ങളുടെ എൻവയോൺമെന്റ് emulated ആണ്. ഒരു native Python build-ലേക്കോ അല്ലെങ്കിൽ ഒരു native conda environment-ലേക്കോ മാറുകയും, തുടർന്ന് mlx-whisper വീണ്ടും ഇൻസ്റ്റാൾ ചെയ്യുകയും ചെയ്യുക. വലിയ ബാച്ചുകൾ കൈകാര്യം ചെയ്യുമ്പോൾ, emulated execution-ഉം native execution-ഉം തമ്മിലുള്ള വ്യത്യാസം ഉച്ചഭക്ഷണത്തിന് മുമ്പ് ജോലി തീർക്കണോ അതോ അത്താഴത്തിന് മുമ്പ് തീർക്കണോ എന്നതിനെ ആശ്രയിച്ചിരിക്കും.
യഥാർത്ഥ മൂല്യം
Generative audio സ്ഥിരതയുള്ളവർക്ക് മികച്ച ഫലം നൽകുന്നു, എന്നാൽ മനുഷ്യന്റെ ശ്രദ്ധ പരിമിതമാണ്. നിങ്ങൾ കൃത്യതയുള്ളവരാണെന്ന് തെളിയിക്കാൻ മുപ്പത്തിരണ്ട് ഇടത്തരം നിലവാരമുള്ള ടേക്കുകൾ കേട്ടിരിക്കേണ്ട ആവശ്യമില്ല. ജനറേറ്ററിനും എന്റെ കാതിനും ഇടയിൽ mlx-whisper ഉപയോഗിക്കുന്നതിലൂടെ, എനിക്ക് മണിക്കൂറുകളോളം ശ്രദ്ധ കേന്ദ്രീകരിക്കാൻ കഴിയുന്ന ക്രിയേറ്റീവ് സമയം തിരിച്ചുപിടിക്കാനായി. ഏത് പാട്ട് നിലനിർത്തണം, ഏത് ഒഴിവാക്കണം എന്ന് ഞാൻ തന്നെയാണ് തീരുമാനിക്കുന്നത്. മികച്ച പാട്ടുകൾ തിരഞ്ഞെടുക്കാൻ സഹായിക്കുക എന്നത് മാത്രമാണ് ഈ മെഷീൻ ചെയ്യുന്നത്.
ഈ പൈപ്പ്ലൈനിനെക്കുറിച്ചുള്ള പൂർണ്ണമായ വിവരങ്ങൾ ഇവിടെ ലഭ്യമാണ്. നിങ്ങൾ സമാനമായ ലോക്കൽ QA ടൂളുകൾ നിർമ്മിക്കുകയാണെങ്കിൽ, വിവരങ്ങൾ പങ്കുവെക്കാൻ GyaanSetu community ഒരു നല്ല ഇടമാണ്.
