پرش به محتوای اصلی
پرش به محتوای مقاله

اندیس‌های ANN تأخیر جست‌وجوی برداری را ۶۰ برابر کاهش دادند

·۲ مهر ۱۴۰۵۱۱ دقیقه مطالعه۲ بازدید
راهنما
نمایش بصری جستجوی برداری: پرسش کاربر به بردار تبدیل شده و نزدیک‌ترین نتایج در فضای چندبعدی یافت می‌شوند.
نمایش بصری جستجوی برداری: پرسش کاربر به بردار تبدیل شده و نزدیک‌ترین نتایج در فضای چندبعدی یافت می‌شوند.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

تبیین دقیق موازنه بین Recall و Latency در اندیس‌های HNSW و IVF-PQ؛ این مقاله نشان می‌دهد که سرعت ۶۰ برابری در جست‌وجوی برداری، نتیجه پذیرش آگاهانه خطای آماری است، نه صرفاً قدرت سخت‌افزاری.

اگر امروز یک دستیار هوش مصنوعی دارید که در کسری از ثانیه به سوالات پاسخ می‌دهد، باید بدانید که این سرعت مدیون یک «تقلب» ریاضیاتی است. بدون این تکنیک، هر پرسش ساده در یک پایگاه‌داده بزرگ، ثانیه‌ها یا حتی دقایق زمان می‌برد تا پردازش شود. یک اسکن ساده و خطی (Brute-force) روی ۵۰,۰۰۰ بردار با ابعاد بالا، صدها میلی‌ثانیه زمان می‌برد، اما یک اندیس نزدیک‌ترین همسایه تقریبی (ANN) می‌تواند همین نتیجه را در کمتر از ۵ میلی‌ثانیه ارائه دهد. این شتاب ۶۰ برابری، موتور نامرئی است که چت‌بات‌های هوش مصنوعی را در زمان واقعی (Real-time) ممکن می‌سازد.

در یک خط لوله تولید بازیابی‌افزا (RAG) — شبیه دانش‌آموزی که قبل از جواب دادن، اول کتاب درسی را باز می‌کند و از آن نقل می‌آورد — سیستم باید پرسش کاربر را به یک مختصات تبدیل کرده و نزدیک‌ترین «آدرس» را در یک نقشه معنایی عظیم پیدا کند. همان‌طور که در تحلیل قبلی ما درباره‌ی چالش‌های استقرار RAG در محیط‌های عملیاتی اشاره کردیم، مسئله اصلی تنها یافتن داده‌های درست نیست، بلکه یافتن آن‌ها پیش از آن است که کاربر حوصله‌اش سر برود.

تصور کنید نقشه‌ای از شهر دارید که در آن مکان‌ها بر اساس کاربردشان کنار هم قرار گرفته‌اند، نه بر اساس آدرس خیابان؛ مثلاً کتابخانه و کتاب‌فروشی کنار هم هستند چون هدفشان یکی است، حتی اگر در دنیای واقعی کیلومترها با هم فاصله داشته باشند. مدل‌های بردار معنایی (Embedding) — مثل مدل all-MiniLM-L6-v2 — دقیقاً همین کار را با متن‌ها می‌کنند.

نمایش بصری جستجوی برداری: پرسش کاربر به بردار تبدیل شده و با بردارهای اسناد در فضای چندبعدی مقایسه می‌شود.

هندسه معنا

مدل‌های مدرن بردار معنایی، توابع قطعی هستند که معمولاً از رمزگذارهای ترنسفورمر (Transformer) استفاده می‌کنند. وقتی یک جمله را وارد مدل می‌کنید، خروجی آن یک بردار با طول ثابت است؛ برای مثال، یک آرایه ۳۸۴-بعدی از اعداد اعشاری (Floats).

این آرایه در واقع آدرس آن تکه متن در یک نقشه معنایی چندبعدی است. هر تکه از یک دفترچه راهنمای شرکتی، آدرس خاص خود را دریافت می‌کند و این آدرس‌ها در یک پایگاه‌داده مختصاتی عظیم ذخیره می‌شوند. وقتی کاربر سوالی می‌پرسد، سیستم همان رمزگذار (Encoder) را روی پرسش اجرا می‌کند، آدرس آن را محاسبه می‌کند و سپس آدرس‌هایی را در پایگاه‌داده می‌یابد که بیشترین نزدیکی را به آن دارند.

