Phase 06: Speech & Audio

التعرف على المتحدثين والتحقق منها

يسأل ASR "ماذا قالوا؟" يسأل التعرف على المتحدث "من قال ذلك؟" تبدو الرياضيات نفسها التوابع زائد كوسين ولكن كل قرار إنتاج يعتمد على رقم واحد EER.

Type: Build

Languages: Python

Prerequisites: Phase 6 · 02 (Spectrograms & Mel), Phase 5 · 22 (Embedding Models)

Time: ~45 minutes

المشكلة

يقول المستخدم كلمة مرور. تريد أن تعرف: هل هذا الشخص الذي يدعي أنه ( التحقق: 1) ، أو هل هو أول شخص في بنك التسجيل الخاص بك ( التعرف: 1) ؟ أو لا هل هذا متحدث مجهول ( مفتوح ) ؟

قبل عام 2018: GMM-UBM + i-متجهات. EER معقولة ولكن هشة للتحول إلى القناة (الهاتف مقابل الكمبيوتر المحمول) والعاطفة. 20182022: متجهات x (تدريب العمود الفقري TDNN مع الهامش الزاوي). 2022+: ECAPA-TDNN و WavLM-التركيبات الكبيرة. بحلول عام 2026 يهيمن على المجال ثلاثة نماذج ومريتر واحد.

المقياس هوEER معدل الأخطاء المتساوي. حدد عتبة قرارك بحيث يصل معدل قبول كاذب = معدل رفض كاذب. التقاطع هو EER. يستخدم في كل ورقة، كل قائمة، كل دعوة المشتريات.

المفهوم

!Enrollment + verification pipeline with embedding + cosine + EER

The pipeline.التسجيل: تسجيل 530 ثانية من مكبر الصوت المستهدف؛ حساب إضافة ذات الأبعاد الثابتة (192-d بالنسبة لـ ECAPA-TDNN، 256-d بالنسبة لـ WavLM-large). التحقق: الحصول على إضافة التصريحات الاختبارية؛ حساب تشابه الكوزين؛ مقارنة مع عتبة.

ECAPA-TDNN (2020, still dominant 2026).أكد الاهتمام القناة والانتشار والجمع - شبكة عصبية تأخير الوقت. كتلة 1D conv مع إثارة الضغط ، جمع الاهتمام متعدد الرؤوس ، تليها طبقة خطية إلى 192-d. تدرب على VoxCeleb 1 + 2 (2،700 مكبر ، 1.1M تصريحات) مع فقدان هامش زاوية إضافية (AAM-softmax).

WavLM-SV (2022+).ضبط العمود الفقري SSL الكبير المميزة مسبقاً مع فقدان AAM. جودة أعلى ولكن أبطأ 300+ MB مقابل 15 MB.

x-vector (baseline).تجمع إحصائيات TDNN +. كلاسيكي؛ لا يزال مفيدًا على CPU / edge.

AAM-softmax.المعدل القياسي لينة مع حافة إضافية mفي المساحة الزاوية: cos(θ + m)للطبقة الصحيحة. قوى الفصل الزاوي بين الفئات. نموذجية m=0.2، حجمs=30. . .

تسجيل النتيجة

  • Cosineبين التسجيل والإختبار. القرار القائم على العدوان.
  • PLDA (Probabilistic LDA).إضافة المشروع إلى مساحة مختفية حيث يكون لدى المتحدث نفسه مقابل المتحدث المختلف نسبة احتمالية في شكل مغلق. إضافة فوق الكوسين لخفض 1020% من EER. معيار قبل عام 2020؛ لا يستخدم الآن إلا في إعدادات مجموعة مغلقة.
  • Score normalization. S-normأوAS-norm: تعاديل كل نتيجة مقابل مجموعة من الوسائل والمعدات المزيفة.

الأرقام التي يجب أن تعرفها (2026)

ModelVoxCeleb1-O EERParamsThroughput (A100)
x-vector (classic)3.10%5 M400× RT
ECAPA-TDNN0.87%15 M200× RT
WavLM-SV large0.42%316 M20× RT
Pyannote 3.1 segmentation + embedding0.65%6 M100× RT
ReDimNet (2024)0.39%24 M100× RT

الإسهال

"من تحدث عندما" في مقطع متعدد المتحدثين. خط الأنابيب: VAD → قطاع → تضمين كل قطعة → مجموعة (مجموعية أو طيفية) → حدود سلسة. كومة حديثة: pyannote.audio3.1 ، الذي يجمع قسم المتكبرين + إدراجهم + تجميعهم وراء مكالمة واحدة. 2026 SOTA DER على AMI هو ~ 15% (انخفض من 23% في 2022).

بناءها

الخطوة الأولى: إدراج الألعاب من إحصاءات المجلس

