چیت‌شیت

تولید موسیقی و مدل‌های صوتی-زبانی

Music Generation and Audio-Language Models

توکن‌های کدک، MusicGen، انکودرها و تصویرسازهای صوتی، Thinker و Talker، بودجه‌های TTFAB و چالش‌های صوتی.

  • ۱۳ بخش
  • ۵ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. تبدیل صدا به توکن‌های کدک
  2. اعداد مهم
  3. دو خانواده از تولیدکننده‌ها
  4. ‏MusicGen، ملودی و FAD
  5. الگوی مدل صوتی-زبانی
  6. تصویرساز و کیو-فورمر صوتی
  7. تنظیمات Log-Mel و انکودر
  8. ‏Thinker و Talker
  9. بودجه‌ی TTFAB در مدل 7B
  10. عیب‌یابی
  11. وظایف در کد
  12. پرسش و پاسخ
  13. نکات

تبدیل صدا به توکن‌های کدک

معماری
بردارهااندیس‌هاتوکن‌های جدیدشکل‌موج16-48 kHzانکودر کانولوشنبردار به‌ازای هر گام زمانیRVQ8 کتاب کد در 75 Hzتولیدکنندهتوکن-AR یا دیفیوژندیکودر کدکتوکن به صداخروجی صوتی

اعداد مهم

مفهوم‌ها
نرخ کدک
8 کتاب کد RVQ در 75 Hz معادل 600 توکن/ثانیه تولید می‌کند.
کف استریم
در 75 توکن/ثانیه، باید ≥75 توکن/ثانیه به ازای هر کاربر تولید شود.
کف Talker
توکن‌های گفتار 50 Hz به خروجی ≥50 توکن/ثانیه از Talker نیاز دارند.
کتاب کد
معمولاً 1024 یا 2048 مدخل است.
کدک MusicGen
انکودک EnCodec در 32 kHz با 4 کتاب کد.
ابعاد Log-Mel
مدت 30 ثانیه با نرخ فریم 100 Hz به ابعاد (3000, 80) می‌رسد.
رفت‌وبرگشت
زیر 500ms، کاربر دیگر متوجه تاخیر نمی‌شود.

دو خانواده از تولیدکننده‌ها

مفهوم‌ها
توکن-خودبازگشتی
یک ترنسفورمر فقط-دیکودر روی توکن‌های تخت‌شده‌ی RVQ.
موازی تاخیریافته
مدل MusicGen جریان‌های K کتاب کد را با آفست مجزا برای هر جریان منتشر می‌کند.
VALL-E
استخراج توکن‌های گفتار از پرامپت متنی و نمونه صدای 3 ثانیه‌ای.
دیفیوژن نهان
مدل Stable Audio Open روی صدای فشرده کار می‌کند. عالی برای لوپ‌ها.
تطبیق جریان
مدل Stable Audio 2.5 از آن روی متغیرهای نهان صوتی پیوسته استفاده می‌کند.
روند جاری
تطبیق جریان در موسیقی پیروز است. توکن-AR بر گفتار غالب است.

‏MusicGen، ملودی و FAD

کد
python
from audiocraft.models import MusicGen
model = MusicGen.get_pretrained("facebook/musicgen-small")   # 300M، سریع
model.set_generation_params(duration=10)                     # ثانیه‌های صدا
wav = model.generate(["upbeat synthwave with driving drums, 128 BPM"])
torchaudio.save("out.wav", wav[0].cpu(), 32000)              # خروجی 32 kHz
melody, sr = torchaudio.load("humming.wav")
wav = model.generate_with_chroma(                            # حفظ ملودی، تغییر طنین صدا
    ["jazz piano cover"], melody.squeeze(), sr)
from frechet_audio_distance import FrechetAudioDistance
fad = FrechetAudioDistance()                                 # فاصله‌ی امبدینگ VGGish
fad.get_fad_score("generated_folder/", "reference_folder/")  # کمتر بهتر است

الگوی مدل صوتی-زبانی

گام‌به‌گام
  1. انکودر صوتیانکودر Whisper، BEATs، CLAP یا WavLM ویژگی‌ها را می‌سازد.
  2. تصویرسازیک لایه‌ی خطی یا MLP ویژگی‌ها را به فضای امبدینگ LLM می‌نگارد.
  3. LLMیک دیکودر توکن‌های درهم‌آمیخته‌ی متن و صوت را خوانده و متن می‌نویسد.
  4. مرحله 1فریز انکودر و LLM. آموزش تصویرساز روی داده‌های ASR یا کپشن‌نویسی.
  5. مرحله 2فاین‌تیون کامل یا LoRA روی وظایف صوتی دستوری.
  6. مرحله 3اختیاری. افزودن دیکودر گفتار برای دریافت و تولید صدا.

تصویرساز و کیو-فورمر صوتی

کد
python
class AudioProjector(nn.Module):
    def __init__(self, audio_dim=1280, llm_dim=4096):
        super().__init__()
        self.down = nn.Linear(audio_dim, llm_dim)  # تبدیل صوت به عرض امبدینگ LLM
        self.act = nn.GELU()
        self.up = nn.Linear(llm_dim, llm_dim)
    def forward(self, audio_features):
        return self.up(self.act(self.down(audio_features)))
qf = QFormer(n_queries=8, hidden=20)               # 8 پرس‌وجو (N=8)
tokens = qf.forward(frames)                        # ورودی 99 فریم، خروجی 8 توکن

