1 पॉइंट द्वारा GN⁺ 1 일 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • transcribe.cpp एक ggml-आधारित लाइब्रेरी है, जिसे कई आधुनिक स्पीच रिकग्निशन मॉडल्स को Mac·Windows·Linux ऐप्स में आसानी से एम्बेड करने और GPU से एक्सेलरेट करने के लिए बनाया गया है
  • यह 16 ASR फ़ैमिली और 60 से अधिक मॉडल्स को Vulkan·Metal·CUDA·TinyBLAS पर चलाता है और स्ट्रीमिंग व बैच ट्रांसक्रिप्शन दोनों को सपोर्ट करता है
  • सभी मॉडल्स की रेफ़रेंस इम्प्लीमेंटेशन से संख्यात्मक तुलना की गई है और हज़ारों utterances पर WER टेस्ट किया गया है, तथा वेरिफ़िकेशन परिणाम रिपॉज़िटरी और Hugging Face पर सार्वजनिक किए गए हैं
  • यह मौजूदा whisper.cpp की .bin फ़ाइलें चला सकता है और अधिकांश उपयोग मामलों में समान प्रदर्शन के साथ उसका विकल्प बन सकता है; साथ ही Python·JavaScript/TypeScript·Rust·ObjC/Swift के आधिकारिक bindings भी देता है
  • कम-शक्ति वाले RK3566 पर भी यह रीयल-टाइम से तेज़ ट्रांसक्रिप्शन कर सकता है, जिससे आवाज़ को cloud पर भेजे बिना अलग-अलग डिवाइसों पर लोकल ASR डिप्लॉय किया जा सकता है

क्रॉस-प्लेटफ़ॉर्म ASR डिप्लॉयमेंट की सीमाएँ

  • मौजूदा क्रॉस-प्लेटफ़ॉर्म ASR inference विकल्प व्यवहारिक रूप से whisper.cpp और ONNX तक सीमित थे
    • Apple डिवाइसों के लिए MLX जोड़ा जा सकता है, लेकिन तब दो इंजन सपोर्ट करने पड़ते हैं और हर इंजन के लिए मॉडल पोर्ट करने होते हैं
    • ONNX, Handy में मॉडल जल्दी जोड़ने के लिए उपयोगी था, लेकिन CPU-only execution में प्रदर्शन का पूरा लाभ लेना मुश्किल था
  • कई मॉडल्स को सपोर्ट करने वाली कुछ लाइब्रेरीज़ में लेखक, टेस्टिंग स्तर और मेंटेनेंस योजना स्पष्ट नहीं थी
    • यह पता लगाना कठिन था कि क्या उनके पास असली desktop·mobile ऐप्स में इस्तेमाल होने वाले bindings हैं, या वे सिर्फ़ demo code हैं, benchmark है या नहीं, और क्या वे ONNX से तेज़ हैं
  • Handy के क्रॉस-प्लेटफ़ॉर्म voice input डिप्लॉयमेंट अनुभव के आधार पर ऐसा इंजन चाहिए था जो नीचे की शर्तें पूरी करे
    • फ़ाइल डाउनलोड करके तुरंत inference किया जा सके
    • inference quality को रेफ़रेंस इम्प्लीमेंटेशन के बराबर सत्यापित किया जा सके
    • सर्वोच्च प्रदर्शन के लिए GPU पर चलना चाहिए
    • बड़े PyTorch लाइब्रेरी के बिना Handy में आसानी से एम्बेड किया जा सके
    • Mac·Windows·Linux पर काम करना चाहिए
  • ggml को उसकी मज़बूत community और सुविधाजनक डिप्लॉयमेंट मॉडल के कारण इस ज़रूरत को पूरा करने की नींव के रूप में चुना गया

