فاز 6 · درس 13

کدک‌های صوتی عصبی: EnCodec، SNAC، Mimi و تفکیک معنایی-صوتی

نوع
مفهومی
زمان
حدود 60 دقیقه
زبان‌ها
Python
پیش‌نیاز
فاز 6 · درس 02 (اسپکتروگرام‌ها)، فاز 10 · درس 11 (کوانتیزاسیون)، فاز 5 · درس 19 (توکنایز زیرکلمه)
یک موج صوتی متقارن که از میان مکعب‌های منظم و دسته‌بندی‌شده‌ی دیجیتال عبور می‌کند و به توکن‌های گسسته تبدیل می‌شود
فهرست مطالب
  1. صورت مسئله
  2. مفاهیم پایه
  3. ترفند اصلی: کوانتیزاسیون برداری باقیمانده (RVQ)
  4. چهار کدک مهم در سال 2026
  5. اهمیت نرخ فریم در مدل‌سازی زبانی
  6. توکن‌های معنایی در برابر صوتی
  7. کیفیت بازسازی در سال 2026 (بیت بر ثانیه؛ نرخ بیت پایین‌تر بهتر است)
  8. پیاده‌سازی
  9. گام 1: انکود با EnCodec
  10. گام 2: دیکود و سنجش بازسازی
  11. گام 3: تفکیک معنایی-صوتی (به سبک Mimi)
  12. گام 4: چرا مدل زبانی خودبازگشتی روی توکن‌های کدک کارآمد است
  13. کاربرد عملی
  14. دام‌های رایج
  15. تحویل پروژه
  16. تمرین‌ها
  17. اصطلاحات کلیدی
  18. برای مطالعه‌ی بیشتر

مدل‌های زبانی مدرن زبان توکن‌ها را می‌فهمند، در حالی که صدا داده‌ای پیوسته و با فرکانس بالاست. اگر بخواهید با مدل‌های زایشی مشابه GPT به تولید یا ویرایش صدا بپردازید، بزرگ‌ترین چالش تبدیل این شکل‌موج پیوسته به دنباله‌ای فشرده از توکن‌های گسسته است، بدون اینکه کیفیت شنیداری یا هویت گوینده از بین برود.

کدک‌های صوتی عصبی (Neural Audio Codecs) مانند EnCodec، DAC، SNAC و Mimi این وظیفه را به دوش می‌کشند. این سیستم‌ها به کمک کوانتیزاسیون برداری باقیمانده (RVQ) و تفکیک هوشمندانه‌ی مؤلفه‌های معنایی از ویژگی‌های آکوستیک، به مدل‌های زبانی اجازه می‌دهند صوت را همانند کلمات پردازش و تولید کنند.

دریافت وزن‌های مدل‌های صوتی یا دانلود پکیج‌ها ممکن است گاهی از طریق PyPI یا Hugging Face با اختلال یا افت سرعت همراه باشد که تنظیم میرورهای داخلی یا استفاده از ابزارهای مدیریت بسته‌ی سریع‌تر روند را تسهیل می‌کند. همچنین بررسی این کدک‌ها با ابعاد کوچک یا نرخ فریم‌های بهینه به راحتی روی سخت‌افزارهای محلی و CPU نیز قابل آزمایش است.

در سال 2026، تولید صدا تقریباً تماماً بر پایه‌ی توکن‌ها انجام می‌شود. مدل‌های EnCodec، SNAC، Mimi و DAC شکل‌موج‌های پیوسته (waveforms) را به دنباله‌های گسسته‌ای تبدیل می‌کنند که یک ترنسفورمر (Transformer) می‌تواند آن‌ها را پیش‌بینی کند. تفکیک توکن‌های معنایی از صوتی (semantic-vs-acoustic token split) — که در آن اولین کتاب کد (codebook) نقش معنایی دارد و بقیه نقش صوتی — مهم‌ترین تحول معماری در صوت پس از ترنسفورمر به شمار می‌رود.

صورت مسئله

مدل‌های زبانی با توکن‌های گسسته کار می‌کنند، در حالی که صدا پیوسته است. اگر برای گفتار یا موسیقی مدلی با معماری مشابه مدل‌های زبانی بزرگ (LLM) می‌خواهید — مانند MusicGen، Moshi، Sesame CSM، VibeVoice یا Orpheus — پیش از هر چیز به یک کدک صوتی عصبی (neural audio codec) نیاز دارید: انکودری آموزش‌پذیر که صدا را به دامنه‌ی محدودی از توکن‌ها گسسته کند، و دیکودری متناظر که شکل‌موج را دوباره بازسازی کند.

