کدام مدل زبانی، فارسیِ خرید را بهتر میفهمد؟ نتیجه یک بنچمارک واقعی
پنج مدل زبانی را روی ۱۱۲ جستوجوی واقعی فارسی سنجیدیم — همان جستوجوهایی که در عمل هیچ نتیجهای به کاربر نشان نداده بودند. کل هزینه بنچمارک ۰٫۲۶ دلار شد و اختلاف مدلها ۳ برابر بود.
بنچمارکهای عمومی مدلهای زبانی تقریباً همیشه انگلیسیاند و روی تکالیف مصنوعی سنجیده میشوند. ما به چیز دیگری نیاز داشتیم: اینکه یک مدل چقدر خوب میفهمد کاربر فارسیزبان دقیقاً دنبال چه کالایی است. این گزارش نتیجه سنجش پنج مدل روی داده واقعی است.
- ۳۸۷
- جستوجوی واقعی فارسی از لاگ خودمان
- ۱۱۲
- موردی که به کاربر صفحه خالی داده بود
- ۵
- مدل، همه با یک پرامپت یکسان
- ۰٫۲۶ دلار
- هزینه کل این سنجش
تکلیف: کدام آگهی واقعاً همان کالاست؟
وقتی کاربری «واسکازین ۹۰W140» را جستوجو میکند، خزنده ما حدود ۲۰ تا ۲۴ آگهی از فروشگاههای مختلف برمیگرداند. بین آنها روغن دنده هست، روغن موتور هم هست، گاهی چیزهای کاملاً بیربط. کار مدل این است که فقط همان کالای واقعی را نگه دارد و بقیه را کنار بگذارد — با یک خروجی JSON کاملاً مشخص، بدون هیچ توضیح اضافه.
این تکلیف دو جور میتواند شکست بخورد، و هر دو برای کاربر بد است: مدل میتواند آنقدر سختگیر باشد که هیچ چیز را نگه ندارد (کاربر صفحه خالی میبیند، در حالی که کالا در فهرست بوده)، یا آنقدر شل که کل فهرست را نگه دارد (یعنی عملاً فیلتری در کار نیست).
داده: ۱۱۲ جستوجویی که واقعاً خالی مانده بودند
بهجای ساختن نمونههای آزمایشی، از لاگهای واقعی خودمان ۳۸۷ جستوجوی متمایز فارسی را برداشتیم — با همان فهرست نامزدهایی که مدل در لحظه دیده بود. از این میان روی ۱۱۲ موردی تمرکز کردیم که فیلتر در عمل هیچ نتیجهای نگه نداشته بود، یعنی دقیقاً همان جایی که کاربر صفحه خالی دیده است. ۶۰ جستوجوی سالم را هم جداگانه آزمودیم تا ببینیم مدلها بیش از حد شل نمیشوند.
نمونهها واقعی و پر از دستاندازهای زبان طبیعیاند: غلط املایی («واسکارین» بهجای «واسکازین»)، حرف اشتباه در کد فنی («ایسوزو MPR» بهجای NPR)، و واحد اشتباه («لامپ مهتابی ۱۵ آمپر» در حالی که لامپ با وات سنجیده میشود).
نتیجهها
- openai/gpt-5.6-luna۶٫۳ ثانیه۷۹
- google/gemma-4-31b-itرایگان · ۶٫۵ ثانیه۷۱
- google/gemini-3.5-flash-lite۱٫۴ ثانیه۶۱
- deepseek/deepseek-v4-flash-0731۹٫۴ ثانیه۵۳
- nvidia/nemotron-3-ultra-550bرایگان · نثر بهجای JSON۰
این امتیاز یک سنجه طبیعی نیست؛ یک عدد ترکیبی است که ما ساختهایم تا چهار سنجه جدول پایین در یک نگاه دیده شود. اثرش را روی دو مدل میانی ببینید: دیپسیک نزدیک به دو برابرِ جمنای جستوجوهای خالی را نجات میدهد، اما چون کندتر است و ۳٪ پاسخهایش خراب برمیگردد، در امتیاز کلی پایینتر مینشیند. وزنها را عوض کنید، ترتیب هم عوض میشود — اعداد خام هم همین پایین هست.
| مدل | قیمت (ورودی/خروجی هر میلیون توکن) | نجات جستوجوهای خالی | نگهداشتن کل فهرست | خروجی خراب | زمان پاسخ |
|---|---|---|---|---|---|
| openai/gpt-5.6-luna | ۰٫۱۰$ / ۰٫۶۰$ | ۷۸٪ | ۷٪ | ۰٪ | ۶٫۳ ثانیه |
| google/gemma-4-31b-it (رایگان) | رایگان | ۶۵٪ | ۱۵٪ | ۰٪ | ۶٫۵ ثانیه |
| deepseek/deepseek-v4-flash-0731 | ۰٫۰۸$ / ۰٫۱۸$ | ۴۲٪ | ۱۸٪ | ۳٪ | ۹٫۴ ثانیه |
| google/gemini-3.5-flash-lite | ۰٫۳۰$ / ۲٫۵۰$ | ۲۵٪ | ۱۰٪ | ۰٪ | ۱٫۴ ثانیه |
| nvidia/nemotron-3-ultra-550b (رایگان) | رایگان | — | — | نثر بهجای JSON | ۱۰۵٫۷ ثانیه |
رتبهبندی
- ۱) gpt-5.6-luna — ۷۹ امتیاز. روشنترین برنده: سه برابرِ جمنای، جستوجوهای خالی را نجات داد و در عین حال روی جستوجوهای سالم سختگیرتر ماند. هیچ خروجی خرابی نداشت.
- ۲) gemma-4-31b (رایگان) — ۷۱ امتیاز. بهترین گزینه رایگان با اختلاف: ۶۵٪ نجات، ولی کمی شلتر — در ۱۵٪ موارد کل فهرست را نگه داشت.
- ۳) gemini-3.5-flash-lite — ۶۱ امتیاز. سریعترین با فاصله (۱٫۴ ثانیه) و تمیز، اما بیش از حد سختگیر: سهچهارم آن جستوجوها را همچنان خالی گذاشت. امتیازش را از سرعت و پاکیِ خروجی میگیرد، نه از نجات.
- ۴) deepseek-v4-flash-0731 — ۵۳ امتیاز. ارزانترین، و در نجات جستوجوهای خالی جلوتر از جمنای؛ اما نه قابلاتکا: ۳٪ پاسخها اصلاً قابل خواندن نبود (گاهی پاسخ خالی)، کندترین مدل قابلاستفاده بود و بیش از بقیه فهرست را باز میگذاشت.
- ۵) nemotron-3-ultra (رایگان) — صفر. عملاً غیرقابلاستفاده: ۱۰۵ ثانیه برای یک فراخوانی، و بهجای JSON خواستهشده متن توضیحی برگرداند.
نکته مهم این است که «بهترین» به این بستگی دارد که از کدام خطا بیشتر میترسید. دو مدل اول در هر دو حالت جلوترند، اما بعد از آن انتخاب سلیقهای میشود: اگر خالیماندن نتیجه بدترین حالت است، دیپسیک را بالاتر از جمنای بگذارید؛ اگر شلوغی و نتیجه بیربط بدتر است، جمنای با ۱٫۴ ثانیه و دقت بالا همچنان انتخاب معقولی است.
دو چیزی که فکر میکردیم جواب میدهد و نداد
اول: به پرامپت جملهای اضافه کردیم که «ممکن است کاربر غلط املایی داشته باشد یا واحد را اشتباه بنویسد؛ منظورش را بفهم». این دقیقاً برای همان سه نمونه بالا نوشته شده بود. روی ۱۱۲ جستوجو، ۱۷ مورد را بهتر و ۱۵ مورد را بدتر کرد — یعنی نویز. روی خود آن سه نمونه هدف، هیچ تغییری نداد. حذفش کردیم.
دوم: دما (temperature) را روی صفر گذاشتیم تا خروجی تکرارپذیر شود. برای یک تکلیف طبقهبندی این تنظیم درست است، اما تکرارپذیری نیاورد: وقتی هر جستوجو را سه بار اجرا کردیم، ۳۳٪ نتایج در دمای ۰٫۷ و ۴۳٪ در دمای صفر بین اجراها فرق داشتند.
درس مشترک هر دو: در این تکلیف، انتخاب مدل بهمراتب مهمتر از تنظیم پرامپت و دما بود. اختلاف بین بهترین و ضعیفترین مدل قابلاستفاده سه برابر بود؛ اختلاف بین بهترین و بدترین پرامپت، در حد نویز.
محدودیتهای این سنجش
- این بنچمارک یک تکلیف مشخص را میسنجد — تطبیق کالا در متن فارسی با خروجی JSON — نه توانایی عمومی مدل در زبان فارسی.
- همه مدلها با یک پرامپت یکسان و در دمای صفر سنجیده شدند؛ هر مدلی با پرامپت مخصوص خودش احتمالاً بهتر عمل میکند.
- جز آزمون تکرارپذیری، هر جستوجو یک بار اجرا شد.
- فراخوانیها از مسیر OpenRouter انجام شد، که ممکن است یک مدل را به سرویسدهندههای متفاوتی بفرستد؛ بخشی از ناپایداری مشاهدهشده میتواند از همین باشد.
- نمونهها از حوزه خرید و تدارکاتاند: قطعات خودرو، روغن، فیلتر، اقلام تبلیغاتی و اداری.
کل هزینه: ۰٫۲۶ دلار
کل این سنجش — حدود ۷۰۰ فراخوانی روی پنج مدل — ۰٫۲۶ دلار خرج برداشت. اگر روی داده واقعی خودتان تصمیم میگیرید کدام مدل را به کار ببرید، سنجیدنش تقریباً رایگان است و نتیجهاش میتواند سه برابر تفاوت کیفیت باشد.
این فیلتر همان چیزی است که پشت نتایج قیمتهای زنده کار میکند: فهرست خام فروشگاهها را میگیرد و فقط همان کالایی را نشان میدهد که واقعاً دنبالش بودید.