GenRec: گامی به سوی سیستم‌های پیشنهاددهنده مبتنی بر مدل‌های زبانی بزرگ در نتفلیکس

GenRec: گامی به سوی سیستم‌های پیشنهاددهنده مبتنی بر مدل‌های زبانی بزرگ در نتفلیکس

نویسندگان: اینگ لی، ارجون رائو، شرادا سگال

مقدمه

سیستم‌های پیشنهاددهنده، قلب تپنده تجربه کاربری در نتفلیکس هستند. مدل‌های فعلی ما در محیط عملیاتی به هزاران ویژگی دست‌ساز (Hand-crafted features) روی کاربران، آیتم‌ها و تعاملات متکی هستند و از معماری‌های تخصصی برای مدل‌سازی دنباله‌ای (Sequence modeling)، تعاملات ویژگی‌ها و اهداف چندمنظوره (Multi-task objectives) استفاده می‌کنند. این مجموعه فنی طی سال‌های متمادی برای پشتیبانی از انواع مختلف محتوا (فیلم، سریال، بازی، پخش زنده و پادکست) و سطوح مختلف محصول توسعه یافته است، اما پیچیدگی آن باعث شده اضافه کردن سناریوهای جدید بسیار پرهزینه باشد؛ چرا که افزودن یک نوع محتوا یا سطح جدید ممکن است نیازمند مهندسی ویژگی گسترده، تغییر معماری، زیرساخت‌های جدید و آزمایش‌های فراوان باشد.

در همین حال، مدل‌های زبانی بزرگ (LLMs) نحوه تفکر ما در مورد سیستم‌های پیشنهاددهنده را تغییر داده‌اند؛ همان‌طور که در کارهای اخیری مانند PLUM، GLIDE و OneRec-Think نشان داده شده است. دانش عمومی گسترده و درک زبانی قوی این مدل‌ها، امکان بازنمایی مستقیم تاریخچه کاربران و متاداده‌های آیتم‌ها را به صورت متن فراهم می‌سازد تا روابط پیچیده در یک فضای معنایی مشترک درک شده و پیشنهادات از طریق پرومپت‌های زبان طبیعی هدایت شوند. با این حال، مدل‌های زبانی آماده (Off-the-shelf LLMs) هنوز با سیستم‌های پیشنهاددهنده آماده برای محیط عملیاتی فاصله زیادی دارند؛ زیرا اغلب محتواهای محبوب جهانی را بیش از حد پیشنهاد می‌دهند، دچار توهم (Hallucination) شده و آیتم‌های خارج از کاتالوگ را ارائه می‌کنند، محدودیت‌های تجاری را نادیده می‌گیرند و میزان شخصی‌سازی محدودی دارند.

برای حل این مشکل، ما سیستم GenRec را ساختیم؛ یک رتبه‌بندی‌کننده پیشنهاددهنده مبتنی بر LLM که یک مدل پایه داخلی را روی داده‌ها و اهداف اختصاصی نتفلیکس پس‌آموزش (Post-train) می‌دهد. GenRec نشان می‌دهد که یک رتبه‌بندی‌کننده مبتنی بر LLM می‌تواند با وجود استفاده از نمونه‌های برچسب‌گذاری‌شده و سیگنال‌های ورودی بسیار کمتر، با سیستم‌های عملیاتی بالغ نتفلیکس برابری کرده یا حتی از آن‌ها پیشی بگیرد.

شکل ۱: خط لوله GenRec. داده‌های خام تاریخچه کاربر، متاداده‌های آیتم و بافت از طریق مهندسی بافت به پرومپت‌های زبان طبیعی تبدیل شده و وارد GenRec می‌شوند. این مدل روی vLLM در حالت فقط پیش‌پرکن (Prefill-only mode) اجرا می‌شود و برای هر آیتم کاتالوگ امتیاز صادر می‌کند که در نهایت به رتبه‌بندی پیشنهادات می‌انجامد.

به طور کلی، GenRec اقدامات زیر را انجام می‌دهد:

  • تاریخچه کاربران، متاداده آیتم‌ها و بافت (Context) را به متن تبدیل (Verbalize) می‌کند.
  • یک مدل زبانی پایه منطبق‌شده با نتفلیکس را برای رتبه‌بندی پس‌آموزش می‌دهد.
  • یک سری امتیازدهی آگاه از کاتالوگ (Catalog-aware scoring head) روی عناوین نتفلیکس اضافه می‌کند.
  • از سیگنال‌های پاداش برای همراستایی با ارزش بلندمدت کاربران و اهداف تجاری استفاده می‌کند.
  • برای صرفه‌جویی در هزینه‌ها، در حالت فقط پیش‌پرکن (Prefill-only) روی زیرساخت ارائه LLM نتفلیکس اجرا می‌شود.