در این میان، دو خانواده‌ی اصلی شکل گرفته‌اند:

  1. کدک‌های مبتنی بر اولویت بازسازی (Reconstruction-first codecs) — مانند EnCodec و DAC. این مدل‌ها کیفیت ادراکی صدا را بهینه‌سازی می‌کنند. توکن‌های آن‌ها «صوتی» هستند؛ یعنی همه‌چیز از جمله هویت گوینده، طنین صدا (timbre) و نویز پس‌زمینه را ثبت می‌کنند.
  2. کدک‌های مبتنی بر اولویت معنایی (Semantic-first codecs) — مانند Mimi (محصول Kyutai) و SpeechTokenizer. در این مدل‌ها، اولین کتاب کد مجبور می‌شود محتوای زبانی و آوایی را کدگذاری کند (معمولاً از طریق تقطیر دانش (Distillation) از WavLM). کتاب‌های کد بعدی جزئیات صوتی را ذخیره می‌کنند.

یافته‌ی کلیدی سال‌های 2024 تا 2026 این است: تولید صدا از متن با کدک‌های مبتنی بر بازسازیِ صرف، گفتاری مات و نامفهوم تحویل می‌دهد. مدل زبانی روی توکن‌های کدک مجبور است هم ساختار زبان و هم ساختار آکوستیک را درون یک کتاب کد واحد یاد بگیرد، و این رویکرد مقیاس‌پذیر نیست. تفکیک این دو — کتاب کد معنایی 0، و کتاب‌های کد صوتی 1 تا N — همان چیزی است که Moshi و Sesame CSM را به کار انداخته است.

مفاهیم پایه

نمای کلی چهار کدک: EnCodec، DAC، SNAC (چندمقیاسی) و Mimi (معنایی+صوتی)

ترفند اصلی: کوانتیزاسیون برداری باقیمانده (RVQ)

به جای استفاده از یک کتاب کد بزرگ (که برای دستیابی به کیفیت مطلوب به میلیون‌ها کد نیاز دارد)، تمام کدک‌های صوتی مدرن از RVQ (مخفف Residual Vector Quantization) استفاده می‌کنند: آبشاری از کتاب‌های کد کوچک. اولین کتاب کد خروجی انکودر را کوانتایز می‌کند؛ دومین کتاب کد خطای باقیمانده (residual) را کوانتایز می‌کند، و این روند به همین ترتیب ادامه می‌یابد. هر کتاب کد شامل 1024 کد است. در نتیجه 8 کتاب کد، واژگان مؤثری معادل 10248=10241024^8 = 10^{24} فراهم می‌آورند.

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

چهار کدک مهم در سال 2026

EnCodec (متا، 2022). مدل پایه‌ی استاندارد. ساختار انکودر-دیکودر روی شکل‌موج به همراه گلوگاه RVQ. با نرخ نمونه‌برداری 24 kHz، قابلیت پشتیبانی از 32 کتاب کد، و حالت پیش‌فرض 4 کتاب کد در نرخ 1.5 kbps. از معماری 1D conv + transformer + 1D conv بهره می‌برد و در MusicGen استفاده شده است.

DAC (دیسکریپت، 2023). مبتنی بر RVQ با کتاب‌های کد نرمال‌سازی‌شده با نرم L2، توابع فعال‌ساز (Activation function) متناوب و توابع زیان (loss) بهبودیافته. این مدل بالاترین دقت بازسازی را در میان تمام کدک‌های متن‌باز دارد — به طوری که گاهی با 12 کتاب کد نمی‌توان آن را از گفتار اصلی تشخیص داد. با نرخ 44.1 kHz تمام‌باند (full-band).

SNAC (هوبرت سیوزداک، 2024). ساختار RVQ چندمقیاسی (multi-scale) — کتاب‌های کد کلی‌تر با نرخ فریم پایین‌تری نسبت به کتاب‌های کد دقیق کار می‌کنند. این کدک صدا را به صورت سلسله‌مراتبی مدل‌سازی می‌کند: یک «طرح کلی» در فرکانس حدود 12 Hz به همراه جزئیات در فرکانس 50 Hz. در مدل Orpheus-3B به کار رفته است؛ زیرا ساختار سلسله‌مراتبی آن به خوبی روی تولید مبتنی بر مدل زبانی می‌نشیند.