شکل‌گیری نقشه

بر اساس مستندات آموزشی این مدل‌ها، هندسه این نقشه تصادفی نیست و طی فرآیند آموزش با هدف «یادگیری تقابلی» (Contrastive Learning) شکل می‌گیرد. مدل میلیون‌ها جفت جمله را می‌بیند که یا از نظر معنایی مشابه هستند (مانند بازنویسی‌های یک جمله یا پاسخ‌هایی به یک سوال واحد) یا کاملاً بی‌ربط هستند.

  • جریمه‌ها: اگر جملات مشابه در نقاط دوری از هم قرار بگیرند، مدل جریمه می‌شود.
  • جداسازی: اگر جملات بی‌ربط در نزدیکی یکدیگر قرار بگیرند، مدل جریمه می‌شود.
  • نتیجه: با گذشت زمان، فضا یکنواخت شده، بردارها به طور مساوی در یک کره واحد (Unit Sphere) پخش می‌شوند و هم‌راستا می‌گردند؛ به این معنا که فاصله زاویه‌ای به طور دقیقی بازتاب‌دهنده معنای متن است.

به همین دلیل است که یک مدل کوچک می‌تواند در دقت بازیابی با یک مدل بزرگ رقابت کند؛ زیرا ساختار نقشه است که کار سخت را انجام می‌دهد، نه لزوماً اندازه خام مدل.

دقت در تکه‌بندی

برای حفظ معنای این مختصات، توسعه‌دهندگان باید از تکه‌بندی (Chunking) دقیق استفاده کنند. در سیستم ما، دفترچه راهنما به تکه‌هایی تقسیم می‌شود که در محدوده حداکثری توکن‌های مدل (معمولاً ۵۱۲ توکن) قرار بگیرند.

اگر سندی درباره سیاست‌های هزینه‌ها باشد و در عین حال به دورکاری نیز اشاره کند، بردار حاصل هر دو موضوع را ترکیب کرده و نقشه را مخدوش می‌کند. مرزهای درست تکه‌بندی تضمین می‌کند که هر مختصات معنای مشخصی داشته باشد. این امر باعث می‌شود «سیاست کار از خانه» و «دستورالعمل‌های دورکاری» نزدیک به هم و دور از «منوی ناهار» قرار گیرند.

نفرین ابعاد

در ابعاد پایین، فاصله بصری و شهودی است. اگر در سان‌فرانسیسکو باشید، لس‌آنجلس دور است و مفهوم «نزدیک‌ترین همسایه» کاملاً واضح است. اما در فضای ۳۸۴-بعدی، پدیده‌ای به نام «تمرکز فاصله» (Distance Concentration) رخ می‌دهد. در این حالت، تقریباً تمام نقاط به یک اندازه از پرسش کاربر دور به نظر می‌رسند.

این «نفرین» باعث می‌شود تضاد بین نزدیک‌ترین و دورترین همسایه از بین برود و نسبت آن‌ها به عدد ۱ نزدیک شود. این موضوع اندیس‌های مکانی سنتی مثل k-d trees یا ball trees را بی‌فایده می‌کند. این اندیس‌ها با حذف نواحی بزرگ کار می‌کنند، اما در ابعاد بالا، حجم‌های محدود (Bounding Volumes) چنان با هم هم‌پوشانی دارند که سیستم نمی‌تواند هیچ شاخه‌ای را حذف کند و عملکرد به اسکن تقریباً تمام داده‌ها تنزل می‌یابد.

برای یک دفترچه راهنما با ۵۰ هزار تکه، اسکن خطی روی CPUهای مدرن چند صد میلی‌ثانیه زمان می‌برد. اما اگر تعداد تکه‌ها به یک میلیون برسد، تأخیر به ثانیه‌ها می‌رسد. بنابراین ما نمی‌توانیم در مقیاس بالا به «نزدیک‌ترین همسایه دقیق» تکیه کنیم؛ ما به الگوریتمی نیاز داریم که آگاهانه بخشی از دقت را فدای سرعت کند.