सपोर्टेड मॉडल्स और एक्सेलरेशन तरीके

  • transcribe.cpp का लक्ष्य तेज़ और सटीक inference के साथ व्यापक मॉडल सपोर्ट देना है
    • यह 16 ASR फ़ैमिली और 60 से अधिक मॉडल्स को सपोर्ट करता है और आगे और मॉडल जोड़ने की योजना है
    • यह सार्वजनिक रूप से उपलब्ध अधिकांश नए ट्रांसक्रिप्शन मॉडल्स को सपोर्ट करता है, हालांकि कुछ अभी भी छूटे हुए हैं
    • यह स्ट्रीमिंग ट्रांसक्रिप्शन और बैच ट्रांसक्रिप्शन दोनों प्रदान करता है
  • सभी सपोर्टेड मॉडल्स नीचे दिए गए acceleration backends पर चल सकते हैं
    • Vulkan
    • Metal
    • CUDA
    • TinyBLAS
  • मॉडल-विशिष्ट benchmarks Fedora वातावरण में Ryzen 4750U CPU·Vulkan और M4 Max पर किए गए
  • लोकल inference एप्लिकेशन डिप्लॉयमेंट के लिए Vulkan सपोर्ट को न्यूनतम शर्त माना गया है

रेफ़रेंस इम्प्लीमेंटेशन और सटीकता सत्यापन

  • Hugging Face से मिले .onnx मॉडल्स की inference accuracy पर भरोसा करना कठिन होने के अनुभव के आधार पर, सभी मॉडल्स का रेफ़रेंस इम्प्लीमेंटेशन के साथ संख्यात्मक सत्यापन किया गया
  • संख्यात्मक तुलना के साथ पूरा WER चेक भी चलाया गया ताकि यह सुनिश्चित हो सके कि आउटपुट रेफ़रेंस इम्प्लीमेंटेशन जैसा ही है
    • हर मॉडल के लिए हज़ारों utterances प्रोसेस किए गए
    • परिणाम रेफ़रेंस इम्प्लीमेंटेशन के बहुत क़रीब या समान हैं
  • वेरिफ़िकेशन डेटा transcribe.cpp रिपॉज़िटरी और handy-computer Hugging Face organization के हर मॉडल पेज पर सार्वजनिक है

whisper.cpp संगतता

  • Handy में इस्तेमाल हो रहे whisper.cpp को बदलने के लिए ड्रॉप-इन रिप्लेसमेंट के क़रीब संगतता लागू की गई है
  • Handy के साथ वितरित whisper.cpp की .bin मॉडल फ़ाइलें transcribe.cpp में भी चलाई जा सकती हैं
  • whisper.cpp के कुछ flags और फीचर्स अभी सपोर्ट नहीं किए गए हैं
  • अधिकांश उपयोग मामलों में whisper implementation पर्याप्त रूप से स्थिर है और लगभग समान प्रदर्शन के साथ whisper.cpp का विकल्प बन सकती है

भाषा bindings और मेंटेनेंस

  • यह C/C++ में लिखा गया है और अलग-अलग वातावरणों में लोकल ट्रांसक्रिप्शन डिप्लॉय करने के लिए आधिकारिक रूप से मेंटेन किए गए bindings प्रदान करता है
    • Python
    • JavaScript/TypeScript
    • Rust
    • ObjC/Swift
  • अन्य भाषा bindings के योगदान का स्वागत है, लेकिन योगदानकर्ता को उस binding की मेंटेनेंस की ज़िम्मेदारी भी लेनी होगी
  • Handy की वास्तविक ज़रूरतें लाइब्रेरी डिज़ाइन में शामिल की गई हैं, और Handy मेंटेनेंस के अनुभव के आधार पर transcribe.cpp को भी आगे मेंटेन करने की योजना है
  • अलग-अलग ASR मॉडल्स और वास्तविक उपयोग मामलों को सपोर्ट करते हुए मिले अनुभव को इसमें शामिल किया गया है, लेकिन अभी भी कुछ अनसुलझे केस हैं, इसलिए बाहरी योगदान स्वीकार किए जा रहे हैं
  • मौजूदा संस्करण v0.1.0 है और इसमें अभी कुछ खुरदरे हिस्से बचे हैं, इसलिए issue reports मांगे गए हैं

