مدلهای زبانی چندوجهی: وقتی هوش مصنوعی میبیند
مدلهای زبانی چندوجهی (Multimodal LLMs)
یکی از گسترشهای طبیعی و مفید چتباتها، افزودن توانایی پردازش انواع مختلف داده است. دستیاری که بتواند به ورودی صوتی پاسخ دهد و تصاویر را تحلیل کند، به مراتب کاربردیتر از دستیاری است که تنها با متن کار میکند.
چرا Transformer برای چندوجهی شدن مناسب است؟
گسترش دادن یک مدل Transformer به انواع دادههای مختلف، از نظر مفهومی سادهتر از چیزی است که فکر میکنید. Transformer ذاتاً یک مدل مخصوص متن نیست؛ بلکه یک مدل بسیار قدرتمند برای یادگیری الگوها در دادههای دنبالهای است. اگر بتوانیم انواع دیگر داده — مانند تصویر یا صدا — را به قالب دنباله تبدیل کنیم، میتوانیم آنها را وارد Transformer کرده و با آنها آموزش بدهیم.
مثال عملی: مدل Gemma و پردازش تصویر
مدل Gemma دقیقاً همین کار را میکند. این مدل با یک رمزگذار تصویر جداگانه با ۴۲۰ میلیون پارامتر همراه است که هر تصویر ورودی را به ۲۵۶ تکه (patch) تقسیم میکند و هر تکه را به یک بردار با همان ابعاد فضای پنهان Gemma تبدیل میکند.
بنابراین هر تصویر به یک دنبالهی (256, 2560) تبدیل میشود. چون ۲۵۶۰ همان ابعاد پنهان مدل Gemma است، این نمایش تصویر میتواند مستقیماً پس از لایهی embedding توکنها به دنبالهی متنی اضافه شود.
میتوان آن را اینگونه تصور کرد: ۲۵۶ توکن خاص که نمایندهی تصویر هستند، جایی که هر بردار (1, 2560) را «توکن نرم» (soft token) مینامند. برخلاف توکنهای معمولی («توکن سخت») که هر شناسه فقط میتواند یکی از بردارهای ثابت ماتریس embedding را بگیرد، این توکنهای نرم تصویری میتوانند هر مقدار برداری که رمزگذار بینایی تولید کند را بپذیرند.
بارگذاری تصویر و آزمایش مدل
برای دیدن این فرآیند در عمل، یک تصویر را بارگذاری میکنیم:
import matplotlib.pyplot as plt
image_url = (
"https://github.com/mattdangerw/keras-nlp-scripts/"
"blob/main/learned-python.png?raw=true"
)
image_path = keras.utils.get_file(origin=image_url)
image = np.array(keras.utils.load_img(image_path))
plt.axis("off")
plt.imshow(image)
plt.show()
حالا میتوانیم از Gemma دربارهی این تصویر سوال بپرسیم:
# محدود کردن حداکثر ورودی مدل
gemma_lm.preprocessor.max_images_per_prompt = 1
gemma_lm.preprocessor.sequence_length = 512
prompt = "What is going on in this image? Be concise!<start_of_image>"
gemma_lm.generate({
"prompts": PROMPT_TEMPLATE.format(prompt),
"images": [image],
})
خروجی مدل:
<start_of_turn>model A snake wearing glasses is sitting in a leather armchair, surrounded by a large bookshelf, and reading a book. It's a whimsical, slightly surreal image. <end_of_turn>
یا با سوال دقیقتر:
prompt = "What is the snake wearing?<start_of_image>"
gemma_lm.generate({
"prompts": PROMPT_TEMPLATE.format(prompt),
"images": [image],
})
<start_of_turn>model The snake is wearing a pair of glasses! They are red-framed and perched on its head. <end_of_turn>
هر prompt ورودی حاوی توکن ویژهی <start_of_image> است. این توکن در دنبالهی ورودی به ۲۵۶ مقدار placeholder تبدیل میشود که در نهایت با توکنهای نرم نمایانگر تصویر جایگزین میشوند.
چگونگی آموزش مدل چندوجهی
آموزش مدلهای چندوجهی شباهت زیادی به پیشآموزش و fine-tuning معمول مدلهای زبانی دارد. معمولاً مراحل زیر طی میشود:
- پیشآموزش جداگانهی رمزگذار تصویر: ابتدا رمزگذار تصویر به تنهایی آموزش میبیند (مشابه آنچه در فصل ۸ این کتاب انجام دادیم).
- پیشآموزش ترکیبی: سپس همان وظیفهی پایهای «حدس زدن کلمهی بعدی» ادامه مییابد، اما این بار محتوای ترکیبی از تصویر و متن در یک دنبالهی واحد به مدل داده میشود.
- صفر کردن loss در موقعیت توکنهای تصویر: مدل آموزش نمیبیند که توکنهای نرم تصویر را تولید کند؛ به جای آن، مقدار loss در این موقعیتها صفر میشود.
جمعبندی
شاید در نگاه اول جادویی به نظر برسد که بتوان به سادگی دادهی تصویری را به یک مدل زبانی اضافه کرد. اما وقتی قدرت مدل دنبالهای که با آن کار میکنیم را در نظر بگیریم، این نتیجه کاملاً قابل انتظار است: یک Transformer گرفتیم، ورودی تصویری را به قالب دنباله تبدیل کردیم، و آموزش بیشتری انجام دادیم.
مدل میتواند توانایی اصلی خود در پردازش و تولید متن را حفظ کند و در عین حال یاد بگیرد که تصاویر را نیز در فضای پنهان Transformer نمایش دهد. این دقیقاً همان قدرت معماری دنبالهای است که Transformer را به یک ابزار جهانی و فوقالعاده انعطافپذیر تبدیل کرده است.
دیدگاهتان را بنویسید