Skip to content

Think-Aloud मोड

एनोटेटर काम करते-करते बोलते हैं और Potato शब्दशः ट्रांसक्रिप्ट को तर्क के रूप में सहेज लेता है। स्पीच-टू-टेक्स्ट पूरी तरह लोकल faster-whisper से चलता है, इसलिए ऑडियो मशीन से बाहर नहीं जाता और पाइपलाइन में न कोई क्लाउड API है, न कोई LLM।

v2.7.0 में नया

LLM से पहले, किसी के निर्णय को समझने का सबसे भरोसेमंद तरीक़ा थिंक-अलाउड प्रोटोकॉल था, और वह एनोटेशन टूलिंग तक कभी पहुँच ही नहीं पाया। Think-Aloud मोड एनोटेटरों को काम करते-करते बस बोलते रहने देता है।

शब्दशः ट्रांसक्रिप्ट तर्क के रूप में सहेजा जाता है, जान-बूझकर बिना सारांश बनाए, क्योंकि थिंक-अलाउड प्रोटोकॉल को दूसरे शब्दों में ढालना उसी चीज़ को दूषित कर देता है जिसे आप जुटाने निकले थे। लेबल आवाज़ से भी दर्ज किए जा सकते हैं, कुछ तय वाक्यांशों के ज़रिए जिन्हें एक नियम-आधारित पार्सर पहचानता है, और पूरी पाइपलाइन में कहीं कोई LLM नहीं है।

स्पीच-टू-टेक्स्ट पूरी तरह लोकल चलता है, faster-whisper के ज़रिए, जो 39 MB वाले tiny.en मॉडल पर CPU पर ही रीयल-टाइम है। ऑडियो कभी मशीन से बाहर नहीं जाता, न कोई क्लाउड API बुलाना पड़ता है और न प्रति-टोकन बिल भरना पड़ता है।

ध्यान दें: Think-Aloud आपके एनोटेटरों का प्रतिलेखन करता है। अगर आपके पास पहले से ट्रांसक्रिप्ट हैं और आप उन्हें एनोटेट करना चाहते हैं, चाहे वे Whisper से आए हों, किसी क्लाउड ASR API से, या डाउनलोड किए गए कैप्शन से, तो वह अलग सुविधा है: देखें ट्रांसक्रिप्ट प्रारूप। दोनों में Whisper शामिल होने की वजह से इनमें गड़बड़ी हो जाती है।

एक शब्दशः बोला गया तर्क-ट्रांसक्रिप्ट, पहचाने गए वॉइस लेबल के साथ: मॉडल की सोच से तुलना करने के लिए इंसान की सोच की शृंखला।

इंसानी सोच की शृंखला रिकॉर्ड करना

बात केवल तर्क जुटाने की नहीं है। Think-Aloud यह पकड़ता है कि कोई व्यक्ति किसी लेबल तक असल में कैसे तर्क करता है, ताकि आप उसी आइटम पर इंसान की सोच की शृंखला को मॉडल की सोच की शृंखला के सामने रख सकें।

Potato का प्रोसेस रिवॉर्ड एनोटेशन यह खंडों में बाँटता है कि कोई मॉडल क़दम-दर-क़दम कैसे तर्क करता है। Think-Aloud पकड़ता है कि कोई व्यक्ति कैसे करता है। दोनों रिकॉर्ड करने के तरीक़े हैं, और उन्हें एक ही आइटम पर आमने-सामने रखने से ही दिलचस्प अंतर सामने आते हैं।

यह कैसे काम करता है

  1. एनोटेटर 🎤 थिंक अलाउड पर टैप करता है और खुलकर बोलता है।
  2. ऑडियो छह-छह सेकंड के पूरे टुकड़ों में लिया जाता है और लोकल ही प्रतिलेखित होता है।
  3. आवाज़ से कोई लेबल दर्ज करने के लिए वे इनमें से कोई एक स्वीकृत वाक्यांश बोलते हैं:
    • "I label this Polite" / "I'd call it neutral"
    • "My answer is impolite"
    • "Final answer: polite" / "I go with neutral"
  4. पहचान होते ही UI में मेल खाता विकल्प अपने आप चुन लिया जाता है, सामान्य सेव पाइपलाइन चल पड़ती है, और पिल पुष्टि करती है: सुना: Impolite ✓। बाद में कोई नया वाक्यांश बोलने पर लेबल बदल जाता है, यानी आख़िरी बात ही मानी जाती है।
  5. require_spoken_label: true के साथ, बिना कोई लेबल दर्ज किए अगला दबाने पर एक बार अपेक्षित वाक्यांश दिखाकर टोका जाता है। दूसरी बार अगला दबाने पर बात निकल जाती है, और लेबल पर क्लिक करना हमेशा काम करता है।