Mimi (کیوتای، 2024). تحول بزرگ سال 2026. نرخ فریم فوق‌العاده پایین 12.5 Hz، 8 کتاب کد در نرخ 4.4 kbps. کتاب کد 0 از طریق تقطیر دانش از WavLM آموزش دیده است — یعنی طوری آموزش دیده که ویژگی‌های محتوای گفتاری WavLM را پیش‌بینی کند. کتاب‌های کد 1 تا 7 باقیمانده‌های صوتی هستند. این تفکیک هوشمندانه، زیربنای مدل‌های Moshi (درس 15) و Sesame CSM است.

اهمیت نرخ فریم در مدل‌سازی زبانی

نرخ فریم پایین‌تر = دنباله‌ی کوتاه‌تر = مدل زبانی سریع‌تر.

کدک نرخ فریم 1 ثانیه = N فریم مناسب برای
EnCodec-24k 75 Hz 75 موسیقی، صوت عمومی
DAC-44.1k 86 Hz 86 موسیقی با وضوح بالا
SNAC-24k (کلی) ~12 Hz 12 مدل‌های زبانی خودبازگشتی با کارایی بالا
Mimi 12.5 Hz 12.5 گفتار استریمینگ

در فرکانس 12.5 Hz، یک گفتار 10 ثانیه‌ای تنها 125 فریم کدک است — دنباله‌ای که یک ترنسفورمر به سادگی از پس پیش‌بینی آن برمی‌آید.

توکن‌های معنایی در برابر صوتی

frame_t → [semantic_token_t, acoustic_token_0_t, acoustic_token_1_t, ..., acoustic_token_6_t]
  • توکن معنایی (کتاب کد 0 در Mimi): محتوای بیان‌شده — واج‌ها، کلمات و محتوا — را کدگذاری می‌کند. این بخش از طریق یک تابع زیانِ پیش‌بینی کمکی از WavLM تقطیر شده است.
  • توکن‌های صوتی (کتاب‌های کد 1 تا 7): طنین صدا، هویت گوینده، آهنگ کلام (prosody)، نویز پس‌زمینه و جزئیات دقیق را ثبت می‌کنند.

یک مدل زبانی خودبازگشتی (AR LM) ابتدا توکن معنایی را (مشروط به متن) پیش‌بینی می‌کند و سپس به سراغ توکن‌های صوتی (مشروط به توکن معنایی + نمونه مرجع گوینده) می‌رود. این تفکیک دلیل اصلی توانایی سیستم‌های مدرن تبدیل متن به گفتار (TTS) در شبیه‌سازی صدا با روش صفر-داده (zero-shot) است: مدل معنایی محتوا را مدیریت می‌کند و مدل صوتی طنین صدا را به دست می‌گیرد.

کیفیت بازسازی در سال 2026 (بیت بر ثانیه؛ نرخ بیت پایین‌تر بهتر است)

کدک نرخ بیت PESQ ViSQOL
Opus-20kbps 20 kbps 4.0 4.3
EnCodec-6kbps 6 kbps 3.2 3.8
DAC-6kbps 6 kbps 3.5 4.0
SNAC-3kbps 3 kbps 3.3 3.8
Mimi-4.4kbps 4.4 kbps 3.1 3.7

کدک‌های سنتی مانند Opus هنوز هم از نظر کیفیت ادراکی به ازای هر بیت برتری دارند. اما مزیت کدک‌های عصبی در توکن‌های گسسته (که Opus تولید نمی‌کند) و کیفیت در مدل‌های زایشی (Generative model) است (یعنی آنچه مدل زبانی می‌تواند با این توکن‌ها بسازد).

کدک صوتی RVQدفترچه کد 0 معنایی، 1 تا N آکوستیک
RVQ AUDIO CODECInstead of one giant codebook, neural audio codecs cascade small ones: the first quantizes the encoder output, each next one quantizes the residual left over. The shrinking bars are that residual getting smaller down the stack. Forcing codebook 0 to carry linguistic content (semantic) and the rest acoustic detail is what makes token-based speech models work.شکل موجencCB0 معناییCB1 آکوستیکCB2 آکوستیکCB3 آکوستیکهر دفترچه کد خطای باقی‌مانده قبلی را کوانتایز می‌کند
کدک‌های صوتی عصبی به جای یک دفترچه کد غول‌پیکر، دفترچه‌های کوچک را به‌صورت آبشاری استفاده می‌کنند: اولی خروجی انکودر را کوانتایز می‌کند و هر کدام از بعدی‌ها باقی‌مانده‌ی مرحله قبلی را کوانتایز می‌کنند. میله‌های کوتاه‌شونده نشان‌دهنده‌ی کوچک‌تر شدن این باقی‌مانده در طول پشته هستند. وادار کردن دفترچه کد 0 به حمل محتوای زبانی (معنایی) و بقیه به حمل جزئیات آکوستیک، همان چیزی است که مدل‌های گفتار مبتنی بر توکن را کارآمد می‌سازد.

