چیت‌شیت

ویژگی‌های صوتی، دسته‌بندی و معیارها

Audio Features, Classification and Metrics

نمونه‌برداری، فریم، پنجره، مل، MFCC، دسته‌بندی و امتیازدهی صوت. کتابخانه استاندارد پایتون از درس‌ها.

  • ۱۲ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. از شکل‌موج تا برچسب
  2. فرمول‌ها
  3. پیش‌فرض‌های ویژگی‌ها
  4. وظایف در قالب کد
  5. خط مبنای k-NN با MFCC
  6. امتیازدهی مدل
  7. کتابخانه‌ها
  8. انتخاب دسته‌بند
  9. معیارها
  10. عیب‌یابی
  11. پرسش‌ها
  12. نکات

از شکل‌موج تا برچسب

معماری
اندازه (magnitude)لگاریتمتبدیل DCTکسینوسیشکل‌موجاعداد اعشاری در بازه [-1, 1]فریم‌ها400 نمونه، گام پرش 160تبدیل STFTپنجره هان، FFTبانک فیلتر مل80 مثلثاسپکتروگرام لگاریتمی مِلورودی Whisperضرایب MFCCتبدیل DCT-II، نگه‌داشتن 13 تاادغام (Pool)میانگین + واریانس، 26 بُعددسته‌بندمدل‌های k-NN، CNN، AST و BEATs

فرمول‌ها

مفهوم‌ها
زمان
$t = n / sr$. کلیپ 10 ثانیه‌ای با 16 کیلوهرتز شامل 160,000 مقدار اعشاری است.
نایکوئیست
$sr / 2$. انرژی بالاتر از آن دچار تداخل فرکانسی با بین‌های پایین‌تر می‌شود.
تداخل فرکانسی
تن 7 کیلوهرتز نمونه‌برداری‌شده در 10 کیلوهرتز به $10 - 7 = 3$ کیلوهرتز بازتاب می‌شود.
بین
بین $k$ برابر است با $k \cdot sr / N$ هرتز. وضوح برابر با $sr / N$ است.
مِل
$m = 2595 \cdot \log_{10}(1 + f / 700)$
هان
$w(n) = 0.5 (1 - \cos(2 \pi n / (N - 1)))$
فریم‌ها
$1 + (T - L) / hop$. 10 ثانیه در 16 کیلوهرتز یعنی 998 فریم.
میکس‌آپ
$x = \lambda x_1 + (1 - \lambda) x_2$، و همین فرمول برای $y$.

پیش‌فرض‌های ویژگی‌ها

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
Frame length40025 میلی‌ثانیه در 16 کیلوهرتز
Hop16010 میلی‌ثانیه در 16 کیلوهرتز
WindowHannلبه‌های فریم را به صفر میل می‌دهد
Mel bins, ASR80پوشش 0 تا 8 کیلوهرتز
Mel bins, classification128مدل‌های AST، PANNs و BEATs
MFCC count13ضریب 0 را حذف کنید، نشان‌دهنده انرژی است
Log floor `eps`1e-10log(mel_spec + 1e-10)
Keyword spotting40 MFCCsمناسب دستگاه‌های بسیار کوچک

وظایف در قالب کد

کار و کد
وظیفهکد
سنتز یک تن صوتیsine(freq_hz, sr, seconds, amp=0.5)
یافتن فرکانس غالبpeak_freq(samples, sr)
فریم‌بندی سیگنالframe_signal(signal, frame_len, hop)
اندازه STFTstft_magnitude(signal, frame_len, hop)
بانک فیلتر ملmel_filterbank(n_mels, n_fft, sr)
اسپکتروگرام لگاریتمی مِلlog_transform(mel_spec, eps=1e-10)
ضرایب MFCCdct_ii(x, n_coeffs)
رأی‌گیری k-NNknn(q, bank, labels, k=3)

خط مبنای k-NN با MFCC

کد
python
sr = 8000                                   # نرخ دمو در کد
mag = stft_mag(signal, frame_len, hop)      # هان، سپس DFT برای هر فریم
fb = mel_filterbank(n_mels, frame_len, sr)  # n_mels x (n_fft // 2 + 1)
mels = apply_filterbank(mag, fb)            # مجموع وزندار برای هر بین مِل
lm = log_transform(mels)                    # log(max(v, eps))
feats = [dct_ii(f, n_mfcc) for f in lm]     # 13 ضریب به ازای هر فریم
emb = summarize(feats)                      # میانگین + واریانس، 26 بُعد
pred = knn(emb, X_train, y_train, k=3)      # k تای برتر بر اساس کسینوسی، رأی‌گیری اکثریت

امتیازدهی مدل

کد
python
from jiwer import wer, Compose, ToLowerCase, RemovePunctuation, Strip
transform = Compose([ToLowerCase(), RemovePunctuation(), Strip()])
score = wer(truth="Please turn on the lights.", hypothesis="please turn on the light",
            truth_transform=transform, hypothesis_transform=transform)
sv = EncoderClassifier.from_hparams("speechbrain/spkrec-ecapa-voxceleb")
secs = torch.nn.functional.cosine_similarity(emb_ref, emb_clone, dim=-1).item()  # معیار SECS
fad = FrechetAudioDistance()
score = fad.get_fad_score("generated_folder/", "reference_folder/")              # کمتر باشد بهتر است

کتابخانه‌ها

دستورها
دستورکارکرد
soundfileخواندن WAV، FLAC و OGG به عنوان float32
torchaudio.transforms.Resampleنمونه‌برداری مجدد با قابلیت داخلی حذف تداخل فرکانسی
numpy.fft.rfftتبدیل FFT حقیقی برای صوت حقیقی
torch.stftتبدیل STFT برداری‌شده
librosa.power_to_dbمقدار دسی‌بل نرمال‌شده با مرجع
ffprobeگزارش نرخ نمونه‌برداری، کانال‌ها و کدک فایل
jiwerمعیارهای WER و نرخ خطای نویسه همراه با نرمال‌سازی
ASTForAudioClassification.from_pretrainedبارگذاری AST جهت فاین‌تیون