در یک آزمون A/B بزرگ‌مقیاس در برابر یک رتبه‌بندی‌کننده عملیاتی کاملاً تنظیم‌شده، GenRec به بهبودهای آماری معناداری در هر دو معیار آنلاین کوتاه‌مدت و بلندمدت دست یافت، در حالی که تنها از بخش کوچکی از داده‌های برچسب‌گذاری‌شده فاز ۲ و سیگنال‌های ورودی استفاده کرد. این سیستم وابستگی ما را به ویژگی‌های دست‌ساز کاهش داده و تمرکز را از مهندسی ویژگی به مهندسی بافت (Context engineering) تغییر می‌دهد. در این مقاله وبلاگ، نحوه کار GenRec، عملکرد آن و دلایلی که باور داریم این سیستم به سوی آینده‌ای تمرکزیافته‌تر بر LLM در نتفلیکس اشاره دارد را شرح می‌دهیم.

تعریف مسئله

تمرکز ما روی مسئله رتبه‌بندی کامل کاتالوگ (Full-catalog ranking) یا رتبه‌بندی K عنصر برتر (Top-K ranking) در صورت ارائه مجموعه نامزدها است. با داشتن کاربر u، تاریخچه تعاملات H و بافت جاری τ (دستگاه، سطح، زبان، زمان و غیره)، سیستم GenRec به هر آیتم امتیازی اختصاص می‌دهد و یک رتبه‌بندی شخصی‌سازی‌شده تولید می‌کند که می‌تواند مستقیماً پیشنهادات را ارائه داده یا به عنوان ورودی برای سیستم‌های شخصی‌سازی پایین‌دستی عمل کند.

به طور رسمی، ما یک درخواست (u, τ, t, H) شامل کاربر، بافت، زمان و تاریخچه را به یک رتبه‌بندی π روی کاتالوگ C نگاشت می‌کنیم که در آن π(i) موقعیت اختصاص‌یافته به آیتم i است. ما π را برای سودمندی متقابل و بلندمدت کاربر (شاخصی برای رضایت و ماندگاری) بهینه‌سازی می‌کنیم، نه فقط تعاملات کوتاه‌مدت.

از مدل زبانی پایه تا رتبه‌بندی‌کننده پیشنهاددهنده

سیستم GenRec از یک چارچوب آموزشی دو مرحله‌ای پیروی می‌کند:

شکل ۲: چارچوب دو مرحله‌ای. مرحله ۱ یک LLM پایه را روی داده‌های نتفلیکس برای درک کاربر و محتوا آموزش می‌دهد و مرحله ۲ پس‌آموزش را روی داده‌ها و اهداف مخصوص رتبه‌بندی انجام می‌دهد.

  • مرحله ۱ — مدل زبانی پایه منطبق‌شده با نتفلیکس: ما از یک LLM متن‌باز شروع می‌کنیم و آن را روی مجموعه داده‌های اختصاصی نتفلیکس تطبیق می‌دهیم تا قابلیت‌های پایه‌ای مانند درک محتوای نتفلیکس، الگوهای رفتاری و ترجیحات اعضا، و درک و تولید زبان عمومی را فرابگیرد. مرحله ۱ به‌ندرت به‌روزرسانی می‌شود و به عنوان یک شاسی مشترک و آگاه از نتفلیکس برای برنامه‌های متعدد عمل می‌کند.
  • مرحله ۲ — GenRec: سپس این مدل پایه را با پس‌آموزش روی داده‌ها و اهداف خاص رتبه‌بندی، به یک مدل رتبه‌بندی باکیفیت تبدیل می‌کنیم. مرحله ۲ روی کیفیت رتبه‌بندی و هدایت‌پذیری تمرکز دارد، سیگنال‌های پاداش متعدد را از طریق زیان‌های وزن‌دهی‌شده با پاداش ترکیب می‌کند، به صورت متداول‌تر به‌روزرسانی می‌شود تا محتواهای جدید و ذائقه‌های در حال تغییر را دنبال کند، و به طور صریح تحت محدودیت‌های هزینه ارائه بهینه‌سازی می‌شود.