روش‌های «تقلب» در الگوریتم‌های ANN

الگوریتم‌های ANN حاشیه خطای کوچکی را می‌پذیرند تا سرعت را بازیابند. معیار سنجش آن‌ها Recall@k است؛ یعنی چه کسری از نزدیک‌ترین همسایه‌های واقعی، واقعاً بازگردانده شده‌اند. اکثر سیستم‌های عملیاتی برای k بین ۵ تا ۵۰، نرخ بازیابی ۹۵ تا ۹۹ درصد را هدف قرار می‌دهند.

HNSW (جهان کوچک قابل پیمایش سلسله‌مراتبی) پیشروترین اندیس گراف‌محور است. این مدل یک گراف مجاورتی پراکنده و چندلایه می‌سازد که هر تکه متن یک گره است و یال‌ها به گره‌های نزدیک اشاره می‌کنند.

در زمان پرسش، HNSW یک «گشت حریصانه» (Greedy Walk) انجام می‌دهد؛ از یک نقطه ورود تصادفی در بالاترین و پراکنده‌ترین لایه شروع می‌کند، به سمت گره‌هایی که به پرسش نزدیک‌ترند حرکت می‌کند، به لایه‌های متراکم‌تر می‌رود و در نهایت نزدیک‌ترین گره‌ها را در لایه پایین جمع‌آوری می‌کند. این مسیر تنها بخش کوچکی از گراف را می‌پیماید.

مهندسان می‌توانند این فرآیند را با پارامتر efSearch (ضریب اکتشاف) تنظیم کنند. مقدار بالاتر efSearch تعداد کاندیداهای بررسی‌شده را زیاد می‌کند که باعث افزایش Recall می‌شود اما تأخیر را بالا می‌برد. برای ۱۰۰ هزار بردار، مقدار efSearch برابر با ۶۴ اغلب منجر به Recall ۹۷٪ در کمتر از یک میلی‌ثانیه می‌شود.

جایگزین‌های بهینه در حافظه

وقتی رم (RAM) محدود است، روش‌های بخش‌بندی و کوانتش مثل IVF-PQ (فایل معکوس با کوانتش محصول) ترجیح داده می‌شوند. این روش از یک کوانت‌کننده خشن (k-means) برای تقسیم فضا به سلول‌ها (مثلاً ۱۰۲۴ سلول) استفاده می‌کند.

سیستم به جای اسکن کل داده‌ها، فقط بردارها را در نزدیک‌ترین سلول‌های nprobe بررسی می‌کند. همچنین از کدهای فشرده PQ برای کاهش حجم بردارها از ۱.۵ کیلوبایت به چند ده بایت استفاده می‌کند. برای یک دفترچه راهنما، استفاده از اندیس IVF-PQ با nprobe=16 می‌تواند تأخیری زیر یک میلی‌ثانیه روی CPUهای سرور با Recall حدود ۹۵٪ ایجاد کند.

کتابخانه Faiss اجرای این روش‌ها را روی CPU و GPU بهینه می‌کند. برای مقیاس‌های عظیم، نسخه‌هایی مثل DiskANN گراف را به صورت یک لایه متراکم واحد بهینه شده برای دسترسی به SSD بازآرایی می‌کنند و یک کاتالوگ فشرده را در رم نگه می‌دارند. این امر اجازه می‌دهد اندیس‌های میلیارد-تکه‌ای روی سخت‌افزارهای معمولی اجرا شوند.

نقش شباهت کسینوسی

بیشتر جست‌وجوهای برداری بر شباهت کسینوسی (Cosine Similarity) تکیه دارند که در واقع کسینوس زاویه بین دو بردار است. این معیار بررسی می‌کند که دو آیتم تا چه حد در یک جهت مفهومی حرکت می‌کنند، بدون اینکه به طول بردارها اهمیت دهد.

