دليل

ماذا يحدث فعلًا حين يفرّغ جهاز Mac لديك الصوت على الجهاز

«الذكاء الاصطناعي على الجهاز» عبارة تسويقية ملتصقة بقطعة هندسية محدّدة ومثيرة للاهتمام. وإليك المسار كاملًا، من الملف إلى النص.

صار كل تطبيق يقول إنه يفعل الأشياء «على الجهاز». ويستحق الأمر أن تعرف ما ينطوي عليه ذلك فعلًا، جزئيًا لأنه يفسّر لماذا تحسّن التفريغ المحلي بهذه السرعة، وجزئيًا لأنه الفرق بين ادعاء يمكنك التحقق منه وآخر لا يمكنك.

هذا هو المسار، بالترتيب.

الخطوة 1: كل شيء يصير صوتًا أحاديًا بتردد 16 kHz #

يأخذ Whisper، وهو نموذج التعرف على الكلام الذي تستخدمه هذه التطبيقات كلها تقريبًا، نوعًا واحدًا بالضبط من المدخلات: 16,000 عيّنة في الثانية، وقناة واحدة، أعدادًا عشرية بين ‎-1 و1.

فأول ما تفعله أي أداة تفريغ هو التخلص من معظم صوتك. إذ يُدمَج تسجيلك الاستريو بتردد 48 kHz ويُخفَّض معدل عيّناته. وملفات الفيديو يُستخرج مسارها الصوتي وتُطرح الصورة.

يبدو هذا مدمِّرًا وهو ليس كذلك في الغالب: فالكلام البشري يقيم تحت 8 kHz، وبموجب حدّ نايكويست يلتقط معدل عيّنات 16 kHz ذلك كله. وما تفقده هو جودة الموسيقى لا وضوح الكلام.

والنتيجة العملية: تسجيلك الباهظ بتردد 96 kHz لا يكسبك شيئًا في هذه المرحلة، والملف السيئ الضغط لا يمكن إنقاذه بها أيضًا.

الخطوة 2: اكتشاف النشاط الصوتي يقرّر ما يستحق التفريغ #

يعمل أولًا نموذج ثانٍ أصغر بكثير، ويحدّد أي أجزاء الصوت تحتوي كلامًا بشريًا.

والنموذج الشائع الاستخدام هو Silero VAD — أقل من ميغابايت واحد، ويجيب عن سؤال واحد: أكلامٌ هذا أم ليس كلامًا، على شبكة زمنية دقيقة.

وهو موجود لسببين. فهو يجعل الأمور أسرع، لأن فكّ ترميز الصمت عمل مهدور. والأهم أنه يمنع نمط الفشل الذي فيه يُسلَّم إلى Whisper صوت بلا كلام فيه فيولّد نصًا مع ذلك ويدور في حلقة. وVAD هو سبب توقف التفريغ المحلي الحديث عن إنتاج صفحات من العبارات المكررة.

الخطوة 3: الصوت يصير صورة #

لا يستهلك Whisper الموجات الصوتية. بل يستهلك طيفًا ترددياً لوغاريتمي بمقياس Mel: صورة ثنائية الأبعاد محورها الأفقي الزمن، ومحورها الرأسي التردد على مقياس يوافق السمع البشري، وسطوعها الطاقة.

وهذه هي القفزة المفهومية الفعلية في التعرف الحديث على الكلام. فما إن يصير الصوت صورةً حتى تستطيع استخدام الآلة المبنية لرؤية الحاسوب عليه — وهذا بالضبط ما يحدث تاليًا.

الخطوة 4: المُرمِّز يعمل، ويُفضَّل أن يكون على Neural Engine #

Whisper محوّل بنصفين. المُرمِّز يقرأ الطيف الترددي ويحوّله إلى تمثيل عددي كثيف لما قيل. وهذا هو النصف المكلف — عمليات ضرب مصفوفات ثقيلة ومنتظمة على مدخل ثابت الحجم.

وهذا بالضبط ما بُني له Neural Engine من Apple: كتلة مخصصة على الشريحة تقوم بنوع ضيّق واحد من الحساب بسرعة فائقة وباستهلاك طاقة منخفض جدًا. وهي ليست عامة الغرض — فلا يمكنك تشغيل شيفرة اعتباطية عليها — لكن مُرمِّز المحوّل هو تحديدًا شكلها.

ويتطلب نقل المُرمِّز إليها ترجمة النموذج إلى صيغة Core ML (‏.mlmodelc) مسبقًا. والتطبيقات التي تفعل ذلك تشحن مُرمِّز Core ML إلى جانب أوزان النموذج، وهذا أكبر فارق مفرد في السرعة بين تطبيق تفريغ محلي سريع وآخر بطيء على العتاد نفسه.

الخطوة 5: مفكّك الترميز يعمل على وحدة معالجة الرسوميات #

مفكّك الترميز ينتج النص الفعلي، رمزًا في كل مرة، وكل رمز مشروط بكل ما سبقه.

