લોકલ AI મ્યુઝિક જનરેશન સર્જનાત્મકતામાંથી મર્યાદાઓ દૂર કરે છે. ACE-Step 1.5 જેવા સાધનો સંપૂર્ણપણે Mac પર ચાલી શકે છે, જે ટેક્સ્ટ પ્રોમ્પ્ટ્સને મિનિટોમાં સંપૂર્ણ ગીતોમાં ફેરવી દે છે, જેમાં કોઈ ક્લાઉડ ક્રેડિટ્સ કે અપલોડ ક્યુ (queues) ની જરૂર પડતી નથી. આ સ્વતંત્રતા એક નવી સમસ્યા પેદા કરે છે: જથ્થો (volume). જ્યારે જનરેશન સસ્તું અને ત્વરિત હોય છે, ત્યારે તમે ગીત બનાવી શકો છો કે નહીં તે પૂછવાનું બંધ કરી દો છો અને તમારા ડ્રાઇવ પર રહેલા પચાસ વર્ઝનમાંથી કયું રાખવા યોગ્ય છે તે વિચારવા લાગો છો.

મેં આ અનુભવ દ્વારા શીખ્યું છે. સરેરાશ દિવસે, એક યોગ્ય ગીત શોધવા માટે મારે ACE-Step 1.5 ના લગભગ ચાર ટેક (takes) લેવા પડે છે. પરંતુ સરેરાશ હંમેશા સાચી હોતી નથી. તાજેતરમાં એક સત્રમાં, મેં એક જ એરેન્જમેન્ટ મેળવવા માટે બત્રીસ ટેક જનરેટ કર્યા હતા. બત્રીસ બે-મિનિટના ગીતો સાંભળવા એટલે એક કલાકથી વધુ સમયનું ક્રિટિકલ લિસનિંગ. સાતમા ટ્રેક સુધીમાં, મારા કાન અસ્પષ્ટ સ્વરો (smeared vowels) ને પણ માફ કરવા લાગ્યા હતા. પંદરમા ટ્રેક સુધીમાં, હું શબ્દો ચૂકી જતાં પણ મેલોડી સાથે માથું હલાવી રહ્યો હતો. લિસનર ફેટિગ (Listener fatigue) એ આળસ નથી; તે સંવેદનાત્મક ચોકસાઈમાં (perceptual accuracy) આવતો વાસ્તવિક ઘટાડો છે. મારે એવા ફિલ્ટરની જરૂર હતી જે મારા કાન કામ કરે તે પહેલાં ચાલી શકે.

તેથી મેં mlx-whisper ની આસપાસ એક લોકલ QA પાઇપલાઇન બનાવી, જે OpenAI ના સ્પીચ-રેકગ્નિશન મોડેલનું Apple Silicon-ઓપ્ટિમાઇઝ્ડ પોર્ટ છે. વિચાર સરળ હતો: જો હું દરેક ટેકને આપમેળે ટ્રાન્સક્રાઇબ કરી શકું અને તેની મૂળ લિરિક્સ સાથે સરખામણી કરી શકું, તો મારી પાસે એક ઓબ્જેક્ટિવ લિરિક-મેચ રેટ હશે. તે આંકડો બત્રીસ ટેકને ઘટાડીને વ્યવસ્થિત સંખ્યામાં લાવી શકે છે.

પાઇપલાઇન કેવી રીતે કામ કરે છે

વર્કફ્લોના ચાર તબક્કા છે, અને હું દરેકને અનિવાર્ય ગણું છું.

Generate. હું ACE-Step 1.5 સાથે રો (raw) ઓડિયો બનાવું છું. આ તબક્કે હું કંઈપણ નક્કી કરતો નથી. ધ્યેય જથ્થો મેળવવાનો છે.

Transcribe. દરેક WAV ફાઇલ મારા Mac પર mlx-whisper માં જાય છે. કારણ કે MLX એ Apple ના Metal અને ન્યુરલ એન્જિન માટે બનાવવામાં આવ્યું છે, તેથી તે સંપૂર્ણપણે લોકલી ચાલે છે. તેમાં કોઈ API ખર્ચ નથી, નેટવર્ક લેટન્સી નથી, અને રો ઓડિયો રિમોટ સર્વર પર મોકલવા અંગે કોઈ પ્રાઇવસીની ચિંતા નથી. જ્યારે હું કોફી બનાવું છું, ત્યારે બત્રીસ ફાઇલોનું બેચ ટ્રાન્સક્રાઇબ થઈ જાય છે.