دو متن درباره «شرایط دورکاری» زاویه کوچکی با هم دارند (شباهت نزدیک به ۱)، در حالی که متنی درباره «میان‌وعده‌های دفتر» در جهتی کاملاً متفاوت است (شباهت نزدیک به ۰ یا منفی). این زاویه اغلب بهتر از فاصله اقلیدسی عمل می‌کند، زیرا مقیاس بردار ممکن است با طول متن یا ویژگی‌های مدل تغییر کند، اما جهت بردار، موضوع را با پایداری بیشتری ثبت می‌کند.

معادل‌های ریاضیاتی

برای بردارهای نرمال‌شده (Normalized)، شباهت کسینوسی از نظر ریاضی معادل «ضرب داخلی» (Dot Product) است. این موضوع به الگوریتم‌هایی مثل ScaNN اجازه می‌دهد تا هرس (Pruning) خود را برای جست‌وجوی حداکثر ضرب داخلی (MIPS) بهینه کنند.

در یک دستیار راهنما، شباهت کسینوسی و ضرب داخلی تا زمانی که بردارها نرمال شده باشند، قابل جایگزینی هستند. تنها تفاوت یک مقیاس ثابت است که روی رتبه‌بندی تأثیری ندارد. این موضوع حیاتی است زیرا تکه‌هایی که اندیس ANN بازمی‌گرداند، بر اساس این زاویه رتبه‌بندی می‌شوند. اگر مدل تمام تکه‌های مربوط به دورکاری را در یک خوشه متراکم قرار داده باشد، ۳ نتیجه اول بسیار مرتبط خواهند بود.

بهبود کیفیت بازیابی

جست‌وجوی معنایی اجازه می‌دهد وقتی کاربر «درخواست مرخصی» را می‌پرسد، سیستم نتایج مربوط به «مرخصی استحقاقی» را پیدا کند، حتی اگر کلمات دقیقاً یکی نباشند. یک موتور جست‌وجوی کلمات کلیدی این مورد را از دست می‌داد، اما بردار پرسش نزدیک به بردار سیاست مرخصی قرار می‌گیرد چون مدل یاد گرفته است این اصطلاحات در یک جهت هستند.

اما این همراستایی شکننده است و به این بستگی دارد که مدل در زمان آموزش با بازنویسی‌های مشابه مواجه شده باشد. برای رفع ضعف در بازیابی، مهندسان می‌توانند مدل‌های بردار معنایی را با استفاده از داده‌های خاص شرکت و یک هدف تقابلی (Contrastive Objective) و جفت‌های پرسش و پاسخ، تنظیم دقیق (Fine-tuning) کنند. این کار Recall را برای اصطلاحات تخصصی داخلی یا نام‌های خاص شرکت افزایش می‌دهد.

تأثیر تکه‌بندی بر سیگنال

تعامل با تکه‌بندی بسیار حساس است. وعده جست‌وجوی معنایی تنها زمانی محقق می‌شود که مرزهای تکه‌ها با انسجام موضوعی سازگار باشند:

  • تکه‌های بیش از حد بلند: این تکه‌ها ممکن است چندین موضوع را میانگین بگیرند، سیگنال معنایی را رقیق کنند و باعث شوند بردار در یک جهت «عمومی» قرار گیرد.
  • تکه‌های بیش از حد کوتاه: این تکه‌ها ممکن است بستر (Context) کافی برای جایگذاری مطمئن در نقشه را نداشته باشند و باعث شوند به سمت خوشه‌های بی‌ربط رانده شوند.

موازنه مهندسی

انتخاب اندیس، موازنه بین Recall و تأخیر است. HNSW برای اسناد پویا (Living Documents) بهتر است چون درج و حذف تک‌بردارها را با هزینه کم پشتیبانی می‌کند.

IVF-PQ برای مجموعه‌داده‌های عظیم و ایستا که محدودیت حافظه اولویت اول است، برنده است. با این حال، اندیس‌های IVF-PQ ممکن است در صورت تغییر قابل توجه توزیع داده‌ها، به بازآموزی دوره‌ای کوانت‌کننده خشن نیاز داشته باشند.