وهذا النصف تسلسلي، فلا يناسب تصميم Neural Engine الموجّه للدفعات. ويعمل بدلًا من ذلك على وحدة معالجة الرسوميات عبر Metal. وعلى Apple Silicon تتشارك تلك الوحدة الذاكرة مع المعالج المركزي، فلا يضطر نقل أوزان النموذج عبر ناقل — وهذا جزء كبير من سبب تفوق Apple Silicon على وزنه في الاستدلال المحلي.

الخطوة 6: الطوابع الزمنية تخرج من العملية نفسها #

يُصدر Whisper رموز طوابع زمنية خاصة متداخلة مع الكلمات. وهكذا تحصل على ملف SRT بتوقيتات معقولة بدل جدار من النص — إذ تنتج معلومات التوقيت عن جولة فكّ الترميز نفسها، لا عن خطوة محاذاة منفصلة.

وحين يكون VAD قد تخطّى الصمت، يجب إعادة تعيين التوقيتات على التسجيل الأصلي، وإلا لكان كل طابع زمني بعد أول فجوة خاطئًا.

النموذج، ولماذا هو أصغر مما يبدو #

نموذج Base في Whisper فيه 74 مليون معامل. وبالدقة الكاملة يبلغ ذلك نحو 140 ميغابايت، معظمها زائد عن الحاجة لهذا الغرض.

التكميم يخزّن كل وزن ببتّات أقل. ففي نموذج q5_1، تُخزَّن الأوزان بـ5 بتّات إضافة إلى مقياس وإزاحة صغيرين لكل كتلة — أي نحو 6 بتّات لكل وزن بدل 16. والنتيجة نحو 60 ميغابايت بفروق دقة يصعب اكتشافها في الكلام الاعتيادي.

وهذا يهمّ في الهاتف، حيث يكون تنزيل بحجم 140 ميغابايت والذاكرة المقابلة له تكلفة حقيقية. وهو أيضًا سبب كون الجواب الصادق عن «أي نموذج ينبغي أن أستخدم» أصغر في العادة مما يفترض الناس.

الملفات الطويلة، ولماذا الذاكرة هي الجزء الصعب #

تأخذ واجهة Whisper مخزنًا مؤقتًا واحدًا متصلًا من العيّنات. وساعتان بتردد 16 kHz تبلغان نحو 470 ميغابايت من الأعداد العشرية، إضافة إلى طيف ترددي بحجم مماثل.

على جهاز Mac، لا بأس. أما على iPhone، فهذا كافٍ لأن ينهي النظام التطبيق — ولهذا تحدّ بعض تطبيقات التفريغ على الجوّال طول الملف بصمت.

والحل هو التفريغ في نوافذ: أبقِ الصوت المفكوك ترميزه على القرص، وحمّل شريحة واحدة في كل مرة، وفرّغها، ثم حرّرها. عندها يعتمد ذروة استهلاك الذاكرة على النافذة لا على الملف. والدقّة في المسألة تكمن في موضع القطع — فالقطع في منتصف كلمة يعطيك جملة مشوّهة عند كل حد، ولهذا يقطع التنفيذ المعقول عند أهدأ نقطة داخل منطقة تداخل، ويزيح الطوابع الزمنية لكل نافذة إلى الخط الزمني الأصلي.

لماذا يهمّك أي من هذا #

ثلاثة أمور تترتب على المسار أعلاه وليست ادعاءات تسويقية:

إنه يعمل بلا شبكة. فلا توجد خطوة أعلاه تتطلب شبكة. وهذا قابل للفحص في ثلاثين ثانية — وقد كتبنا كيف، بما في ذلك اختبارات لا تتطلب الوثوق بنا.

تسجيلك ليس بيانات تدريب لأحد. فالمسألة ليست أن تطبيقًا محليًا يَعِد بألّا يتدرب على صوتك. بل إن صوتك لم يكن قط في أي مكان يمكن أن يحدث فيه ذلك.

السرعة تعتمد على عتادك، لا على قائمة انتظار أحدهم. فالتفريغ المحلي يعمل أسرع من الزمن الحقيقي بعدة أضعاف على Apple Silicon، باطراد، في الثالثة فجرًا يوم أحد، وبلا حدّ معدّل.

الخلاصة #

يُخفَّض معدل عيّنات الصوت إلى 16 kHz أحادي، ويجرّد اكتشاف الصوت الأجزاء الخالية من الكلام، ويصير الباقي طيفًا ترددياً، ويعالجه مُرمِّز محوّل على Neural Engine، ويولّد مفكّك ترميز النص على وحدة معالجة الرسوميات مع طوابع زمنية متداخلة، ويجعل التكميم النموذج صغيرًا بما يكفي ليتسع هذا كله في هاتف.

ولا شيء من ذلك يحتاج إلى خادم، وهذا هو المقصود كله.

احصل على Offline Transcription

فرّغ الصوت والفيديو بالكامل على جهاز Mac الخاص بك. لا شيء يُرفَع، ولا حساب، ولا عدّاد بالدقيقة.

macOS 13.0 or higher · iOS 16.4 or higher