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 पकड़ता है कि कोई व्यक्ति कैसे करता है। दोनों रिकॉर्ड करने के तरीक़े हैं, और उन्हें एक ही आइटम पर आमने-सामने रखने से ही दिलचस्प अंतर सामने आते हैं।
यह कैसे काम करता है
- एनोटेटर 🎤 थिंक अलाउड पर टैप करता है और खुलकर बोलता है।
- ऑडियो छह-छह सेकंड के पूरे टुकड़ों में लिया जाता है और लोकल ही प्रतिलेखित होता है।
- आवाज़ से कोई लेबल दर्ज करने के लिए वे इनमें से कोई एक स्वीकृत वाक्यांश बोलते हैं:
- "I label this Polite" / "I'd call it neutral"
- "My answer is impolite"
- "Final answer: polite" / "I go with neutral"
- पहचान होते ही UI में मेल खाता विकल्प अपने आप चुन लिया जाता है, सामान्य सेव पाइपलाइन चल पड़ती है, और पिल पुष्टि करती है: सुना: Impolite ✓। बाद में कोई नया वाक्यांश बोलने पर लेबल बदल जाता है, यानी आख़िरी बात ही मानी जाती है।
require_spoken_label: trueके साथ, बिना कोई लेबल दर्ज किए अगला दबाने पर एक बार अपेक्षित वाक्यांश दिखाकर टोका जाता है। दूसरी बार अगला दबाने पर बात निकल जाती है, और लेबल पर क्लिक करना हमेशा काम करता है।
सोचते समय कही गई हर बात नज़रअंदाज़ कर दी जाती है। "This seems polite, but…" से कुछ दर्ज नहीं होता। केवल तय वाक्यांश ही दर्ज करते हैं, और इसी वजह से नियम-आधारित पार्सिंग काफ़ी है। ग़लत सुनी गई बातें फ़ज़ी लेबल मिलान से सँभल जाती हैं, इसलिए "in polite" का हल Impolite निकलता है।
सेटअप
pip install faster-whisper # local STT; first recording downloads the model (~39 MB)ब्राउज़र को माइक्रोफ़ोन की अनुमति चाहिए। localhost सुरक्षित संदर्भ में गिना जाता है।
कॉन्फ़िगरेशन
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| विकल्प | डिफ़ॉल्ट | विवरण |
|---|---|---|
stt | auto | faster_whisper (लोकल), mock (टेस्ट और डेव), या auto, जो faster-whisper चुनता है और वह न मिलने पर काम की त्रुटि दिखाता है। |
model | tiny.en | कोई भी faster-whisper मॉडल id। |
chunk_seconds | 6 | हर टुकड़ा अपने आप में एक पूरी ऑडियो फ़ाइल है। |
stems | अंतर्निहित | स्वीकृत वाक्यांशों के लिए रेगेक्स स्टेम; हर एक अपने बाद आने वाले शब्द पकड़ता है। |
fillers | um, uh, hmm, … | हिचकिचाहट गिनने वाले के लिए शब्दकोश। |
require_spoken_label | true | कुछ दर्ज न होने पर अगला बटन पर एक बार की टोक। |
आपको क्या मिलता है
- शब्दशः तर्क की धाराएँ, हर (एनोटेटर, इंस्टेंस) जोड़े से जुड़ी हुई, जिनमें लेबल वाला वाक्यांश अलग कर दिया जाता है। ट्रांसक्रिप्ट में से दर्ज करने वाला वाक्यांश हटा दें, बाक़ी तर्क है।
- निर्धारक हिचकिचाहट संकेत: चुप्पी वाले टुकड़ों की गिनती और एक कॉन्फ़िगर करने योग्य शब्दकोश पर भराव-शब्दों की गिनती, जो मॉडल के बजाय सादे गणित से निकलती है।
- एक समीक्षा पेज
/thinkaloud/reviewपर (एडमिन), जिसमें हर सत्र का ट्रांसक्रिप्ट, आवाज़ से दर्ज लेबल, विश्वास, और हिचकिचाहट के आँकड़े रहते हैं। - साथ में हाथ लगाए बिना एनोटेशन, जिससे सुलभता और RSI में सचमुच राहत मिलती है।
डेटा और API
ट्रांसक्रिप्ट {output_annotation_dir}/thinkaloud/transcripts.jsonl में सहेजे जाते हैं (केवल जोड़ा जाता है, प्रति टुकड़ा एक रिकॉर्ड)।
| एंडपॉइंट | मेथड | ऑथ | उद्देश्य |
|---|---|---|---|
/thinkaloud/api/chunk | POST | सत्र | मल्टीपार्ट ऑडियो टुकड़ा → ट्रांसक्रिप्ट + पहचान |
/thinkaloud/api/text | POST | सत्र | टेक्स्ट टुकड़ा (बिना-ऑडियो रास्ता) |
/thinkaloud/api/state | GET | सत्र | किसी इंस्टेंस के लिए सत्र समुच्चय |
/thinkaloud/review | GET | एडमिन | ट्रांसक्रिप्ट समीक्षा पेज |
/thinkaloud/api/export | GET | एडमिन | सभी सत्र JSON के रूप में |
डिज़ाइन संबंधी टिप्पणियाँ
- पार्सर पिछले दो टुकड़ों की एक चलती खिड़की पर चलता है, इसलिए टुकड़ों की सीमा पर बँट जाने वाले वाक्यांश भी पहचाने जाते हैं।
- लेबल मिलान पहले ठीक-ठीक होता है, फिर उपसर्ग से, फिर 0.8 सीमा पर
difflibसे, और ठीक-ठीक मिलान को वरीयता दी जाती है। "polite" कभी फ़ज़ी तरीक़े से "Impolite" से नहीं टकराता। - कोई नया STT बैकएंड जोड़ने का मतलब है
potato/thinkaloud/stt.pyमेंSTTBackendको सबक्लास करना और उसेcreate_sttमें रजिस्टर करना।
आगे पढ़ें
- प्रोसेस रिवॉर्ड एनोटेशन — मॉडल की तरफ़ की सोच की शृंखला वाला हिस्सा
- व्यवहार ट्रैकिंग — समय संबंधी विश्लेषण
- गुणवत्ता नियंत्रण
- स्रोत दस्तावेज़