داده‌های آموزشی به مثابه گفتگو

اعضای نتفلیکس صدها میلیارد رویداد تعاملی در سطوح مختلف ایجاد می‌کنند (بازدیدها، پخش‌ها، مدت‌زمان تماشا، لایک/دیس‌لایک، افزودن به لیست، رها کردن و غیره). ما این داده‌های لوگ را به «گفتگوهای» تک‌پرسش یا چندپرسش بین کاربر و سیستم پیشنهاددهنده تبدیل می‌کنیم. هر نوبت گفتگو شامل موارد زیر است:

  • پیام کاربر: بافت کلامی‌سازی‌شده، پروفایل، تاریخچه، متاداده آیتم و وظیفه (مثلاً پیشنهاد این که کاربر چه چیزی را بعداً تماشا خواهد کرد یا لایک می‌کند).
  • پیام دستیار: تعامل واقعی عضو (مثلاً کدام عناوین پخش شدند، چه مدت تماشا شدند و چه بازخوردی ارائه شد).

در طول آموزش فاز ۲، LLM یاد می‌گیرد که چگونه پیام‌های دستیار به پیام‌های کاربر وابسته هستند. این امر به ما امکان می‌دهد سیگنال‌های غنی پیشنهاددهی را به عنوان متن بیان کرده و به طور هم‌زمان از اهداف مدل‌سازی زبان (LM) و رتبه‌بندی پشتیبانی کنیم. در زمان استنتاج (Inference)، ما بافت کلامی‌سازی‌شده را وارد کرده و یک سری امتیازدهی آگاه از کاتالوگ را برای رتبه‌بندی آیتم‌ها به کار می‌گیریم؛ در این مرحله پیام‌های دستیار رمزگشایی نمی‌شوند. فرمت گفتگویی عمدتاً در طول آموزش برای پشتیبانی از هدف LM و حفظ درک زبانی قوی روی متن کلامی‌سازی‌شده استفاده می‌شود.

کلامی‌سازی و مهندسی بافت

سیستم‌های پیشنهاددهنده سنتی روی ویژگی‌های متراکم (Dense features) و تعبیه‌ها (Embeddings) کار می‌کنند. GenRec رویکرد متفاوتی دارد: این سیستم تاریخچه غنی کاربر و بافت را به زبان طبیعی تبدیل (Verbalize) می‌کند و سیگنال‌های تعامل خام را مستقیماً در فضای معنایی LLM کدگذاری می‌نماید. با انجام این کار، مدل به جای مهندسی ویژگی دستی، برای کشف الگوهای سطح بالاتر مانند روابط بین آیتم‌ها و ترجیحات در حال تحول کاربر متکی می‌شود.

کلامی‌سازی ساده‌لوحانه هر تعامل در تاریخچه کاربر می‌تواند به سرعت از بودجه توکن پیشی گرفته و در مقیاس نتفلیکس بسیار گران باشد. پنجره بافت (Context window) به «بودجه ویژگی» جدید ما تبدیل می‌شود، بنابراین ما مهندسی بافت را اعمال می‌کنیم:

  • حفظ کامل: تعاملات با سیگنال بالا (مانند پخش‌های طولانی، ثبت لایک) همراه با جزئیات کامل‌تر.
  • حذف: رویدادهای با سیگنال پایین (مانند پخش‌های بسیار کوتاه یا مکث‌های سریع).
  • خلاصه‌سازی یا فشرده‌سازی: رفتارهای تکراری (مانند تماشای پیوسته یا Binge-watching).
  • توضیح انتخابی: آیتم‌های مهم یا شروع‌سرد (Cold-start) مانند انتشارات جدید.

در یک بودجه توکن ثابت، ما تاریخچه اخیر و با سیگنال بالا را اولویت‌بندی کرده و تاریخچه‌های قدیمی‌تر را فشرده یا حذف می‌کنیم. همچنین پرومپت را طوری ساختار می‌داده‌ایم که پیشوند‌های مشترک برای کش‌کردن بهتر پیشوند (Prefix caching) حداکثر شوند. هدف، ایجاد یک پرومپت فشرده و حاوی اطلاعات بالا است که کیفیت رتبه‌بندی را بدون هزینه‌های گزاف حفظ کند.

