متاح --:--محلي ابدأ مشروعًا
→ كل المقالات

Faster Whisper: تفريغ الصوت إلى نص محليًا على المعالج أو بطاقة الرسوميات

دليل عملي لاستخدام faster-whisper لتشغيل Whisper محليًا: اختيار حجم النموذج، والمعالج أو بطاقة الرسوميات، وتكميم int8، وتصفية الصمت، والتفريغ المباشر.

  • تحويل الكلام إلى نص
  • الذكاء الاصطناعي المحلي
  • Whisper

معظم خدمات تفريغ الصوت تعمل بالطريقة نفسها: ترفع الملف الصوتي، وتنتظر، ثم يصلك النص. هذا مقبول لبودكاست. لكنه غير مقبول لمكالمة مع عميل، أو استشارة طبية، أو اجتماع داخلي، أو أي شيء لا تريد تسليمه لطرف ثالث.

تشغيل Whisper محليًا يحل المشكلة. الصوت لا يغادر جهازك، ولا فاتورة بالدقيقة، ويعمل دون اتصال. وأسهل طريقة أعرفها لفعل ذلك جيدًا هي faster-whisper. استخدمته لبناء LiveTranscribe، أداة مفتوحة المصدر صغيرة تفرّغ صوت أي تطبيق مباشرة على حاسوبي.

إليك ما هو faster-whisper، وكيف تختار إعداداتك، وما الذي يجب الانتباه إليه.

ما هو faster-whisper

Whisper هو نموذج التعرف على الكلام المفتوح من OpenAI. وfaster-whisper إعادة تنفيذ له فوق CTranslate2، وهو محرك استدلال لنماذج Transformer. أوزان النموذج نفسها، ومحرك مختلف تحتها.

ويقول ملف README للمشروع إنه "أسرع حتى 4 مرات من openai/whisper بالدقة نفسها مع استهلاك ذاكرة أقل".

ثلاث ميزات تجعله عمليًا:

  • التكميم. يمكن تشغيل النموذج بدقة 8 بت (int8) على المعالج وبطاقة الرسوميات، أو بدقة float16 على بطاقة الرسوميات. ذاكرة أقل وسرعة أكبر، غالبًا مع خسارة طفيفة في الدقة.
  • كشف النشاط الصوتي. مع vad_filter=True يستخدم نموذج Silero VAD لتخطي المقاطع الخالية من الكلام. هذا يوفر الوقت ويقلل العبارات التي يخترعها Whisper أحيانًا أثناء الصمت.
  • التوقيتات. تحصل على مقاطع ببداية ونهاية، وتوقيت لكل كلمة إن طلبته.

مثال بسيط لتشغيل Whisper محليًا

ثبّته بالأمر pip install faster-whisper، ثم:

from faster_whisper import WhisperModel

model = WhisperModel("small", device="cpu", compute_type="int8")

segments, info = model.transcribe("meeting.wav", vad_filter=True)
print("Detected language:", info.language)

for segment in segments:
    print(f"[{segment.start:.1f}s -> {segment.end:.1f}s] {segment.text}")

تفصيل يفاجئ كثيرين: segments مولّد (generator)، أي أن التفريغ لا يجري فعليًا إلا عندما تمر عليه في الحلقة. إن أردت النتيجة كاملة في الذاكرة، ضعه داخل list().

وللتشغيل على بطاقة رسوميات NVIDIA، استخدم device="cuda" وcompute_type="float16" (أو int8_float16 لتوفير الذاكرة). الإصدار الحالي من CTranslate2 يتطلب CUDA 12 وcuDNN 9. وإن كانت تعريفات جهازك أقدم، فملف README يذكر الإصدارات المناسبة لها.

اختيار حجم النموذج

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

دليل تقريبي:

  • tiny وbase: لتجارب سريعة، أو لصوت نقي جدًا على جهاز ضعيف.
  • small: خيار افتراضي معقول على المعالج. كافٍ للإنجليزية والفرنسية الواضحتين، وسريع بما يكفي لمواكبة الصوت المباشر على حاسوب محمول حديث.
  • medium وlarge: عندما تهم الدقة أكثر من السرعة، للتسجيلات المشوشة واللكنات القوية والعربية. وتعمل براحة على بطاقة رسوميات جيدة.

وهناك نسخ للإنجليزية فقط (small.en وغيرها) أفضل قليلًا إن كانت الإنجليزية كل ما تحتاجه.

