Skip to content
همهٔ تحلیل‌ها
  • AI Evaluation
  • Quality
  • Engineering Process

چرا ارزیابی خروجی هوش مصنوعی مثل تست‌نویسی نرم‌افزار نیست

تست سنتی یک پاسخ درست دارد و یک assert که آن را بررسی می‌کند. ارزیابی خروجی مدل زبانی یک طیف از پاسخ‌های قابل‌قبول دارد که مدام زیر پایتان تغییر می‌کند — و همین، فرآیند کیفیت را کاملاً متفاوت می‌کند.

انتشار

۸ دقیقه مطالعه

یک تیم مهندسی که تازه ویژگی‌های مبتنی بر هوش مصنوعی می‌سازد، معمولاً اولین غریزه‌اش این است که همان چارچوب تست معمول را روی آن اعمال کند: یک ورودی بدهید، خروجی مورد انتظار را با آن مقایسه کنید، و اگر برابر بود سبز کنید. این چارچوب برای کد قطعی کار می‌کند چون کد قطعی قرار است هر بار دقیقاً همان کار را انجام دهد. خروجی یک مدل زبانی این‌طور نیست. دو اجرای یکسان با همان ورودی می‌توانند دو جملهٔ متفاوت اما هر دو درست تولید کنند؛ یک به‌روزرسانی بی‌اطلاع در مدل زیرین می‌تواند رفتار را عوض کند بدون این‌که شما یک خط کد را لمس کرده باشید. مسئلهٔ اصلی ارزیابی هوش مصنوعی این نیست که چطور assert بنویسیم؛ این است که چطور یک فرآیند بسازیم که با عدم‌قطعیت زندگی کند، نه این‌که وانمود کند وجود ندارد.

چرا برابری دقیق کار نمی‌کند

اولین چیزی که هر تیمی یاد می‌گیرد این است که تست‌های مبتنی بر برابری رشته‌ای برای خروجی مدل زبانی تقریباً همیشه شکست می‌خورند یا بی‌فایده می‌شوند. اگر assert شما دقیقاً یک جمله را انتظار دارد، یا تست‌تان همیشه رد می‌شود (چون مدل جمله را کمی متفاوت می‌نویسد) یا آن‌قدر آزاد می‌شود که هر چیزی را قبول می‌کند (چون فقط طول یا وجود یک کلمه را چک می‌کند). هیچ‌کدام از این‌ها اطلاعات مفیدی نمی‌دهد.

جایگزینش سنجش کیفیت با معیارهای معنایی است، نه تحت‌اللفظی: آیا پاسخ حاوی واقعیت‌های درست است؟ آیا لحن و ساختار مناسب است؟ آیا چیزی که نباید بگوید، گفته است؟ این‌ها سؤال‌هایی هستند که یا یک قاعدهٔ ساخته‌شده با دقت می‌تواند بسنجد، یا یک انسان، یا (با احتیاط) یک مدل دیگر که نقش داور را بازی می‌کند.

مجموعهٔ آزمون طلایی: پایه‌ای که باید واقعی باشد

هر فرآیند ارزیابی جدی با یک مجموعهٔ آزمون طلایی (golden set) شروع می‌شود: مجموعه‌ای از ورودی‌های واقعی، همراه با پاسخ‌های قابل‌قبول یا معیارهای سنجش، که هر تغییر در سامانه — چه در پرامپت، چه در مدل، چه در منطق پیرامونش — در برابر آن اجرا می‌شود. کیفیت این مجموعه از هر بخش دیگر فرآیند ارزیابی مهم‌تر است، چون مجموعه‌ای که ورودی‌های ساده و ایمن را پوشش می‌دهد ولی مواردِ مرزی را ندارد، دقیقاً همان جایی که شکست‌ها اتفاق می‌افتند را نادیده می‌گیرد.

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

نمره‌دهی بر اساس روبریک

وقتی پاسخ درست یک رشتهٔ ثابت نیست، راه عملی سنجش کیفیت، تعریف یک روبریک است: فهرستی صریح از معیارهایی که یک پاسخ خوب باید داشته باشد، هرکدام با وزن مشخص. برای مثال: آیا واقعیت‌های ادعاشده درست‌اند؟ آیا پاسخ به سؤال واقعی مربوط است؟ آیا از دادن اطلاعات نادرست با اطمینان کاذب پرهیز کرده؟ آیا طول و لحنش مناسب زمینه است؟

روبریک باید قبل از دیدن خروجی‌های واقعی نوشته شود، نه بعدش — وگرنه وسوسهٔ تنظیم معیارها برای توجیه پاسخی که از قبل تولید شده، ارزیابی را بی‌ارزش می‌کند. و روبریک باید به اندازه‌ای دقیق باشد که دو ارزیاب مستقل (چه انسان، چه مدل) روی همان پاسخ به نمرهٔ نزدیک به هم برسند؛ اگر دو ارزیاب دربارهٔ یک روبریک واحد به‌شدت اختلاف دارند، خودِ روبریک مبهم است.

یک روبریک کوچک و عمومی معمولاً این شکلی است — نه به‌عنوان یک قالب نهایی، بلکه به‌عنوان نقطهٔ شروع برای هر تیمی که هنوز روبریک ندارد:

factual_accuracy: 0-3   # هر ادعای نادرست یک نمره کم می‌کند
relevance:        0-2   # آیا واقعاً به سؤال پاسخ می‌دهد
tone_fit:         0-2   # آیا لحن با زمینه همخوانی دارد
overconfidence:   0-3   # جریمهٔ بیان قطعی برای چیزی نامطمئن

نکتهٔ مهم این نیست که این وزن‌ها درست‌اند؛ نکته این است که هر کدام صریح، قابل‌مشاهده و قابل‌بحث‌اند — دقیقاً برخلاف یک قضاوت کلی و ضمنی مثل «به نظر خوب می‌رسید».

دام قضاوت یک مدل دربارهٔ خودش

استفاده از یک مدل زبانی به‌عنوان داور برای سنجش خروجی مدل دیگر، وسوسه‌انگیز است چون سریع و ارزان است — اما یک تلهٔ خاص دارد که باید صریح به آن توجه کرد: مدل‌ها تمایل دارند خروجی‌هایی را که به سبک خودشان نزدیک‌تر است، بهتر نمره بدهند، حتی وقتی از نظر واقعیت یا کیفیت واقعی فرقی ندارند. اگر مدلی که برای تولید استفاده می‌کنید همان مدلی باشد که برای داوری استفاده می‌کنید، این سوگیری تشدید می‌شود: مدل عملاً دارد به کار خودش امتیاز می‌دهد.

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

بازبینی انسانی به‌عنوان یک مرحله، نه یک استثنا

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

بازبینی انسانی همچنین باید بازخوردش را به مجموعهٔ آزمون طلایی برگرداند. یک بازبین که یک شکست پیدا می‌کند و فقط آن را در یک گزارش می‌نویسد، همان شکست را برای بار دوم قابل تکرار می‌گذارد. همان مورد باید به مجموعهٔ آزمون اضافه شود تا در هر اجرای بعدی خودکار بررسی شود.

رگرسیون وقتی مدل زیرِ پایتان عوض می‌شود

یکی از عجیب‌ترین تفاوت‌های ارزیابی هوش مصنوعی با تست نرم‌افزار این است که کد شما می‌تواند بدون تغییر بماند و رفتارش عوض شود، چون تأمین‌کننده مدل زیرین را به‌روزرسانی کرده. این نوع رگرسیون در تست سنتی اصلاً معنا ندارد — کد ثابت رفتار ثابت تولید می‌کند مگر یک وابستگی عوض شود، و آن وابستگی معمولاً نسخه‌بندی و قفل‌شده است. مدل‌های میزبانی‌شده این‌طور نیستند؛ نسخه‌ای که پشت یک نام API قرار دارد می‌تواند بدون اطلاع‌رسانی صریح تغییر کند.

راه‌حل عملی، اجرای منظم مجموعهٔ آزمون طلایی — نه فقط هنگام تغییر کد، بلکه به‌صورت زمان‌بندی‌شده — و مقایسهٔ نمرات با خط پایهٔ قبلی است. اگر نمرهٔ میانگین روبریک روی همان مجموعهٔ آزمون ناگهان افت کند، بدون این‌که تیم شما چیزی عوض کرده باشد، این خودش یک هشدار است که باید مثل هر رگرسیون دیگری جدی گرفته شود.

چه چیزی را باید قبل از «تمام» اعلام‌کردن یک ویژگی هوش مصنوعی اندازه گرفت

قبل از این‌که یک ویژگی مبتنی بر هوش مصنوعی «آماده» اعلام شود، حداقل چهار چیز باید اندازه‌گیری شده باشد، نه فقط حس‌شده: نرخ موفقیت روی مجموعهٔ آزمون طلایی با معیار روشن برای موفقیت؛ توزیع شکست‌ها — نه فقط این‌که چند درصد شکست می‌خورد، بلکه چه نوع شکستی، چون یک شکست بی‌ضرر با یک شکست گمراه‌کننده فرق اساسی دارد؛ هزینه و تأخیر به‌ازای هر درخواست در بار واقعی، نه فقط در محیط توسعه؛ و برنامهٔ رصد مداوم بعد از انتشار — چون هیچ ارزیابی پیش از انتشار، جانشین رصد رفتار واقعی در تولید نمی‌شود.

این چهار معیار باید قبل از انتشار مستند شوند، نه به‌عنوان یک لیست بازبینی یک‌باره، بلکه به‌عنوان چیزی که بعد از انتشار هم دوباره اندازه‌گیری می‌شود. تیمی که فقط یک‌بار، در روز راه‌اندازی، این اعداد را جمع می‌کند و بعد فراموششان می‌کند، عملاً همان اشتباهی را تکرار می‌کند که در بخش رگرسیون توضیح داده شد: فرض می‌کند چیزی که امروز درست است، فردا هم درست می‌ماند، در حالی که دقیقاً همان چیزی که این ویژگی را می‌سازد — مدل زیرین — بیرون از کنترل مستقیم تیم است.

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

خواندنی‌های دیگر

چیزی برای ساختن دارید؟

بگویید روی چه کار می‌کنید. صادقانه می‌گوییم که تیم درستی برایش هستیم یا نه.

شروع گفت‌وگو

یا برای ما ایمیل بزنید به hello@larsima.com