اهداف: رتبه‌بندی، زبان و پاداش‌ها

مدل کلی GenRec با یک تابع زیان چندهدفه آموزش داده می‌شود که هدف رتبه‌بندی پیشنهادات، اهداف مدل‌سازی زبان و همراستایی از طریق آموزش وزن‌دهی‌شده با پاداش را ترکیب می‌کند:

۱. هدف رتبه‌بندی آگاه از کاتالوگ

وظیفه اصلی، یک هدف رتبه‌بندی است که به مدل آموزش می‌دهد آیتم‌ها را بر اساس کیفیت تعامل امتیازدهی کند. ما موارد مثبت را با استفاده از تعاملات باارزش (مانند پخش‌های به اندازه کافی طولانی، بازخوردهای صریح قوی) همراه با آستانه‌ها و منطق حذف نویز برچسب‌گذاری می‌کنیم و مدل را — از طریق زیان آنتروپی متقاطع (Cross-entropy loss) روی کاتالوگ یا مجموعه نامزدها — آموزش می‌دهیم تا با توجه به بافت کلامی‌سازی‌شده، امتیازهای بالاتری به این موارد مثبت اختصاص دهد.

۲. هدف مدل‌سازی زبان

ما همچنین یک هدف مدل‌سازی زبان (LM) را روی ورودی‌ها و خروجی‌های کلامی‌سازی‌شده حفظ می‌کنیم. این امر به حفظ درک زبانی عمومی مدل کمک می‌کند، قدرتمندی آن را در تفسیر تاریخچه‌های غنی زبان طبیعی و متاداده‌های آیتم بهبود می‌بخشد و راه را برای سناریوهای تولید متن مانند توضیحات پیشنهادها باز نگه می‌دارد.

۳. زیان وزن‌دهی‌شده با پاداش برای همراستایی

فراتر از دقت رتبه‌بندی خام، GenRec باید (۱) الزامات تجاری را رعایت کند — برای مثال، ایجاد تعادل بین فیلم‌ها، سریال‌ها، بازی‌ها، پخش زنده و پادکست‌ها — و (۲) رضایت بلندمدت عضو را به جای کلیک‌ها یا پخش‌های فوری بهینه‌سازی کند.

آموزش صرف روی دنباله‌های تعامل خام می‌تواند به رفتارهای نامطلوب مانند توجه بیش از حد به تماشای پیوسته یا تمرکز بیش از حد روی یک نوع محتوا منجر شود. برای حل این مشکل، ما زیان رتبه‌بندی را با استفاده از سیگنال‌های مدل‌های پاداش مجزا وزن‌دهی می‌کنیم. هر نمونه آموزشی یک وزن اسكالر دریافت می‌کند که از دو نوع سیگنال مشتق شده است:

  • شاخص‌های رضایت بلندمدت: تخمین می‌زنند که یک تعامل کوتاه‌مدت چقدر به نتایج بلندمدت مانند بازگشت کاربر، کاوش در کاتالوگ یا تعامل پایدار کمک می‌کند.
  • بازتعادل رفتاری: تعدیل رفتارها در انواع محتوا و مراحل عرضه (به عنوان مثال، بازی‌ها در برابر فیلم‌ها، انتشارات جدید در برابر عناوین همیشه‌سبز) برای همراستایی بهتر با اهداف تجاری.

سپس زیان رتبه‌بندی نمونه با این وزن مقیاس‌پذیر می‌شود: تعاملات باارزش وزن‌های بزرگ‌تری دریافت می‌کنند و موارد کم‌ارزش وزن کمتری می‌گیرند. این رویکرد وزن‌دهی‌شده با پاداش، ساده‌تر و از نظر هزینه‌ای مقرون‌به‌صرفه‌تر از یادگیری تقویتی (RL) کامل است، با این حال همراستایی موثری را در عمل ارائه می‌دهد. ما دستاوردهای اضافی را از روش‌های سبک RL (مانند GRPO) مشاهده کرده‌ایم، اما به دلیل هزینه بالاتر، آن‌ها را به کارهای آینده موکول می‌کنیم.

معماری مدل و ارائه (Serving)

شاسی اصلی و سری امتیازدهی