कम-शक्ति वाले डिवाइसों तक फैलता लोकल ASR

  • लक्ष्य यह है कि डिवाइस पर सीधे ASR चलाना आसान बने, ताकि आवाज़ को cloud services पर भेजने की ज़रूरत कम हो
  • कम प्रदर्शन वाले RK3566 CPU पर भी मॉडल्स को रीयल-टाइम से तेज़ चलाया जा सकता है
  • नए मॉडल्स के साथ रीयल-टाइम से अधिक ट्रांसक्रिप्शन गति कुछ वॉट बिजली पर हासिल की जा सकती है
  • लोकल स्तर पर अधिक inference संभालने के लिए एप्लिकेशन में inference engine को डिप्लॉय और चलाने की प्रक्रिया आसान होनी चाहिए
  • transcribe.cpp अकेले लोकल inference डिप्लॉयमेंट की पूरी समस्या हल नहीं कर सकता, लेकिन इसे लोकल ASR की एंट्री बाधा कम करने की दिशा में एक कदम के रूप में विकसित किया गया है

प्रोजेक्ट को मिला समर्थन

  • Mozilla AI, BiR प्रोग्राम, और Mozilla AI के Davide ने प्रोजेक्ट को उस शुरुआती खोजी चरण से समर्थन दिया जब इसका ठोस प्रोडक्ट रूप भी नहीं था
  • ggml लोकल inference एप्लिकेशन डिप्लॉयमेंट को संभव बनाने वाली मुख्य नींव है
  • Modal ने WER टेस्ट और CUDA वेरिफ़िकेशन के लिए इस्तेमाल होने वाले credits दिए
  • Blacksmith रिलीज़ artifacts की जाँच करने वाली CI/CD प्रक्रिया के एक हिस्से को सपोर्ट करता है
  • Hugging Face ने handy-computer organization को private storage दिया, जिससे मॉडल्स को स्वतंत्र रूप से अपलोड किया जा सका

डेवलपमेंट प्रक्रिया में AI का उपयोग

  • यह मानते हुए कि ggml-आधारित इस स्तर का इंजन कोई व्यक्ति कुछ महीनों में शुरू से लिखना मुश्किल पाएगा, डेवलपमेंट में AI support का उपयोग किया गया
  • प्रोजेक्ट परिचय AI से नहीं लिखा गया; यह सीधे बोले गए या टाइप किए गए वाक्यों से बना है

