| فایل اولیهی پروژه را میتوانید از این [لینک](https://drive.google.com/file/d/16TQ_sGMiGeB_WVzglYpXZDAjkHaLtefl/view?usp=drive_link) دانلود کنید.
|:------------------------------------------------------------------------:|
انتشارات فناوری «دانشبان» (_DaneshBan_) سالهاست مجموعهای ارزشمند از کتابهای تخصصی در حوزههای مهندسی نرمافزار، داده، زیرساخت و هوش مصنوعی منتشر میکند. هزاران متخصص برای یافتن پاسخ مسائل فنی روزمرهی خود به این کتابها مراجعه میکنند؛ اما با افزایش تعداد منابع، پیدا کردن پاسخ دقیق به یک سؤال ساده دیگر کار آسانی نیست.
یک پاسخ ممکن است در میان چند پاراگراف متن پنهان شده باشد، پاسخ سؤال دیگری فقط از روی یک جدول قابل استخراج باشد و برای بعضی پرسشها لازم باشد نمودار، معماری سیستم یا شکل فنی داخل کتاب بهدقت بررسی شود. حتی در برخی موارد، پاسخ نهایی تنها با ترکیب اطلاعات متن و تصویر به دست میآید.
تیم تحقیق و توسعهی «دانشبان» قصد دارد یک دستیار هوشمند بسازد که بتواند مانند یک پژوهشگر فنی، کتاب مرتبط را پیدا کند، محتوای آن را بخواند، جدولها و شکلها را بررسی کند و در نهایت پاسخ صحیح را از میان چهار گزینه انتخاب کند.
اینجا جایی است که شما وارد میشوید.
ماموریت شما طراحی سیستمی برای **پاسخگویی چندوجهی به سؤالهای چهارگزینهای بر اساس کتابهای فنی PDF** است. برای هر سؤال، کتاب مرجع از قبل مشخص شده و سیستم شما باید با استفاده از همان کتاب، پاسخ صحیح را از میان گزینههای `A`، `B`، `C` و `D` انتخاب کند.
این چالش فقط یک مسئلهی جستوجوی متنی ساده نیست. برخی سؤالها بر اساس متن عادی، برخی بر اساس جدولها، برخی بر اساس شکلها و نمودارها و برخی با ترکیب چند نوع شاهد طراحی شدهاند. بنابراین روشی که صرفاً متن خام PDF را استخراج کند، ممکن است برای پاسخگویی به همهی سؤالها کافی نباشد.
## مأموریت شما
شما باید سیستمی توسعه دهید که:
1. سؤال و چهار گزینهی آن را از فایل `query.csv` دریافت کند.
2. با استفاده از ستون `book_id`، کتاب PDF مرتبط را شناسایی کند.
3. شواهد لازم را از متن، جدول، شکل، نمودار یا ترکیبی از آنها استخراج کند.
4. دقیقاً یک پاسخ از میان `A`، `B`، `C` یا `D` انتخاب کند.
5. پاسخ تمام سؤالها را با ساختار تعیینشده در فایل `result.csv` ذخیره کند.
فایلهای مسئله با ساختار زیر در اختیار شما قرار میگیرند:
```
├── query.csv
├── <book_id>.pdf
├── <book_id>.pdf
└── ...
```
مجموعهی ارزیابی شامل **۲۰۰ سؤال از ۱۰ کتاب PDF** است؛ از هر کتاب دقیقاً **۲۰ سؤال** طراحی شده است.
### فایل `query.csv`
این فایل با کدگذاری `UTF-8` ارائه میشود و دقیقاً دارای ستونهای زیر است:
```
query_id,question,option_a,option_b,option_c,option_d,book_id
```
| نام ستون | توضیح |
|:----------:| ----------------------------------------------- |
| `query_id` | شناسهی عددی و یکتای هر سؤال |
| `question` | متن سؤال چهارگزینهای |
| `option_a` | گزینهی `A` |
| `option_b` | گزینهی `B` |
| `option_c` | گزینهی `C` |
| `option_d` | گزینهی `D` |
| `book_id` | ایدی کتاب PDF حاوی شواهد پاسخ، بدون پسوند `.pdf` |
برای دسترسی به کتاب مرتبط با هر سؤال، باید از مسیر زیر استفاده کنید:
```
<book_id>.pdf
```
## خروجی مورد انتظار
فایل نهایی شما باید یک آرشیو ZIP با نام `submission.zip` باشد که **دقیقاً** شامل دو فایل زیر در ریشهی آرشیو است:
```
submission.zip
├── submission.ipynb
└── result.csv
```
> فایلها نباید داخل پوشهی اضافی قرار گرفته باشند. وجود یک پوشهی والد درون ZIP باعث نامعتبر شدن ساختار ارسال خواهد شد.
### فایل `submission.ipynb`
این فایل باید یک Jupyter Notebook باشد که روش مورد استفادهی شما را مستند کند. توضیحات و کدهای آن باید به اندازهای کامل باشند که داور بتواند:
+ منطق راهحل شما را درک کند؛
+ مراحل پردازش کتابها و پاسخگویی را بررسی کند؛
+ فایل `result.csv` را با استفاده از دادههای ارائهشده بازتولید کند.
### فایل `result.csv`
فایل پاسخ باید با کدگذاری `UTF-8` و دقیقاً با قالب زیر ساخته شود:
```
query_id,predicted_answer
0,C
1,B
2,D
```
قوانین فایل خروجی:
+ برای هر `query_id` موجود در `query.csv` باید دقیقاً یک سطر وجود داشته باشد.
+ هیچ شناسهای نباید حذف یا تکرار شود.
+ ستون `predicted_answer` فقط میتواند یکی از مقادیر `A`، `B`، `C` یا `D` باشد.
+ مجموعهی شناسههای موجود در خروجی باید دقیقاً با مجموعهی شناسههای فایل ورودی برابر باشد.
+ وجود شناسهی اضافی، شناسهی مفقود، پاسخ نامعتبر یا سطر تکراری باعث نامعتبر شدن ارسال میشود.
> حروف کوچک و فاصلههای اضافی اطراف پاسخ هنگام ارزیابی نرمالسازی میشوند؛ با این حال پیشنهاد میشود پاسخها دقیقاً با حروف بزرگ `A` تا `D` ثبت شوند.
## اعتبارسنجی و ارزیابی
پیش از محاسبهی امتیاز، ساختار فایل ارسالی بررسی میشود. سامانهی داوری ابتدا کنترل میکند که:
+ هر دو فایل `submission.ipynb` و `result.csv` در ریشهی ZIP وجود داشته باشند؛
+ سربرگ فایل `result.csv` صحیح باشد؛
+ تمام شناسهها دقیقاً یکبار ثبت شده باشند؛
+ پاسخ هر سؤال یکی از گزینههای مجاز باشد؛
+ هیچ شناسهی اضافی یا مفقودی وجود نداشته باشد.
در صورت وجود هرگونه خطای ساختاری، فایل مفقود، شناسهی تکراری، پاسخ نامعتبر یا مغایرت میان شناسههای ورودی و خروجی، **امتیاز نهایی برابر صفر خواهد بود**.
ارسالهای معتبر بر اساس **دقت تطابق کامل (Exact-Match Accuracy)** ارزیابی میشوند:
\[
\max(0, 100 \times (1 - \frac{\text{1 - Accuracy Score}}{0.01}))
\]
هر سؤال وزن یکسانی دارد و پاسخ تنها زمانی صحیح محسوب میشود که گزینهی انتخابشده دقیقاً با پاسخ مرجع برابر باشد.
برای مثال، اگر سیستم شما از ۲۰۰ سؤال به ۱۶۰ سؤال پاسخ صحیح بدهد، امتیاز نهایی برابر خواهد بود با:
\[
\text{Score}
=
100 \times
\frac{160}{200}
=
80
\]
امتیاز نهایی در بازهی **۰ تا ۱۰۰** گزارش میشود. هر پاسخ صحیح مستقیماً امتیاز شما را افزایش میدهد؛ بنابراین کیفیت بازیابی شواهد، درک محتوای چندوجهی و انتخاب دقیق گزینهی نهایی، هر سه در موفقیت راهحل شما تعیینکنندهاند.
| فایل اولیهی سؤال را میتوانید از [این لینک](/contest/assignments/103148/download_problem_initial_project/355597/) دانلود کنید. |
|:------------------------------------------------------------------------:|
شرکت «Violeta» دستیار خانهی هوشمندی ساخته است که کاربران با جملههای انگلیسیِ طبیعی آن را کنترل میکنند. یک کاربر ممکن است بگوید «Turn on the lights in all the bedrooms» و کاربر دیگری فقط بگوید «Turn on the light here».
تبدیل چنین جملههایی به یک عمل دقیق، تنها تشخیص چند کلمه نیست. سامانه باید بداند کدام اتاقها واقعاً در خانه هستند، هر اتاق چه دستگاهها و قابلیتهایی دارد، وضعیت فعلی آنها چیست و منظور «here» کدام اتاق است. همچنین نباید درخواست نامعتبر یا خارج از حوزه را بهزور به یک فرمان قابل اجرا تبدیل کند.
شما باید سامانهای بسازید که برای هر فرمان، با توجه به نقشه و وضعیت همان خانه، یک شیء JSON ساختارمند تولید کند.
## دادهها
پروژهی اولیه ساختار زیر را دارد:
```
train/
├── homes/
│ ├── home_000001.txt
│ └── ...
└── instructions.jsonl
test/
├── homes/
│ ├── home_000601.txt
│ └── ...
└── instructions.jsonl
```
هر خط از `test/instructions.jsonl` فقط شامل فیلدهای `home` و `input` است و فیلد `output` ندارد.
نمونهای واقعی از دادهی آموزش:
```
{"home":"home_000001","input":{"instruction":"turn on every light in the bedrooms"},"output":{"action":"turn_on","target":"light","target_type":"capability","scope":"room_type","room_id":null,"room_label":null,"room_type":"bedroom","value":1,"exclude_room_id":null,"status":"ok"}}
```
### نقشهی خانه
```
------ SMART HOME
{BED} 🛏 {SOFA} 🛋 {TBLE} 🍽 {CHR} 🪑
{CLST} 🚪 {CAB} 🗄 {SHELF} 📚 {DSK} 🗂
{SINK} 🚰 {TLT} 🚽 {SHWR} 🚿 {WHTR} ♨
{FRDG} 🧊 {STOV} 🍳 {MWVE} 🍲 {DWSR} 🧼
{WSHR} 🫧 {DRYR} 👕 {BASK} 🧺 {VAC} 🤖
{TV} 📺 {SPKR} 🔊 {MON} 🖥 {PC} 💻
{PRNT} 🖨 {CAM} 📹 {CHRG} 🔌 {CAR} 🚗
{TOOL} 🔧 {BOX} 📦 {BAG} 🧳 {PLNT} 🪴
──────────────────────────────
STATUS DEFINITIONS
──────────────────────────────
TIME:hh:mm → Current time of the home (24-hour format)
H → Human presence detected in the room
L:<0|1> → Light (0: Off, 1: On)
C:<0|1> → Curtain (0: Closed, 1: Open)
AC:<0|1> → Air Conditioner (0: Off, 1: On)
H:<0|1> → Heater (0: Off, 1: On)
F:<0|1> → Fan (0: Off, 1: On)
W:<0|1> → Window (0: Closed, 1: Open)
T:<°C> → Room temperature in Celsius (e.g. T:19.3)
D:<| / \> → Door orientation only; not controllable
Smart Device format: {DEVICE:0|1} e.g. {TV:0} → TV is off, controllable
Furniture format: {FURNITURE} e.g. {BED} → static object, not controllable
──────────────────────────────
SMART HOME LAYOUT
──────────────────────────────
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ GLOBAL │
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ TIME:21:07 │ │
│ └─────────────────────────────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│ GUEST ROOM │ LIVING ROOM │ MASTER BEDROOM │
│ room_01 │ room_02 │ room_04 │
│ ┌─────────────────────────┐ │ ┌─────────────────────────┐ │ ┌─────────────────────────┐ │
│ │ {BED} {BAG} │ │ │ {SOFA} {TBLE} {TV:0} │ │ │ {BED} {CLST} {TV:0} │ │
│ │ L:0 T:19.3 C:0 AC:0 H:0 │ │ │ {SPKR:0} │ │ │ L:1 T:19.2 C:0 AC:0 H:0 │ │
│ │ F:1 W:0 │ │ │ L:1 T:19.9 C:1 AC:0 H:0 │ │ │ F:0 W:0 │ │
│ └────────────┬────────────┘ │ │ F:1 W:1 │ │ └────────────┬────────────┘ │
│ D:| │ └────────────┬────────────┘ │ D:\ │
│ │ D:\ │ │
├─────────────────────────────┼─────────────────────────────┼─────────────────────────────┤
│ BATHROOM #1 │ BEDROOM #1 │ STORAGE │
│ room_05 │ room_06 │ room_07 │
│ ┌─────────────────────────┐ │ ┌─────────────────────────┐ │ ┌─────────────────────────┐ │
│ │ {TLT} {SINK} {SHWR:0} │ │ │ {BED} {CLST} │ │ │ {BOX} {SHELF} │ │
│ │ L:0 T:19.2 H:0 F:0 │ │ │ L:0 T:20.9 C:0 AC:0 H:0 │ │ │ L:1 T:21.1 W:0 H │ │
│ │ │ │ │ F:0 W:0 │ │ │ │ │
│ └────────────┬────────────┘ │ └────────────┬────────────┘ │ └────────────┬────────────┘ │
│ D:\ │ D:/ │ D:\ │
├─────────────────────────────┼─────────────────────────────┼─────────────────────────────┤
│ BALCONY │ KITCHEN │ DINING │
│ room_08 │ room_09 │ room_10 │
│ ┌─────────────────────────┐ │ ┌─────────────────────────┐ │ ┌─────────────────────────┐ │
│ │ {CHR} {PLNT} │ │ │ {CAB} {SINK} {FRDG:1} │ │ │ {TBLE} {CHR} │ │
│ │ L:0 T:19.5 │ │ │ {STOV:0} │ │ │ L:0 T:19.8 C:1 AC:0 H:0 │ │
│ │ │ │ │ L:0 T:21.1 AC:0 F:0 W:0 │ │ │ F:0 W:0 │ │
│ └────────────┬────────────┘ │ └────────────┬────────────┘ │ └────────────┬────────────┘ │
│ D:/ │ D:\ │ D:\ │
├─────────────────────────────┴─────────────────────────────┴─────────────────────────────┤
│ GARAGE + WORKSHOP │
│ room_03 │
│ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ {CAR} {TOOL} {CHRG:1} │ │
│ │ L:0 T:21.3 F:0 P:1 │ │
│ │ │ │
│ └──────────────────────────────────────────┬──────────────────────────────────────────┘ │
│ D:\ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
```
### معنای نشانههای وضعیت
| نشانه | معنا
| ------------ | ------------------------------------------------------|
| `L:0,1` | چراغ؛ ۰ خاموش و ۱ روشن
| `C:0,1` | پرده؛ ۰ بسته و ۱ باز
| `AC:0,1` | کولر؛ ۰ خاموش و ۱ روشن
| `H:0,1` | بخاری؛ با `H` تنها که نشانگر حضور انسان است اشتباه نگیرید|
| `F:0,1` | پنکه؛ ۰ خاموش و ۱ روشن
| `W:0,1` | پنجره؛ ۰ بسته و ۱ باز
| `T:<number>` | دمای اتاق بر حسب سلسیوس
| `H` | حضور کاربر در اتاق
### فرمانهای پشتیبانیشده
عملهای مجاز فقط `turn_on`، `turn_off`، `open` و `close` هستند. مقدار `value` برای `turn_on` و `open` برابر عدد `1` و برای `turn_off` و `close` برابر عدد `0` است.
قابلیتها و نامهای گفتاری آنها:
| `target` | عمل مجاز | نمونه نام در فرمان |
| ----------------- | ---------- | ---------------------------------------------- |
| `light` | روشن/خاموش | light, lights, lamp |
| `curtain` | باز/بسته | curtain, curtains, blinds, drapes |
| `air_conditioner` | روشن/خاموش | AC, air conditioner, air conditioning, cooling |
| `heater` | روشن/خاموش | heater, heating |
| `fan` | روشن/خاموش | fan |
| `window` | باز/بسته | window, windows |
دستگاههای قابلکنترل و نامهای گفتاری آنها:
| `target` | نمونه نام در فرمان |
| -------- | ------------------------------- |
| `TV` | TV, television |
| `SPKR` | speaker, speakers, sound system |
| `MON` | monitor |
| `PC` | computer, PC, desktop |
| `PRNT` | printer |
| `CAM` | camera, security camera |
| `CHRG` | charger, EV charger |
| `VAC` | vacuum, robot vacuum |
| `STOV` | stove, cooktop |
| `MWVE` | microwave |
| `DWSR` | dishwasher |
| `WSHR` | washer, washing machine |
| `DRYR` | dryer |
| `SHWR` | shower |
| `WHTR` | water heater |
همهی دستگاههای جدول بالا فقط با `turn_on` و `turn_off` کنترل میشوند. کد `FRDG` در نقشه ممکن است دیده شود، اما target معتبری نیست.
فرمانها میتوانند با فعلها و عبارتهای گوناگون بیان شوند. برای نمونه، `switch on`، `power on`، `flip on`، `kick on` و `activate` هممعنی روشنکردن هستند؛ `power off`، `shut off`، `kill`، `cut`، `deactivate` و `shut down` هممعنی خاموشکردناند. همچنین عبارتهایی مانند `pull open`، `crack open` و `slide open` برای بازکردن و `shut`، `draw closed` و `slide closed` برای بستن بهکار میروند.
نام اتاق نیز ممکن است با صورتهای گوناگون بیاید؛ برای مثال `master bedroom` یا `main bedroom`، `garage` یا `workshop`، `dining area`، `laundry` و شمارهگذاریهایی مانند `bedroom 2`، `bedroom number 2` و `second bedroom`.
عبارتهای ارجاعی مانند `here`، `in here`، `this room`، `current room`، `my room`، `where I am` و `next to me` همگی به اتاقی اشاره میکنند که نشانگر `H` تنها در آن دیده میشود. (فقط یک H میتواند در خانه باشد)
فرمانها در چند الگوی زیر تولید شدهاند:
+ فرمان برای یک اتاق مشخص یا اتاق فعلی کاربر؛ مانند `turn on the TV in the living room` یا `switch on the AC in here`.
+ فرمان ضمنیِ آسایش: گرما به کولر یا پنکه، سرما به بخاری، هوای گرفته به بازکردن پنجره، آفتاب شدید به بستن پرده، تاریکی به روشنکردن چراغ و نور آزاردهنده به خاموشکردن چراغ نگاشت میشود.
+ فرمان فعالیتمحور نیز وجود دارد. این فرمانها، در صورت وجود دستگاه مناسب، همگی به `turn_on` یک دستگاه نگاشت میشوند:
| مفهوم فرمان | `target` | نوع اتاق |
| --------------------------- | -------- | ------------------------------ |
| آشپزی | `STOV` | kitchen |
| کارکردن | `PC` | office |
| دوشگرفتن یا نیاز به آب گرم | `WHTR` | bathroom |
| لباسشستن | `WSHR` | laundry |
| خشککردن لباس | `DRYR` | laundry |
| جاروکردن | `VAC` | living_room |
| موسیقی | `SPKR` | bedroom، living_room یا dining |
| تماشای فیلم یا تلویزیون | `TV` | bedroom یا living_room |
| چاپکردن | `PRNT` | office |
| شستن ظرفها | `DWSR` | kitchen |
| گرمکردن غذا | `MWVE` | kitchen |
| شارژ خودرو | `CHRG` | garage_workshop |
1. «همهچیز» در یک اتاق: اگر کاربر بخواهد همهچیزِ یک اتاق روشن یا خاموش شود، `target` و `target_type` را `all` و `scope` را `room` قرار دهید. منظور از «همهچیز» فقط قابلیتها و دستگاههای قابلکنترلِ همان اتاق است؛ وسایل ثابت و یخچال (`FRDG`) شامل آن نمیشوند.
2. چراغهای همهی اتاقهای یک نوع: این فرمان فقط برای اتاقهای `bedroom` و `bathroom` تولید میشود، آن هم وقتی حداقل دو اتاق از آن نوع در خانه وجود داشته باشد. در این حالت `target=light` و `scope=room_type` است.
3. چراغهای کل خانه: برای روشن یا خاموشکردن همهی چراغهای خانه، `target=light` و `scope=home` است.
4. خاموشکردن همهچیز در کل خانه: برای خاموشکردن همهی قابلیتها و دستگاههای قابلکنترلِ خانه، `target=all`، `scope=home` و `action=turn_off` است. این فرمان شامل وسایل ثابت و یخچال نمیشود.
5. خاموشکردن چراغها بهجز اتاق فعلی کاربر: در این فرمان `target=light`، `scope=home` و `exclude_room_id` برابر شناسهی اتاقی است که در آن `H` دیده میشود.
### وضعیتهای خطا و تکرار
اگر هدف درخواستی از قبل در وضعیت مطلوب باشد، `status` برابر `already_in_state` است؛ بااینحال بقیهی فیلدها همان فرمان تفسیرشده را نگه میدارند. برای فرمان گروهی، این وضعیت فقط زمانی رخ میدهد که **همهی** اعضای گروه در وضعیت مطلوب باشند.
در موارد زیر نیز خروجی دقیقاً از الگوی ژنراتور پیروی میکند:
| وضعیت | شرایط | فیلدهای خروجی |
| ---------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `not_found` | اتاق وجود دارد، اما قابلیت یا دستگاه هدف در آن نیست | `action`، `target`، `target_type`، `scope=room`، `room_id`، `room_label` و `value` پر میشوند؛ `room_type` و `exclude_room_id` برابر `null` هستند. |
| `room_not_found` | نام اتاقی آمده که در این خانه وجود ندارد | `action`، `target`، `target_type`، `scope=room` و `value` پر میشوند؛ `room_id`، `room_label`، `room_type` و `exclude_room_id` برابر `null` هستند. |
| `ambiguous_room` | نام یک نوع اتاقِ چندتایی، بدون شماره یا مشخصکننده، آمده است | `action`، `target`، `target_type`، `scope=room`، `room_type` و `value` پر میشوند؛ `room_id`، `room_label` و `exclude_room_id` برابر `null` هستند. |
| `out_of_domain` | پرسش وضعیت، زمان/هوا، زمانبندی، سطح و دما، قفل/آلارم، یا هر درخواست پشتیبانینشده | همهی فیلدها بهجز `status` برابر `null` هستند و `status=out_of_domain` است. |
## قالب خروجی
خروجی هر دستور باید دقیقاً کلیدهای زیر را داشته باشد:
```
{
"action": "turn_on | turn_off | open | close | null",
"target": "light | curtain | air_conditioner | heater | fan | window | power | TV | SPKR | MON | PC | PRNT | CAM | CHRG | VAC | STOV | MWVE | DWSR | WSHR | DRYR | SHWR | WHTR | all | null",
"target_type": "capability | device | all | null",
"scope": "room | room_type | home | null",
"room_id": "string | null",
"room_label": "string | null",
"room_type": "string | null",
"value": "integer 0 | integer 1 | null",
"exclude_room_id": "string | null",
"status": "ok | already_in_state | not_found | room_not_found | ambiguous_room | out_of_domain"
}
```
برای `scope=room`، معمولاً `room_id` و `room_label` پر و `room_type` تهی است. برای `scope=room_type` فقط `room_type` پر است. برای `scope=home`، `room_id`، `room_label` و `room_type` تهی هستند؛ تنها استثنا فرمان «بهجز اینجا» است که `exclude_room_id` را پر میکند.
## مأموریت شما
با استفاده از دادههای train سامانهای طراحی کنید؛ میتوانید از مدل یادگیری ماشین، روش قاعدهمحور یا ترکیبی از آنها استفاده کنید.
برای هر ردیف از فایل فرمانهای test:
1. خانهی معرفیشده در فیلد `home` را از پوشهی `test/homes/` بخوانید.
2. متن `input.instruction` را تفسیر کنید.
3. خروجی را دقیقاً با شِمای JSON مشخصشده تولید کنید.
فرمانها به انگلیسی هستند و میتوانند با عبارتهای گوناگون، لحن محاورهای، حروف بزرگ و کوچک متفاوت یا سؤال مؤدبانه بیان شوند.
## محدودیت ها
- استفاده از api برای استفاده از LLM مجاز نیست
- استفاده از مدل های کلوز سورس مجاز نیست
- استفاده از مدل های بزرگ تر از 1B مجاز نیست
## موارد مجاز
- استفاده از مدل های پریترین و اپن سورس
- استفاده از کولب و کگل
## نحوهی ارسال
یک فایل `submission.csv` بسازید که دقیقاً این سرستونها را، به همین ترتیب، داشته باشد:
```
action,target,target_type,scope,room_id,room_label,room_type,value,exclude_room_id,status
```
هر ردیف از این فایل مربوط به یک ردیف از `test/instructions.jsonl` است؛ بنابراین تعداد و ترتیب ردیفهای `submission.csv` باید دقیقاً با فایل test یکسان باشد.
برای مثال:
```
action,target,target_type,scope,room_id,room_label,room_type,value,exclude_room_id,status
turn_on,light,capability,room_type,,,bedroom,1,,ok
```
دو فایل زیر را مستقیماً در ریشهی `submission.zip` قرار دهید:
```
submission.zip
├── notebook.ipynb
└── submission.csv
```
نوتبوک باید تمام مراحل کار را نگه دارد: بررسی داده، پاکسازی، مهندسی ویژگی، آموزش مدل و ارزیابی. هنگامی که نوتبوک با گزینهٔ Run All اجرا میشود، باید بدون هیچ خطایی اجرا شده و در پایان، فایل ارسال (submission) را تولید کند.
## معیار ارزیابی
برای ارزیابی این سؤال، از معیار **تطابق کامل (Exact Match)** استفاده میشود. به این معنا که یک پیشبینی تنها در صورتی صحیح در نظر گرفته میشود که مقادیر تمامی ۱۰ فیلد (`action`، `target`، `target_type`، `scope`، `room_id`، `room_label`، `room_type`، `value`، `exclude_room_id` و `status`) در یک ردیف، کاملاً با مقادیر واقعی مطابقت داشته باشند.
امتیاز نهایی، درصد ردیفهایی است که تمامی فیلدهای آنها بهدرستی پیشبینی شدهاند:
$$ \mathrm{Score} = \left( \frac{\text{Total Correct Rows}}{\text{Total Rows}} \right) \times 100 $$
حداقل نمره برای این سؤال ۳۰ از ۱۰۰ است.