يأتي whisper.cpp بمسار اختياري لمشفّر Core ML لرقائق Apple Silicon. إنها الميزة التي تتوقع أن يفعّلها تطبيق إملاء على Mac. أما Voice Type فيعطّلها قسرًا ويشغّل واجهة Metal الخلفية بدلًا منها.
السبب هو عدم تطابق في الشكل (shape)، وينشأ من الطريقة التي يجمّع بها الإملاء المباشر الصوت في دفعات.
TL;DR
- حزمة مشفّر Core ML المترجمة تتوقع شكل إدخال ثابتًا.
- ينتج الإملاء المباشر دفعات متفاوتة الطول، لأن المجمِّع يرفض قطع العبارة في منتصفها.
- لذلك يعطّل Voice Type مسار Core ML عند إنشاء السياق ويعمل على Metal، الذي يقبل صوتًا بأي طول.
- وقد أزالت إزالة المسار أيضًا تنزيلًا يتراوح بين 163 MB و1.17 GB لكل نموذج.
لماذا تتفاوت أطوال الدفعات
لا يرسل Voice Type إلى المتعرِّف شرائح ثابتة المدة يحددها مؤقّت. يحدد كاشف نشاط صوتي متدفق مناطق الكلام، ويجمع المجمِّع مناطق كاملة. ولا يقسم منطقة واحدة لمجرد أن المؤقّت انطلق.
القواعد التي تحدد متى تذهب الدفعة إلى النموذج كلها مشروطة بالكلام لا بالساعة:
- هدف الدفعة المباشرة هو 29 ثانية، مقيّدًا بنطاق من 15 إلى 29 ثانية.
- لا تُرسَل الدفعة التي تقل عن 5 ثوانٍ بسبب توقف أبدًا. تنتظر وتنضم إليها العبارة التالية.
- يحتاج الإرسال بسبب التوقف إلى 400 ms على الأقل من الصمت بعد منطقة كلام مغلقة.
- إذا كانت إضافة المنطقة الكاملة التالية ستتجاوز الهدف، تُرسَل الدفعة الحالية أولًا وتبدأ المنطقة الكاملة الدفعة التالية.
- عند تحرير مفتاح الاختصار، يُرسَل كل ما تبقّى بغض النظر عن الطول.
والنتيجة أن طول الدفعة توزيع وليس ثابتًا. قد تكون الدفعة 5 ثوانٍ أو 31. وهذا هو السلوك الصحيح للإملاء، لأن البديل هو قطع كلمة إلى نصفين عند حدود النافذة.
ما يكلّفه ذلك على Core ML
يُترجَم نموذج Core ML مسبقًا إلى حزمة .mlmodelc مع تثبيت أبعاد الإدخال فيها. وإذا أعطيته صوتًا بطول لم يُترجَم له، فإما أن تحشو الصوت حتى الشكل الثابت، أي أن تدفع كلفة عمل المشفّر على الصمت، أو أن تحتفظ بعدة نسخ مترجمة، أي عدة حزم على القرص.
لا يتبع Voice Type أيًّا من الخيارين. يُعطَّل مسار مشفّر Core ML قسرًا في الموضع الذي يُنشأ فيه سياق whisper، مع تعليق يسمّي هذا السبب بالضبط: قيود الإدخال ذي الشكل الثابت. ثم تختار سياسة الواجهة الخلفية Metal افتراضيًا، ولا تعود إلى المعالج المركزي إلا في المحاكي، أو عندما يعطّل إعداد افتراضي للمستخدم وحدة معالجة الرسومات، أو عندما يُثبَّت الوضع الآمن بعد انهيار.
ويقبل Metal أي طول ينتجه المجمِّع.
ما حرّرته الإزالة
لم يُعطَّل دعم Core ML فحسب، بل أُزيل. كانت الإصدارات الأقدم تثبّت حزمة مشفّر بجوار أوزان كل نموذج، ggml-<name>-encoder.mlmodelc، يتراوح حجمها من نحو 163 MB إلى 1.17 GB بحسب النموذج. وكانت تلك الحزم تُنزَّل وتُفكّ ضغطها وتُجهَّز لكل نموذج.
ولأنه لم يعد هناك مسار شيفرة يحذفها، يحمل التطبيق ترحيلًا لمرة واحدة يكنس حزم المشفّر اليتيمة من مجلد النماذج عند الترقية، ويحرص على ألا يمس أبدًا أوزان .bin المجاورة لها.
فالنتيجة التي يراها المستخدم من إيقاف Core ML هي تنزيل أصغر ومجلد نماذج أصغر، فضلًا عن متعرِّف لا يهمه كم كانت جملتك طويلة.
الفرع المتقطع هو المسار الذي لا يسلكه التطبيق عن قصد. المصدر: whisper.cpp.swift/LibWhisper.swift.
ما الذي ينفّذه Metal فعلًا
Metal هو واجهة Apple البرمجية منخفضة المستوى لوحدة معالجة الرسومات، وهو في هذا التطبيق يؤدي مهمتين منفصلتين.
يعمل سياق whisper على واجهة Metal الخلفية، فيُنفَّذ المشفّر وفاكّ التشفير على وحدة معالجة الرسومات. وبصورة منفصلة، تُنفَّذ معالجة الصوت لكل دفعة كمرحلة معالجة إشارة مستقلة قبل أن يرى النموذج أي شيء: إزالة إزاحة التيار المستمر (DC)، والمرشِّحات وضبط شدة الصوت، ثم إعادة التشكيل إلى 16 kHz التي يتوقعها النموذج.
وكلاهما يقرأ من الذاكرة الموحّدة، فلا تُنسَخ مخازن الصوت عبر ناقل بين مسار الالتقاط والنموذج.
ما لا ندّعيه
لا ننشر هنا زمنًا للإنهاء. ليس لدينا حاليًا سكربت قياس أداء نسلّمه لك مع الرقم، ورقم الكمون دون وسيلة لإعادة إنتاجه تسويق وليس أكثر.
ما هو بنيوي وصحيح دون قياس أداء: العمل المتبقي عند تحرير مفتاح الاختصار محدود بهدف الدفعة، لا بالمدة التي تحدثت فيها. إملاء مدته دقيقتان وإملاء مدته ثلاثون دقيقة ينتهيان بالمقدار نفسه من العمل المتبقي.
لقياسه على جهازك، أملِ الجملة نفسها عشر مرات واحسب الفاصل بين تحرير مفتاح الاختصار وظهور النص. هذا الرقم هو المهم، وهو ملكك.
المفاضلات
حجم النموذج مقابل الدقة. النماذج الأصغر تنهي أسرع وتفوّت كلمات أكثر. يوفّر Voice Type عدة أحجام من 27 MB إلى 550 MB، فالمفاضلة بيدك.
تناسب النماذج الأكبر جهاز Mac بشريحة Apple Silicon وذاكرة موحّدة فائضة. وتناسب الأصغر جهازًا بذاكرة 8 GB، حيث يقضي النموذج الأكبر وقته في التبديل بين الذاكرة والقرص بدلًا من فك التشفير.
ذو صلة: نظرة عامة على التقنية · كشف النشاط الصوتي · عرض الكمون