پیاده‌سازی

گام 1: انکود با EnCodec

from encodec import EncodecModel
import torch

model = EncodecModel.encodec_model_24khz()
model.set_target_bandwidth(6.0)  # kbps

wav = torch.randn(1, 1, 24000)
with torch.no_grad():
    encoded = model.encode(wav)
codes, scale = encoded[0]
# codes: (1, n_codebooks, n_frames), dtype=int64

تنظیم n_codebooks=8 در نرخ 6 kbps. هر کد بین 0 تا 1023 (10 بیتی) است.

گام 2: دیکود و سنجش بازسازی

with torch.no_grad():
    wav_recon = model.decode([(codes, scale)])

from torchaudio.functional import compute_deltas
import torch.nn.functional as F

mse = F.mse_loss(wav_recon[:, :, :wav.shape[-1]], wav).item()

گام 3: تفکیک معنایی-صوتی (به سبک Mimi)

from moshi.models import loaders
mimi = loaders.get_mimi()

with torch.no_grad():
    codes = mimi.encode(wav)  # shape (1, 8, frames@12.5Hz)

semantic = codes[:, 0]
acoustic = codes[:, 1:]

کتاب کد معنایی 0 با WavLM هم‌راستاست. بنابراین می‌توانید یک ترنسفورمرِ متن-به-معنا آموزش دهید — با دامنه‌ی واژگانی بسیار کوچک‌تر نسبت به تبدیل مستقیم متن به صوت. سپس یک دیکودر جداگانه‌ی صوت-به-شکل‌موج بر اساس نمونه صدای مرجع گوینده شرطی‌سازی می‌شود.

گام 4: چرا مدل زبانی خودبازگشتی روی توکن‌های کدک کارآمد است

برای یک قطعه گفتار 10 ثانیه‌ای با نرخ 12.5 Hz و 8 کتاب کدِ Mimi:

Ntokens=10×12.5×8=1000 tokensN_{\text{tokens}} = 10 \times 12.5 \times 8 = 1000 \text{ tokens}

1000 توکن زمینه‌ی کاری ناچیزی برای ترنسفورمر است. یک ترنسفورمر با 256 میلیون پارامتر می‌تواند 10 ثانیه گفتار را ظرف چند میلی‌ثانیه روی یک GPU امروزی تولید کند.

کاربرد عملی

نگاشت مسئله → کدک:

مسئله کدک
تولید عمومی موسیقی EnCodec-24k
بازسازی با بالاترین سطح وفاداری DAC-44.1k
مدل زبانی خودبازگشتی روی گفتار (TTS) SNAC یا Mimi
مکالمه‌ی صوتی دوطرفه‌ی استریمینگ (Full-duplex) Mimi (12.5 Hz)
آرشیو جلوه‌های صوتی مشروط به متن EnCodec + شرط‌گذاری T5
ویرایش دقیق صوت DAC + اینپینتینگ (Inpainting)

قاعده‌ی سرانگشتی: اگر مدل زایشی می‌سازید، با Mimi یا SNAC شروع کنید. اگر دنبال یک پایپ‌لاین (Pipeline) فشرده‌سازی هستید، سراغ Opus بروید.

دام‌های رایج

  • تعداد بیش از حد کتاب‌های کد. افزایش کتاب‌های کد وضوح صدا را خطی بالا می‌برد، اما طول دنباله‌ی ورودی به مدل زبانی هم خطی رشد می‌کند. کار را روی 8 تا 12 متوقف کنید.
  • ناهماهنگی نرخ فریم. آموزش مدل زبانی روی Mimi با نرخ 12.5 Hz و سپس فاین‌تیونینگ (Fine-tuning) آن روی EnCodec با نرخ 50 Hz بدون هیچ خطایی بی‌صدا شکست می‌خورد.
  • فرض برابری همه‌ی کتاب‌های کد. در Mimi، کتاب کد 0 محتوا را حمل می‌کند؛ از دست دادنش وضوح گفتار را کاملاً نابود می‌کند. در حالی که از دست رفتن کتاب کد 7 اصلاً به چشم نمی‌آید.
  • اتکا به کیفیت بازسازی به عنوان تنها معیار. یک کدک می‌تواند بازسازی فوق‌العاده‌ای داشته باشد، اما اگر ساختار معنایی ضعیفی ارائه دهد، برای تولید مبتنی بر مدل زبانی کاملاً بی‌استفاده است.

