Phase 06: Speech & Audio

التهمس والعمارة والتنظيم

ويسبر هو محول نافذة مُعدل لـ 30 ثانية، مدرب على 680 ألف ساعة من أزواج الصوت والنص الضعيفة الإشراف على اللغات المتعددة. بنية واحدة، مهام متعددة، قوية عبر 99 لغة. ASR 2026 المرجعية.

Type: Build

Languages: Python

Prerequisites: Phase 6 · 04 (ASR), Phase 5 · 10 (Attention), Phase 7 · 05 (Full Transformer)

Time: ~75 minutes

المشكلة

كانت Whisper ، التي أصدرتها OpenAI في سبتمبر 2022 ، أول نموذج ASR يتم شحنها كسلع: ضغط الصوت ، الحصول على النص ، 99 لغة ، قوية على الضوضاء ، تعمل على جهاز محمول. بحلول عام 2024 ، أطلقت OpenAI تغيرات Large-v3 و Turbo ؛ بحلول عام 2026 ، Whisper هي الخط الأساسي الافتراضي لكل شيء من النسخة البودكاستية إلى مساعدات الصوت إلى ترجمات YouTube.

لكن "السمس" ليس خط أنابيب يمكنك التعامل معه كصندوق أسود إلى الأبد.

  1. ما هو عليه في الداخل
  2. كيفية إعطائه بصوتًا مقسمًا أو مدموعًا أو طويلًا بشكل صحيح
  3. متى و كيف

المفهوم

!Whisper encoder-decoder, tasks, chunked inference, fine-tune