انتخاب دسته‌بند

مفهوم‌ها
زیر 1000 کلیپ
مدل k-NN روی میانگین‌های MFCC به همراه افزایش داده صوتی.
1 تا 100 هزار کلیپ
فاین‌تیون BEATs یا AST.
بیش از 100 هزار کلیپ
آموزش از صفر یا فاین‌تیون Whisper-encoder.
بلادرنگ، لبه شبکه
مدل CNN با 40-MFCC، کوانتایز شده به int8.
چندبرچسبی
مدل BEATs-iter3 با تابع زیان (loss) از نوع BCE، میکس‌آپ و SpecAugment.
کلاس‌های مانعة‌الجمع
گزارش دقت top-1 و top-5.
کلاس‌های نامتوازن
گزارش بازخوانی به ازای هر کلاس و macro F1.

معیارها

اصطلاح‌ها
WER
نرخ خطای کلمات. بعد از نرمال‌سازی: (S + D + I) / N.
CER
نرخ خطای نویسه. مناسب زبان‌های نواختی.
RTFx
ثانیه‌های پردازش صوت به ازای هر ثانیه زمان واقعی. بیشتر باشد بهتر است.
MOS
میانگین نمره نظر. از 1 تا 5، بیش از 20 شنونده، بیش از 100 نمونه.
UTMOS
پیش‌بینی‌کننده یادگیری‌شده MOS. همبستگی حدود 0.9 با MOS انسانی.
SECS
شباهت کسینوسی ECAPA بین مرجع و کلون. بالای 0.75 قابل تشخیص است.
EER
آستانه‌ای که در آن FAR برابر با FRR است. برای ECAPA در VoxCeleb1-O مقدار: 0.87%.
DER
فرمول: (FA + Miss + Confusion) تقسیم بر کل زمان گوینده.
FAD
فاصله فرشه روی امبدینگ‌های VGGish. کمتر باشد بهتر است.

عیب‌یابی

عیب‌یابی
  • خروجی نامفهوم مشابه باگ مدلی

    علت
    ورودی استریوی 44.1 کیلوهرتز به Whisper
    راه‌حل
    نمونه‌برداری مجدد به مونو 16 کیلوهرتز و نوع float32
  • پیک FFT در فرکانس اشتباه

    علت
    تداخل فرکانسی انرژی بالاتر از نایکویست
    راه‌حل
    اعمال فیلتر پایین‌گذر قبل از کاهش نرخ نمونه‌برداری
  • شکست خاموش پس از استقرار

    علت
    80 مِل در آموزش، 128 مِل در اینفرنس
    راه‌حل
    ثبت ابعاد ویژگی در لاگ هر دو سمت
  • شکل مِل‌ها متفاوت به نظر می‌رسد

    علت
    استخراج ویژگی در 22.05 کیلوهرتز
    راه‌حل
    اصلاح نرخ نمونه‌برداری پیش از استخراج ویژگی
  • ورودی Whisper اشتباه به نظر می‌رسد

    علت
    dB-mel به جای log-mel
    راه‌حل
    تغذیه با log-mel. کدهای اختصاصی خودکار تشخیص نمی‌دهند
  • دو برابر شدن WER در محیط عملیاتی

    علت
    نرمال‌سازی در سطح هر گفتار در آموزش، و سراسری در اینفرنس
    راه‌حل
    استفاده از نرمال‌سازی یکسان
  • فریم‌های انتهایی یکنواخت و تخت

    علت
    پدینگ با صفر در انتهای کلیپ
    راه‌حل
    پدینگ متقارن یا تکرار فریم‌ها
  • مخفی شدن 30% خطا در لهجه‌ها پشت 5% WER

    علت
    WER تجمیعی
    راه‌حل
    گزارش‌دهی به تفکیک بخش‌های جمعیت‌شناختی

پرسش‌ها

پرسش و پاسخ
چرا مِل، نه هرتز؟
گوش انسان زیروبمی را در مقیاس لگاریتمی می‌شنود.
چرا پنجره‌بندی؟
نشتی طیفی را در لبه‌های فریم حذف می‌کند.
چرا اندازه لگاریتمی؟
اندازه‌های خام 5 تا 6 مرتبه بزرگی را پوشش می‌دهند.
تبدیل FFT بزرگتر؟
وضوح فرکانسی بهتر، وضوح زمانی ضعیف‌تر.
چرا FFT، نه DFT؟
پیچیدگی DFT از O(N²) است؛ FFT از O(N log N) است.
چرا minDCF؟
هزینه را در یک نقطه کاری مشخص وزن‌دهی می‌کند.

نکات

نکته‌ها
  • قبل از تطبیق هر چیزی، نرخ نمونه‌برداری را تطبیق دهید.
  • اگر روی موسیقی کار نمی‌کنید، با 80 اسپکتروگرام لگاریتمی مِل شروع کنید.
  • کار را با یک بک‌بون منجمد شروع کنید، نه یک مدل جدید از صفر.
  • نمونه‌برداری متوازن را در آموزش به کار ببرید، نه در ارزیابی.
  • پیش از محاسبه امتیاز WER متن را نرمال کنید. قوانین نرمال‌سازی را گزارش دهید.
  • معیارهای P50/P95/P99 را برای تاخیر گزارش کنید.
  • یک مجموعه نگه‌داشته‌شده اختصاصی داشته باشید. بنچمارک‌های عمومی اشباع می‌شوند.