🧐 ورودی GenAI چجوری پردازش میشه؟ توی وکتور دیتابیس چی قرار میگیره؟
🧐 ورودی GenAI چجوری پردازش میشه؟ توی وکتور دیتابیس چی قرار میگیره؟
هر ورودی ای که ما به مدل زبانی یا هوش مصنوعی مولد بدیم، از دل یک embedded model عبور میکنه، با یک semantic search پردازش میشه. پرداختن به محاسبات ریاضیاش از حوصله این مطلب فراتره و توی لایهی کاربری هم کاربردی نداره ولی مباحث جالبی هستن که اگر کسی دوست داشت بگه تا مقاله یا کتابهای خوبی که میتونه کمک کنه معرفی کنم. برای همین توی این پست، به جای رفتن سراغ «مار» بیایم بریم سراغ 🐍
موافقین؟
فرض کنین به یه مدل زبانی، یک عبارت خیلی ساده رو بدیم؛ چی میشه؟ اول باید تبدیل به یه سری عدد اعشاری بشه بعد دیگه هر چی هست تا قبل از مرحله خروجی، عمدتا جبر خطیه! علت اینکه میگیم این مدلها واقعا هوشمند نیستن، اینه که فقط یَکعالمه مشابهت رو بررسی میکنن و شبیهها رو کنار هم میچینن. اعجازشون اینه که این یَکعالمه یعنی مثلا توی چتجیپیتی ۷۰۰ میلیارد! یعنی نمیفهمه سیب احتمال اینکه سرخ یا زرد با سبز باشه کمتر از اینه که بنفش باشه، و اینکه بنفش باشه کمتر از اینه که پشمالو باشه!
یه کد کوچولو نوشتم برای توضیح این داستان:
۲ تا کلمه + یه کاما + علامت تعجب میشه ۱۰۲۴ تا عدد:
Embedding for 'Hello, world!':
Embedding Length: '1024'!
0.017290225, 0.04488248, 0.00056118704, -0.009004725, -0.045384012, 0.008568012, 0.07241785, 0.04243991, 0.047746666, 0.0021948903, 0.007101463,...
از خوبیهای semantic kernel به جز اینکه نسخههای سیشارپ، پایتون و جاوا داره اینه که خیلی کنترل خوبی روی فرایند داخلی بهمون میده و فقط یه rest client برای صدا زدن سرویسها نیست. به سادگی میشه امبدینگمدل رو دید... این یه مقدمه ساده بود از اینکه درک کنیم چرا باید از وکتور دیتابیس استفاده کرد. توی وکتور دیتابیس ما کلی عدد داریم، این اعداد از کجا میان؟ بله، از همین امبدینگمدل. پس دلیل اینکه ما برای RAG نیاز به وکتوردیتابیس به جای دیتابیس کلاسیک (مثل RDBMS) داریم.
این کد خیلی کوچیک که نوشتم رو نگاه کنید یا اگر دوست داشتید اجرا کنید. از ollama + یک مدل کوچیک با ۳۳۵ میلیون پارامتر + semantic kernel استفاده کردم، برای دیدن اینکه با یه مدل کوچیک، عبارت Hello World تبدیل به چی میشه!
💬 سوال؟ نظر؟