تنظیمات Log-Mel و انکودر

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
Sample rate16 kHzابتدا نمونه‌برداری مجدد کنید
Window25mswin_ms: int = 25
Hop10mshop_ms: int = 10
Mel filters800-8000 Hz
Log compressmath.log(1 + x)محدوده دینامیکی
Q-former queries32 or 64مدل AF3 از 64 استفاده می‌کند
Whisper encoder12-layerفریز در الگوی ALM

‏Thinker و Talker

معماری
توکن‌های صوتیتوکن‌های متنیاندیس‌های RVQاستریممیکروفون و VADتوکن‌های گفتار‏Thinker7B-80B، TMRoPE‏Talker200M-1Bدیکودر گفتار‏SNAC، MoVQGANبلندگوهانمونه‌های صوتی

بودجه‌ی TTFAB در مدل 7B

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
Mic to audio tokens40-80msاستریم‌ها
Prefill100-200msبسیار بیشتر در 70B
First Thinker text token40msرشد همراه با اندازه‌ی Thinker
Talker on first text token20msحداقل 15ms در مدل این درس
First speech tokens commit40msقبل از رمزگشایی کوانتایزر پسماند
Residual-VQ decode30msrvq_decode = 30
Speech waveform decode50-80mswave_decode = 70
Total TTFAB320-490ms600-900ms در 70B

عیب‌یابی

عیب‌یابی
  • لوپ شدن موسیقی بعد از 30 ثانیه

    علت
    مدل‌های AR لوپ می‌شوند
    راه‌حل
    محو تدریجی تقاطعی یا استفاده از ACE-Step
  • انحراف تمپو از BPM

    علت
    سرگردانی مدل‌ها
    راه‌حل
    تگ‌های BPM، تابع beat_track در librosa
  • نامفهوم بودن کلمات خوانده‌شده

    علت
    ضعف مدل‌های باز در متن ترانه
    راه‌حل
    استفاده از API تجاری یا فاین‌تیون
  • توهم روی سکوت

    علت
    مشکل انکودر Whisper
    راه‌حل
    دروازه‌بندی با VAD
  • تداخل گویندگان بعد از 10 دقیقه

    علت
    افت کیفیت در فایل صوتی طولانی
    راه‌حل
    تفکیک گویندگان (Diarize) و سپس خلاصه‌سازی
  • دقت چندصوتی نزدیک 25%

    علت
    در حد شانس تصادفی
    راه‌حل
    به وظایف «کدام کلیپ» اعتماد نکنید
  • انتشار خطاهای لایه 1 در RVQ

    علت
    تجمع خطای RVQ
    راه‌حل
    تنظیم Temperature روی 0 برای لایه‌های بالاتر
  • دست‌سازه‌ها در محل اتصال کلیپ‌ها

    علت
    مرزهای محو تدریجی تقاطعی
    راه‌حل
    همپوشانی و جمع (overlap-add) دقیق

وظایف در کد

کار و کد
وظیفهکد
بارگذاری پردازشگر ALMAutoProcessor.from_pretrained("Qwen/Qwen2.5-Omni-7B")
تولید پاسخmodel.generate(**inputs, max_new_tokens=200)
بارگذاری MMAU-Proload_dataset("gamma-lab-umd/MMAU-Pro", split="test")
ارزیابی رسمی MMAU-Proevaluate_mmau_pro_comprehensive.py
برش صوت به فریم‌هاwindow_frames(wave, 16000, 25, 10)
فهرست بخش‌های TTFABttfab(cfg)
نمونه‌برداری از توکن‌های کدکgenerate(counts, style, start, length, rng, temperature=1.0)

پرسش و پاسخ

پرسش و پاسخ
چه زمانی پایپ‌لاین مرحله‌ای کافی است؟
زمانی که هدف پیاده‌سازی متن است، بدون موسیقی و حس.
چه زمانی به مدل سرتاسری نیاز دارم؟
موسیقی، هیجان، چند گوینده یا استدلال صوتی پیچیده.
پایپ‌لاین مرحله‌ای چه چیزی را از دست می‌دهد؟
حال‌وهوا، هویت گوینده، زمان‌بندی و نشانه‌های دیپ‌فیک.
چرا یک Talker کوچک؟
یک Talker با ابعاد 7B از کف 50 توکن/ثانیه عقب می‌ماند.
چرا TMRoPE؟
برای هر توکن برچسب زمانی مطلق می‌سازد. تصویر، صوت و متن هماهنگ می‌شوند.
نیمه‌دوطرفه یا دوطرفه‌ی کامل؟
مدل Qwen2.5-Omni پیش‌فرض نیمه‌دوطرفه است. Moshi دوطرفه‌ی کامل را پشتیبانی می‌کند.

نکات

نکته‌ها
  • برای خروجی امن در پروداکشن، فقط بی‌کلام تولید کنید.
  • هر خروجی تولیدی را با واترمارک و متادیتا برچسب بزنید.
  • هر category در MMAU-Pro را جداگانه گزارش کنید.
  • ابتدا کدک را بررسی کنید؛ سقف کیفیت خروجی است. DAC بهترین گزینه‌ی متن‌باز کنونی است.
  • برای شبیه‌سازی صدا، شناسایی سوءاستفاده و لیست‌های انصراف را اضافه کنید.