خلاصه تنظیمات کلیدی

  • ابعاد بردار: معمولاً ۳۸۴ (all-MiniLM)، ۷۶۸ (BERT base) یا ۱۰۲۴ برای مدل‌های بزرگ.
  • طول توالی: معمولاً ۵۱۲ توکن (تقریباً ۳۵۰ تا ۴۰۰ کلمه).
  • معیار شباهت پیش‌فرض: شباهت کسینوسی (برای بردارهای نرمال‌شده).
  • تنظیم HNSW: پارامتر efSearch معمولاً بین ۱۶ تا ۱۲۸ است؛ مقدار بالاتر = Recall بیشتر، سرعت کمتر.
  • تنظیم IVF-PQ: پارامتر nprobe معمولاً بین ۱ تا ۶۴ است؛ تعداد سلول‌های اسکن شده را تعیین می‌کند.
  • فشرده‌سازی PQ: بردارها را به حدود ۸ تا ۶۴ بایت برای هر بردار کاهش می‌دهد.
  • هدف Recall: سیستم‌های عملیاتی معمولاً برای top-k هدف ۰.۹۵ تا ۰.۹۹ را دنبال می‌کنند.

عیب‌یابی شکست‌های بازیابی

وقتی سیستم با وجود Recall بالا، نتایج بی‌ربط می‌دهد، یعنی جداسازی معنایی شکست خورده است. برای مثال، اگر پرسشی درباره «سیاست دورکاری» تکه‌هایی درباره «تأیید سفر» و «لوازم اداری» بازگرداند، مدل نتوانسته این موضوعات شرکتی را به درستی جدا کند.

برای تشخیص و رفع این مشکل، مهندسان می‌توانند:

  • خوشه‌ها را بصری کنند: با استفاده از PCA (تحلیل مؤلفه‌های اصلی) بررسی کنند که آیا پرسش و تکه‌های خطا در ابعاد نویزی خوشه‌بندی شده‌اند یا خیر.
  • تنظیم نظارت‌شده: مجموعه‌ای از جفت‌های (پرسش، پاسخ مرتبط) از تیکت‌های قدیمی HR بسازند تا مدل با اصطلاحات خاص شرکت آشنا شود.
  • افزایش هم‌پوشانی: مقدار Overlap تکه‌ها را کمی زیاد کنند تا تکه مرتبط، بستر بیشتری از متن اطراف را جذب کند.
  • اعمال آستانه: اگر دقت (Precision) مهم‌تر از Recall است، یک فیلتر سخت‌گیرانه شباهت کسینوسی (مثلاً حذف نتایج زیر ۰.۶) قبل از ارسال به LLM اعمال کنند.

سوالات متداول (FAQ) درباره جست‌وجوی برداری

آیا همیشه باید از شباهت کسینوسی استفاده کنم؟
شباهت کسینوسی زمانی که بزرگی بردارها متفاوت است، بسیار پایدار است و با مدل‌های آموزش‌دیده تقابلی همخوانی دارد. اگر تمام بردارها را نرمال کنید، ضرب داخلی نتایج یکسانی می‌دهد. از فاصله اقلیدسی تنها زمانی استفاده کنید که «بزرگی» (Magnitude) بردار حاوی اطلاعات مفیدی باشد.

چگونه ابعاد بردار را انتخاب کنم؟
ابعاد بزرگتر می‌توانند تفاوت‌های ظریف‌تری را ذخیره کنند اما حافظه و تأخیر را افزایش می‌دهند. همچنین اگر مدل به اندازه کافی بیانگر نباشد، ابعاد بالا می‌تواند «تمرکز فاصله» را بدتر کند. با یک مدل فشرده مثل all-MiniLM-L6-v2 (۳۸۴ بعد) شروع کنید و تنها در صورتی ارتقا دهید که کیفیت بازیابی پس از بهینه‌سازی تکه‌بندی همچنان ناکافی باشد.

