در توسعهی مدلهای چندوجهی، پایین آمدن تابع زیان (Loss) به تنهایی نشاندهندهی عملکرد بهینهی مدل در دنیای واقعی نیست. یک مدل ممکن است همگرا شود اما در پاسخ به پرسشهای بصری یا بازیابی تصویر مرتبط عملکرد ضعیفی داشته باشد؛ بنابراین نیاز به معیارهای سنجش استاندارد و قابل اتکا دارید.
در این درس یاد میگیرید که چگونه سه بستر ارزیابی پرکاربرد یعنی Recall@K برای بازیابی تصویر و متن، تطابق دقیق (Exact Match) برای سامانههای پرسش و پاسخ تصویری (VQA) و امتیاز BLEU-4 را برای کپشننویسی تصویر بدون وابستگی به کتابخانههای خارجی پیادهسازی کنید.
پیادهسازی این معیارها با توابع سبک پایتونی انجام میشود و تستهای آن به صورت محلی و سریع با دادههای ساختگی حتی روی CPU معمولی قابل اجرا است، بدون اینکه نیازی به سختافزار ابری سنگین یا دانلود بستههای پیچیده داشته باشید.
آموزش فقط نیمی از مسیر است؛ نیمهی دیگر، سنجش و ارزیابی است. در این درس، سه بستر ارزیابی را با استفاده از اجزای سازنده (primitives) پیادهسازی میکنیم: بازیابی تصویر-کپشن که با معیارهای R@1، R@5 و R@10 گزارش میشود؛ پاسخ به پرسشهای تصویری (VQA) که با دقت تطابق دقیق (exact match) ارزیابی میشود؛ و کپشننویسی تصویر که با معیار BLEU-4 سنجیده میشود. هر معیار، تابعی روی خروجیهای مدل و یک مجموعهی ارزیابی ساختگی است که اجرای آن تنها چند ثانیه طول میکشد.
اهداف یادگیری
- محاسبهی بازخوانی در Recall@K) K) بر اساس ماتریس شباهت میان امبدینگهای تصویر و کپشن.
- محاسبهی دقت تطابق دقیق VQA برای مدلی که جفتهای (تصویر، پرسش) را به واژگانی ثابت از پاسخها نگاشت میکند.
- محاسبهی BLEU-4 بر اساس توالی توکنهای تولیدشده و مرجع، بدون نیاز به هیچ کتابخانهی خارجی.
- اجرای هر سه ارزیابی روی یک مجموعهی ساختگی که بر پایهی مدل آموزشدیدهی درس 62 ساخته شده است.
صورت مسئله
همیشه این وسوسه وجود دارد که با مسطح شدن منحنی تابع زیان (loss) در طول آموزش، کار مدل چندوجهی را تمامشده بدانیم. اما تابع زیان آموزش فقط میزان برازش مدل روی توزیع دادههای آموزشی را میسنجد؛ این معیار نشان نمیدهد که آیا مدل میتواند جفتها را در یک دستهی دیدهنشده رتبهبندی کند، به یک پرسش پاسخ دهد یا کپشنی بنویسد که برای انسان پذیرفتنی باشد. در اینجا سه بستر استاندارد ارزیابی مطرح میشود:
- بازیابی (R@1، R@5، R@10). امبدینگ مشترک را برای یک کپشن پرسار (query) میسازیم؛ همهی تصاویر موجود در مجموعهی ارزیابی را بر اساس شباهت کسینوسی (cosine similarity) رتبهبندی میکنیم؛ و بررسی میکنیم که آیا تصویر متناظر در میان 1، 5 یا 10 نتیجهی برتر قرار دارد یا خیر. حالت متقارن آن (تصویر به متن) نیز دقیقاً به همین شیوه اجرا میشود.
- پاسخ به پرسشهای تصویری (تطابق دقیق). با دریافت (تصویر، پرسش)، مدل یک توکن پاسخ تولید میکند. تطابق دقیق برای هر نمونه یک مقدار تکبیتی است: آیا پاسخ پیشبینیشده با پاسخ مرجع برابر بود؟ سپس میانگین این مقادیر روی کل مجموعهی ارزیابی محاسبه میشود.
- کپشننویسی (BLEU-4). یک کپشن تولید کنید. میانگین هندسی دقت n-gramها از 1-gram تا 4-gram را در مقایسه با کپشنهای مرجع، به همراه یک جریمهی کوتاهی طول (brevity penalty) محاسبه کنید. حالت چندمرجعی (یک تصویر و چند کپشن مرجع) فرم استاندارد این ارزیابی است.
هر یک از این معیارها در قالب تابعی سبک پیادهسازی میشوند. در این درس همهی آنها را با کد مینویسیم تا منطق ریاضیشان ملموس شود و کنترل کامل ساختار ارزیابی دست خودتان بماند. مجموعههای بنچمارک واقعی (مانند MS-COCO، VQA v2، GQA و OK-VQA) نیز دقیقاً به همین ساختار توابع متصل میشوند.
مفاهیم پایه
بازخوانی در K بر اساس ماتریس شباهت
ماتریس شباهت کسینوسی با ابعاد (N, N) را بین امبدینگهای تصویر و کپشن بسازید. برای هر سطر، ستونها را بر اساس شباهت به صورت نزولی مرتب کنید. معیار Recall@K کسری از سطرها است که در آنها، نمایهی ستون قطری در میان K جایگاه برتر قرار میگیرد. مقدار متقارن Recall@K (کپشن به تصویر) روی ماتریس ترانهاده محاسبه میشود. هر دو عدد گزارش میشوند. در یک ارزیابی با N=100، مقدار R@1 = 0.6 یعنی 60 مورد از 100 کپشن توانستهاند تصویر درست خود را به عنوان اولین گزینهی منطبق بازیابی کنند.
تطابق دقیق VQA
برای هر سهگانهی (تصویر، پرسش، پاسخ)، تصویر را کُدگذاری کرده، پرسش را امبد میکنیم، آنها را از طریق دیکودر ادغام کرده و توکن بعدی را میخوانیم. شناسهی توکن پیشبینیشده با شناسهی مرجع مقایسه میشود؛ در صورت برابری، پاسخ درست در نظر گرفته میشود. سپس میانگین آن را روی مجموعهی ارزیابی به دست میآوریم. مجموعهدادههای واقعی VQA برای هر پرسش چند پاسخ انسانی دارند و از فرمول دقت ملایم (soft-accuracy) استفاده میکنند (اگر حداقل 3 نفر از 10 ارزیاب همنظر باشند امتیاز 1.0 لحاظ شده و برای مقادیر کمتر مقیاسبندی میشود)؛ در این درس برای شفافیت و سادگی از تطابق دقیق تکپاسخی استفاده میکنیم.
BLEU-4
که در آن p_n دقت تعدیلشدهی n-gram است (تعداد برشخوردهی n-gramهای تولیدشده که در هر یک از مراجع تکرار شدهاند، تقسیم بر کل n-gramهای تولیدشده) و BP نیز جریمهی کوتاهی طول است:
در نمونههای کوچک که ممکن است مقدار برخی از p_nها صفر شود، هموارسازی (smoothing) ضروری است. پیادهسازی ما از «روش 1» چن و چری (افزودن عدد 1 به صورت و مخرج در صورت وجود هرگونه شمارش صفر) استفاده میکند که مطمئنترین گزینهی پیشفرض برای شرایطی با شمارشهای کم است.
مجموعهی ارزیابی ساختگی
یک مجموعهی ارزیابی 50 نمونهای را در حافظه بر اساس همان الگوی دادههای ساختگی درس 62، اما با یک دانهی تصادفی (seed) نگهداشتهشده (held-out) میسازیم. این مجموعه از سه لیست تشکیل شده است:
pairs: شامل 50 جفت (image, caption_ids) برای ارزیابی بازیابی.vqa: شامل 50 سهگانهی (image, question_ids, answer_id).caps: شامل 50 ورودی (image, [reference_caption_ids, ...]) با حداکثر 3 مرجع برای هر تصویر.
این مجموعه به صورت قطعی از دانه تولید شده و کاملاً جدا از دادههای آموزشی است؛ بنابراین معیارها روی دادههایی محاسبه میشوند که مدل هرگز ندیده است. ذخیرهسازی این مجموعه در قالب یک فایل JSON به عنوان تمرین به شما واگذار شده است (بخش زیر را ببینید).
| معیار | بازه | خط مبنای تصادفی (N=50) |
|---|---|---|
| R@1 | 0 تا 1 | 0.02 (1 / N) |
| R@5 | 0 تا 1 | 0.10 |
| R@10 | 0 تا 1 | 0.20 |
| VQA EM | 0 تا 1 | 1 / vocab |
| BLEU-4 | 0 تا 1 | کوچک اما غیرصفر |
برای 50 گام آموزش روی دادههای ساختگی، انتظار نداریم معیارها مقادیر بالایی ثبت کنند؛ بلکه فقط باید بالاتر از خط مبنای تصادفی قرار بگیرند، و این همان چیزی است که در این دمو بررسی میکنیم.
پیادهسازی از صفر
فایل code/main.py این بخشها را پیادهسازی میکند:
- تابع
recall_at_k(sim_matrix, k)که برای هر دو جهت، یک عدد اعشاری در بازهی[0, 1]برمیگرداند. - تابع
vqa_exact_match(predictions, references)که میانگین برابری مقادیرintرا برمیگرداند. - تابع
bleu4(generated, references, smoothing=True)با پشتیبانی از ارزیابی چندمرجعی. - تابع
build_eval_suite(seed, n_samples, vocab_size, max_len)که سه لیست ارزیابی قطعی برمیگرداند. - تابع
evaluate(model, suite)که هر سه معیار را اجرا کرده و یکdictاز اعداد برمیگرداند. - دمویی که یک مدل چندوجهی تازهمقداردهیشده از درس 62 را بارگذاری و ارزیابی میکند، سپس آن را به مدت 50 گام آموزش داده، دوباره ارزیابی میکند و معیارهای قبل و بعد را در خروجی نمایش میدهد.
اجرای برنامه:
python3 code/main.py
خروجی: جدول معیارهای قبل و بعد نشان میدهد که بازیابی از حالتی نزدیک به تصادفی به سمت سیگنالهای یادگرفتهشدهی مدل پیشرفت میکند، VQA بالاتر از خط مبنای تصادفی میرود و BLEU-4 بهبود مییابد (ساختار دادههای ساختگی برای بهبود دقت 4-gram کافی است).
استفاده در عمل
هر یک از این معیارها مستقیماً به یک بنچمارک در محیط عملیاتی (پروداکشن) نگاشت میشوند:
- بازیابی. بنچمارکهای MS-COCO 5K val و Flickr30K در واقع مسائل R@K روی همان ماتریس شباهت هستند. ارزیابی زیروشات روی ImageNet نیز از همین ماتریس استفاده میکند، با این تفاوت که به ازای هر کلاس یک امبدینگ پرامپت دارد و دقت دستهبندی top-1 را گزارش میکند که همان R@1 روی پرامپتهای کلاسها است. اگر ارزیابی ساختگی را با فایلهای واقعی جایگزین کنید، ساختار تابع هیچ تغییری نخواهد کرد.
- VQA. بنچمارکهای VQA v2، GQA و OK-VQA از همین الگوی تطابق دقیق استفاده میکنند (البته در VQA v2 به جای EM تکپاسخی، از دقت ملایم استفاده میشود).
- BLEU-4. کپشننویسی در MS-COCO، NoCaps و Flickr30K همگی از BLEU-4 در کنار CIDEr و METEOR استفاده میکنند. برای اضافه کردن CIDEr تنها کافی است یک تابع دیگر بنویسید.
برای کار با بنچمارکهای واقعی، فقط تابع build_eval_suite را با یک لودر واقعی جایگزین کنید و بدنهی توابع را دستنخورده نگه دارید؛ چرا که منطق ریاضی آنها وابسته به بنچمارک خاصی نیست.
تستها
فایل code/test_main.py این موارد را پوشش میدهد:
- تابع recall@k برای یک ماتریس همانی کامل مقدار 1.0 و برای یک ماتریس معکوس به ازای k < N مقدار 0.0 برمیگرداند
- تابع recall@k حد بالای
k <= Nرا رعایت میکند - تابع bleu4 در صورتی که متن تولیدشده دقیقاً با یکی از مراجع برابر باشد مقدار 1.0 برمیگرداند
- تابع bleu4 برای واژگان کاملاً مجزا مقدار 0.0 برمیگرداند
- تطابق دقیق VQA برابر با نسبت جفتهای یکسان است
- تابع build_eval_suite تعداد مورد انتظار جفتها، موارد VQA و ورودیهای کپشن را برمیگرداند
اجرای تستها:
python3 -m unittest code/test_main.py
تمرینها
-
معیار CIDEr را به معیارهای کپشننویسی اضافه کنید. این معیار از وزندهی TF-IDF روی n-gramها استفاده میکند که باعث امتیازدهی به توکنهای حامل بار معنایی میشود.
-
ارزیابی VQA با دقت ملایم را پیادهسازی کنید: به ازای هر پرسش چند پاسخ انسانی در نظر بگیرید؛ در صورت وجود تطابق، دقت برابر با
min(human_count / 3, 1)است. این کار رفتار VQA v2 را بازسازی میکند. -
نسخهای مقاوم در برابر NaN از
bleu4بسازید تا توالیهای تولیدشدهی خالی را بدون کرش کردن مدیریت کند. -
در کنار R@K، میانگین رتبهی متقابل (MRR) را نیز محاسبه کنید. معیار MRR به جایگاه قرارگیری گزینهی درست فراتر از K نتیجهی برتر حساس است؛ در حالی که R@K تنها قرار گرفتن یا نگرفتن آن در میان K گزینهی برتر را میسنجد.
-
ارزیابی را در شش چکپوینت در طول آموزش مدل (گامهای 0، 10، 20، 30، 40 و 50) اجرا کرده و منحنی یادگیری را رسم کنید. بررسی کنید که آیا مسیر کامل اجرای معیارها با مسیر تابع زیان همخوانی دارد یا خیر.
اصطلاحات کلیدی
| اصطلاح | تعریف |
|---|---|
| R@K | کسری از پرسارها که در آنها گزینهی منطبق درست در میان K نتیجهی برتر قرار میگیرد |
| تطابق دقیق (Exact match) | سادهترین روش امتیازدهی در VQA: برابری کامل پاسخ پیشبینیشده با مرجع |
| BLEU-4 | میانگین هندسی دقتهای 1-gram تا 4-gram همراه با جریمهی کوتاهی طول |
| چندمرجعی (Multi-reference) | معیاری در کپشننویسی که به ازای هر تصویر، چند کپشن مرجع را میپذیرد |
| دادههای دیدهنشده (Held-out) | مجموعهی ارزیابی که با دانهای کاملاً مجزا از دادههای آموزشی نمونهبرداری شده است |
برای مطالعهی بیشتر
- مقالهی VQA v2 برای آشنایی با فرمول دقت ملایم و آمارهای این مجموعهداده.
- مقالهی CIDEr برای کپشننویسی با n-gramهای وزندهیشده بر اساس TF-IDF.
- مقالهی اصلی BLEU (Papineni و همکاران، 2002) برای بررسی انواع روشهای هموارسازی.
- اسکریپتهای ارزیابی کپشننویسی MS-COCO برای مشاهدهی پیادهسازی مرجع و استاندارد.
