[مدونة] [مقالة] [بطاقة نموذجية] [مثال كولاب]
Whisper هو نموذج للتعرف على الكلام للأغراض العامة. تم تدريبه على مجموعة كبيرة من البيانات الصوتية المتنوعة وهو أيضًا نموذج متعدد المهام يمكنه التعرف على الكلام متعدد اللغات وترجمة الكلام وتحديد اللغة.
يتم تدريب نموذج تسلسل إلى تسلسل للمحول على مهام معالجة الكلام المختلفة، بما في ذلك التعرف على الكلام متعدد اللغات، وترجمة الكلام، وتحديد اللغة المنطوقة، واكتشاف النشاط الصوتي. يتم تمثيل هذه المهام بشكل مشترك كسلسلة من الرموز المميزة التي يمكن التنبؤ بها بواسطة وحدة فك التشفير، مما يسمح لنموذج واحد باستبدال العديد من مراحل خط أنابيب معالجة الكلام التقليدي. يستخدم تنسيق التدريب على المهام المتعددة مجموعة من الرموز المميزة التي تعمل كمحددات المهام أو أهداف التصنيف.
استخدمنا Python 3.9.9 وPyTorch 1.10.1 لتدريب نماذجنا واختبارها، ولكن من المتوقع أن تكون قاعدة التعليمات البرمجية متوافقة مع Python 3.8-3.11 وإصدارات PyTorch الحديثة. تعتمد قاعدة التعليمات البرمجية أيضًا على عدد قليل من حزم Python، وأبرزها tiktoken الخاص بـ OpenAI لتنفيذها السريع للرمز المميز. يمكنك تنزيل وتثبيت (أو تحديث) أحدث إصدار من Whisper باستخدام الأمر التالي:
pip install -U openai-whisper
وبدلاً من ذلك، سيقوم الأمر التالي بسحب وتثبيت أحدث التزام من هذا المستودع، بالإضافة إلى تبعيات Python الخاصة به:
pip install git+https://github.com/openai/whisper.git
لتحديث الحزمة إلى الإصدار الأحدث من هذا المستودع، يرجى تشغيل:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
ويتطلب أيضًا تثبيت أداة سطر الأوامر ffmpeg
على نظامك، والتي تتوفر لدى معظم مديري الحزم:
# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg
# on Arch Linux
sudo pacman -S ffmpeg
# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg
# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg
# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg
قد تحتاج إلى تثبيت rust
أيضًا، في حالة عدم توفير tiktoken لعجلة مسبقة الصنع لمنصتك. إذا رأيت أخطاء التثبيت أثناء أمر pip install
أعلاه، فيرجى اتباع صفحة البدء لتثبيت بيئة تطوير Rust. بالإضافة إلى ذلك، قد تحتاج إلى تكوين متغير بيئة PATH
، على سبيل المثال، export PATH="$HOME/.cargo/bin:$PATH"
. إذا فشل التثبيت مع No module named 'setuptools_rust'
، فستحتاج إلى تثبيت setuptools_rust
، على سبيل المثال عن طريق تشغيل:
pip install setuptools-rust
هناك ستة أحجام للنماذج، أربعة منها بإصدارات باللغة الإنجليزية فقط، مما يوفر مفاضلات بين السرعة والدقة. فيما يلي أسماء النماذج المتوفرة ومتطلبات الذاكرة التقريبية وسرعة الاستدلال بالنسبة للنموذج الكبير. يتم قياس السرعات النسبية الموضحة أدناه عن طريق نسخ الكلام باللغة الإنجليزية على جهاز A100، وقد تختلف السرعة الفعلية بشكل كبير اعتمادًا على العديد من العوامل بما في ذلك اللغة وسرعة التحدث والأجهزة المتاحة.
مقاس | حدود | نموذج باللغة الإنجليزية فقط | نموذج متعدد اللغات | VRAM المطلوبة | السرعة النسبية |
---|---|---|---|---|---|
صغير الحجم | 39 م | tiny.en | tiny | ~1 جيجا بايت | ~10x |
قاعدة | 74 م | base.en | base | ~1 جيجا بايت | ~7x |
صغير | 244 م | small.en | small | ~2 جيجا بايت | ~4x |
واسطة | 769 م | medium.en | medium | ~5 جيجا بايت | ~2x |
كبير | 1550 م | لا يوجد | large | ~10 جيجابايت | 1x |
توربيني | 809 م | لا يوجد | turbo | ~6 جيجا بايت | ~8x |
تميل نماذج .en
للتطبيقات باللغة الإنجليزية فقط إلى الأداء بشكل أفضل، خاصة بالنسبة لنماذج tiny.en
و base.en
لاحظنا أن الفرق يصبح أقل أهمية بالنسبة للنماذج small.en
medium.en
. بالإضافة إلى ذلك، يعد الطراز turbo
نسخة محسنة من الإصدار large-v3
الذي يوفر سرعة نسخ أسرع مع الحد الأدنى من التدهور في الدقة.
يختلف أداء Whisper بشكل كبير حسب اللغة. يوضح الشكل أدناه تفاصيل أداء نماذج large-v3
والإصدار large-v2
حسب اللغة، باستخدام WERs (معدلات خطأ الكلمات) أو CER (معدلات خطأ الأحرف، الموضحة بخط مائل ) التي تم تقييمها في مجموعات بيانات Common Voice 15 وFleurs. يمكن العثور على مقاييس WER/CER الإضافية المقابلة للنماذج ومجموعات البيانات الأخرى في الملحق د.1، د.2، ود.4 من الورقة، بالإضافة إلى درجات BLEU (دراسة التقييم ثنائي اللغة) للترجمة في الملحق د. 3.
سيقوم الأمر التالي بنسخ الكلام في الملفات الصوتية، باستخدام نموذج turbo
:
whisper audio.flac audio.mp3 audio.wav --model turbo
يعمل الإعداد الافتراضي (الذي يحدد الطراز turbo
) بشكل جيد لنسخ اللغة الإنجليزية. لنسخ ملف صوتي يحتوي على كلام بلغة غير الإنجليزية، يمكنك تحديد اللغة باستخدام خيار --language
:
whisper japanese.wav --language Japanese
ستؤدي إضافة --task translate
إلى ترجمة الخطاب إلى اللغة الإنجليزية:
whisper japanese.wav --language Japanese --task translate
قم بتشغيل ما يلي لعرض جميع الخيارات المتاحة:
whisper --help
راجع tokenizer.py للحصول على قائمة بجميع اللغات المتاحة.
يمكن أيضًا إجراء النسخ داخل Python:
import whisper
model = whisper . load_model ( "turbo" )
result = model . transcribe ( "audio.mp3" )
print ( result [ "text" ])
داخليًا، تقوم طريقة transcribe()
بقراءة الملف بأكمله ومعالجة الصوت من خلال نافذة منزلقة مدتها 30 ثانية، وإجراء تنبؤات تسلسلية انحدارية تلقائية في كل نافذة.
يوجد أدناه مثال لاستخدام whisper.detect_language()
و whisper.decode()
اللذين يوفران وصولاً بمستوى أقل إلى النموذج.
import whisper
model = whisper . load_model ( "turbo" )
# load audio and pad/trim it to fit 30 seconds
audio = whisper . load_audio ( "audio.mp3" )
audio = whisper . pad_or_trim ( audio )
# make log-Mel spectrogram and move to the same device as the model
mel = whisper . log_mel_spectrogram ( audio ). to ( model . device )
# detect the spoken language
_ , probs = model . detect_language ( mel )
print ( f"Detected language: { max ( probs , key = probs . get ) } " )
# decode the audio
options = whisper . DecodingOptions ()
result = whisper . decode ( model , mel , options )
# print the recognized text
print ( result . text )
الرجاء استخدام ؟ إظهار وإخبار الفئة في المناقشات لمشاركة المزيد من أمثلة استخدامات Whisper وامتدادات الجهات الخارجية مثل العروض التوضيحية على الويب، والتكامل مع الأدوات الأخرى، والمنافذ للأنظمة الأساسية المختلفة، وما إلى ذلك.
تم إصدار كود Whisper وأوزان النموذج بموجب ترخيص MIT. راجع الترخيص لمزيد من التفاصيل.