Skip to content

وضع Think-Aloud

يتحدث المعلّقون أثناء عملهم ويخزّن Potato النص التفريغي الحرفي بوصفه المبرّر. يعمل تحويل الكلام إلى نص محلياً بالكامل عبر faster-whisper، فلا يغادر الصوت الجهاز ولا يدخل في المسار أي واجهة سحابية أو LLM.

جديد في الإصدار v2.7.0

قبل نماذج اللغة الكبيرة، كان بروتوكول التفكير بصوت مسموع هو المعيار الذهبي لفهم كيفية اتخاذ الحكم، ولم ينجُ قط من الاصطدام بأدوات التعليق التوضيحي. يتيح وضع Think-Aloud للمعلّقين أن يتحدثوا ببساطة أثناء عملهم.

يُخزَّن النص التفريغي الحرفي بوصفه المبرّر، وبلا تلخيص عن قصد، لأن إعادة صياغة بروتوكول التفكير بصوت مسموع تلوّث الأثر الذي تحاول جمعه. ويمكن تثبيت التصنيفات بالصوت عبر صيغ لفظية محدّدة يكشفها محلّل قائم على القواعد، بلا أي LLM في أي موضع من المسار.

يعمل تحويل الكلام إلى نص محلياً بالكامل عبر faster-whisper، وهو يعمل بزمن حقيقي على المعالج مع نموذج tiny.en بحجم 39 ميغابايت. لا يغادر الصوت الجهاز، ولا توجد واجهة سحابية تُستدعى ولا فاتورة تُدفع لكل رمز.

Note: يفرّغ Think-Aloud كلام معلّقيك. أما إن أردت التعليق على نصوص تفريغية لديك مسبقاً، من Whisper أو من واجهة تعرّف كلام سحابية أو من ترجمات منزّلة، فتلك ميزة منفصلة: راجع صيغ النصوص التفريغية. ويقع الالتباس بين الاثنتين لأن كلتيهما تتعلق بـ 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. يحدّد الكشف الخيار المطابق في الواجهة تلقائياً، فينطلق مسار الحفظ المعتاد، وتؤكد الشارة: سُمِع: 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.
chunk_seconds6كل مقطع ملف صوتي كامل.
stemsمضمّنةجذور التعابير النمطية للصيغ المقبولة، ويلتقط كل منها الكلمات التالية له.
fillersum، uh، hmm، …المعجم المستخدم في عدّاد التردد.
require_spoken_labeltrueتنبيه لمرة واحدة عند زر التالي حين لا يكون شيء قد ثُبّت.

ما تحصل عليه

  • تدفقات مبرّرات حرفية موائمة لكل (معلّق، عنصر)، مع فصل عبارة التصنيف عنها. والنص التفريغي بعد حذف عبارة التثبيت هو المبرّر.
  • إشارات تردد حتمية: أعداد المقاطع الصامتة وأعداد كلمات الحشو على معجم قابل للتهيئة، محسوبة بالحساب لا بالنماذج.
  • صفحة مراجعة على /thinkaloud/review (للمشرف) تضم نص كل جلسة، والتصنيف المثبَّت صوتياً، والثقة، وإحصاءات التردد.
  • التعليق التوضيحي دون استخدام اليدين كأثر جانبي، بما في ذلك إتاحة حقيقية وتخفيف لإصابات الإجهاد المتكرر.

البيانات وواجهة برمجة التطبيقات

تُحفظ النصوص التفريغية في {output_annotation_dir}/thinkaloud/transcripts.jsonl (إلحاق فقط، سجل واحد لكل مقطع).

نقطة النهايةالطريقةالصلاحيةالغرض
/thinkaloud/api/chunkPOSTجلسةمقطع صوتي متعدد الأجزاء ← نص تفريغي + كشف
/thinkaloud/api/textPOSTجلسةمقطع نصي (مسار بلا صوت)
/thinkaloud/api/stateGETجلسةتجميع الجلسة لعنصر واحد
/thinkaloud/reviewGETمشرفصفحة مراجعة النصوص التفريغية
/thinkaloud/api/exportGETمشرفكل الجلسات بصيغة JSON

ملاحظات التصميم

  • يعمل المحلّل على نافذة متحركة تضم آخر مقطعين، فتُكشف العبارات التي تقع على حدّ فاصل بين مقطعين.
  • مطابقة التصنيف تكون تامة، ثم بالبادئة، ثم عبر difflib عند عتبة 0.8، مع تفضيل المطابقات التامة. فلا تتصادم "polite" ضبابياً مع "Impolite" أبداً.
  • تعني إضافة خلفية جديدة لتحويل الكلام إلى نص اشتقاق صنف فرعي من STTBackend في potato/thinkaloud/stt.py وتسجيله في create_stt.

قراءات إضافية