Score. હું Whisper ટ્રાન્સક્રિપ્ટની મૂળ લિરિક પ્રોમ્પ્ટ સાથે સરખામણી કરું છું. મેચ રેટ વફાદારી (fidelity) માપે છે: શું ગાયકે દરેક શબ્દ સાચો બોલ્યો, કે પછી લાઇન છોડી દીધી, શબ્દો લથડ્યા, અથવા સિલેબલ્સમાં ભૂલ કરી? હું ટકાવારીમાં ઓવરલેપની ગણતરી કરું છું. આ કોઈ સૌંદર્યલક્ષી નિર્ણય નથી; તે લખાણની ચોકસાઈનું સખત આંકડાકીય માપન છે.

Filter. હું તે મેચ રેટ દ્વારા ટેકને સોર્ટ કરું છું. ટોચના પંચમા ભાગના (top quintile) ટેક મારા ઓડિશન માટે પસંદ થાય છે. બાકીનું બધું સેકન્ડરી ફોલ્ડરમાં જાય છે. મેં ઓછા સ્કોર ધરાવતા ટેક હજુ સુધી ડિલીટ નથી કર્યા, પરંતુ હું તેમના પર સાંભળવાનો કિંમતી સમય બગાડતો નથી.

જ્યુરીને સ્વતંત્ર રાખો

હું એક કડક નિયમનું પાલન કરું છું: જનરેશન મોડેલ ક્યારેય પોતાનું હોમવર્ક સ્કોર કરતું નથી. ACE-Step 1.5 એ ACE-Step 1.5 ના આઉટપુટનું મૂલ્યાંકન કરતું નથી. હું ટ્રાન્સક્રિપ્શન માટે સંપૂર્ણપણે અલગ પ્રક્રિયાનો ઉપયોગ કરું છું કારણ કે જે મોડેલ પોતાની જાતને તપાસે છે તે હંમેશા ખૂબ જ ઉદાર હશે. તે તે જ ખામીઓ (blind spots) ધરાવે છે. જો જનરેટર બહુવચન માર્કર્સ છોડવાનું કે કઠોર વ્યંજનોને નરમ બનાવવાનું વલણ ધરાવતું હોય, તો સેલ્ફ-ઇવેલ્યુએશન લૂપ તે જ ખામીઓને અવગણવાનું શીખી જશે. એક સ્વતંત્ર સ્પીચ-રેકગ્નિશન મોડેલનું સંગીત પ્રત્યે કોઈ વફાદારી હોતી નથી. તે ફક્ત જે સાંભળે છે તે જ રિપોર્ટ કરે છે, ભલે તે રિપોર્ટ ગમે તેટલો કડક હોય.

આંકડાઓએ શું દર્શાવ્યું

બત્રીસ ટેક ના બેચમાં, પાઇપલાઇને ફિલ્ડને એવા આઠ ઉમેદવારો સુધી મર્યાદિત કર્યું જેઓ ગંભીર ધ્યાન આપવા યોગ્ય હતા. આ આઠે સરેરાશ 83.9% લિરિક-મેચ રેટ મેળવ્યો હતો. મેં તેમને યોગ્ય રીતે સાંભળ્યા અને મારા પોતાના ક્વોલિટી રૂબ્રિક સામે સ્કોર કર્યા પછી, તેઓ 100 માંથી સરેરાશ 94.1 લાવ્યા. આ તફાવત આખી વાર્તા કહે છે. મશીન ગેટ દ્વારા સ્પષ્ટ માળખાગત નિષ્ફળતાઓ—લિરિક્સ છૂટી જવા, ટાઇમિંગમાં ખામી, વોકલ આર્ટિફેક્ટ્સ—ને પકડી લેવામાં આવી, જેથી મારું માનવીય સ્કોરિંગ પહેલેથી સાફ કરેલા સેટ પર કામ કરી શકે. ઓટોમેશન એ મારા નિર્ણયનું સ્થાન લીધું નથી, પરંતુ તેને બચાવ્યું છે.

જ્યારે મશીન ભૂલ કરે છે

