دليل
لماذا يكرّر تفريغك العبارة نفسها مرارًا وتكرارًا
ليس تسجيلك السبب، ولا تنزيلًا معطوبًا. إنه ما يفعله Whisper حين لا يتحدث أحد — وهناك طرق محدّدة لإيقافه.
تفرّغ تسجيلًا طويلًا، وتفتح النص، فتجده في مكان ما في المنتصف قد صار هكذا:
[ Silence ]
[ Silence ]
[ Silence ]
[ Silence ]
أو أسوأ: يلتقط جملة حقيقية من موضع سابق في الملف ويكررها أربعين مرة، بطوابع زمنية معقولة، كأن أحدًا قال فعلًا "thanks for watching" مرة كل ثانية لدقيقة كاملة.
هذه أكثر شكوى مفردة شيوعًا بشأن التفريغ الآلي، ولكل أداة تقريبًا مبنية على Whisper من OpenAI نسخة منها. ويستحق الأمر أن تفهم سببه، لأن الحل ليس «اشترِ نموذجًا أكبر».
ما الذي يحدث فعلًا #
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 ومعالجة لاحقة في مسارها، ولهذا تصادف هذا أقل. لكن الآلية تحته هي نفسها، وكثير منها ما زال ينتج "thank you" خمسين مرة على ملف هادئ. والدفع بالدقيقة لا يشتري لك مفكّك ترميز مختلفًا.
إعادة التشغيل. أخذ العيّنات في Whisper ليس حتميًا تمامًا، فقد تدور محاولة ثانية في حلقة في موضع مختلف. وهذا ليس إصلاحًا، بل رمي عملة.
ماذا نفعل حياله #
بالتحديد، لأن الجواب المبهم لن يفيد هنا.
يشغّل Offline Transcription نموذج Silero VAD قبل التفريغ، فلا تصل الفترات الصامتة وغير الكلامية إلى مفكّك الترميز إطلاقًا. وفوق ذلك، تُرشَّح من الناتج العلاماتُ التي تشغل مقطعًا كاملًا مثل [ Silence ] ورموز الموسيقى المجردة، بينما تبقى الأسطر التي تحتوي فقط على تعليق بين قوسين، لأن تلك كلام حقيقي.
وفي الملفات الطويلة يفرّغ أيضًا في نوافذ ويقطع كل نافذة عند أهدأ نقطة في الصوت، فيقع الحد بين الجمل لا في وسط جملة.
والتحفّظ الصادق: هذا يجعل مشكلة العبارة المكررة نادرة جدًا، لا مستحيلة. فأي أداة قائمة على Whisper، وأداتنا منها، هي نموذج لغوي يقوم بتنبؤات، والنموذج الذي يتنبأ يمكن أن يخطئ. فإن كنت تفرّغ شيئًا تهمّ فيه الدقة، فاقرأ النص بمقابلته بالصوت في الأجزاء التي تنوي الاعتماد عليها — ويغطي دليل المقابلات لدينا طريقة سريعة لذلك.
الخلاصة #
الحلقة هي Whisper يتنبأ بنص لصوت لا كلام فيه. واكتشاف النشاط الصوتي يزيل السبب بألّا يعرض عليه ذلك الصوت إطلاقًا. واقتطاع الصمت وترشيح العلامات يساعدان إن لم يكن في أداتك VAD. أما النموذج الأكبر فلا يساعد إطلاقًا.
احصل على Offline Transcription
فرّغ الصوت والفيديو بالكامل على جهاز Mac الخاص بك. لا شيء يُرفَع، ولا حساب، ولا عدّاد بالدقيقة.