Architecture.محول مُصطدر مُصطدر مُصطدر

  • المدخل: 30 ثانية من طيف الملفات المختلفة، 80 ميل، 10 ميس ارتفاع → 3000 إطار. المقاطع أقصر هي صفر-مغطاة، المقاطع أطول هي شق.
  • رمز: نموذج صبغي (خطوة 2) + Nكتلة تحويل، لـ (جيرج-ف3: 32 طبقة، 1280 عمق، 20 رأس
  • مُفكّر: Nكتلة محول مع التأثير الذاتي السبب + التأثير المتقاطع إلى خروج المُشفّر. نفس الحجم من المُشفّر.
  • الناتج: رموز BPE على كلمة 51 865 رمزا.

يحتوي Large-v3 على معايير 1.55B. يستخدم Turbo جهاز تشخيص 4 طبقات (من 32 ، ويقصر التأخير 8 × مع ضرب WER < 1٪.

The prompt format.ويشبر هو نموذج متعددة المهام يتم تحكمها بواسطة رموز خاصة في عرض المفكّر:

<|startoftranscript|><|en|><|transcribe|><|notimestamps|> Hello world.<|endoftext|>
  • <|en|> علامة اللغة؛ تجبر على سلوك الترجمة مقابل النسخة.
  • <|transcribe|>أو<|translate|> ترجمة الناتج الإنجليزي من أي إدخال اللغة، أو حرفيا.
  • <|notimestamps|> تخطي العلامات الزمنية على مستوى الكلمات (أكثر سرعة).

الإشارة هي ما يسمح لنموذج واحد القيام بمعظم المهام. تغيير <|en|>إلى<|fr|>ويقوم بنسخ الفرنسية

30-second window.كل شيء محصن إلى 30 ثانية. تحتاج المقاطع الطويلة إلى التجزئة؛ المقاطع القصيرة ملوية. النوافذ لا يتم تشغيلها بشكل طبيعي هذا هو السبب في وجود WhisperX، Whisper-Streaming، و أسرع-سوسر.

Log-mel normalization. (log_mel - mean) / stdحيث تأتي الإحصاءات من مجموعة تدريبية من قبل (ويسبر)whisper.audio.log_mel_spectrogram), لا librosa.feature.melspectrogram. . .

الإختلافات في عام 2026

VariantParamsLatency (A100)WER (LibriSpeech-clean)
Tiny39M1× realtime5.4%
Base74M1×4.1%
Small244M1×3.0%
Medium769M1×2.7%
Large-v31.55B2×1.8%
Large-v3-turbo809M8×1.58%
Whisper-Streaming (2024)1.55Bstreaming2.0%

التنسيق الدقيق

سير العمل القنوني في عام 2026:

  1. جمع 10100 ساعة من الصوت المستهدف مع النسخ المتحالفة.
  2. أركضtransformers.Seq2SeqTrainerمعgenerate_with_lossإعادة الاتصال
  3. فعالية المعلم: إدخال المعدلq_proj،k_proj،v_projمن الطبقات الاهتمام يقلل من ذاكرة GPU 4 × مع < 0.3 WER تكلفة.
  4. قم بتجميد المُشفّر إذا كان لديك <10 ساعات فقط قم بتحديد المُشفّر
  5. استخدم رمز التوهج الخاص بـ (ويسبر) و تنسيق الإستعلام؛ لا تغير أبداً رمز التوهج.

نتائج المجتمع: ضبط دقيقة متوسط على 20 ساعة من التنظيم الطبي يقلل من WER من 12% إلى 4.5% على المفردات الطبية.

بناءها

الخطوة الأولى: إشغيل "سيسبر" خارج الصندوق

pythonimport whisper
model = whisper.load_model("large-v3-turbo")
result = model.transcribe(
    "clip.wav",
    language="en",
    task="transcribe",
    temperature=0.0,
    condition_on_previous_text=False,  # prevents runaway repetition
)
print(result["text"])
for seg in result["segments"]:
    print(f"[{seg['start']:.2f}–{seg['end']:.2f}] {seg['text']}")

الاختيارات الرئيسية يجب عليك دائماً إلغاءها: temperature=0.0(معدل الاختيارات الافتراضية إلى 0.0 → 0.2 → 0.4 ... سلسلة الردع) ، condition_on_previous_text=False(منع مشكلة الهلوسة في القصص) ، وno_speech_threshold=0.6(اكتشاف الصمت)

الخطوة الثانية: شكل طويل

python# whisperx is the 2026 reference for long-form with word-level timestamps
import whisperx
model = whisperx.load_model("large-v3-turbo", device="cuda", compute_type="float16")
segments = model.transcribe("1hour.mp3", batch_size=16, chunk_size=30)

يضيف WhisperX (1) إغلاق Silero VAD، (2) تحديد مستوى الكلمات عبر wav2vec 2.0، (3) تحديث اليومي عبر pyannote.audio. "الفرس العمل لعام 2026" "للتنسيق الإنتاجي"

الخطوة الثالثة: ضبطها مع LoRA

pythonfrom transformers import WhisperForConditionalGeneration, WhisperProcessor
from peft import LoraConfig, get_peft_model

model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-large-v3-turbo")
lora = LoraConfig(
    r=16, lora_alpha=32, target_modules=["q_proj", "v_proj"],
    lora_dropout=0.1, bias="none", task_type="SEQ_2_SEQ_LM",
)
model = get_peft_model(model, lora)
# model.print_trainable_parameters()  -> ~3M trainable / 809M total

ثم حلقة مدربة قياسية نقطة تفتيش كل 1000 خطوة تقيم مع WER على الاحتفاظ.

الخطوة الرابعة: تحقق ما يتعلمه كل طبقة

python# Grab cross-attention weights during decode to see what the decoder attends to.
with torch.inference_mode():
    out = model.generate(
        input_features=features,
        return_dict_in_generate=True,
        output_attentions=True,
    )
# out.cross_attentions: layer × head × step × src_len

قم بتصور مع خريطة حرارة سترى التنحي الأفقي كما تقوم عملية مسح خطوات المعدل عبر إطر المعدل. هذه الأفقية هي مفهوم Whisper لخططات زمنية الكلمة.

استخدمها

"مجموعة 2026"

SituationPick
General English, offlineLarge-v3-turbo via whisperx
Mobile / edgeWhisper-Tiny quantized (int8) or Moonshine
Multilingual long-formLarge-v3 via whisperx + diarization
Low-resource languageFine-tune Medium or Turbo with LoRA
Streaming (2 s latency)Whisper-Streaming or Parakeet-TDT
Word-level timestampsWhisperX (forced alignment via wav2vec 2.0)

faster-whisper(CTranslate2 backend) هو أسرع وقت تشغيل استنتاج CPU + GPU في 2026 4x أسرع من الفانيليا مع نفس الخروج.

الفخاخ التي لا تزال تشغل في عام 2026

  • Hallucinated text on silence.تشمل التهمس المدربة على العناوين الفضائية "شكراً على مشاهدتكم!"، "تسجيل الدخول!"، كلمات الأغاني.
  • condition_on_previous_text cascade.تلوث الهلوسة واحدة النوافذ التاليةFalseإلا إذا كنت بحاجة إلى السرعة عبر القطاعات.
  • Short-clip padding.مقطع ثنائي يُمَكّنُ من الهلوسة في الصمتِ التالي.pad=Falseأو بوابة الفاد
  • Wrong mel stats.استخدام ملفات "ليبروزا" بدلاً من "سيسبر" ينتج إنتاج عشوائي تقريباً.whisper.audio.log_mel_spectrogram. . .

أرسله

إبقواoutputs/skill-whisper-tuner.mdتصميم خط إضافية أو استنتاجية من Whisper لسلطة معينة.

التمارين

  1. Easy.أركضcode/main.py.إنه يرمز على عرض على شكل "سيسبر" يحسب ميزانيات الشكل المفكورة ويقوم بطبع جدول المقطع لقطة لمدة 10 دقائق
  2. Medium.إثباطfaster-whisper، نسخ تقنية بودكاست لمدة 10 دقائق، مقارنة WER مع نسخة بشرية.language="auto"مقابل الإجبارlanguage="en". . .
  3. Hard.استخدام HF datasets، اختيار لغة تكافح معها (على سبيل المثال ، الأردو) ، تحسين متوسط مع لورا لمدة 2 فترات على مدار ساعتين ، وتقرير WER دلتا.

الشروط الرئيسية

TermWhat people sayWhat it actually means
30-sec windowWhisper's limitHard input cap; chunk longer audio.
SOTStart-of-transcript<|startoftranscript|> kicks off the decoder prompt.
Timestamps tokenTemporal alignmentEvery 0.02 s offset is a special token in the 51k vocab.
TurboThe fast variant4-decoder layers, 8× faster, <1% WER regression.
WhisperXThe long-form wrapperVAD + Whisper + wav2vec alignment + diarization.
LoRA fine-tuneEfficient tuningAdd low-rank adapters to attention; train ~0.3% of params.
HallucinationThe silent failureWhisper produces fluent English from noise/silence.

المزيد من القراءة

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.