ઓછો સ્કોર હંમેશા ખરાબ ગીત હોતો નથી. મેં આ વહેલું પકડ્યું જ્યારે એક ટ્રેક જે મને ખૂબ ગમ્યો હતો તેનો સ્કોર કટ-ઓફ કરતા ઘણો ઓછો હતો. લિરિક્સ એક સાદું અક્ષર ગાન (alphabet chant) હતા: અલગ-અલગ અવાજો તરીકે ગાવામાં આવેલા સિંગલ લેટર્સ. Whisper ને કુદરતી વાક્ય રચના પર તાલીમ આપવામાં આવી છે. જો તમે તેને "A B C D" આપો છો, તો તે ઘણીવાર શબ્દોની કલ્પના કરે છે, આર્ટિકલ્સ ઉમેરે છે, અથવા અક્ષરોને અસ્પષ્ટ ફોનેમ્સમાં ફેરવી નાખે છે. ટ્રાન્સક્રિપ્શન નિષ્ફળ ગયું હતું, પરંતુ વોકલ પરફોર્મન્સ ખરેખર સ્પષ્ટ હતું.

તે કિસ્સાએ મને વ્યવહારિક મર્યાદા શીખવી. મેચ રેટ એ પ્રી-ફિલ્ટર છે, અંતિમ ચુકાદો નથી. કોઈપણ ટેક જે ઓછો સ્કોર કરે છે તેને ફેંકી દેતા પહેલા હું દસ સેકન્ડનું માનવીય ઓડિશન આપું છું. આંકડો તમને સંભાવના તરફ નિર્દેશ કરે છે, નિશ્ચિતતા તરફ નહીં. જો તમે સ્કોરને હોકાયંત્ર (compass) ને બદલે હથોડી (gavel) તરીકે ગણશો, તો તમે સારું સંગીત ફેંકી દેશો.

એક ટેકનિકલ અવરોધ

જો તમે Apple Silicon પર MLX ચલાવી રહ્યા હોવ, તો મોટા બેચ (batches) પ્રોસેસ કરતા પહેલા તમારા Python આર્કિટેક્ચરની તપાસ કરી લો. સેટઅપમાં થતી એક સામાન્ય ભૂલ Rosetta emulation દ્વારા Python binary ચલાવવી તે છે. સ્ક્રિપ્ટ હજુ પણ એક્ઝિક્યુટ થશે, પરંતુ તમે તે hardware acceleration ગુમાવશો જે લોકલ ટ્રાન્સક્રિપ્શનને સરળ બનાવે છે.

તમારા ટર્મિનલમાં આ ચલાવો:

python3 -c "import platform; print(platform.machine())"

તમારે arm64 જોવું જોઈએ. જો તે x86_64 પ્રિન્ટ કરે, તો તમારું એન્વાયરમેન્ટ એમ્યુલેટેડ (emulated) છે. નેટિવ Python build અથવા નેટિવ conda environment પર સ્વિચ કરો, અને પછી mlx-whisper ફરીથી ઇન્સ્ટોલ કરો. લાંબા બેચમાં, એમ્યુલેટેડ અને નેટિવ એક્ઝિક્યુશન વચ્ચેનો તફાવત એ લંચ પહેલા કામ પૂરું કરવા અને ડિનર પહેલા કામ પૂરું કરવા વચ્ચેનો તફાવત છે.

સાચું મૂલ્ય

Generative audio માટે ધીરજનું ફળ મળે છે, પરંતુ માનવ ધ્યાન મર્યાદિત છે. તમે સંપૂર્ણ રીતે કામ કરો છો તે સાબિત કરવા માટે માત્ર બત્રીસ મધ્યમ કક્ષાના ટેક (takes) સાંભળવામાં કોઈ ગૌરવ નથી. જનરેટર અને મારા કાન વચ્ચે mlx-whisper નો ઉપયોગ કરીને, મેં મારા કલાત્મક કામ માટેના કલાકો બચાવ્યા છે. કયું ગીત રાખવું અને કયું કાઢી નાખવું તેનો નિર્ણય હજુ પણ હું જ લઉં છું. મશીન ફક્ત એ સુનિશ્ચિત કરે છે કે હું તે નિર્ણય શ્રેષ્ઠ સંભવિત ઉમેદવારો પર લાગુ કરી રહ્યો છું.

આ પાઇપલાઇન પાછળનું સંપૂર્ણ લખાણ અહીં ઉપલબ્ધ છે. જો તમે સમાન લોકલ QA ટૂલ્સ બનાવી રહ્યા હોવ, તો GyaanSetu community એ વિચારોની આપ-લે કરવા માટેનું એક સારું સ્થળ છે.