آیا می‌توانم یک اندیس ANN را به صورت افزایشی به‌روزرسانی کنم؟
اندیس‌های گراف‌محور مثل HNSW درج و حذف تک‌بردارها را با هزینه کم پشتیبانی می‌کنند. اندیس‌های IVF-PQ ممکن است در صورت تغییر توزیع داده‌ها به بازآموزی کوانت‌کننده نیاز داشته باشند. برای یک دفترچه راهنمای پویا، HNSW معمولاً گزینه بهتری است.

فیلترهای ویژگی (مثلاً دپارتمان یا تاریخ) چگونه با ANN کار می‌کنند؟
اجرای جست‌وجوی برداری و سپس فیلتر کردن می‌تواند Recall را تخریب کند اگر مجموعه کاندیداهای فیلتر شده خیلی کوچک باشد. روش‌های بهتر شامل پیش-فیلترینگ در داخل اندیس (مانند ترکیب IVF با فیلتر متادیتا در Faiss) یا کوانتش محصولی است که ویژگی‌ها را در کنار بردار کدگذاری می‌کند.

آیا جست‌وجوی دقیق نزدیک‌ترین همسایه هرگز کاربردی است؟
جست‌وجوی دقیق برای تعداد کمی بردار (تا چند هزار عدد) عملی است. فراتر از آن، تأخیر اسکن کامل برای برنامه‌های تعاملی غیرقابل قبول است. از جست‌وجوی دقیق برای تست‌های واحد (Unit Tests)، عیب‌یابی Recall یا تأیید صحت top-k در برابر یک استاندارد طلایی استفاده کنید.

چالش اصلی مهندسی در جست‌وجوی برداری، مدیریت این تضاد بین شهود هندسی (نزدیکی) و معنای واقعی معنایی است.

این لایه بازیابی، مواد خام را برای LLM در یک خط لوله RAG فراهم می‌کند. اگر اندیس ANN نویز بازگرداند، LLM بدون توجه به قدرت مدلش، دچار توهم (Hallucination) خواهد شد.

تحلیل این سیستم‌ها نشان می‌دهد که ساختار نقشه معنایی، و نه اندازه خام مدل، است که بار اصلی دقت بازیابی را به دوش می‌کشد. برای توسعه‌دهنده، این بدان معناست که باید به جای تعویض مدل با یک مدل بزرگتر، بر کیفیت داده‌ها و تنظیم اندیس تمرکز کند. یک مدل فشرده ۳۸۴-بعدی اغلب از مدل‌های بزرگتر بهتر عمل می‌کند، به شرطی که تکه‌بندی و اندیس‌گذاری بهینه شده باشند.

منتظر تکامل بعدی در اسمبل کردن پرامپت‌ها باشید، جایی که ترتیب و کوتاه کردن این تکه‌های بازیابی شده، دقت پاسخ نهایی را تعیین خواهد کرد.

چرا این موضوع مهم است؟

این تکنولوژی زیربنای مقیاس‌پذیری تمام سیستم‌های RAG است و اجازه می‌دهد پاسخ‌دهی مدل‌های زبانی از حالت آزمایشگاهی به سرعت صنعتی برسد. بدون ANN، استقرار هوش مصنوعی در سازمان‌های با حجم داده بالا عملاً غیرممکن بود.

تأثیر برای ایران

برای توسعه‌دهندگان ایرانی که با محدودیت منابع سخت‌افزاری (GPU/RAM) روبرو هستند، استفاده از روش‌های فشرده‌سازی مانند IVF-PQ و کتابخانه Faiss، تنها راه عملی برای اجرای سیستم‌های RAG مقیاس‌پذیر روی سرورهای داخلی است.

·نگاه ما
تحریریه دات‌هوش

تمرکز بیش از حد توسعه‌دهندگان بر انتخاب مدل‌های برداری بزرگ‌تر، یک اشتباه استراتژیک است. تحلیل ما نشان می‌دهد که ساختار اندیس و کیفیت تکه‌بندی داده‌ها، تأثیر به‌مراتب بیشتری بر دقت بازیابی دارند تا تعداد پارامترهای مدل. در واقع، یک مدل کوچک ۳۸۴-بعدی با یک اندیس بهینه، می‌تواند از مدل‌های غول‌پیکر با تنظیمات پیش‌فرض پیشی بگیرد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.