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) است یا اولین شخص در بانک ثبت نام شما ( شناسایی: 1N) است؟ یا نه این یک سخنران ناشناخته ( باز-set) است؟

قبل از سال ۲۰۱۸: GMM-UBM + i-وکتورها. EER منطقی اما شکننده برای تغییر کانال (فون در مقابل لپ تاپ) و احساسات. 20182022: x-وکتورها (هک ستون فقرات TDNN با حاشیه زاویه ای آموزش دیده است). 2022+: ECAPA-TDNN و WavLM-بند های بزرگ. تا سال ۲۰۲۶ این زمینه توسط سه مدل و یک متریک تحت سلطه قرار دارد.

اندازه گیری اینهEER نرخ اشتباهات برابر. حد قرار گیری خود را تنظیم کنید تا نرخ پذیرش غلط = نرخ رد غلط. کراسور EER است. در هر مقاله، هر لیست رتبه بندی، هر تماس خرید استفاده می شود.

مفهوم

!Enrollment + verification pipeline with embedding + cosine + EER

The pipeline.ثبت: ثبت 530 ثانیه از بلندگو هدف؛ محاسبه یک ورق گذاری با ابعاد ثابت (192-d برای ECAPA-TDNN، 256-d برای WavLM- بزرگ). تایید: دریافت ورق گذاری بیان آزمون؛ محاسبه شباهت cosine؛ مقایسه با یک حد.

ECAPA-TDNN (2020, still dominant 2026).تاکید بر توجه، گسترش و جمع آوری کانال - شبکه عصبی زمان-خاموشی. بلوک های 1D conv با تحریک فشار، جمع آوری توجه چند سر، و سپس لایه خطی به 192-d. آموزش دیده در VoxCeleb 1+2 (2،700 سخنران، 1.1M اظهارات) با ضایعات ضمیمه زاویه ای (AAM-softmax).

WavLM-SV (2022+).تنظیم دقیق یک ستون فقرات SSL WavLM بزرگ با از دست دادن AAM. کیفیت بالاتر اما کند تر 300+ MB در مقابل 15 MB.

x-vector (baseline).جمع آوری آمار TDNN +. کلاسیک؛ هنوز هم در CPU / کناره مفید است.

AAM-softmax.نرم ترین استاندارد با مرزهای اضافه شده mدر فضای زاویه ای: cos(θ + m)برای کلاس درست. نیروی جداسازی زاویه بین کلاس ها.m=0.2، مقیاسs=30. .

امتیاز

  • Cosineبین ثبت نام و امتحانات ثبت نام.
  • PLDA (Probabilistic LDA).گنجانده شدن پروژه به فضای پنهان که در آن همان سخنران در مقابل سخنران مختلف نسبت احتمال شکل بسته دارد. اضافه شده در بالای cosine برای کاهش +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 کاهش یافته است).

آن را بسازید

مرحله ی اول: گنجانده شدن اسباب بازی از آمار MFCC

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). هر دو را گزارش کنید.

مرحله 4: تولید با 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.یک ثبت نام شور و صدای پر از زهر به لنگر می رسد.
  • 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 هر کدام).
  3. Hard.ثبت نام کامل را بسازید → روزانه → لوله های تایید با pyannote.audio. در مورد DER در سييت توسعه امي

اصطلاحات کلیدی

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.