سلام دوست عزیز😃👋

لینک‌های مفید برای شرکت در مسابقه:

در طول مسابقه، می‌توانید سؤالات خود را از قسمت «سؤال بپرسید» مطرح کنید.

در زمان‌های زیر، پاسخگوی سؤالات شما هستیم:

  • ۹:۰۰ تا ۱۰:۳۰
  • ۱۲:۳۰ تا ۱۴:۰۰

فراموش نکنید فایل کد سؤالات «آزمایش احسان»، «فارسی‌بازی» و «جلال‌برت!» رو در بخش «بارگذاری کدها» (سؤال آخر) بارگذاری کنید.

موفق باشید 😉✌

جلال‌برت!


جلال بعد از مشاهده نتایج آزمایش‌هایی که احسان در سوال اول روی مدل برت (HooshvareLab/bert-fa-zwnj-base) انجام داده بود این ایده به ذهنش رسید که برخی از بلوک‌های مدل را حذف کند تا مدل کوچکتر و سریع‌تر شود، اما طبیعی است که با این کار مدل به درستی کار نخواهد کرد و نیاز به تنظیم‌دقیق (fine-tuning) مجدد دارد. برای این‌کار جلال فقط ایده‌ی پردازی کرده است و از شما می‌خواهد پیاده‌سازی ایده‌هایش را انجام دهید.

جلال از شما می‌خواهد، از مدل پایه فقط لایه‌های شماره صفر، ۴، ۸ و ۱۱ را نگه‌دارید و بقیه را حذف کنید. جالب است که در نهایت جلال اسم این مدل را «جلال‌برت» گذاشت!

ابتدا به عنوان مدل پایه (baseline) تصمیم به ارزیابی «جلال‌برت» گرفت و برای این کار به ازاء تمام توکن‌هایی که در Tokenizer مدل وجود داشت خروجی لایه آخر را با خروجی لایه آخر مدل هوشواره مقایسه کرد و میانگین تابع هزینه را بر اساس تابع Kullback-Leibler Divergence و MSE به طور جداگانه محاسبه کرد.

سپس تصمیم به تنظیم‌دقیق مدل گرفت.این تنظیم دقیق به صورت لایه به لایه (layer-wise) انجام می‌شود. توجه کنید که تناظر زیر بین لایه های مدل هوشواره و «جلال‌برت» وجود دارد:

شماره لایه در برت هوشواره شماره لایه در «جلال‌برت»
لایه صفر لایه صفر
لایه چهارم لایه اول
لایه هشتم لایه دوم
لایه یازدهم لایه سوم

برای سادگی و کاهش هزینه در این مرحله، ورودی مدل برای تنظیم دقیق، همان توکن‌های موجود در Tokenizer مدل هستند.

برای تنظیم‌دقیق لایه iiام از «جلال‌برت» که i=1,2,3,4i=1,2,3,4 است، ابتدا وزن لایه‌های قبل را ثابت نگه می‌داریم (freeze) و سپس تابع هزینه (loss) را بین خروجی این لایه و لایه متناظرش در مدل برت هوشواره محاسبه و با فرایند انتشار رو به عقب (backpropagation) وزن‌های آن لایه را به‌روزرسانی می‌کنیم. این کار را از i=1i=1 شروع می‌کنیم و تا i=4i=4 ادامه می‌دهیم. مجدداً توجه شود که در حین تنظیم‌دقیق یک لایه باید وزن تمام لایه‌های قبل از آن ثابت نگه‌ داشته شوند.

تمام این مراحل را یکبار با تابع هزینه میانگین مربعات خطا (MSE) و بار دیگر با تابع هزینه Kullback-leibler Divergence انجام می‌دهیم.

برای تنظیم دقیق با استفاده از تابع هزینه Kullback-leibler Divergence در صورت استفاده از تابع هزینه کتابخانه pytorch برچسب‌ها (labels) را از تابع softmax و پیش بینی‌ها (predictions) را از تابع log_softmax عبور دهید. در کتابخانه‌های دیگر طبق مستندات کتابخانه مشابه این کار را انجام دهید.

برای تنظیم دقیق هر لایه از تنظیمات زیر استفاده کنید:

Num_epoch = 10
Optimizer = Adam
Learning_rate = 2e-5
Batch_size = 32
Python

خروجی نهایی🔗

بعد از انجام تنظیم‌دقیق، یک پوشه به نام model بسازید و دو پوشه kld و mse داخل آن ایجاد کرده و هر کدام از مدل‌ها را در پوشه مربوط به خود قرار دهید و بعد از فشرده کردن پوشه آن را با نام model.zip در گوگل درایو خود آپلود کنید (جهت سهولت ارسال)، سپس لینک اشتراک فایل را (فراموش نکنید که دسترسی اشتراک لینک به صورت view داشته باشد) در یک فایل solution.txt قرار دهید و این فایل را برای داوری ارسال کنید. یعنی تنها ارسال شما یک فایل solution.txt خواهد بود که لینک فایل model.zip آپلود شده در گوگل درایو را در خود دارد.

حجم هر مدل ارسالی حداکثر ۲۷۰ مگابایت باید باشد و با قطعه کد زیر قابل بارگذاری و استفاده باشد:

from transformers import AutoModel
model = AutoModel.from_pretrained(“path/to/your/model/folder”)
output = model(input_ids=input_ids, attention_mask=attention_mask, token_type_ids= token_type_ids)
Python

ضمناً خروجی لایه صفر و ۱ و ۲ و ۳ مدل برت ۴ لایه شما به ترتیب به صورت زیر برای محاسبه تابع هزینه باید قابل دسترسی باشد:

output_of_layer_i = output.hidden_states[i+1]
Python
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.