गाइड
आपका ट्रांसक्रिप्शन एक ही वाक्यांश बार-बार क्यों दोहराता है
यह आपकी रिकॉर्डिंग की गड़बड़ नहीं है, और न ही कोई टूटा हुआ डाउनलोड। जब कोई नहीं बोल रहा होता तब Whisper यही करता है — और इसे रोकने के कुछ ख़ास तरीक़े हैं।
आप कोई लंबी रिकॉर्डिंग ट्रांसक्राइब करते हैं, ट्रांसक्रिप्ट खोलते हैं, और बीच में कहीं वह ऐसा हो जाता है:
[ Silence ]
[ Silence ]
[ Silence ]
[ Silence ]
या उससे भी बुरा, वह फ़ाइल में पहले आए किसी असली वाक्य को उठा लेता है और उसे चालीस बार, भरोसेमंद दिखते टाइमस्टैंप के साथ दोहराता है, मानो किसी ने वाकई एक मिनट तक हर सेकंड "देखने के लिए धन्यवाद" कहा हो।
स्वचालित ट्रांसक्रिप्शन को लेकर यही इकलौती सबसे आम शिकायत है, और OpenAI के Whisper पर बना लगभग हर टूल इसका कोई न कोई रूप दिखाता है। इसकी वजह समझना सार्थक है, क्योंकि इसका हल "बड़ा मॉडल ख़रीद लीजिए" नहीं है।
असल में हो क्या रहा है #
Whisper एक भाषा मॉडल है। वह "शब्द सुनकर उन्हें लिख" नहीं देता — वह ऑडियो और अब तक जो लिख चुका है, उसे देखते हुए टेक्स्ट के सबसे संभावित अगले टुकड़े का पूर्वानुमान लगाता है।
यही ढाँचा इस गड़बड़ी की व्याख्या करता है। जब ऑडियो में बोली होती है, तो सबसे संभावित अगला टेक्स्ट वही शब्द होते हैं जो बोले जा रहे हैं। जब ऑडियो में कोई बोली नहीं होती — कोई ठहराव, कमरे की ध्वनि, होल्ड म्यूज़िक, तालियाँ, व्याख्याता का व्हाइटबोर्ड तक चलकर जाना — तब भी मॉडल को कुछ न कुछ बनाना ही होता है। "यहाँ कुछ नहीं हुआ" के लिए कोई टोकन नहीं है।
इसलिए वह उसी पर लौटता है जो भाषा मॉडल संकेत के अभाव में करते हैं: वह ख़ुद को दोहराता है। उसने अभी-अभी एक वाक्य लिखा है, उस वाक्य का सांख्यिकीय रूप से सबसे संभावित अगला हिस्सा एक मिलता-जुलता वाक्य है, और ऑडियो में उस अनुमान को काटने वाला कुछ न होने पर वह लूप में घूमने लगता है। Whisper ऑडियो को 30 सेकंड की विंडो में प्रोसेस करता है, इसलिए एक बार कोई विंडो लूप में फँस जाए तो पूरी विंडो भर वही पंक्ति मिलती है, फिर अगली विंडो नए सिरे से शुरू होती है और अक्सर वही दोहराती है।
यही वजह है कि यह समस्या बहुत ख़ास पैटर्न में सामने आती है:
- लंबी रिकॉर्डिंग, क्योंकि उनमें ज़्यादा ख़ामोशी होती है।
- फ़ाइलों का बीच और अंत, जब दिलचस्प हिस्सा ख़त्म हो चुका होता है पर रिकॉर्डर अब भी चल रहा होता है।
- संगीत और तालियाँ, जो घना ऑडियो हैं जिनमें कोई शब्द नहीं होते।
- धीमे वक्ता और शोर भरे कमरे वाली रिकॉर्डिंग, जहाँ मॉडल दोनों को अलग नहीं कर पाता।
माइक्रोफ़ोन के पास लिया गया पाँच मिनट का साक्षात्कार लगभग कभी ऐसा नहीं करता। दो घंटे की वह मीटिंग जहाँ सबके चले जाने के बाद रिकॉर्डर बीस मिनट और चलता रहा, लगभग हमेशा करती है।
"[ Silence ]" और "[BLANK_AUDIO]" उसी बात का एक अलग लक्षण क्यों हैं #
Whisper के प्रशिक्षण डेटा में ऐसे ट्रांसक्रिप्ट शामिल थे जिनमें कोष्ठक वाली टिप्पणियाँ थीं — [ Silence ], [BLANK_AUDIO], (music), ♪♪♪। इसलिए जब उसे कोई ग़ैर-बोली मिलती है, तो उसके संभावित आउटपुट में से एक यही चिह्न होते हैं, बार-बार।
यह उसका ज़्यादा सौम्य रूप है: कम से कम ट्रांसक्रिप्ट इस बारे में ईमानदार है कि वहाँ कुछ था ही नहीं। फिर भी यह आपके दस्तावेज़ को सैकड़ों बेकार पंक्तियों से भर देता है, और इसका अब भी मतलब है कि टूल ख़ामोशी को डिकोड करने में असली समय ख़र्च कर रहा है।
इसे ठीक करने के चार तरीक़े #
मोटे तौर पर इस क्रम में कि वे कितना अच्छा काम करते हैं।
1. वॉइस एक्टिविटी डिटेक्शन (असली हल) #
वॉइस एक्टिविटी डिटेक्शन — VAD — एक छोटा, अलग मॉडल है जो ट्रांसक्रिप्शन से पहले चलता है और चिह्नित करता है कि ऑडियो के कौन-से हिस्सों में मानवीय बोली है। फिर ट्रांसक्राइबर को सिर्फ़ वही हिस्से दिए जाते हैं।
यह समस्या को उसकी जड़ पर हल करता है, क्योंकि लूप तभी होता है जब Whisper को ऐसा ऑडियो थमाया जाए जिसमें बोली न हो। अगर ख़ामोशी मॉडल तक पहुँचे ही नहीं, तो उस पर मतिभ्रम करने को कुछ बचता ही नहीं। इससे लंबी फ़ाइलें तेज़ भी हो जाती हैं, क्योंकि अब आप बीस मिनट के ख़ाली कमरे को डिकोड करने की क़ीमत नहीं चुका रहे।
व्यापक रूप से इस्तेमाल होने वाला मॉडल Silero VAD है, और whisper.cpp के हाल के संस्करण इसे सीधे समर्थित करते हैं। अगर आपका ऐप VAD या "ख़ामोशी छोड़ें" विकल्प देता है, तो उसे चालू कीजिए। अगर नहीं देता, तो डेवलपर से इसकी माँग करना वाजिब बात है।
2. ख़ामोशी ख़ुद काट दीजिए #
अगर आपके टूल में VAD का विकल्प नहीं है, तो आप हाथ से इसका मोटा रूप कर सकते हैं: ट्रांसक्राइब करने से पहले रिकॉर्डिंग के शुरू और अंत को छाँट दीजिए, ताकि सामान समेटने के बीस मिनट का शोर प्रोसेस ही न हो।
कोई भी ऑडियो एडिटर यह कर देगा। यह उबाऊ है, और फ़ाइल के बीच की ख़ामोशी के लिए कुछ नहीं करता, पर "अंत में रिकॉर्डर देर तक चलता रहा" वाले बहुत आम मामले के लिए इसमें तीस सेकंड लगते हैं और सबसे बुरा हिस्सा हट जाता है।
3. बाद में चिह्न फ़िल्टर कर दीजिए #
अगर आपका ट्रांसक्रिप्ट [ Silence ] और ♪♪♪ से भरा है, तो उन्हें फ़ाइंड-एंड-रिप्लेस से हटाना आसान है, क्योंकि वे पहचानने योग्य आकार वाली पूरी पंक्तियाँ हैं।
एक बात का ध्यान रखिए: सिर्फ़ वही पंक्तियाँ हटाइए जो पूरी तरह कोई चिह्न हों। "और फिर — (हँसते हुए) — हमने उसे रिलीज़ कर दिया" जैसी पंक्ति असली बोली है और आप उसे रखना चाहेंगे। एक अच्छे ऐप को आपके लिए ठीक यही नियम लागू करना चाहिए।
4. फ़ाइल बाँट दीजिए #
चूँकि लूप Whisper की विंडो तक सीमित रहता है, लंबी रिकॉर्डिंग को छोटे टुकड़ों में काटने से नुकसान सीमित हो जाता है — एक ख़राब विंडो दोहराव की दीवार में घुलने के बजाय एक मिनट बिगाड़ती है। कुछ ऐप यह भीतर ही भीतर करते हैं।
यह हल नहीं, जुगाड़ है। यह असर का दायरा घटाता है; यह मॉडल को ख़ामोशी पर मतिभ्रम करने से नहीं रोकता।
जो इसे ठीक नहीं करता #
बड़ा मॉडल। Base से Large पर जाने में आपका बहुत सारा समय और डिस्क ख़र्च होता है और लूप नहीं हटता, क्योंकि वजह क्षमता की कमी नहीं है — वजह यह है कि उससे ऐसी चीज़ ट्रांसक्राइब करने को कहा जा रहा है जिसमें बोली है ही नहीं। बड़े मॉडल भी लूप करते हैं। (आकार की अदला-बदली पर और जानकारी।)
कोई क्लाउड सेवा। अच्छे क्लाउड टूल अपनी पाइपलाइन में VAD और पोस्ट-प्रोसेसिंग चलाते हैं, इसीलिए वे इससे कम टकराते हैं। नीचे का तंत्र वही है, और उनमें से बहुत सारे किसी शांत फ़ाइल पर अब भी पचास बार "धन्यवाद" बना देते हैं। प्रति मिनट भुगतान करने से आपको कोई अलग डिकोडर नहीं मिल जाता।
उसे दोबारा चलाना। Whisper की सैंपलिंग पूरी तरह निर्धारित नहीं है, इसलिए दूसरी कोशिश किसी और जगह लूप कर सकती है। यह हल नहीं, सिक्का उछालना है।
हम इस बारे में क्या करते हैं #
ठोस बात कहते हैं, क्योंकि यहाँ अस्पष्ट जवाब बेकार होगा।
Offline Transcription ट्रांसक्राइब करने से पहले Silero VAD चलाता है, इसलिए ख़ामोश और ग़ैर-बोली वाले हिस्से डिकोडर तक पहुँचते ही नहीं। इसके ऊपर, [ Silence ] जैसे पूरे-सेगमेंट वाले चिह्न और अकेले संगीत ग्लिफ़ नतीजे से फ़िल्टर कर दिए जाते हैं, जबकि वे पंक्तियाँ रखी जाती हैं जिनमें कोष्ठक वाली कोई टिप्पणी महज़ शामिल हो, क्योंकि वे असली बोली हैं।
लंबी फ़ाइलों के लिए यह विंडो में भी ट्रांसक्राइब करता है और हर विंडो को ऑडियो के सबसे शांत बिंदु पर काटता है, ताकि सीमा किसी वाक्य के बीच से नहीं बल्कि वाक्यों के बीच पड़े।
ईमानदार चेतावनी: इससे दोहराए गए वाक्यांश की समस्या बहुत विरल हो जाती है, असंभव नहीं। Whisper पर बना कोई भी टूल, हमारा भी, पूर्वानुमान लगाता भाषा मॉडल है, और जो मॉडल पूर्वानुमान लगाता है वह ग़लत हो सकता है। अगर आप ऐसी चीज़ ट्रांसक्राइब कर रहे हैं जहाँ सटीकता मायने रखती है, तो जिन हिस्सों पर आप भरोसा करने वाले हैं उन्हें ऑडियो से मिलाकर पढ़िए — हमारी साक्षात्कार मार्गदर्शिका ऐसा करने का एक तेज़ तरीक़ा बताती है।
संक्षेप में #
लूप उस ऑडियो के लिए Whisper का टेक्स्ट पूर्वानुमान है जिसमें कोई बोली नहीं है। वॉइस एक्टिविटी डिटेक्शन वजह को ही हटा देता है, क्योंकि वह उसे वह ऑडियो दिखाता ही नहीं। अगर आपके टूल में VAD नहीं है तो ख़ामोशी काटना और चिह्न फ़िल्टर करना मदद करता है। बड़ा मॉडल बिल्कुल मदद नहीं करता।
Offline Transcription पाएं
ऑडियो और वीडियो को पूरी तरह अपने Mac पर ही ट्रांसक्राइब करें। कुछ भी अपलोड नहीं होता, कोई अकाउंट नहीं, और प्रति मिनट का कोई मीटर नहीं।