رفتن به محتوای اصلی
بازگشت به وبلاگ

داده و اتصال فنی

انتخاب top-k در NumPy؛ امتیازِمساوی را چگونه قطعی بشکنیم؟

انتخاب top-k را با امتیازهایِمتناهیِمحدود و۷۲۰کنترل بسنجید؛ مرزِتساوی ازکلِورودی انتخاب می‌شود و عددِبزرگِخارجِدامنه صریح رد می‌شود.

برای انتخابِ top-k، مشخص‌کردنِ مقدارِ مرزی کافی نیست؛ اگر چند امتیاز برابر باشند، هویتِ مواردِ انتخابی هم به سیاست نیاز دارد. argpartition در NumPy مرتب‌سازیِ کامل و پایدارِ تمامِ عناصر را تضمین نمی‌کند. این تمرین پنج رکوردِ اصیل را با سیاستِ «امتیازِ نزولی،سپس شناسهٔصعودی» انتخاب می‌کند و نشان می‌دهد مرتب‌کردنِ فقط زیرمجموعهٔاولیه ممکن است یک شناسهٔلازم را برنگرداند.

سه امتیازِ مساوی در مرزِ انتخاب

پنج رکورد داریم: A با۹،D با۷،C با۷،B با۷ وE با۲. هدف، انتخابِ سه رکورد است. طبقِ سیاستِ صریحِ ما، A اول و از میانِ سه امتیازِ ۷،شناسه‌هایِ B وC باید بمانند. بنابراین جوابِ مرجع A،B،C است؛ این ترتیب، ارزیابیِ معناییِ سند یا نظرِ موتورِ جست‌وجویِ واقعی نیست.

oracle مستقل با sorted رویِ تمامِ رکوردها و کلیدِ(-score,id) ساخته می‌شود و سپس سه موردِ اول را برمی‌دارد. امتیازها عددهایِ ساختگی‌اند و هیچ مدل،embedding یا برچسبِ مرتبط‌بودنِ واقعی در کار نیست. اینجا فقط قراردادِ انتخاب از امتیازهایِ موجود را بررسی می‌کنیم.

زیرمجموعهٔاولیه چه چیزی را جا می‌اندازد؟

برای همین ترتیبِ ورودی، np.argpartition رویِ امتیازِ منفی وkth=2 اندیس‌هایِ[۰،۱،۲] را در اجرایِ ثبت‌شده می‌دهد. پس زیرمجموعهٔA،D،C است. اگر فقط همین سه مورد را با کلیدِ مرجع مرتب کنیم، A،C،D می‌گیریم؛ B دیگر در زیرمجموعه نیست که مرتب‌سازی آن را برگرداند.

این فهرستِ اندیس مشاهدهٔ NumPy۲٫۳٫۵ است و آن را خروجیِ ثابتِ تمامِ نسخه‌ها نمی‌نامیم. مستندات صریحاً ترتیبِ درونِ بخش‌ها و انتخابِ اولین/آخرین رخدادِ تساوی را تضمین نمی‌کند. بنابراین یک نمونهٔدیگر که تصادفاً جوابِ مطلوب می‌دهد، جای سیاستِ مرزی را نمی‌گیرد.

مرز را پیدا کنیم، همهٔتساوی‌هایِ آن را ببینیم

روشِ اصیلِ این تمرین ابتدا از زیرمجموعه، امتیازِ مرزی۷ را می‌گیرد. تمامِ رکوردهایِ با امتیازِ بیشتر از۷ قطعی‌اند؛ در اینجا فقطA. سپس تمامِ رکوردهایِ برابرِ ۷ از ورودیِ اصلی گرفته و بر اساسِ id مرتب می‌شوند. فقط دو جایِ باقی‌مانده باB وC پر می‌شوند و خروجیِ نهایی دوباره با همان کلید چیده می‌شود.

مسیرانتخابِ سه‌تاییمطابقِ سیاست؟
مرتب‌کردنِ فقط زیرمجموعهٔاولیهA،C،Dخیر؛B جا افتاده
دیدنِ تمامِ تساوی‌هایِ مرزA،B،Cبله
مرجعِ مرتب‌سازیِ کاملA،B،Cهمان قرارداد

همهٔ۱۲۰ترتیبِ همین ورودی را کنترل کنیم

