چیتشیت
ویژگیهای صوتی، دستهبندی و معیارها
Audio Features, Classification and Metrics
نمونهبرداری، فریم، پنجره، مل، MFCC، دستهبندی و امتیازدهی صوت. کتابخانه استاندارد پایتون از درسها.
فهرست مطالب
از شکلموج تا برچسب
معماریفرمولها
مفهومها- زمان
- $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 length | 400 | 25 میلیثانیه در 16 کیلوهرتز |
Hop | 160 | 10 میلیثانیه در 16 کیلوهرتز |
Window | Hann | لبههای فریم را به صفر میل میدهد |
Mel bins, ASR | 80 | پوشش 0 تا 8 کیلوهرتز |
Mel bins, classification | 128 | مدلهای AST، PANNs و BEATs |
MFCC count | 13 | ضریب 0 را حذف کنید، نشاندهنده انرژی است |
Log floor `eps` | 1e-10 | log(mel_spec + 1e-10) |
Keyword spotting | 40 MFCCs | مناسب دستگاههای بسیار کوچک |
وظایف در قالب کد
کار و کد| وظیفه | کد |
|---|---|
| سنتز یک تن صوتی | sine(freq_hz, sr, seconds, amp=0.5) |
| یافتن فرکانس غالب | peak_freq(samples, sr) |
| فریمبندی سیگنال | frame_signal(signal, frame_len, hop) |
| اندازه STFT | stft_magnitude(signal, frame_len, hop) |
| بانک فیلتر مل | mel_filterbank(n_mels, n_fft, sr) |
| اسپکتروگرام لگاریتمی مِل | log_transform(mel_spec, eps=1e-10) |
| ضرایب MFCC | dct_ii(x, n_coeffs) |
| رأیگیری k-NN | knn(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 را برای تاخیر گزارش کنید.
- یک مجموعه نگهداشتهشده اختصاصی داشته باشید. بنچمارکهای عمومی اشباع میشوند.