सोचते समय कही गई हर बात नज़रअंदाज़ कर दी जाती है। "This seems polite, but…" से कुछ दर्ज नहीं होता। केवल तय वाक्यांश ही दर्ज करते हैं, और इसी वजह से नियम-आधारित पार्सिंग काफ़ी है। ग़लत सुनी गई बातें फ़ज़ी लेबल मिलान से सँभल जाती हैं, इसलिए "in polite" का हल Impolite निकलता है।

सेटअप

bash
pip install faster-whisper   # local STT; first recording downloads the model (~39 MB)

ब्राउज़र को माइक्रोफ़ोन की अनुमति चाहिए। localhost सुरक्षित संदर्भ में गिना जाता है।

कॉन्फ़िगरेशन

yaml
thinkaloud:
  enabled: true
  schema: politeness          # scheme whose labels can be spoken (default: first radio)
  stt: auto                   # faster_whisper | mock | auto
  model: tiny.en              # tiny.en is CPU real-time; base.en is sturdier
  chunk_seconds: 6            # recording chunk length
  require_spoken_label: true  # nudge on Next without a committed label
  # stems:                    # override accepted phrasing regexes (advanced)
  # fillers: [um, uh, hmm, i guess, maybe]
  # language: en
विकल्पडिफ़ॉल्टविवरण
sttautofaster_whisper (लोकल), mock (टेस्ट और डेव), या auto, जो faster-whisper चुनता है और वह न मिलने पर काम की त्रुटि दिखाता है।
modeltiny.enकोई भी faster-whisper मॉडल id।
chunk_seconds6हर टुकड़ा अपने आप में एक पूरी ऑडियो फ़ाइल है।
stemsअंतर्निहितस्वीकृत वाक्यांशों के लिए रेगेक्स स्टेम; हर एक अपने बाद आने वाले शब्द पकड़ता है।
fillersum, uh, hmm, …हिचकिचाहट गिनने वाले के लिए शब्दकोश।
require_spoken_labeltrueकुछ दर्ज न होने पर अगला बटन पर एक बार की टोक।

आपको क्या मिलता है

  • शब्दशः तर्क की धाराएँ, हर (एनोटेटर, इंस्टेंस) जोड़े से जुड़ी हुई, जिनमें लेबल वाला वाक्यांश अलग कर दिया जाता है। ट्रांसक्रिप्ट में से दर्ज करने वाला वाक्यांश हटा दें, बाक़ी तर्क है।
  • निर्धारक हिचकिचाहट संकेत: चुप्पी वाले टुकड़ों की गिनती और एक कॉन्फ़िगर करने योग्य शब्दकोश पर भराव-शब्दों की गिनती, जो मॉडल के बजाय सादे गणित से निकलती है।
  • एक समीक्षा पेज /thinkaloud/review पर (एडमिन), जिसमें हर सत्र का ट्रांसक्रिप्ट, आवाज़ से दर्ज लेबल, विश्वास, और हिचकिचाहट के आँकड़े रहते हैं।
  • साथ में हाथ लगाए बिना एनोटेशन, जिससे सुलभता और RSI में सचमुच राहत मिलती है।

डेटा और API

ट्रांसक्रिप्ट {output_annotation_dir}/thinkaloud/transcripts.jsonl में सहेजे जाते हैं (केवल जोड़ा जाता है, प्रति टुकड़ा एक रिकॉर्ड)।

एंडपॉइंटमेथडऑथउद्देश्य
/thinkaloud/api/chunkPOSTसत्रमल्टीपार्ट ऑडियो टुकड़ा → ट्रांसक्रिप्ट + पहचान
/thinkaloud/api/textPOSTसत्रटेक्स्ट टुकड़ा (बिना-ऑडियो रास्ता)
/thinkaloud/api/stateGETसत्रकिसी इंस्टेंस के लिए सत्र समुच्चय
/thinkaloud/reviewGETएडमिनट्रांसक्रिप्ट समीक्षा पेज
/thinkaloud/api/exportGETएडमिनसभी सत्र JSON के रूप में

डिज़ाइन संबंधी टिप्पणियाँ

  • पार्सर पिछले दो टुकड़ों की एक चलती खिड़की पर चलता है, इसलिए टुकड़ों की सीमा पर बँट जाने वाले वाक्यांश भी पहचाने जाते हैं।
  • लेबल मिलान पहले ठीक-ठीक होता है, फिर उपसर्ग से, फिर 0.8 सीमा पर difflib से, और ठीक-ठीक मिलान को वरीयता दी जाती है। "polite" कभी फ़ज़ी तरीक़े से "Impolite" से नहीं टकराता।
  • कोई नया STT बैकएंड जोड़ने का मतलब है potato/thinkaloud/stt.py में STTBackend को सबक्लास करना और उसे create_stt में रजिस्टर करना।

आगे पढ़ें