| فایل اولیهی سؤال را میتوانید از [این لینک](/contest/assignments/103148/download_problem_initial_project/355594/) دانلود کنید. |
|:------------------------------------------------------------------------:|
شرکت فناوری «پارسا سرچ» (_Parsa Search_) یکی از بزرگترین سامانههای جستوجوی محتوای فارسی را توسعه داده است. این سامانه هزاران سند فارسی را در اختیار کاربران قرار میدهد و هر روز به پرسوجوهای مختلفی در زمینههای علمی، تاریخی، فرهنگی و عمومی پاسخ میدهد.
اما اخیراً تیم محصول متوجه یک مشکل جدی شده است.
موتور جستوجوی فعلی معمولاً اسناد مرتبط را پیدا میکند، اما بهترین سند همیشه در بالاترین رتبه قرار نمیگیرد. گاهی پاسخ اصلی در نتیجهی دوم یا سوم نمایش داده میشود و در برخی موارد حتی میان پنج نتیجهی اول نیز دیده نمیشود.
برای یک کاربر عادی، تفاوت میان رتبهی اول و پنجم ممکن است فقط چند ثانیه جستوجوی بیشتر باشد؛ اما در مقیاس میلیونها جستوجو، این مسئله باعث کاهش رضایت کاربران و از دست رفتن حجم زیادی از زمان میشود.
تیم فنی معتقد است که مشکل فقط در پیدا کردن اسناد مرتبط نیست، بلکه در **رتبهبندی صحیح آنها** قرار دارد. سندی که بیشترین ارتباط را با عبارت جستوجو دارد باید پیش از سایر اسناد نمایش داده شود.
اینجا جایی است که شما وارد میشوید.
شما بهعنوان متخصص بازیابی اطلاعات به پروژهی «رادار پارسا» دعوت شدهاید. مأموریت شما طراحی یک سامانهی جستوجوی فارسی است که برای هر عبارت جستوجو، پنج سند مرتبط را از میان مجموعهای شامل ۲۰٬۰۰۰ سند پیدا کرده و آنها را از مرتبطترین تا کمارتباطترین مرتب کند.
هدف فقط پیدا کردن سند صحیح نیست؛ **رتبهی سند نیز اهمیت دارد**. هرچه سند هدف در جایگاه بالاتری قرار گیرد، امتیاز بیشتری دریافت خواهید کرد.
## مأموریت شما
برای هر پرسوجوی موجود در فایل `query.csv` باید:
1. متن پرسوجو را دریافت کنید.
2. اسناد موجود در `document.csv` را بررسی کنید.
3. پنج سند مرتبط را انتخاب کنید.
4. اسناد را بهترتیب نزولی میزان ارتباط رتبهبندی کنید.
5. شناسهی پنج سند را در فایل `result.csv` ذخیره کنید.
پوشهی اولیهی پروژه شامل فایلهای زیر است:
| فایل | ستونها | توضیح |
|:-------------------:|:----------------------:| ------------------------- |
| `document.csv` | `index`, `text` | شامل متن ۲۰٬۰۰۰ سند فارسی |
| `query.csv` | `query_index`, `query` | شامل ۲۰۰ پرسوجوی جستوجو |
### فایل `document.csv`
هر ردیف این فایل یک سند فارسی را نمایش میدهد.
| نام ستون | توضیح |
|:--------:| ------------------ |
| `index` | شناسهی یکتای سند |
| `text` | متن کامل سند فارسی |
### فایل `query.csv`
این فایل شامل عبارتهایی است که باید برای آنها اسناد مرتبط بازیابی شوند.
| نام ستون | توضیح |
|:-------------:| -------------------------------- |
| `query_index` | شناسهی عددی پرسوجو از ۱ تا ۲۰۰ |
| `query` | متن فارسی عبارت جستوجو |
برای هر یک از ۲۰۰ پرسوجو باید دقیقاً پنج سند بازیابی شود.
## ساختار خروجی
فایل اصلی خروجی باید دقیقاً با نام زیر ایجاد شود:
```
result.csv
```
این فایل باید دقیقاً شامل دو ستون زیر باشد:
```
query_index,document_indexes
```
نمونهی فایل خروجی:
```
query_index,document_indexes
1,2d91e5e2a2528126|7ad88240dab1dc92|ae1d62f6218f29f4|86f05b289053a878|7d3587d469d9e870
2,c71e16a36f52a8d1|d282bd1b115c1e01|5a641d4d29f11a26|f28a546ed45b4470|682c2b8f7b0a1bf5
```
### قوانین فایل خروجی
+ برای هر `query_index` از ۱ تا ۲۰۰ باید دقیقاً یک ردیف وجود داشته باشد.
+ ستون `document_indexes` باید دقیقاً شامل پنج شناسهی سند باشد.
+ شناسهها باید با نویسهی `|` از یکدیگر جدا شوند.
+ هر پنج شناسه باید یکتا باشند.
+ تمام شناسهها باید در فایل `document.csv` وجود داشته باشند.
+ ترتیب شناسهها نشاندهندهی رتبهی اسناد است.
+ اولین شناسه، سند رتبهی ۱ و آخرین شناسه، سند رتبهی ۵ محسوب میشود.
برای مثال:
```
doc_1|doc_2|doc_3|doc_4|doc_5
```
در این ساختار، `doc_1` مرتبطترین سند پیشنهادی شماست.
## اعتبارسنجی پاسخ
پیش از محاسبهی امتیاز، ساختار فایل ارسالی بررسی میشود.
موارد زیر باعث نامعتبر شدن پاسخ یا دریافت امتیاز صفر خواهند شد:
+ نبودن فایل `result.csv`
+ نبودن فایل `submission.ipynb`
+ تغییر نام فایلهای موردنیاز
+ قرار دادن فایلها داخل یک پوشهی اضافی در ZIP
+ متفاوت بودن سرستون فایل خروجی با مقدار زیر:
```
query_index,document_indexes
```
+ حذف شدن یک یا چند `query_index`
+ وجود `query_index` اضافی
+ تکرار یک `query_index`
+ ارائهی کمتر یا بیشتر از پنج سند
+ استفاده از جداکنندهای غیر از `|`
+ تکرار یک شناسهی سند در پنج نتیجهی یک پرسوجو
+ استفاده از شناسهای که در `document.csv` وجود ندارد
فایل `submission.ipynb` باید شامل نوتبوکی باشد که روند طراحی و اجرای راهحل شما را نگه میدارد. وجود این فایل برای ارسال پاسخ الزامی است.
## معیار ارزیابی
عملکرد سامانهی شما با معیار **میانگین معکوس رتبه در پنج نتیجهی اول** یا `MRR@5` ارزیابی میشود.
برای هر پرسوجو، اگر سند هدف در رتبهی `r` از پنج نتیجهی پیشنهادی شما قرار گرفته باشد، امتیاز آن پرسوجو برابر است با:
```
1 / r
```
بنابراین:
| رتبهی سند هدف | امتیاز پرسوجو |
|:-----------------:|:--------------:|
| رتبهی ۱ | `1` |
| رتبهی ۲ | `1/2` |
| رتبهی ۳ | `1/3` |
| رتبهی ۴ | `1/4` |
| رتبهی ۵ | `1/5` |
| خارج از پنج نتیجه | `0` |
فرمول `MRR@5` به شکل زیر محاسبه میشود:
\[
\mathrm{MRR@5}
=
\frac{1}{N}
\sum_{i=1}^{N}
\frac{1}{\mathrm{rank}_i}
\]
در این فرمول:
+ `N` تعداد کل پرسوجوهاست.
+ `rank_i` رتبهی سند هدف برای پرسوجوی `i` است.
+ اگر سند هدف در پنج نتیجهی اول وجود نداشته باشد، امتیاز آن پرسوجو صفر در نظر گرفته میشود.
امتیاز نهایی از فرمول زیر به دست میآید:
\[
\mathrm{Score}
=
100 \times \mathrm{MRR@5}
\]
در نتیجه، تنها حضور سند هدف در میان پنج نتیجه کافی نیست. قرار دادن سند هدف در رتبهی اول بیشترین ارزش را دارد و با کاهش رتبه، امتیاز نیز کاهش پیدا میکند.
## نحوهی ارسال
دو فایل زیر را مستقیماً در ریشهی یک فایل ZIP قرار دهید:
```
submission.zip
├── result.csv
└── submission.ipynb
```
فایلها نباید داخل پوشهی دیگری قرار گرفته باشند.
در نهایت، فایل `submission.zip` را بهعنوان پاسخ مسئله ارسال کنید.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.