پنج رکورد۱۲۰جایگشت دارند. برای هرکدام k را از۰تا۵ عوض می‌کنیم و خروجیِ روشِ مرزی را با مرجعِ مرتب‌سازیِ کامل می‌سنجیم:۷۲۰کنترلِ واقعی. همه برابرند. در مقایسهٔجدا برایk=3،مسیرِ ناقصِ«فقط زیرمجموعه را مرتب کن» در۸۰ترتیبِ این اجرا با مرجع متفاوت می‌شود.

عددِ ۸۰از۱۲۰،نرخِ خطایِ عمومیِ NumPy،کیفیتِ رتبه‌بند یا حجمِ جست‌وجو نیست. این فقط دفترِ همهٔترتیب‌هایِ همین پنج رکورد و همین runtime است. زمان،حافظه و سرعتِ بهبود اندازه‌گیری نشده‌اند؛ در مسئلهٔکوچک،مرتب‌سازیِ کامل هم راهی روشن برایِ اجرایِ قرارداد است.

دامنهٔ امتیاز را پیش از تبدیل محدود کنیم

در بازبینیِ مستقل،نسخهٔ اولیه برایِ امتیازِصحیحِ۹۰۰۷۱۹۹۲۵۴۷۴۰۹۹۵ پس از تبدیل به float64 آستانه‌ای متفاوت می‌ساخت و خروجیِ خالی می‌داد. نسخهٔ فعلی این ورودی و حالتِ دوعددِبزرگ را صریحاً بیرونِدامنه رد می‌کند؛ مرجعِهویتیِهردو A بود و نتیجهٔخالی پاسخِدرست نبود. برایِ دامنهٔتازه،کران‌هایِمثبت ومنفیِیک‌میلیون و مقدارِ۰٫۲۵ نیز واقعاً باoracle مقایسه می‌شوند. انتخابِاین کران قراردادِآموزشیِماست،نه محدودیتِعمومیِNumPy.

ورودیِ مرزی و سیاستِ تساوی را پنهان نکنیم

تابعِ محدود حداکثر۸رکورد باidِ یکتا و امتیازِ سادهٔ int/float،متناهی و با قدرمطلقِ حداکثر۱۰۰۰۰۰۰ می‌پذیرد. کران پیش از تبدیل به float64 بررسی می‌شود؛ تمامِ intهایِ مجاز دقیقاً درآن نمایش جا می‌شوند و floatِپایتون دراین محیط همان binary64 است. kِ منفی،بزرگ‌تر ازتعداد،bool وامتیازِ NaN یاInfinity همراهِ رکوردِ بدونِ id وشناسهٔتکراری همراهِ دو ضدنمونهٔعددِصحیحِبزرگ،یک صحیحِبسیار بزرگ ویک floatِکمی بالاتر ازکران در یازده مسیر واقعاًرد می‌شوند. k=0 وورودیِ خالی نیز نتیجهٔخالی دارند. برایِ این دامنه،idهایِ تمرین ASCIIاند؛ سیاستِ مرتب‌سازیِ شناسهٔواقعی یا زبانِ دیگر باید جدا مشخص شود.

MRR وNDCG کیفیتِ یک فهرستِ ازپیش‌مرتب را با مرجعِ ارتباط می‌سنجند؛ اینجا فهرست را ازscore وtie-policy می‌سازیم. جست‌وجویِ ANN هم ممکن است نامزد را از ابتدا نبیند؛ حلِ تساویِ مواردِ دیده‌شده،نامزدِ جاافتادهٔآن جست‌وجو را تضمین نمی‌کند. ادامه در مبانی هوش مصنوعی؛ این تمرین هیچ سیاستِ رتبه‌بندیِ داخلیِ اپرا یا کیفیتِ محصول را اعلام نمی‌کند.

فایل تمرین و منبع

کد مستقلِ تمرینِ محدود · تمام خروجیِ واقعیِ همین تمرین؛ JSON

منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثال‌ها و فایل‌های این راهنما آموزشی و ساختهٔ تحریریه‌اند.

برای این نیاز، کدام خدمت مناسب‌تر است؟

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

انتخاب میان سه خدمتراهنمای شروع با تیم اپرا

برآورد هزینه