فاز 19 · درس 63

ارزیابی مدل‌های چندوجهی: پیاده‌سازی R@K، VQA و BLEU-4

نوع
ساختنی
زمان
حدود 90 دقیقه
زبان‌ها
Python
یک ترازو با سه کفه متوازن بر روی یک میز شطرنجی که سه نماد کارت کپشن، ماتریس رتبه‌بندی و علامت پرسش را وزن می‌کند.
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مفاهیم پایه
  4. بازخوانی در K بر اساس ماتریس شباهت
  5. تطابق دقیق VQA
  6. BLEU-4
  7. مجموعه‌ی ارزیابی ساختگی
  8. پیاده‌سازی از صفر
  9. استفاده در عمل
  10. تست‌ها
  11. تمرین‌ها
  12. اصطلاحات کلیدی
  13. برای مطالعه‌ی بیشتر

در توسعه‌ی مدل‌های چندوجهی، پایین آمدن تابع زیان (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) نیز دقیقاً به همین ساختار توابع متصل می‌شوند.

مفاهیم پایه

مدل چندوجهی آموزش‌دیدهامبدینگ‌های مشترک روی مجموعه ارزیابیماتریس شباهتR@1R@5R@10پیش‌بینی توکن پاسخ برای هر سوالدقت تطابق دقیقکپشن‌های تولیدشدهBLEU-4 در برابر مراجع

بازخوانی در 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

BLEU-4=BP⋅exp⁡(mean(log⁡p1,log⁡p2,log⁡p3,log⁡p4))\text{BLEU-4} = \text{BP} \cdot \exp\big(\text{mean}(\log p_1, \log p_2, \log p_3, \log p_4)\big)

که در آن p_n دقت تعدیل‌شده‌ی n-gram است (تعداد برش‌خورده‌ی n-gramهای تولیدشده که در هر یک از مراجع تکرار شده‌اند، تقسیم بر کل n-gramهای تولیدشده) و BP نیز جریمه‌ی کوتاهی طول است:

BP={1if generated length>reference lengthexp⁡(1−r/g)otherwise, where r is reference length and g is generated\text{BP} = \begin{cases} 1 & \text{if generated length} > \text{reference length} \\ \exp(1 - r/g) & \text{otherwise, where } r \text{ is reference length and } g \text{ is generated} \end{cases}

در نمونه‌های کوچک که ممکن است مقدار برخی از 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 گام آموزش روی داده‌های ساختگی، انتظار نداریم معیارها مقادیر بالایی ثبت کنند؛ بلکه فقط باید بالاتر از خط مبنای تصادفی قرار بگیرند، و این همان چیزی است که در این دمو بررسی می‌کنیم.

ارزیابی چندوجهیBLEU-4 ،تطابق دقیق ،R@K
MULTIMODAL EVALThree surfaces measure what training loss cannot. Retrieval ranks every image by cosine against a query caption and asks whether the match lands in the top 1, 5, or 10; here it climbs to rank 2, an R@1 miss but an R@5 hit. VQA scores one bit per sample on exact answer match, and captioning takes BLEU-4 over generated tokens with a brevity penalty.بازیابی: رتبه‌بندی تمام تصاویر123456پنجره‌ی R@5R@1: فقط سطر 1تصویر منطبقشکست R@1، موفقیت R@5دو سطح ارزیابی دیگرتطابق دقیق VQApred == ref: 1 bit per sampleBLEU-4 برای شرح‌نویسیدقت n-gramهای 1 تا 4،میانگین هندسی + جریمه‌ی کوتاهی طولتثبیت تابع زیان آموزش جزء این سه سطح نیست
سه سطح ارزیابی چیزی را می‌سنجند که تابع زیان (loss) آموزش از سنجش آن ناتوان است. بازیابی، تمام تصاویر را بر اساس شباهت کسینوسی با شرح کوئری رتبه‌بندی می‌کند و بررسی می‌کند که آیا تطابق در میان 1، 5 یا 10 مورد برتر قرار دارد یا خیر؛ در اینجا به رتبه 2 می‌رسد، یعنی عدم تطابق در R@1 اما موفقیت در R@5. وظیفه VQA به ازای هر نمونه بر اساس تطابق دقیق پاسخ، یک بیت امتیاز می‌دهد و وظیفه شرح‌نویسی، امتیاز BLEU-4 را روی توکن‌های تولیدشده به همراه جریمه‌ی کوتاهی طول محاسبه می‌کند.

پیاده‌سازی از صفر

فایل 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

تمرین‌ها

  1. معیار CIDEr را به معیارهای کپشن‌نویسی اضافه کنید. این معیار از وزن‌دهی TF-IDF روی n-gramها استفاده می‌کند که باعث امتیازدهی به توکن‌های حامل بار معنایی می‌شود.

  2. ارزیابی VQA با دقت ملایم را پیاده‌سازی کنید: به ازای هر پرسش چند پاسخ انسانی در نظر بگیرید؛ در صورت وجود تطابق، دقت برابر با min(human_count / 3, 1) است. این کار رفتار VQA v2 را بازسازی می‌کند.

  3. نسخه‌ای مقاوم در برابر NaN از bleu4 بسازید تا توالی‌های تولیدشده‌ی خالی را بدون کرش کردن مدیریت کند.

  4. در کنار R@K، میانگین رتبه‌ی متقابل (MRR) را نیز محاسبه کنید. معیار MRR به جایگاه قرارگیری گزینه‌ی درست فراتر از K نتیجه‌ی برتر حساس است؛ در حالی که R@K تنها قرار گرفتن یا نگرفتن آن در میان K گزینه‌ی برتر را می‌سنجد.

  5. ارزیابی را در شش چک‌پوینت در طول آموزش مدل (گام‌های 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 برای مشاهده‌ی پیاده‌سازی مرجع و استاندارد.

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسچرا تابع زیان آموزش به‌تنهایی معیار ناکافی برای سنجش کیفیت یک مدل چندوجهی است؟
  2. پیش از درسمعیار R@5 در یک ارزیابی بازیابی با 100 نمونه چه چیزی را اندازه می‌گیرد؟
  3. حین درسچرا BLEU-4 به جای میانگین حسابی، از میانگین هندسیِ دقتِ 1 تا 4-گرام استفاده می‌کند؟
  4. حین درسجریمه‌ی کوتاهی طول در BLEU-4 از چه چیزی جلوگیری می‌کند؟
  5. حین درسچرا BLEU چندمرجعی معمولاً روی یک خروجی یکسان امتیاز بالاتری نسبت به BLEU تک‌مرجعی می‌گیرد؟
  6. پس از درسکدام سطح ارزیابی از هیچ امبدینگ مدلی استفاده نکرده و فقط بر اساس شناسه‌ها تطابق می‌دهد؟

سؤالات متداول

معیار Recall@K در بازیابی تصویر و متن چگونه کار می‌کند؟

با محاسبه‌ی ماتریس شباهت کسینوسی بین امبدینگ‌های تصویر و متن، بررسی می‌شود که آیا گزینه‌ی درست در میان K نتیجه‌ی با بیشترین شباهت قرار دارد یا خیر.

چرا در ارزیابی VQA از تطابق دقیق استفاده می‌شود؟

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

نقش جریمه‌ی کوتاهی طول (Brevity Penalty) در BLEU-4 چیست؟

این جریمه مانع از آن می‌شود که مدل با تولید خروجی‌های بسیار کوتاه که تصادفاً با کلمات مرجع هم‌پوشانی دارند، امتیاز کاذب بالایی کسب کند.

ما رو توی گوگل بیشتر ببین

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