اولین باری که از اسپاتیفای استفاده کردم را خوب به خاطر دارم. زمستان سال ۱۳۹۳ بود که با نا امیدی تمام از وضعیت بد اینترنت، اپلیکیشن «اسپاتیفای» را نصب و در آن ثبت نام کردم. پس از ورود به صفحه اول و رفتن به لیست آهنگهای سبک مورد علاقهام در موسیقی ، یعنی «هارد راک»، از اسپاتیفای در خواست کردم که آهنگی را به طور تصادفی از آن لیست برای من پخش کند. در حالی که انتظار داشتم آهنگی را که انتخاب میکنم با تأخیر زیاد و کیفیت پایین پخش شود، آهنگ انتخاب شده در همان لحظه و با کیفیت مناسبی شروع به پخش شدن کرد. هنوزم هم یادم هست که چقدر از شنیدن آهنگ Livin’ On A Prayer از Bon Jovi خوشحال بودم. یادم میآید که آن شب تا صبح به گشت و گذار در اسپاتیفای و گوش دادن به آهنگهایی که دوستشان داشتم گذشت. برای من که عاشق موسیقی هستم و سالهاست که ساعتهای زیادی از زندگیام را صرف لذت بردن از موسیقی کرده ام، اسپاتیفای برای من، حکم بهشتی را داشت که دربهایش به یک باره بر من گشوده شده بود.
یکی از تفریحاتی که از آن شب به بعد در من شکل گرفت، شکار آهنگهای جدیدی بود که تا به حال نشنیده بودم. خیلی از آنها حتی توسط هنرمندانی ساخته شده بود که نه خودم و نه اطرافیانم نامی از آنها نشنیده بودیم. چقدر لذت بخش است که همزمان که داری از موسیقی هنرمند ناشناخته لذت میبری، نام او را در ویکیپدیا جست و جو کنی و سرگذشت او را بخوانی. اما با همه این تفاسیر این تفریح که برای من به مانند آب حیات بود، یک مشکل اساسی داشت. پیدا کردن هنرمندان جدیدی که اثرشان به سلیقه من نزدیک باشد، در اکثر مواقع کاری بسیار وقت گیر بود. چه بسا چند ساعتی را در جست و جوی یک آهنگ بدرد بخور میگذراندم و چیز دندادن گیری پیدا نمیکردم.
اما با وارد شدن به سال ۲۰۱۵ میلادی، رابطه من با این اپلیکیشن، رنگ و بوی دیگری به خود گرفت. چرا که در آن سال اسپاتیفای به کمک هوش مصنوعی و یادگیری ماشین، امکانی را ارائه کرد که تا به حال توسط هیچ یک از سرویس های موسیقی ارائه نشده بود. این امکان چیزی نیست جز یک لیست مخصوص که هر یکشنبه برای هر کاربر به روز رسانی میشود و از ۳۰ آهنگ مختلفی تشکیل شده است که کاربر تا به حال به آنها گوش نداده است. نتایج دیوانه وار بود. تمام عاشقان موسیقی شیفته این قابلیت شده بودند. زیرا تعداد بالایی از آهنگهای این لیست پیشنهادی، دقیقا مطابق با سلیقه کاربر بودند. این امکان برای افرادی همچون من که همواره در پی شنیدن موسیقیهای جدید هستند چیزی فراتر از یک آرزو بود. مگر میشود هر یکشنبه، بدون کوچکترین زحمتی، ۳۰ آهنگ جدید، طبق سلیقهات، در انتظارت باشد که آنها را گوش کنی؟. کافی است سری به شبکههای اجتماعی بزنید و هشتگ اسپاتیفای رو جست و جو کنید تا ببینید هنوز که هنوز است، چگونه اکثریت کاربران اسپاتیفای از این قابلیت تعریف و تمجید میکنند.
اما به راستی در پشت این قابلیت هیجان انگیز چه چیزی نهفته است که باعث میشود نتایج این انتخاب ماشینی، تا به این اندازه مجذوب کننده باشد؟ اول از هرچیز بهتر است زمانی را بگذاریم تا ببینیم دیگر سرویسهای موسیقی، سیستم پیشنهاد موسیقی خود را چگونه شکل داده اند؟ و اسپاتیفای چگونه این کار را بهتر از تمام آنها انجام میدهد؟
با بازگشت به سال ۲۰۰۰ میلادی، سرویسی به نام Songza، شیوه پیشنهاد سرویسهای پخش موسیقی را با قابلیتی به نام «موسیقیهای دستچین شده» دگرگون کرد. به این معنا که یک گروه از کارشناسان موسیقی دور هم جمع میشدند و یک سری آهنگ مختلف که احساس میکردند زیبا است را لیست میکردند. سپس کاربران میتوانستند به این لیستهای پیشنهادی گوش کنند. (بعدها سرویس موسیقی Beats Music از این روش در ارائه پیشنهادات خود در استفاده کرد). اگرچه استراتژی دستچین کردن موسیقی تا اندازهای جواب گو بود، اما در نهایت امکان اینکه کاربران مختلف را با سلیقههای منحصر به فرد، به طور تمام و کمال راضی کرد، وجود نداشت.
رادیو پاندورا نام سرویس دیگری است که قابلیت پیشنهاد موسیقی را بیش از پیش گسترش داد و به طور پیشرفتهتری آن را ارائه داد. روش کار این سرویس به این صورت بود که کاربران پس از گوش دادن به یک آهنگ، کلماتی که توصیف کننده آن آهنگ بود را در برنامه وارد میکردند. بنابراین پس از مدتی اکثر موسیقیهای درون این سرویس با برچسبهای مرتبط توصیف شده بودند. سپس پاندورا برای تهیه لیستی از آهنگها، آنهایی را برای شما لیست میکرد که برچسبهایشان با برچسبهای آهنگ های مورد علاقه شما یکی بود.
در همان دوره زمانی، یک شرکت به نام The Echo Nest در آزمایشگاه رسانه دانشگاه MIT شکل گرفت، که از یک روش انقلابی برای شخصیسازی موسیقیها بهره میبرد. The Echo Nest از الگوریتمی بهره میبرد که قادر بود محتوای یک آهنگ را چه به لحاض صوتی و چه به لحاظ متنی بررسی کند، که در نهایت منجر به این میشد که آهنگها را بتوان به طور کامل و به صورت دیجیتالی از دیگری تفکیک کرد.
در نهایت با ورود Last.fm، سرویسی که امروزه نیز به کار خودش ادامه میدهد، آخرین قدم برای تهیه پیشنهادات شخصی سازی شده برداشته شد. این سرویس از روشی با نام فیلترینگ مبتنی بر همکاری استفاده میکند. به طوری بر اساس نظر کاربر شماره ۱، به کاربر شماره ۲ موسیقیهایی را پیشنهاد میدهد که ممکن است دوست داشته باشد.
با مرور سیستمهای پیشنهاد دهنده مختلف در سرویسهای مختلف، در نهایت به سوال اولیه خود برمیگردیم که اسپاتیفای چگونه جادوی خود را شکل میدهد و از همه این سرویسها، در زمینه پیشنهاد موسیقی، بهتر و دقیقتر عمل میکند؟
حقیقت این است که روشی که اسپاتیفای برای شکل دادن سیستم پیشنهاد موسیقی خود استفاده میکند خیلی انقلابی و جدید نیست،این سرویس در حال حاضر بهترین روشهای استفاده شده توسط رقیبان را برای شکل دادن به سیستم پیشنهاد دهنده خود، با یکدیگر ترکیب میکند. این روشها عبارت هستند از:
۱. استفاده از مدل «فیترینگ مبتنی بر همکاری» (همان سیستمی که last.fm از آن استفاده میکند، یعنی بهرهگیری از نظرات و سلیقه یک کاربر، برای پیشنهاد دادن به یک کاربر دیگر)
۲. مدل پردازش زبانهای طبیعی (NLP) که متنهایی که در مورد آهنگ یا هنرمند، در سطح اینترنت وجود دارد را پردازش میکند.
۳. مدل پردازش صوتی، که بخش صوتی یک آهنگ را مورد بررسی قرار میدهد.
بهتر است برای بررسی بیشتر، هرکدام از این روشها را به طور جداگانه بررسی کنیم.
قبل از هرچیزی باید بگویم که اولین شرکتی که مفهوم فیلترینگ مبتنی بر همکاری را به طور خیلی قوی در سیستم خود راه انداخت، سرویس تماشای آنلاین ویدئوی Netflix بود. این سرویس از امتیازهایی که کاربران به فیلمهای مختلف داده بودند، برای پیشنهاد فیلم به دیگر کاربران استفاده میکرد.
بعد از موفقیت Netflix در استفاده از این مدل، استراتژی مذکور به سرعت در سرویسهای دیگر فراگیر شد، به طوری که امروزه این روش به طور خودکار به عنوان یک روش پایه برای پیاده سازی یک سیستم پیشنهاد دهنده شناخته میشود.
اما برخلاف Netflix، اسپاتیفای دارای سیستم امتیاز دهی نیست، بنابراین برای اندازه گیری میزان محبوبیت یک آهنگ در میان کاربران، از دادههایی نظیر «تعداد دفعات پخش یک آهنگ»، «ذخیره شدن آن آهنگ توسط کاربر در یک لیست»، «آیا کاربر بعد از پخش آهنگ به صفحه هنرمند آن سازنده آن آهنگ میرود یا خیر؟» استفاده میکند.
برای توضیح بهتر فیلترینگ مبتنی بر همکاری میتوانیم از یک مثال استفاده کنیم:
فرض کنید دو شخص ۱ و ۲ در سیستم ما وجود دارند. شخص اول آهنگهای «الف»، «ب»، «ج»، «د» را دوست دارد و شخص دوم آهنگهای «ب» ، «ج» ، «د» و «ه» را دوست دارد.الگوریتم فیلترینگ مبتنی بر همکاری با نگاه کردن به این دادهها با خودش میگوید که:
هممم…این دو نفر از سه آهنگ مشابه به نامهای «ب» ، «ج» ، «د» خوششون میاد. پس احتمالا سلیقههاشون بهم نزدیکه، پس من میام به کاربر اول آهنگ «ه» و به کاربر دوم آهنگ «الف» رو پیشنهاد میدهم. اینجوری حتما دوتاشون راضی میشن.
مثال بالا به طور ساده نشان میدهد که این الگوریتم چگونه دادههای کاربران مختلف بررسی و از آنها نتیجه گیری میکند و سپس به کاربران بر اساس این نتیجه گیریها، موسیقی پیشنهاد میدهد. اما سوالی که در اینجا مطرح میشود این است که، اسپاتیفای چگونه دادههای ۱۴۰ میلیون کاربر را محاسبه میکند و در کنار هم قرار میدهد؟ بدون شک انجام این محاسبات برای دو کاربر کاری آسان است. اما برای ۱۴۰ میلیون کاربر چطور؟
جواب: استفاده از محاسبات ماتریسی و مقداری کتابخانه در زبان برنامه نویسی پایتون
ماتریسی که در بالا مشاهده میکنید، در واقعیت بسیار بسیار بزرگتر از چیزی است که میبینید. هر ردیف بیانگر هر یک از ۱۴۰ میلیون کاربر «اسپاتیفای» است و هر ستون نشان دهنده هر یک از ۳۰ میلیون آهنگ درون دیتابیس اسپاتیفای است. یک کتابخانه در پایتون با استفاده از فرمول پایین و ماتریس تعریف شده، محاسبات را انجام میدهد:
وقتی که کارش تمام شد، نتیجه به دو بردار مجزای X و Y خلاصه میشود. بردار X نماینده هر کاربر است و سلیقه آن کاربر را، هرچند که پیچیده باشد، در خود دارد. همچنین Y یک بردار است که نماینده آهنگهاست و اطلاعات مربوط به هر آهنگ را در خود جای داده است.
حالا ما ۱۴۰ ملیون بردار مربوط به کاربران، و ۳۰ میلیون بردار مربوط به آهنگها را داریم. محتوای حقیقی این بردارها در واقع تعدادی عدد هست که به خودی خود بی معنی هستند، اما وقتی باهم مقایسه میشوند، ارتباط معناداری را میتوان از آنها نتیجه گرفت (مثال گفته شده در فیلترینگ مبتنی بر همکاری را که به یاد دارید؟)
فیلترینگ مبتنی بر همکاری، برای اینکه کاربری با بیشترین شباهت را، از نظر سلیقه، به من پیدا کند، بردار بدست آمده برای من را با تمامی کاربران دیگر مقایسه میکند. سپس هرکاربری، که اعداد بردارش بیشترین شباهت به اعداد بردار من داشت را انتخاب میکند. این گونه است که کاربری با سلیقه مشابه من در سیستم پیدا میشود. همین مقایسه نیز در میان آهنگها انجام میشود. به طوری که آهنگهایی با بیشترین شباهت را میتوان پیدا کرد.
اگرچه فیلترینگ مبتنی بر همکاری وظیفه خودش را به خوبی انجام میدهد، اما اسپاتیفای یک مورد دیگر را هم به دست پخت خود اضافه میکند و آنهم چیزی نیست جز پردازش زبان طبیعی (NLP).
دومین روش پردازشی که اسپاتیفای از آن استفاده میکند، پردازش زبان طبیعی میباشد. همانطور که از نامش پیداست، دادههایی که در این روش بررسی میشوند «کلمهها» هستند. با دنبال کردن دادهها در اینترنت اطلاعات مقالههای خبری، وبلاگها و تمامی متنهای سراسر اینترنت در این روش جمع آوری و پردازش میشوند و سپس به کمک آنها نتیجهگیری نهایی صورت میگیرد.
پردازش زبان طبیعی در واقع قابلیتی برای کامپیتر است که به وسیله آن گفتار انسان را متوجه میشود. خود این موضوع به تنهایی یک محدوده علمی بسیار بزرگ را تشکیل میدهد، که در اکثر اوقات با موضوع پردازش احساسات ادغام میشود.
توضیحات کامل راجع به روش کارکرد پردازش زبان در سیستم اسپاتیفای قطعا فراتر از موضوع این مقاله است، اما اگر بخواهیم آنرا به طور ساده توضیح بدهیم، به این صورت میباشد: رباتهای اسپاتیفای دائما در سطح اینترنت در حال چرخش هستند و به دنبال پستهای وبلاگها، اخبار و دیگر متنهای نوشته شده هستند، تا در نهایت نتیجه بگیرند که مردم راجع به فلان خواننده یا هنرمند یا فلان آهنگ چه میگویند، مردم از چه صفات و کلمات توصیف کنندهای در کنار آن آهنگ یا اسم آن خواننده استفاده میکنند، مردم در کنار اسم آن آهنگ یا هنرمند، نام چه آهنگها و هنرمندان دیگری را میبرند.
البته من هم همانند شما دقیقا نمیدانم که اسپاتیفای چگونه از این دادهها نتیجهگیری میکند، اما با توجه به همکاری آنها با شرکت The Echo Nest که پیشتر راجع به آن صحبت کردیم، میتوان حدسیاتی زد که ممکن است به واقعیات نزدیک باشد. آنها احتمالا دادههایی که اسپاتیفای جمع آوری میکند را بخش بندی کرده و در بردارهایی با نامهایی همچمون «بردار فرهنگی» و یا «بردار اصطلاحات برتر» ذخیره سازی میکنند. هر هنرمند و هر آهنگ به ازای خود یکی از این بردارهای «اصطلاحات برتر» را دارد. همچنین هر عبارتی که درون این بردارها قرار دارد، دارای یک وزن هست که نشاندهنده اهمیت آن عبارت برای هنرمند و یا آهنگ صاحب آن بردار است
پس از تشکیل بردارهای گفته شده، مدل انتخابگر، شروع به انجام محاسباتی شبیه به محاسباتی که مدل فیلترینگ مبتنی بر همکاری انجام داد، میکند و به ازای هر آهنگ یک بردار توصیف کننده را میسازد. سپس به راحتی میتوان دو آهنگ را با هم مقایسه کرد و آنهایی که شبیه به یکدیگر هستند را تشخیص داد.
شاید با رسیدن به این بخش با خودتان بگویید:
ما که تا اینجای کار کلی داده راجع به آهنگها و هنرمندا جمع آوری کردیم. چطوری ممکنه نیاز به داده بیشتر داشته باشیم و دو مدل قبلی کافی نباشن؟؟؟
قبل از هرچیز باید بگویم که اضافه کردن مدل سوم اگر امکان جدیدی به ما ندهد، حداقل دقت سیستم پیشنهاد دهنده ما را بیشتر میکند. اما مدل سوم علاوه بر افزایش دقت پیشنهادات، یک هدف دیگر را دنبال میکند. پردازش صوت باعث میشود که آهنگهایی که هیچ داده ای راجع به آنها وجود ندارد را بتوانیم وارد مجموعه نتیجه گیری خود کنیم. وقتی یک آهنگ جدید به بازار می آید، دو مدل پردازش داده قبلی، خیلی کارایی ندارند.
برای مثال، فرض کنید یک خواننده آهنگی را همین امروز در سرویس اسپاتیفای منتشر کرده است، که شاید نهایتا ۵۰ نفر تا به حال آن را گوش کرده باشند، پس در نتیجه تعداد شنوندگان این آهنگ کمتر از آن است که بتوان از فیلترینگ مبتنی بر هم کاری استفاده کرد. همچنین این آهنگ جدیدتر از آن است که در سطح اینترنت راجع به آن صحبتی شده باشد، بنابراین پردازش زبان هم نمیتواند در اینجا کمکی به ما بکند. اما خوشبختانه، در مدل پردازش صوت، هیچ تفاوتی بین آهنگهای جدید و قدیمی نیست، پس به کمک این نوع پردازش، آهنگهای جدید هم میتوانند در بین پیشنهادات هفتگی کاربران جای گیرند.
اما پردازش صوت چگونه کار میکند و چگونه میتواند دادههای صوتی را بررسی کند؟ جواب این سؤال استفاده از شبکههای عصبی کانولوشنال (Convolutional Neural Networks) است.
شبکههای عصبی کانولوشنال، همان تکنولوژیای است که در سیستمهای تشخیص چهره و تشخیص اشیاء استفاده میشود. در اسپاتیفای، این تکنولوژی تغییر یافتهاست تا بتواند با دادههای صوتی، به جای پیکسلهای یک تصویر، کار بکند. در پایین میتوانید مثالی از معماری یک شبکه عصبی کانولوشنال را ببینید.
شبکه عصبی مشخص شده، دارای چهار لایه کانولوشنال است، که در واقع همان چهار نوار پهنی هستند که در سمت چپ تصویر مشاهده میکنید. پس از آنها، سه لایه متراکم وجود دارد که توسط سه نوار باریکتر سمت راست تصویر نشان داده شده اند. ورودی ما به این سیستم، فرکانسهای زمانی نمایانگر قابهای صوتی است که در ادامه به هم وصل میشوند یا با یکدیگر ترکیب میشوند تا یک ،طیف نگاره (ستون رنگی اول از سمت چپ) را تشکیل بدهند.
قابهای صوتی از میان این لایههای کانولوشنال گذر میکنند، و پس از رد شدن از آخرین لایه کانولوشنال، میتوانید یک نتیجه گیری موقت کلی را در لایه «global temporal pooling» داشته باشیم، که از میان همه بازههای زمانی جمع آوری شده است. در نتیجه، ویژگیهای اصلی یک آهنگ مانند فرکانس صوتی سازهای استفاده شده، ضرب آهنگ و ریتم کلی و … در تمام طول آهنگ بررسی میشوند.
بعد از پردازش، شبکه عصبی دانشی را که از آهنگ بدست آورده را ابراز میکند، که شامل ویژگیهایی مانند کلید موسیقیایی، سبک، سرعت، بلندی صدا و… است
میتوانید در پایین طرح دادهی قطعهای ۳۰ ثانیهای از آهنگ «Around the World» ساخته گروه موسیقی «Daft Punk» را مشاهده کنید.
در نهایت، مطالعه ویژگیهای کلیدی آهنگ، به اسپاتیفای این اجازه را میدهد که شباهتهای اساسی میان آهنگها را متوجه شود و این تصمیم را بتواند بگیرد که چه کاربری ممکن است بر اساس آهنگهایی که تا به حال گوش داده است از این آهنگ خوشش بیاید.
این مقاله مروری کلی بر انواع مدلهایی که اسپاتیفایی برای شکل دادن به سیستم پیشنهاد آهنگ خود از آنها بهره میبرد، بود و در آخر یکشنبه هر هفته، به شما لیست از ۳۰ آهنگی که به احتمال زیاد دوستشان دارید را ارائه میدهد.
صد البته باید بگویم که پردازش این حجم از اطلاعات کار آسانی نیست. اسپاتیفای هرروزه این حجم عظیم و غیر قابل تصور از دادهها را شامل اطلاعات کاربران و هنرمندان و فایلهای صوتی بر روی کلاسترهای قدرتمند خود پردازش میکند، تا بتواند جوابگوی نیازهای کاربران خود باشد و با سرعت مناسبی به درخواستهای آنها پاسخ بدهد.
امیدوارم که از این مقاله لذت کافی رو برده باشید و مانند من جواب سوالی که همان اول مطرح کرده بودیم را گرفته باشید. من هم مثل همیشه به دنبال پیدا کردن آهنگهای جدید در لیست هفتگی مخصوص به خودم خواهم بود.
منابع:
Ever Wonder How Spotify Discover Weekly Works? Data Science
How Does Spotify Know You So Well?
The Amazing Ways Spotify Uses Big Data, AI And Machine Learning To Drive Business Success