تحویل پروژه

خروجی را در مسیر outputs/skill-codec-picker.md ذخیره کنید. سیستمی طراحی کنید که بر اساس نوع تسک (تولیدی یا فشرده‌سازی)، کدک مناسب را انتخاب کند.

تمرین‌ها

  1. ساده. اسکریپت code/main.py را اجرا کنید. این برنامه یک کوانتایزر نرده‌ای اسباب‌بازی به همراه باقیمانده را پیاده‌سازی کرده و خطای بازسازی (Reconstruction Error) را با افزودن کتاب‌های کد می‌سنجد.
  2. متوسط. کتابخانه‌ی encodec را نصب کنید و خروجی 1، 4، 8 و 32 کتاب کد را روی یک نمونه گفتار تست بررسی کنید. نمودار PESQ یا MSE را بر حسب نرخ بیت رسم کنید.
  3. پیشرفته. مدل Mimi را لود کنید. یک کلیپ صوتی را انکود کنید. مقادیر کتاب کد 0 را با اعداد صحیح تصادفی جایگزین و سپس دیکود کنید. همین کار را برای کتاب کد 7 هم تکرار کنید. این دو خروجی تخریب‌شده را با هم مقایسه کنید — دستکاری کتاب کد 0 باید وضوح کلام را کاملاً از بین ببرد؛ در حالی که دستکاری کتاب کد 7 نباید تغییر محسوسی ایجاد کند.

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

اصطلاح اصطلاح عامیانه معنای دقیق فنی
RVQ کوانتیزاسیون باقیمانده آبشاری از کتاب‌های کد کوچک؛ هر مرحله باقیمانده‌ی مرحله‌ی قبل را کوانتایز می‌کند.
نرخ فریم (Frame rate) سرعت کدک تعداد فریم‌های توکن در ثانیه. نرخ کمتر = پردازش سریع‌تر مدل زبانی.
کتاب کد معنایی (Semantic codebook) کتاب کد 0 (در Mimi) کتاب کدی که از ویژگی‌های خودنظارتی (SSL) تقطیر شده است و محتوا را ذخیره می‌کند.
کتاب‌های کد صوتی (Acoustic codebooks) باقی کتاب‌های کد طنین صدا، لحن، نویز و جزئیات دقیق.
PESQ / ViSQOL کیفیت ادراکی معیارهای عینی همبسته با نمره‌ی میانگین نظر کاربران (MOS).
EnCodec کدک متا مدل پایه‌ی RVQ؛ استفاده‌شده در MusicGen.
Mimi کدک کیوتای با نرخ فریم 12.5 Hz؛ تفکیک معنایی-صوتی؛ موتور پیشران Moshi.

برای مطالعه‌ی بیشتر

سؤالات متداول

چرا کدک‌های صوتی سنتی مثل Opus برای مدل‌های زبانی مناسب نیستند؟

کدک‌هایی مانند Opus با وجود کیفیت بسیار بالا در نرخ بیت کم، توکن‌های گسسته تولید نمی‌کنند؛ در نتیجه مدل‌های زبانی نمی‌توانند خروجی آن‌ها را به‌صورت توکن‌پایه پیش‌بینی یا مدلسازی کنند.

کوانتیزاسیون برداری باقیمانده (RVQ) چیست و چه کاربردی دارد؟

آبشاری از کتاب‌های کد کوچک است که در آن هر کتاب کد خطای باقیمانده از مرحله‌ی قبل را کوانتایز می‌کند، تا بدون نیاز به ساخت کتاب کدهایی با ابعاد میلیونی، به دقت بازسازی بالا رسید.

تفکیک معنایی-صوتی در کدک Mimi چه مزیتی در تولید صدا دارد؟

با تخصیص کتاب کد اول به محتوای گفتار (برگرفته از WavLM) و بقیه‌ی کتاب‌های کد به لحن و ویژگی‌های صوتی، مدل زبانی تولیدکننده ابتدا محتوا را می‌سازد و سپس ویژگی‌های گوینده را مستقل روی آن می‌نشاند.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.