معماری GenRec از مدل زبانی پایه ما پیروی می‌کند: یک ترنسفورمر فقط رمزگشا (Decoder-only Transformer) که با اهداف پیش‌بینی توکن بعدی آموزش دیده و با یک سری رتبه‌بندی آگاه از کاتالوگ تقویت شده است که فقط به آیتم‌های موجود در کاتالوگ نتفلیکس امتیاز می‌دهد. خط لوله امتیازدهی به شرح زیر عمل می‌کند:

  1. کلامی‌سازی: یک کلامی‌ساز V، تاریخچه کاربر H، بافت τ و متاداده‌های مربوط به آیتم را در یک دنباله متنی واحد x سریال‌سازی می‌کند.
  2. بازنمایی تجمیع‌شده: مدل زبانی x را پردازش کرده و ما یک حالت پنهان تجمیع‌شده h را استخراج می‌کنیم که ترجیحات فعلی و بافت کاربر را خلاصه می‌کند.
  3. امتیازدهی آگاه از کاتالوگ: هر آیتم کاتالوگ i دارای یک تعبیه یادگرفته‌شده eᵢ است. یک سری امتیازدهی ϕ، مقادیر h و eᵢ را (مثلاً از طریق ضرب داخلی یا یک MLP کوچک) ترکیب می‌کند تا امتیاز sᵢ را تولید کند. اعمال یک تابع سافت‌مکس (Softmax) روی امتیازها، توزیع احتمالی ایجاد می‌کند که آن را به یک رتبه‌بندی π تبدیل می‌کنیم.

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

ارائه و بهینه‌سازی هزینه

سیستم GenRec روی زیرساخت داخلی LLM نتفلیکس با استفاده از vLLM ارائه می‌شود. در مقیاس نتفلیکس، هزینه ارائه عمدتاً تحت تأثیر سه عامل است: ۱) اندازه مدل؛ ۲) طول بافت؛ ۳) حالت استنتاج (پیش‌پرکن در برابر رمزگشایی خودبازگشتی). ما هزینه را از طریق سه استراتژی کنترل می‌کنیم:

  • مدل‌های کوچک‌تر / تقطیرشده: ما GenRec را روی مدل‌های پایه کوچک‌تر یا تقطیرشده (Distilled) آموزش می‌دهیم که اغلب دارای مجموعه‌داده‌های بزرگ‌تر یا هدفمندتر هستند تا بیشتر کیفیت مدل‌های بزرگ‌تر را با هزینه ارائه پایین‌تر ثبت کنند.
  • فشرده‌سازی شدید بافت: با استفاده از مهندسی بافت که قبلاً شرح داده شد، تعداد توکن‌ها را در عین حفظ کیفیت رتبه‌بندی به حداقل می‌رسانیم.
  • استنتاج فقط در حالت پیش‌پرکن: رمزگشایی خودبازگشتی (Autoregressive decoding) روی مجموعه‌های بزرگ نامزد به‌شدت گران خواهد بود. در عوض، ما در حالت فقط پیش‌پرکن (Prefill-only) اجرا می‌کنیم: مدل پرومپت را یک بار پردازش کرده و کل مجموعه نامزد را در یک عبور رو به جلو (Forward pass) واحد و بدون رمزگشایی توکن به توکن امتیازدهی می‌کند.

در کنار هم، این انتخاب‌ها ارائه GenRec را روی بار کاری با حجم بالا و در حد بودجه‌های محاسباتی امکان‌پذیر می‌سازد.

آزمایش‌های آفلاین و آنلاین

ما GenRec را در برابر یک رتبه‌بندی‌کننده عملیاتی بالغ که طی سال‌های متمادی تنظیم شده است، ارزیابی کردیم. مدل پایه به هزاران ویژگی متراکم و تعبیه مهندسی‌شده و همچنین معماری‌های سفارشی برای مدل‌سازی تعاملات ویژگی‌ها و دنباله‌ها متکی است. ما عملکرد را با استفاده از معیارهای ارزیابی آفلاین و یک آزمون A/B آنلاین بزرگ‌مقیاس ارزیابی کردیم.

GenRec در برابر مدل پایه عملیاتی

در حالت آفلاین، GenRec با وجود استفاده از سیگنال‌های ورودی و نمونه‌های برچسب‌گذاری‌شده بسیار کمتر، در معیارهای رتبه‌بندی از رتبه‌بندی‌کننده عملیاتی پیشی گرفت. با تقریباً ۴۰ برابر داده‌های آموزش برچسب‌گذاری‌شده کمتر در فاز ۲…