pythondef embed_mfcc_stats(signal, sr):
    frames = featurize_mfcc(signal, sr, n_mfcc=13)
    mean = [sum(f[i] for f in frames) / len(frames) for i in range(13)]
    std = [
        math.sqrt(sum((f[i] - mean[i]) ** 2 for f in frames) / len(frames))
        for i in range(13)
    ]
    return mean + std  # 26-d

ليس من أجل التدريس فقطcode/main.pyيستخدم هذا كدليل على المفهوم على بيانات مكبرات صوتية اصطناعية.

الخطوة الثانية: تشابه الكوسين + عتبة

pythondef cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    na = math.sqrt(sum(x * x for x in a))
    nb = math.sqrt(sum(x * x for x in b))
    return dot / (na * nb) if na and nb else 0.0

def verify(enroll, test, threshold=0.75):
    return cosine(enroll, test) >= threshold

الخطوة الثالثة: EER من أزواج التشابه

pythondef eer(same_scores, diff_scores):
    thresholds = sorted(set(same_scores + diff_scores))
    best = (1.0, 1.0, 0.0)  # (fa, fr, threshold)
    for t in thresholds:
        fr = sum(1 for s in same_scores if s < t) / len(same_scores)
        fa = sum(1 for s in diff_scores if s >= t) / len(diff_scores)
        if abs(fa - fr) < abs(best[0] - best[1]):
            best = (fa, fr, t)
    return (best[0] + best[1]) / 2, best[2]

العائدات (eer، threshold_at_eer).

الخطوة الرابعة: إنتاج مع SpeechBrain

pythonfrom speechbrain.pretrained import EncoderClassifier

clf = EncoderClassifier.from_hparams(source="speechbrain/spkrec-ecapa-voxceleb")

# enroll: average the embeddings of 3-5 clean samples
enroll = torch.stack([clf.encode_batch(load(x)) for x in enrollment_clips]).mean(0)
# verify
score = clf.similarity(enroll, clf.encode_batch(load("test.wav"))).item()
verdict = score > 0.25   # ECAPA typical threshold; tune on your data

الخطوة 5: قم بتدوين يومياتك مع بيانوت

pythonfrom pyannote.audio import Pipeline

pipe = Pipeline.from_pretrained("pyannote/speaker-diarization-3.1")
diarization = pipe("meeting.wav", num_speakers=None)
for turn, _, speaker in diarization.itertracks(yield_label=True):
    print(f"{turn.start:.1f}–{turn.end:.1f}  {speaker}")

استخدمها

"مجموعة 2026"

SituationPick
Closed-set 1:1 verification, edgeECAPA-TDNN + cosine threshold
Open-set verification, cloudWavLM-SV + AS-norm
Diarization (meetings, podcasts)pyannote/speaker-diarization-3.1
Anti-spoofing (replay / deepfake detection)AASIST or RawNet2
Tiny embedded (KWS + enrollment)Titanet-Small (NeMo)

الفخاخ

  • Channel mismatch.نموذج تدرب على VoxCeleb (فيديو الويب) ≠ صوت مكالمة الهاتف. دائما تقييم على القناة المستهدفة.
  • Short utterances.يحتقر EER بشكل حاد تحت 3 ثوان من الصوت التجريبي.
  • Enrollment with noise.واحد من المشاركات الضوضاء تسمم المُرسومة. استخدم ≥3 عينات نظيفة ومتوسط.
  • Fixed threshold across conditions.دائماً ضبط العد على مجموعة من المطورين المحتملين من النطاق المستهدف.
  • Cosine on non-normalized embeddings.L2 تطبيع أولاً؛ وإلا فإن الحجم يهيمن.

أرسله

إبقواoutputs/skill-speaker-verifier.md- نموذج اختيار، بروتوكول التسجيل، خطة تحديد العدوان، وحماية الاحتيال.

التمارين

  1. Easy.أركضcode/main.py. يُبني "المكبرين" الاصطناعيين (ملفات صوت مختلفة) ، ويتسجل ويحسب EER على قائمة تجريبية من 100 زوج.
  2. Medium.استخدم SpeechBrain ECAPA على 30 كلمة VoxCeleb1 (كل 5 مكبرات صوت × 6) احسب EER مع cosine مقابل PLDA.
  3. Hard.بناء التسجيل الكامل → يومي → التحقق من خط الأنابيب مع pyannote.audioتقييم DER على جهاز AMI

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

TermWhat people sayWhat it actually means
EERThe headline metricThreshold where False Accept = False Reject.
Verification1:1"Is this Alice?"
Identification1:N"Who is speaking?"
Open-setUnknown possibleTest set can contain unenrolled speakers.
EnrollmentRegisteringComputing a speaker's reference embedding.
AAM-softmaxThe lossSoftmax with additive angular margin; forces cluster separation.
PLDAClassic scoringProbabilistic LDA; likelihood-ratio scoring on top of embeddings.
DERDiarization metricDiarization Error Rate — miss + false alarm + confusion.

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

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.