ساخت سیستمهای توصیهگر که حس «فوری بودن» را القا میکنند، یکی از چالشبرانگیزترین وظایف در معماری نرمافزار مدرن است. رویکردهای سنتی اغلب هنگام محاسبه امتیازهای شباهت در زمان پرسوجو با افزایش تأخیر مواجه میشوند. ویسپا، یک پلتفرم جستجو و تحلیل داده با منبع باز، مزیت منحصربهفردی را با پشتیبانی بومی از جستجوی برداری درون موتور پردازش پرسوجو ارائه میدهد. این ویژگی امکان شخصیسازی بلادرنگ را بدون نیاز به سرویسهای استنتاج جداگانه و کند فراهم میکند.
چرا ویسپا را برای جستجوی برداری انتخاب کنیم؟
برخلاف پایگاههای داده برداری خالص که ممکن است در فیلترهای پیچیده یا اتصال دادههای ساختاریافته با مشکل مواجه شوند، ویسپا جستجو، شباهت برداری و تحلیل را در یک سیستم واحد ترکیب میکند. برای شخصیسازی، این موضوع حیاتی است، زیرا شما به ندرت میخواهید موارد را صرفاً بر اساس شباهت معنایی توصیه کنید. شما نیاز دارید موارد را بر اساس موجودی، موقعیت مکانی کاربر یا وضعیت اشتراک فیلتر کنید، در حالی که همزمان بر اساس بردارهای ترجیحات کاربر امتیازدهی میکنید.
مکانیزم اصلی شامل ذخیره بردارهای مورد (Item Embeddings) در ویسپا و محاسبه امتیازهای شباهت در زمان پرسوجو با استفاده از الگوریتمهای کارآمد همسایه نزدیک است. ویسپا از روشهای مختلف ایندکسبندی از جمله HNSW (دنیای کوچک قابل پیمایش سلسلهمراتبی) برای بردارهای پربعد پشتیبانی میکند و اطمینان میدهد که حتی با میلیونها مورد، زمان پاسخدهی در سطح میلیثانیه حفظ شود.
تعریف مدل داده
برای پیادهسازی یک مدل تعامل کاربر-مورد، ابتدا اسکیمای (Schema) را تعریف میکنیم. ما یک بردار embedding برای هر مورد (مثلاً یک محصول یا مقاله) و متادیتا برای فیلتر کردن ذخیره خواهیم کرد. در اینجا یک نمونه از فایل .sd (تعریف اسکیمای) آورده شده است:
schema items {
document items {
field title type string {
indexing: index | summary
}
field category type string {
indexing: index
}
field embedding type tensor[x(768)] {
indexing: index
}
}
indexes {
vector embedding {
dimension: 768
distance-metric: euclidean
max-posting-list-size: 100
}
}
}
به تعریف ایندکس vector توجه کنید. ما بُعد (768، که معمولاً برای embeddingهای سبک BERT است) و معیار فاصله را مشخص میکنیم. فاصله اقلیدسی برای embeddingهای نرمالشده استاندارد است، اما شباهت کسینوسی میتواند با نرمالسازی بردارها قبل از ورود داده (Ingestion) به دست آید.
پرسوجو با شخصیسازی
قدرت ویسپا در مرحله پرسوجو آشکار میشود. ما میتوانیم شباهت برداری را با منطق کسبوکار ترکیب کنیم. فرض کنید ما یک پروفایل کاربر با بردار اختصاصی خود را داریم که از تعاملات گذشته او تولید شده است. ما میتوانیم یک پرسوجو ارسال کنیم که موارد نزدیک به بردار کاربر را بازیابی کند، در حالی که موارد ناموجود را فیلتر میکند.
{
"query": {
"root": {
"id": "root",
"timeout": "50ms",
"inputs": {
"query.user_embedding": [0.1, 0.5, -0.2, ... 765 more values]
}
}
},
"yql": "select * from items where userembedding(query.user_embedding) and category in filter('category')"
}
در اینجا، userembedding() یک عملگر پرسوجوی داخلی ویسپا است که شباهت بین بردار ذخیرهشده مورد و بردار پرسوجوی کاربر را محاسبه میکند. نتیجه یک امتیاز است که میتوان از آن برای رتبهبندی استفاده کرد. با افزودن فیلترها مستقیماً در YQL (زبان پرسوجوی ویسپا)، اطمینان میدهیم که فقط موارد واجد شرایط در نظر گرفته میشوند و جستجوی برداری به صورت زودهنگام حذف (Pruned) میشود که عملکرد را بهبود میبخشد.
مدیریت بهروزرسانیهای بلادرنگ
یک چالش کلیدی در شخصیسازی، تازه نگه داشتن مدل است. ویسپا امکان ایندکسبندی بلادرنگ موارد جدید و embeddingهای کاربر را فراهم میکند. وقتی یک کاربر با یک مورد جدید تعامل میکند، میتوانید embedding پروفایل او را بهروزرسانی کرده و آن را به نقطه پایانی update ویسپا ارسال کنید. از آنجا که ایندکس برداری به صورت تدریجی بهروزرسانی میشود، پرسوجوهای بعدی آخرین ترجیحات کاربر را بدون نیاز به راهاندازی مجدد سرویس بازتاب خواهند داد.
علاوه بر این، ویسپا از جستجوی توزیعشده در چندین گره پشتیبانی میکند. با رشد کاتالوگ شما، میتوانید ایندکس برداری را با افزایش تعداد گروههای محتوا (Content Groups) مقیاسپذیر کنید. لایه پرسوجو به طور خودکار جستجوی برداری را در بین گرهها توزیع کرده و نتایج را ادغام میکند و تأخیر پایین را حفظ مینماید.
مثال عملی: توصیههای تجارت الکترونیک
یک وبسایت تجارت الکترونیک با ۱۰ میلیون محصول را در نظر بگیرید. ما از یک شبکه عصبی دو-برجی (Two-tower) برای تولید embeddingهای کاربران و محصولات استفاده میکنیم. برج کاربر یک بردار ۱۲۸ بعدی بر اساس تاریخچه مرور تولید میکند، در حالی که برج محصول یک بردار ۱۲۸ بعدی بر اساس ویژگیهای محصول تولید میکند.
در ویسپا، ما بردارهای محصول را ذخیره میکنیم. در زمان پرسوجو، فرانتاند بردار ۱۲۸ بعدی کاربر را ارسال میکند. ویسپا پرسوجوی YQL را اجرا میکند، موارد موجود در منطقه کاربر را فیلتر میکند و آنها را بر اساس شباهت کسینوسی رتبهبندی میکند. ۵۰ نتیجه برتر در کمتر از ۱۰ میلیثانیه بازگردانده میشوند و آماده نمایش در بخش «توصیهشده برای شما» هستند.
نتیجهگیری
ویسپا یک راهحل قوی و مقیاسپذیر برای پیادهسازی شخصیسازی بلادرنگ از طریق جستجوی برداری ارائه میدهد. با یکپارچهسازی شباهت برداری با فیلترهای ساختاریافته در یک موتور پرسوجوی واحد، توسعهدهندگان میتوانند سیستمهای توصیهگر واکنشگرا بسازند که تعادلی بین مرتبط بودن و قوانین کسبوکار برقرار میکنند. چه در حال ساخت یک فید خبری باشید و چه یک پلتفرم تجارت الکترونیک، توانایی ویسپا در مدیریت عملیات برداری بزرگمقیاس با تأخیر پایین، آن را به یک انتخاب قدرتمند برای برنامههای دادهمحور مدرن تبدیل میکند.