1 टिप्पणियां

 
GN⁺ 1 일 전
Hacker News की राय
  • यह काफ़ी शानदार लग रहा है। लेकिन मॉडल दस्तावेज़ों में मुझे ऐसा फ़ीचर नहीं मिला जो किसी अज्ञात भाषा के अर्थ की नहीं, बल्कि उसकी ध्वनि को International Phonetic Alphabet (IPA) में ट्रांसक्राइब करे
    जिन अल्पसंख्यक भाषाओं के बोलने वाले 10,000 से भी कम हैं, उनके लिए भाषा-विशिष्ट मॉडल ट्रेन करने के संसाधन शायद हमेशा कम ही रहेंगे। अगर ऐसा मॉडल हो जो भाषा की पहचान किए बिना सिर्फ़ आवाज़ को IPA में बदल दे, तो दुनिया भर की अल्पसंख्यक भाषाओं का अध्ययन करने वाले भाषाविदों के लिए यह बहुत मददगार होगा

    • वास्तविक बोलचाल में बहुत-सी छोड़छाड़ और संक्षेपण होते हैं, इसलिए भाषा जानते हुए भी शब्दों की तुलना में phoneme transcription कहीं ज़्यादा कठिन होती है। https://huggingface.co/spaces/KoelLabs/IPA-Transcription-EN जैसे मॉडल मौजूद हैं, लेकिन उनकी error rate बहुत ऊँची है
    • मेरी पत्नी का परिवार चीन के Dao और Yao समुदायों के एक उपसमूह Iu Mien से है। Mien एक स्वतंत्र भाषा है, लेकिन उसके ज़्यादातर बोलने वाले लगभग निरक्षर हैं और सीखने की सामग्री या कोर्स भी बहुत कम हैं, इसलिए इसे सीखना कठिन है
      लिखित सामग्री भी कम है, इसलिए मैं Project Hail Mary की तरह अपना अनुवाद सिस्टम बनाना चाहता हूँ
    • इस फ़ीचर को सपोर्ट करने वाले मॉडल मुझे लगभग नहीं पता, इसलिए फ़िलहाल यह लाइब्रेरी के दायरे से बाहर है, लेकिन अगर कोई उपयुक्त मॉडल मिला तो मैं इसे सपोर्ट करने के लिए तैयार हूँ
    • कुछ automatic phoneme recognition (APR) मॉडल हैं, लेकिन उनका प्रदर्शन बस ठीक-ठाक स्तर का है
    • ऐसे मॉडल के उपयोगी होने के लिए शायद उसे यह जानना होगा कि वह किस speech range को सुनने वाला है। IPA जिन ध्वनियों को व्यक्त कर सकता है उनकी संख्या बहुत बड़ी है, लेकिन हर भाषा उनमें से केवल कुछ का ही उपयोग करती है
      अंग्रेज़ी में dark l और light l (ball/light), तथा aspirated p (pin/spin) जैसी ध्वनियाँ दूसरी भाषाओं में अर्थ अलग कर सकती हैं, लेकिन अंग्रेज़ी में नहीं। सोच रहा हूँ क्या भाषाविद पहले जितना संभव हो उतनी सटीक IPA transcription लेना चाहते हैं और फिर उसे मैन्युअली normalize करते हैं
  • रिलीज़ के लिए बधाई। मैं Mac और फ़ोन पर Handy का अच्छा उपयोग कर रहा हूँ, और यह खास तौर पर तब उपयोगी है जब Apple का डिफ़ॉल्ट speech recognition किसी विशेष क्षेत्र की शब्दावली को ग़लत सुन लेता है
    सोच रहा हूँ कि क्या maintenance cost के लिए किसी foundation से समर्थन मिल सकता है। अगर ऐसे प्रोजेक्ट के लिए मेहनताना मिल सकता हो, तो किन संगठनों से और किस तरह समर्थन माँगा जाए, यह भी जानना चाहूँगा

    • Handy लोकप्रिय होने के साथ मैं अनजाने में open source maintainer बन गया, और सौभाग्य से व्यक्तिगत दान तथा कई sponsors इस काम को support कर रहे हैं
      मैं open source में योगदान का काम जारी रखना चाहता हूँ, इसलिए जो भी इसे समर्थन देता हो उसका स्वागत है, खासकर वे संगठन जो open source पर भरोसा करते हैं और उसे आगे बढ़ाते हैं। विस्तार से बात contact@handy.computer पर हो सकती है
    • iOS की operating system default dictation में, iCloud का उपयोग न करने पर भी, हर request पर contacts Apple को upload करने पड़ते हैं, इसलिए मुझे इसे बंद रखना पड़ता है
  • कई speech-to-text सिस्टम बोलचाल को सही पहचान लेते हैं, लेकिन वे मनचाहा workflow support नहीं करते। दस्तावेज़ खोलकर बोलने पर टेक्स्ट न्यूनतम latency के साथ लगातार कर्सर की जगह पर दर्ज होना चाहिए
    रिकॉर्डिंग रोकने के बाद सब कुछ एक साथ paste कर देना उपयोगी नहीं है; असली बात continuous input है

    • मेरे लिए तो उल्टा, रिकॉर्डिंग खत्म होने के बाद एक साथ transcription मिलना ज़्यादा उपयुक्त रहा। real-time input देखते रहने पर transcription errors जाँचते-जाँचते सोच की कड़ी अंत तक नहीं पहुँच पाती
      किसी एक विषय पर दिमाग़ में जो है वह 5–10 मिनट तक बोल देने और बाद में उसकी समीक्षा करने से विचारों का प्रवाह कम टूटता है, इसलिए यह ज़्यादा उपयोगी लगता है
    • अगर चाहें तो Handy को अपेक्षाकृत आसानी से modify करके यह लागू किया जा सकता है। इसे ऐप के official feature के रूप में जोड़ने की भी योजना है, लेकिन पहले कई और चीज़ें सुलझानी हैं
    • अंग्रेज़ी के कई शब्द आसपास के context के बिना तय नहीं किए जा सकते। उदाहरण के लिए there और their को केवल उच्चारण से अलग नहीं किया जा सकता
    • transcription की उपयोगिता इस पर निर्भर करती है कि आप उसका उपयोग कैसे करते हैं। अगर dictation के दौरान आप दूसरी window खोलें या graphs और data देखें, तो बोलचाल को सहारा देने वाली जानकारी देना आसान हो जाता है
      कुछ apps आप जो copy कर रहे हैं या देख रहे हैं, उसे भी transcription context के रूप में इस्तेमाल करके परिणाम बेहतर बनाते हैं: https://superwhisper.com/docs/common-issues/context#types-of...
    • https://github.com/electronstudio/low_latency_dictation में मैंने यह तरीका आज़माया, लेकिन real-time models की accuracy कम थी। इसलिए टेक्स्ट को final करने से पहले मैं एक ज़्यादा accurate model से दूसरी processing करता हूँ
  • क्या Whisper.cpp की तरह context input देकर accuracy काफ़ी बढ़ाई जा सकती है?

    • हाँ, हो सकता है
  • maintainer द्वारा support की जाने वाली चार language bindings में Python वाला https://github.com/handy-computer/transcribe.cpp/tree/main/b... पर है
    अभी dependencies सहित PyPI binary wheel उपलब्ध नहीं है, और फ़िलहाल PyPI library अलग से इंस्टॉल की गई library को ctypes से call करती है, लेकिन आगे इसे रिलीज़ करने की योजना दिखती है

    • CUDA package के लिए अतिरिक्त storage space माँगने वाला PR मैंने PyPI पर भेजा है, लेकिन लगता है अभी approve नहीं हुआ। bindings के developer experience (DX) को बेहतर बनाने में मदद मिलना अच्छा होगा
  • यह ठीक सही समय पर मिला। मैं prompt tools में text-to-speech (TTS) शामिल करने की बात अक्सर सुन रहा था और इसे ख़ुद आज़माना चाहता था
    दिमाग़ में आने वाले विचारों को लंबा बोलकर दस्तावेज़ बनाना, फिर उसे edit करना और AI को भेजना—यह चक्रीय workflow काफ़ी आकर्षक लगता है

  • यह community के लिए बहुत बड़ा योगदान है, और यह जानकर हैरानी हुई कि इसे अकेले बनाया गया। लगा था कि अंत में शायद Series A investment announcement भी आ जाएगा
    AI से कम-गुणवत्ता वाले नतीजे तेज़ी से निकाले जा सकते हैं, लेकिन यह भी दिखता है कि महत्वाकांक्षा बढ़ाकर पहले से अधिक सख़्त और लंबे समय तक टिकने वाली चीज़ें बनाई जा सकती हैं। मेरा मानना है कि Transcribe.cpp को सीधे ऐप में डालने के बजाय ऐसी क्षमता operating system या Handy जैसे app के ज़रिए हर जगह उपलब्ध होनी चाहिए

    • हाँ, मैं ही लेखक और maintainer हूँ, और sponsors तथा Handy community के दान से बहुत मदद मिली। खासकर Mozilla AI ने शुरुआती काम को support किया, जिससे Handy के लिए एक धुंधले सपने को वास्तविक प्रोजेक्ट में बदलने और v0.1.0 रिलीज़ करने का समय मिल सका
      किसी दिन मैं libtranscribe को ठीक से distribute करके इसे system library जैसा बनाना चाहता हूँ। इसे स्थिर होने में समय लगेगा, लेकिन मुझे लगता है यह संभव है
  • मौजूदा transcribe-rs की तुलना में यह कहीं बेहतर काम करता है। ऑफलाइन voice input app को भी नई library पर अपडेट किया, तो speed में काफ़ी सुधार हुआ: https://github.com/notune/android_transcribe_app

  • आगे कई कारणों से local inference बढ़ेगा, और ज़्यादा apps इसे इस्तेमाल कर सकें इसके लिए इसे चलाना और deploy करना आसान होना चाहिए — यह आकलन सही है
    यह बात भी project पर भरोसा बढ़ाती है और इसे अपनाना आसान बनाती है कि लेख का कोई भी शब्द AI ने नहीं लिखा, बल्कि सीधे मुंह या उंगलियों से आया है

    • हम जिन tools का उपयोग करते हैं वे सोच को आकार देते हैं, इसलिए इस दावे से सहमत होना मुश्किल है। speech recognition LLM भी आखिरकार LLM ही है, और training process में मौजूद अपेक्षाओं के अनुसार errors बनते हैं और स्क्रीन पर दिखने वाले शब्दों पर भी असर पड़ता है
      इसे बार-बार इस्तेमाल करने पर आदमी सीख जाता है कि किस तरह के शब्द-संयोजन ठीक-ठीक transcribe होते हैं, और यह सोचने की प्रक्रिया का हिस्सा बन जाता है। समय के साथ LLM और सोच आपस में उलझ जाते हैं, इसलिए इस तरह का AI उपयोग भी अंतिम वाक्य को वास्तव में बदल सकता है
  • local में transcription API server चलाने की कोशिश करते समय मुझे भी ऐसी ही समस्या हुई। सबसे बड़ी कमी streaming support और recognition के समय priority बढ़ाने वाले special words के support की थी, इसलिए यहाँ streaming होना अच्छा लगा

    • whisper.cpp आने के बाद से मैं इसे 3090 Ti server पर खुद चला रहा हूँ। इससे तेज़ और बेहतर विकल्प आ भी जाए, तब भी यह बिना समस्या के चलता रहता है, weights छोटे हैं, और ज़रूरत से काफ़ी ज़्यादा तेज़ है
      नीचे की तरह local home server पर इसे चला दें तो आसानी से local transcription API बनाया जा सकता है। inference parameters थोड़ा tune करने पड़ते हैं, लेकिन एक बार तय हो जाएँ तो बहुत बढ़िया काम करता है

      MODEL="/home/user/projects/ggml-org/whisper.cpp/models/ggml-large-v3-turbo.bin"
      WHISPER_SERVER_BIN="/home/user/projects/ggml-org/whisper.cpp/build/bin/whisper-server"
      "$WHISPER_SERVER_BIN" --model "$MODEL" --language en --host 127.0.0.1 --port 7812

    • word weighting adjustment का support शायद काफ़ी बाद में आए, लेकिन streaming पहले से उपलब्ध है
      उम्मीद है कोई codebase में server का अच्छा example contribute करे और issues सुलझाने में भी मदद करे, या transcribe.cpp अथवा bindings के ज़रिए दूसरी languages में एक मज़बूत server बना दे। तैयार होने पर इसे main project में सीधे जोड़ने की भी इच्छा है