عادةً ما يكون نموذج التعرّف على الكلام المنشور كنقطة تفتيش بحثية مجلّدًا من أوزان PyTorch، وسكربت تدريب، وملاحظة تذكر أي وحدة معالجة رسومات دُرِّب عليها. هذا كافٍ لإعادة إنتاج درجة معيارية. لكنه غير كافٍ لتشغيله على Raspberry Pi، أو هاتف، أو حاسوب محمول بلا اتصال بالإنترنت. الانتقال من الأول إلى الثاني هو عمل تحويل، وهو ما يحدد في معظمه ما إذا كان نموذج كلام مفتوح سيصل يومًا إلى جهاز حقيقي.
نقوم بعمل التحويل هذا كمهنة: نأخذ نماذج ASR (التعرّف الآلي على الكلام، أي تحويل الكلام إلى نص) و TTS (تحويل النص إلى كلام) المفتوحة ونحوّلها إلى ملفات تعمل دون اتصال، على وحدات معالجة مركزية عادية أو مسرّعات داخل الجهاز، دون الحاجة إلى حزمة تدريب بايثون وقت التشغيل. تُنشَر معظم النتائج تحت منظمة OpenVoiceOS على Hugging Face بدلًا من حسابنا الخاص، وهذا خيار مقصود — المزيد عن السبب أدناه.
لماذا نقطة التفتيش ليست نشرًا فعليًا
تتوقّع نقطة تفتيش PyTorch أو NeMo بيئة بايثون معيّنة: الإصدارات الصحيحة من المكتبات، وعادةً وحدة معالجة رسومات، وإطار التدريب نفسه لمجرد إجراء الاستدلال. تلك الحزمة كبيرة، وتتغيّر باستمرار، وليست شيئًا تريد شحنه داخل مساعد صوتي يجب أن يُقلَع على لوحة صغيرة.
يحلّ تصدير النموذج هذه المشكلة بتحويل الشبكة المدرَّبة إلى صيغة مخصّصة للاستدلال فقط — دون شيفرة تدريب، ودون autograd، ودون ارتهان لإطار عمل معيّن. نستهدف ثلاث صيغ من هذا النوع، كلٌّ منها لشكل نشر مختلف:
- ONNX (Open Neural Network Exchange) صيغة رسم بياني قابلة للنقل تستطيع طائفة واسعة من بيئات التشغيل تنفيذها، على وحدة المعالجة المركزية أو الرسومية، على Linux أو Windows أو macOS أو لوحات مدمجة. إنها هدفنا الافتراضي لأنها تعمل في أي مكان يعمل فيه
onnxruntime، وهو تقريبًا كل مكان. - CoreML صيغة استدلال آبل داخل الجهاز. تعمل حزمة CoreML على المحرك العصبي أو وحدة الرسومات في جهاز Mac أو iPhone بدلًا من وحدة المعالجة المركزية، وهذا مهم للتعرّف على الكلام في الزمن الحقيقي على عتاد آبل.
- GGUF الصيغة التي يستخدمها
llama.cppومنظومته، ومُصمَّمة للنماذج المُكمَّمة على طراز نماذج اللغة الكبيرة التي تحتاج إلى بصمة ذاكرة صغيرة. نستخدمها لنماذج الكلام الأحدث القائمة على المحوِّلات (transformers)، والتي تُشبه بنيويًا نماذج اللغة أكثر من نموذج صوتي كلاسيكي.
اختيار الهدف الصحيح ليس أمرًا شكليًا. فنموذج ASR القائم على Conformer (البنية الكامنة خلف معظم أدوات التعرّف على الكلام الحديثة، والتي تمزج الالتفاف والانتباه الذاتي) يتحوّل بسلاسة إلى ONNX أو CoreML. أما نموذج الكلام القائم على Qwen3 فهو، من الداخل، نموذج لغوي، لذا فهو يلائم بشكل طبيعي خط أنابيب GGUF/llama.cpp بدلًا من ذلك.
ما الذي يكلّفه التكميم، وما الذي يمنحه
يعني التكميم (quantization) تخزين أوزان النموذج بعدد أقل من البتّات لكل رقم — 16 بتًا أو 8 بتات أو 4 بتات بدلًا من الأعداد العشرية بدقّة 32 بتًا التي دُرِّب بها. الأرقام الأصغر تعني ملفًا أصغر، وعلى العتاد المناسب، استدلالًا أسرع، لأن هناك بيانات أقل لنقلها وحسابات أرخص لإجرائها.
يمكننا وضع رقم دقيق على هذه المقايضة لنموذج حقيقي واحد. nvidia/parakeet-tdt-0.6b-v3 نموذج ASR بـ 0.6 مليار معامل. حجم مكوّن مُرمِّز mel الخاص به بصيغة CoreML هو 1132.5 ميغابايت بالدقّة الكاملة؛ وبعد تحويله بالنُظُم اللونية (palettization) إلى 4 بتات يصير 284.2 ميغابايت — تخفيض بمقدار 3.99 ضعفًا، متطابق تقريبًا عبر مكوّناته الفرعية الثلاثة (المُرمِّز، وفاكّ الترميز، وشبكة اتخاذ القرار المشترك). وعبر الحزمة بأكملها، يبلغ حجم تصدير CoreML غير المُكمَّم نحو 1.14 غيغابايت؛ بينما يبلغ حجم النسخة بـ 4 بتات نحو 293 ميغابايت. هذا هو الفارق بين نموذج يتّسع بارتياح في هاتف ونموذج بالكاد يتّسع فيه.
الثمن هو الدقّة: بتّات أقل لكل وزن تعني دقّة أقل، وبعد نقطة معيّنة يظهر ذلك كأخطاء تعرّف أكثر. الطريقة القياسية لقياس ذلك في ASR هي WER (معدّل خطأ الكلمات — نسبة الكلمات التي يخطئ فيها النموذج مقارنةً بنص صحيح). لهذا ننشر عدة مستويات تكميم للنموذج نفسه جنبًا إلى جنب — 4 بتات، و6 بتات، و8 بتات (int8)، وfp16 — بدلًا من اختيار مستوى واحد والأمل في أن يكون جيدًا بما يكفي لكل جهاز. فالهاتف والحاسوب المكتبي يمكنهما تحمّل نقطتين مختلفتين على ذلك المنحنى.
مشكلة التحقّق
التحويل الذي ينتج مخرجات أسوأ بصمت أخطر من عدم التحويل إطلاقًا، لأن لا شيء فيه يبدو معطوبًا — فهو يُحمَّل، ويعمل، لكنه فقط يتعرّف على الكلام بشكل أسوأ قليلًا، أو أسوأ بكثير، في لغة لا تتحدثها أنت شخصيًا ولا تستطيع فحصها بالأذن. الطريقة الوحيدة لالتقاط ذلك هي مقارنة مخرجات النموذج المُصدَّر بمخرجات التنفيذ المرجعي الأصلي على صوت حقيقي، لكل لغة ولكل مستوى تكميم، قبل نشره.
هذا شرط أساسي لأي تحويل نشحنه: تمرير الصوت نفسه عبر النموذج المصدر والنموذج المحوَّل، والتأكد من توافقهما. ليست خطوة برّاقة، لكن تخطّيها هو كيف تتوقف “لغة مدعومة” عن العمل بصمت.
لماذا تعيش النماذج تحت OpenVoiceOS، لا تحتنا
تصدير النماذج قدرة تملكها الشركة: أعطنا نقطة تفتيش وجهازًا مستهدفًا، وسنجعله يعمل دون اتصال، ومُتحقَّقًا منه، وعند مستوى التكميم الذي يلائم عتادك. لكن النماذج المحوَّلة التي ننتجها من نقاط تفتيش مفتوحة وغير مُموَّلة بتكليف تذهب إلى OpenVoiceOS، منصّة المساعد الصوتي المفتوحة التي بُنيت هذه النماذج لتعمل عليها — لا إلى حسابنا الخاص.
السبب واضح ومباشر: OpenVoiceOS هي حيث تُستخدَم النماذج. النموذج المحوَّل الجالس في حساب شركة قطعة أثرية لطيفة. أما النموذج نفسه منشورًا حيث يستطيع ovos-stt-plugin-onnx-asr، أو ovos-stt-plugin-coreml، أو ovos-stt-plugin-rover العثور عليه بالاسم فهو لغة يستطيع مساعد حقيقي أن يتحدثها أو يفهمها الآن. النشر تحت منظمة المنصّة نفسها هو ما يحوّل التحويل إلى وظيفة مدعومة بدلًا من فضول بحثي، وهو كيف نضمن أن القيام بهذا العمل مرّة واحدة يفيد كل تنصيب لـ OpenVoiceOS، لا الزبون الذي طلبه فقط.
ولنكن واضحين بشأن نسب الفضل: نحن لا ندرّب هذه النماذج الصوتية من الصفر، ولا ندّعي ذلك. البحث الأساسي — نماذج Parakeet و Conformer من NVIDIA، ونماذج IndicConformer من AI4Bharat للغات الهندية، ونماذج جامعية ومعاهد عامة مثل Proxecto Nós في غاليسيا أو نماذج Conformer من مركز HiTZ الباسكي، وجهود مستقلة لتحويل نماذج للغات أفريقية وأقلية — تعود إلى الفرق التي دربتها. ما نضيفه نحن هو التحويل، والتكميم، وفحص الصحّة مقابل الأصل، ووصل الإضافة الذي يتيح لمساعد تحميل النتيجة بالاسم.
حجم عمل التحويل هذا، مُحصًى مباشرةً مما هو منشور: أكثر من تسعين نسخة من Parakeet ASR (عبر أحجام ولغات ومستويات تكميم مختلفة) مُصدَّرة إلى ONNX و CoreML؛ وأكثر من ثلاثين نموذج Conformer من NVIDIA؛ و22 نموذج IndicConformer من AI4Bharat تغطي لغات هندية شحيحة الموارد؛ و22 نموذج wav2vec2 للغات تشمل السويدية والآيسلندية والفاروية والفنلندية وكلا الشكلين المكتوبين للنرويجية؛ وتسعة نماذج Conformer للباسكية والغاليسية؛ ونماذج Whisper و wav2vec2 محوَّلة بشكل مستقل تغطي لغات أفريقية وكريولية مثل الشونا والزولو والخوسا والملغاشية والكريولية الهايتية والقبائلية. وبالاقتصار على تحويلات ASR المؤكَّدة حسب رمز اللغة المميّز، فذلك ما لا يقل عن 74 لغة مختلفة لديها اليوم أداة تعرّف على الكلام مُكمَّمة تعمل دون اتصال — قبل احتساب الفهرس المنفصل لأصوات TTS المُصدَّرة للغات مثل الباسكية والأراغونية والأستورية والغاليسية والأوكسيتانية والعربية.
إن لم يكن للغتك أو لجهازك أي شيء يعمل دون اتصال اليوم
لا تحصل معظم اللغات أبدًا على خيار كلام تجاري يعمل دون اتصال، لأن سوق تلك اللغة وحدها لا يبرّر لمزوّد بناء واحد. النمط المذكور أعلاه — أخذ نقطة تفتيش مفتوحة موجودة، وتحويلها إلى صيغة تعمل على العتاد الذي تملكه فعلًا، وتكميمها لتتّسع، والتحقق منها مقابل الأصل، ووصلها في إضافة — لا يعتمد على حجم السوق. إنه يعتمد على وجود نقطة تفتيش مفتوحة تبدأ منها، وهو أمر يزداد شيوعًا.
إن كان لديك نموذج كلام لا يعمل إلا على وحدة معالجة رسومات للتدريب، أو جهاز لا يملك حاليًا أي دعم صوتي يعمل دون اتصال بلغته، تواصل معنا أو اطّلع على كيف يبدو هذا العمل من البداية إلى النهاية في صفحة خدماتنا.