تصور کنید چند نت از قطعه «برای الیزه» را روی پیانو مینوازید و هوش مصنوعی در همان لحظه، بقیه آهنگ را با همان لحن شما به پایان میرساند. این تجربه اکنون با RollTab ممکن شده است؛ ابزاری که شبیه به GitHub Copilot برای موسیقی عمل میکند و روی یک آیفون ۱۵، سرعت خیرهکننده ۱۰۸ نت در ثانیه را ثبت کرده است. این قابلیت به لطف یک مدل ترنسفورمر با ۱۲۵ میلیون پارامتر محقق شده که میتواند اجراهای پیانو را در زمان واقعی تکمیل کند.
بسیاری از مدلهای موسیقی بر تولید فایلهای صوتی با کیفیت بالا یا تنظیمات ارکسترال پیچیده تمرکز دارند. اما برای اینکه یک مدل بتواند در لحظه و روی گوشی همراه، نوازنده را همراهی کند، باید رویکرد متفاوتی در مدیریت تأخیر و توکنسازی (Tokenization) — که شبیه به خرد کردن متن به تکههای کوچک برای فهم بهتر مدل است — داشته باشد. طبق گزارش توسعهدهنده این پروژه در simedw.com، تمرکز از تولید صوت خام به پیشبینی رویدادهای MIDI تغییر یافته است. این رویکرد در واقع تکامل یافتهی ابزارهایی است که با تولید طرحهای اولیه MIDI به آهنگسازان در رفع گرههای ذهنی کمک میکنند.
در این سناریو، شما یک کیبورد MIDI را به گوشی خود متصل میکنید. به جای اینکه موسیقی پس از چند نت متوقف شود، هوش مصنوعی توالی بعدی نتها، مدت زمان آنها و شدت فشار (Velocity) را پیشبینی میکند و ساختار موسیقایی را بدون نیاز به اتصال به ابر (Cloud) حفظ میکند. توسعهدهنده این پروژه نزدیک به یک سال روی این ایده وقت صرف کرد و پیش از رسیدن به نتیجه رضایتبخش، چهارده آزمایش مختلف را پشت سر گذاشت.
درک دادههای MIDI
برای ساخت این سیستم، ابتدا باید بدانیم فایلهای MIDI با MP3 متفاوتاند. این فایلها صدا را ذخیره نمیکنند، بلکه توالی رویدادها را ثبت میکنند؛ مثلاً اینکه یک کلید در گام و شدت خاصی فشار داده شده، یک کلید رها شده یا وضعیت پدال نگهدارنده تغییر کرده است. رویدادهای دیگر شامل تغییرات حجم صدا یا تعویض ساز است.
در حالی که فایلهای MIDI مربوط به موسیقی پاپ یا بازیها اغلب دارای چندین مسیر (Track) شامل ملودی، آکوردها، بیس، درامز و سازهای زهی هستند، این پروژه بهطور خاص بر ادامه دادن قطعات پیانو تمرکز داشت. در نتیجه، توسعهدهنده محتوای شبیه به پیانو را حفظ کرد و سایر مسیرهای سازی را حذف یا کاهش داد تا تمرکز مدل بهینه شود.
جهش در توکنسازی
در روشهای سنتی، برای هر نت یک توکن «شروع» (Note On) و یک توکن «پایان» (Note Off) تعریف میشود. یک نگاشت ساده ممکن است از توکنهایی مانند NOTE_ON_60_80 (گام ۶۰، شدت ۸۰) و NOTE_OFF_60 استفاده کند. اما با ۱۲۸ گام MIDI و ۱۲۸ مقدار شدت، تعداد توکنها برای رویدادهای شروع به تنهایی به ۱۶,۳۸۴ مورد میرسد. این موضوع باعث ایجاد توکنهای پراکنده (Sparse) میشود که یادگیری ساختار را برای مدل دشوار میکند.
حتی با استفاده از رویکرد مبتنی بر گرامر — مانند [NOTE_ON, PITCH, VELOCITY] — توسعهدهنده متوجه شد که مدلهای کوچک مکرراً دچار «لغزش» (Drift) میشوند. آنها فراموش میکردند توکن پایان نت را ارسال کنند، که منجر به کشیده شدن نتها یا از دست دادن وضعیت فعال ساز میشد. این مسئله بهویژه برای مدل کوچکی که در زمان واقعی روی گوشی اجرا میشود، بسیار مشکلساز بود.
تلاش دیگری با استفاده از ساختار [NOTE, PITCH, VELOCITY, DURATION] از نظر موسیقایی بهتر عمل کرد اما سرعت آن بسیار پایین بود. در این حالت، هر نت موسیقی به چهار مرحله ترنسفورمر اتورگرسیو نیاز داشت که باعث میشد پنجره متنی (Context Window) مدل خیلی سریع پر شود.
برای حل این مشکل، RollTab از یک نمایش فاکتورشده استفاده میکند که در هر مرحله از ترنسفورمر — ساختاری شبیه به یک فیلتر هوشمند که روابط بین اجزای داده را میسنجد — یک نت کامل تولید میشود. هر نت از پنج میدان دستهبندی شده تشکیل شده است:
- نوع رویداد (Event Type): ماهیت اقدام انجام شده.
- گام (Pitch): نت دقیق MIDI (۱۲۸ مقدار ممکن).
- تأخیر شروع (Delta Onset): زمان سپری شده از شروع نت قبلی (که نشاندهنده سکوت است).
- مدت زمان (Duration): مدت زمانی که نت نگه داشته میشود.
- شدت (Velocity): نیروی فشار دادن کلید (تقریباً ۱۶ مقدار دستهبندی شده).
در این سیستم، آکوردهای موسیقی به صورت چندین نت با «تأخیر شروع» صفر نمایش داده میشوند که بر اساس گام مرتب شدهاند. برای مثال، یک آکورد دو ماژور (C-major) توالی از نتهاست که اولین نت دارای تأخیر است و نتهای بعدی تأخیر صفر دارند.
مدل به جای پردازش یک جریان تخت از توکنها، بردار معنایی (Embedding) این پنج میدان را با هم جمع میکند: note = event_type_embedding[NOTE] + pitch_embedding[C4] + delta_embedding[12] + duration_embedding[24] + velocity_embedding[80]. این کار باعث میشود مدل برای هر نت فقط یک بار اجرا شود و سرعت استنتاج (Inference) — لحظهای که مدل واقعاً جواب تولید میکند — روی سختافزار موبایل بهشدت افزایش یابد.
مدیریت پدال نگهدارنده (Sustain)
یکی از سختترین بخشها در مدلسازی پیانو، پدال Sustain است که باعث میشود نتها پس از رها کردن کلید، همچنان به صدا درآیند. توسعهدهنده به جای افزودن رویدادهای پیچیده پدال به دایره لغات و شلوغ کردن پیادهسازی، اثر پدال را مستقیماً در مرحله پیشپردازش به «مدت زمان نت» اضافه کرد.
اگر کلیدی در حالی که پدال پایین است رها شود، مدت زمان نت تا لحظه بلند شدن پدال تمدید میشود. اگر همان گام پیش از رها شدن پدال دوباره نواخته شود، نت قبلی در لحظه تحریک مجدد قطع میشود. این سادهسازی نیاز مدل به ردیابی وضعیت پدال را از بین برد و به آن اجازه داد تمام تمرکز خود را روی گام و زمانبندی بگذارد.
کیفیت داده برتر از کمیت
این مدل روی مجموعهای از چندین صد هزار فایل MIDI کلاسیک در مالکیت عمومی، با مجموع تقریباً ۳۰۰ میلیون رویداد نت آموزش دیده است. بر اساس مستندات پروژه، یک نتیجه غیرمنتظره به دست آمد: افزایش ۵ برابری حجم دادهها، در واقع کیفیت عملکرد را کاهش داد.
موفقیت واقعی در گرو اسکریپتهای پاکسازی تهاجمی بود. خط لوله نهایی شامل موارد زیر بود:
- انتخاب متریالهای متمرکز بر پیانو.
- حذف یا کاهش ترکیبات چند-مسیره غیرعادی (Pathological).
- فیلتر کردن بر اساس تراکم و پوشش گام/زمان.
- حذف دادههای تکراری با استفاده از اثر انگشتهای دیجیتالی که تغییرات کلی گام (Transposition) و تغییرات یکنواخت تمپو را نادیده میگیرند.
- گروهبندی نسخههای مختلف از یک آهنگ در یک بخش دادهای واحد.
این موضوع ثابت کرد که در هوش مصنوعی موسیقی، خلوص دادههای آموزشی بسیار مهمتر از حجم آنهاست.
آموزش و بهینهسازی
آموزش با تابع زیان آنتروپی متقاطع (Cross-entropy) آغاز شد که مجموع پنج سر خروجی بود: type_loss + pitch_loss + delta_loss + duration_loss + velocity_loss. این ساختار به توسعهدهنده اجازه داد دقت گام، زمان و شدت را بهطور جداگانه ردیابی کند.
برای اینکه مدل در برابر خطاهای انسانی (مثل نتهای کمی خارج از زمان) مقاوم شود، از چندین تکنیک افزونگی (Augmentation) استفاده شد:
- تغییر گام کلی (Global Transposition).
- تغییر مقیاس یکنواخت تمپو.
- ایجاد نوسانات کوچک (Jittering) در مدت زمان و شدت.
- حذف تصادفی برخی نتهای ورودی (Prompt).
همچنین برای پر کردن شکاف بین آموزش و دنیای واقعی، از «نمونهبرداری زمانبندیشده» (Scheduled Sampling) استفاده شد. در حالت عادی، مدل در زمان آموزش نت درست را میبیند، اما در زمان اجرا باید به پیشبینیهای خودش تکیه کند. با تغذیه تدریجی پیشبینیهای مدل به خودش — شروع از ۰٪ و افزایش تا ۵۰٪ — مدل یاد گرفت که از خطاهای احتمالیاش بازیابی کند. این کار کیفیت «رولاوتهای» موسیقایی را بهبود بخشید، هرچند زیان اعتبارسنجی (Validation Loss) را افزایش داد.
معماری مدل
معماری مورد استفاده یک ترنسفورمر فقط-رمزگشا (Decoder-only) با لایههای RMSNorm، رمزگذاری موقعیت دورانی (RoPE)، توجه خود-علّی (Causal Self-attention) و بلوکهای SwiGLU/MLP است. سه اندازه مدل تست شد:
- کوچک: حدود ۳۳ میلیون پارامتر (برای آزمایشهای سریع).
- متوسط: حدود ۶۴ میلیون پارامتر (که اغلب مدل کوچک را شکست داد).
- بزرگ: ۱۲۵ میلیون پارامتر (بهترین عملکرد، هرچند تفاوت با مدل متوسط زیاد نبود).
هدف نهایی این است که مدل متوسط به کیفیت مدل بزرگ برسد تا حجم و تأخیر در اپلیکیشن iOS باز هم کاهش یابد.
نقش DPO و جمینای
پیشآموزش به تنهایی برای طبیعی شدن موسیقی کافی نبود. آنتروپی متقاطع برای یادگیری مکانیکها مفید است، اما موسیقی پاسخهای «درست» متعددی دارد و یک تابع زیان واحد، معیار مناسبی برای سنجش موسیقایی بودن نیست.
ارزیابی با گوش دادن دستی به پرامپتهای ۴ تا ۳۲ نتی آغاز شد. پرامپتهای ۴ نتی به دلیل کمبود زمینه سختترین بودند، در حالی که پرامپتهای ۱۶ تا ۳۲ نتی قابلاعتمادترین بودند. برای مقیاسپذیر کردن این روند، توسعهدهنده از Gemini 3.5 Flash برای ارزیابیهای جفتی استفاده کرد. جمینای به جای دادن امتیاز مطلق، پاسخ میداد: «با توجه به A و B، کدام ادامه بهتر است؟»
برای جلوگیری از سوگیری، ارزیابی به دو معیار تقسیم شد:
۱. امتیاز پیوستگی (Continuation Score): خروجی تا چه حد از پرامپت پیروی میکند.
۲. امتیاز خوشآهنگی (Sounds-Good Score): کیفیت موسیقایی خروجی به صورت مجزا.
امتیاز پیوستگی به عنوان سیگنال اصلی برای بهینهسازی مستقیم ترجیح (DPO) عمل کرد. با آموزش مدل برای ترجیح دادن خروجیهای «برگزیده» بر «رد شدهها»، کیفیت خروجیها جهش بزرگی کرد. بررسی مقدار $\beta$ (که جریمه فاصله از مدل پایه را کنترل میکند) نشان داد که $\beta=0.01$ و $\beta=0.03$ مدل را بهبود میبخشند، اما $\beta=0.10$ بیش از حد فشار آورده و نتیجه را بدتر کرد. بهترین نتیجه از یک مجموعه داده «اجماعی» به دست آمد که در آن فقط جفتهای ترجیحی با توافق کامل ارزیابها نگه داشته شدند. پس از DPO، بیش از ۶۹٪ از نتهای تولید شده، بهتر از مدل پیشآموزشدیده بودند.
آنچه نتیجه نداد
همه آزمایشها موفق نبودند. چندین رویکرد کنار گذاشته شدند:
- Note-on/note-off: برای مدلهای کوچک و سریع بیش از حد دچار لغزش میشدند.
- جریانهای ماسکشده گرامری: معتبر بودند اما سرعتشان بسیار پایین بود.
- دادههای گستردهتر: دادههای نویزی باعث بدتر شدن نتایج شدند.
- Mirostat: تکرار را کاهش داد اما خروجیها را نامفهوم کرد.
- شبکههای Born-again: بازآموزی روی پیشبینیهای نرم (Soft Predictions) کیفیتی اضافه نکرد.
- زیانهای کمکی (Auxiliary Losses): سرعت آموزش را کاهش دادند بدون اینکه بهبود شنیداری واضحی ایجاد کنند.
استقرار روی دستگاه
برای اجرا روی iOS، مدل PyTorch به Core ML تبدیل و با روش کوانتایزیشن (Quantization) به INT8 تبدیل شد. اولین اجرای برنامه کند است زیرا محیط اجرای اپل مدل را برای سختافزار بهینه میکند.
به دلیل اینکه مدل با زمینههای تا ۵۱۲ نت آموزش دیده بود، یک پنجره لغزان (Sliding Window) برای جلسات طولانیتر پیاده شد. وقتی به حد نصاب رسیدیم، اپلیکیشن ۳۸۴ نت اخیر را نگه داشته و زمینه را بازسازی میکند. اگرچه این کار نیاز به بازسازی حافظه KV (KV Cache) دارد، اما مدل آنقدر سریع است که این موضوع مشکلساز نشود. از آنجایی که Core ML دسترسی مستقیم به Q، K و V را فراهم نمیکند، پیادهسازی یک بافر حلقوی (Ring Buffer) ظریف با استفاده از RoPE امکانپذیر نبود.
این معماری اجازه میدهد مدل کاملاً روی دستگاه اجرا شود و حریم خصوصی نوازنده حفظ شده و تأخیر به صفر برسد.
این پروژه نشاندهنده تغییری در چشمانداز مدلهای زبانی کوچک (SLM) است. ثابت میکند که توکنسازی بسیار تخصصی و دامنه-محور، در ترکیب با تنظیمات ترجیحی (Preference Tuning)، میتواند به یک مدل ۱۲۵ میلیون پارامتری اجازه دهد کارهایی را انجام دهد که پیش از این نیازمند معماریهای بسیار بزرگتر به نظر میرسید.
برای کاربر نهایی، این یعنی هوش مصنوعی از یک «تولیدکننده» که فایلی را در ابر میسازد، به یک «همکار» تبدیل میشود که در میلیثانیهها واکنش نشان میدهد. قابلیت اجرای این سیستم روی آیفون ۱۵ نشان میدهد که همراهی آنی هوش مصنوعی بهزودی به یک ویژگی استاندارد در سازهای دیجیتال تبدیل خواهد شد. این تحول در تعامل با سازها، مشابه تلاشهایی است که برای تبدیل وبکم به سینتیسایزر از طریق ردیابی دست صورت گرفته تا مرزهای نوازندگی سنتی جابهجا شود.
اگر کیبورد MIDI و دستگاه iOS دارید، میتوانید با دانلود اپلیکیشن RollTab این مکانیسمها را تست کنید و ببینید یک ترنسفورمر کوچک چگونه با سبک نوازندگی شما سازگار میشود.
گام بعدی شما
- اگر نوازنده هستید، اپلیکیشن RollTab را روی iOS نصب کنید تا قدرت مدلهای زبانی کوچک را در تعامل آنی تجربه کنید.
- توسعهدهندگان میتوانند از رویکرد «نمایش فاکتورشده» برای کاهش تعداد توکنها در مدلهای تخصصی استفاده کنند.
- بررسی کنید که چگونه جایگزینی دادههای حجیم با دادههای پاکسازیشده میتواند دقت مدل شما را افزایش دهد.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است؛ برای درک اینکه تراشههای جدید اپل چگونه این مدلها را شتاب میدهند، به تحلیل ما درباره NPUهای سری M مراجعه کنید.




گفتگو