الإجابة الصادقة هي أن تختبر. خذ عشر دقائق من صوتك الحقيقي، وجرّب حجمين أو ثلاثة، واقرأ النتيجة. اختبارات الأداء على بيانات نظيفة لن تخبرك كيف يتعامل النموذج مع قاعة اجتماعاتك.

المعالج أم بطاقة الرسوميات؟

لا تحتاج إلى بطاقة رسوميات للتفريغ محليًا. مع int8 ونموذج صغير، يؤدي معالج حديث الكثير. وتصبح بطاقة الرسوميات مجدية عندما:

  • تريد النماذج الكبيرة بسرعة معقولة،
  • تعالج ساعات من التسجيلات دفعة واحدة،
  • تفرّغ مباشرة بنموذج أكبر وتحتاج إلى تأخير منخفض.

بطاقة رسوميات استهلاكية واحدة تكفي لتشغيل النماذج الكبيرة براحة. وهو المبدأ نفسه في باقي الذكاء الاصطناعي المحلي: نموذج مختار جيدًا على جهاز تملكه يتفوق غالبًا على الدفع مقابل كل طلب.

التفريغ المباشر: التقطيع والتأخير

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

وهذا يفرض بعض الموازنات:

  • طول المقطع. المقاطع القصيرة تعني تأخيرًا أقل لكن سياقًا أقل، فتُقطع الكلمات على الأطراف أو يُساء فهمها. والمقاطع الأطول أدق لكنها تبدو متأخرة. بضع ثوانٍ حل وسط معقول.
  • الصمت. تشغيل كشف النشاط الصوتي على كل مقطع يوفر الوقت ويقلل النص المخترع.
  • معدل العينات. يعمل Whisper على صوت أحادي بتردد 16 كيلوهرتز، فأعد التحويل قبل التفريغ.
  • مواكبة الإيقاع. إذا استغرق تفريغ المقطع وقتًا أطول من مدته، ستتأخر. هنا تختار نموذجًا أصغر أو تنتقل إلى بطاقة الرسوميات.

كيف يستخدمه LiveTranscribe

LiveTranscribe أداة سطر أوامر كتبتها، تلتقط صوت تطبيق محدد، مثل تبويب متصفح أو مكالمة فيديو أو مشغّل وسائط، وتفرّغه مباشرة في الطرفية.

طريقة عملها:

  1. مخرج صوتي افتراضي في PipeWire يقسم صوت التطبيق إلى فرعين. فرع يعود إلى مكبرات الصوت فتظل تسمع بشكل طبيعي، والآخر يغذي أداة التفريغ.
  2. يفرّغ faster-whisper مقاطع مدتها 3 ثوانٍ بتردد 16 كيلوهرتز، مع تصفية النشاط الصوتي وتوقيت لكل كلمة. ويُختار حجم النموذج عند التشغيل.
  3. تظهر الكلمات في الطرفية فور التعرف عليها، مجمّعة في فقرات حسب فترات الصمت، ويُحفظ النص مع توقيتاته.
  4. عند الخروج، يُعاد توجيه الصوت الأصلي كما كان.

ولا شيء يغادر الجهاز في أي لحظة.

اللغات والعربية واللهجات

Whisper متعدد اللغات ويكتشف اللغة تلقائيًا، أو يمكنك تحديدها بـlanguage="fr" أو language="ar". وتحديدها بنفسك أكثر موثوقية عندما تكون الثواني الأولى صمتًا أو موسيقى.

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

لماذا التفريغ المحلي مهم

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

والتفريغ غالبًا هو الخطوة الأولى في سلسلة أطول: تلخيص اجتماع، أو استخراج المهام، أو معالجة رسالة صوتية في مساعد واتساب. وإذا كانت الخطوة الأولى محلية، يمكن أن يتبعها الباقي.

لنعمل معًا

أنا إدريس بريكسين، مهندس برمجيات وتعلّم آلة مقيم في المغرب. أبني أنظمة ذكاء اصطناعي محلية ومتعددة الوسائط من البداية إلى النهاية، من نماذج الصوت والرؤية إلى البرمجيات المحيطة بها. اطّلع على LiveTranscribe وباقي أعمالي.

إذا كنت تحتاج إلى تفريغ صوتي، أو سلسلة معالجة صوتية، تبقي الصوت على أجهزتك، أرسل لي وصفًا موجزًا.