محمود محمودی نیک
محمود محمودی نیک
خواندن ۸ دقیقه·۲ ماه پیش

Retrieval-Augmented Generation یا به اختصار RAG چیست؟


به طور خلاصه، فرایند بهینه سازی خروجی مدل های زبانی بزرگ یا LLM برای تولید جواب های بهتر است. یعنی قبل از تولید جواب به یک منبع داده های معتبر، بیرون از منابع آموزش داخلی خودش مراجعه کند و آن داده ها را برای تولید جواب بکار بگیرد.

مدل های بزرگ زبانی (LLM) با حجم زیادی داده (خیلی خیلی زیاد) آموزش دیده است، این داده ها شامل حجم بزرگی از اطلاعات مختلف حتی به زبان های گوناگون از سراسر وب و منابع مختلف تهیه شده اند از قبیل وی کی پدیا، گیت هاب، stackoverflow,stackexchange و منابع بسیار دیگر و همچنین میلیارد ها پارامتر(در نوشته های بعدی در این مورد صحبت خواهیم کرد) را برای تولید خروجی مختلف از جمله پاسخگویی به سوالات، ترجمه زبان، تکمیل جملات، تولید کد و اسکریپ و... بکار می گیرد. RAG ظرفیت های LLM در یک حوزه مشخص، یک دامنه، یا دانش داخلی یک سازمان را گسترش و غنی می کند. این کار بدون نیاز به آموزش دوباره مدل صورت می گیرد و رویکردی بسیار مقرون به صرفه برای ارتقای خروجی به شکل دقیق تر، مرتبط، کاربردی و مفید است. یعنی یک سازمان، شرکت، شخص، کسب و کار یا هر جایی که اطلاعاتی در یک حوزه دارد، می تواند دیتای خود را به یک ترتیبی آماده کرده و به عنوان منبع خارجی به LLM معرفی و باعث شود که LLM یا همان مدل زبانی بزرگ این داده ها را برای تولید خروجی بهتر به کار بگیرد. به کل این فرایند RAG می گویند. روش دیگری هم هست با عنوان Fine-tuning که در نوشته های دیگر در موردش خواهم نوشت.

چرا RAG مهم است؟

مدل های زبانی بزرگ کلید فناوری قدرتمند چت بات های هوشمند هستند و هدف این هست که بات های هوشمند چت بسازیم تا بتوانند به سوالات کاربر در موضوعات مختلف پاسخ بدهند. متاسفانه بدلیل ماهیت LLM ها، پاسخ هایی که تولید میکنند غیرقابل پیش بینی هستند، علاوه بر این داده های آموزشی آنها استاتیک و ثابت هستند،بخشی از دانشی که دارند تاریخ اعتباری دارد. از جمله چالش هایی که برای LLM ها مطرح هستند شامل:

  • ارائه اطلاعات غلط وقتی در مورد موضوعی پاسخی ندارند.
  • ارائه پاسخ های منسوخ شده یا پاسخ کلی و عمومی در حالی که کاربر انتظار جواب دقیق، خاص و حاوی اطلاعات تازه دارد.
  • ارائه پاسخ از منابع غیر معتبر
  • ایجاد پاسخ های غیر دقیق به دلیل غلط های موجود در اصطلاحات ،مشکلات واژه شناسی و اصطلاحات غلطی که که در منابع آموزشی مختلف وجود داشته اند و این غلط ها به دانش مدل زبانی هم منتقل شده.

یکی از رویکردهای حل برخی از این چالش ها است. LLM را برای بازیابی اطلاعات مرتبط از منابع معتبر و از پیش تعیین شده دانش هدایت می کند.

مزایای RAG چیست؟

این فناوری چندین مزیت با ارزش برای هوش مصنوعی مولد به ارمغان می آورد. از جمله اینکه :

  • پیاده سازی مقرون به صرفه دارند
  • اطلاعات بروز می شوند (حتی اگر دانش جاری LLM پاسخ گوی نیاز باشد به هر حال در دنیای امروز اطلاعات هر لحظه بروز می شوند)
  • افزایش اعتماد کاربران (بدلیل پاسخ های کامل تر و دقیق تر)
  • افزایش دقت در جواب ها و کنترل پاسخ ها( توسعه دهنده ها می توانند نیازهای پاسخ ها را بر اساس منابع داده جدید هدایت کنند، مثلا در مورد سوالات برنامه نویسی با یک روش جدید از آن بخواهند جواب تولید کند.)

چطور کار می کند؟

بدون RAG، مدل زبانی ورودی کاربر را می گیرد و بر اساس اطلاعاتی که روی آن آموزش دیده است، پاسخی ایجاد می کند.با RAG، یک منبع اطلاعات معرفی می‌شود که برای استخراج اطلاعات از یک منبع داده جدید استفاده می‌کند. ورودی کاربر و اطلاعات مرتبط هر دو به LLM داده می شوند. LLM این دانش جدید و دانش داخل خود را بکار میگیرد تا جواب های بهرتی تولید کند. بطور کلی این فرایند شامل مراحل زیر است:

یکم ایجاد داده های بیرونی: داده هایی که بیرون از محدوده داده های آموزشی LLM هستند را داده های بیرونی یا خارجی می گویند. این داده می تواند از منابع مختلفی باشند از جمله API ها ، پایگاه های داده ای، فایل word فایل pdf ، CSV یا فایل JSON ،حتی متن معمولی یا هرجور سند دیگری. ممکل است داده در قالب یا فرمت های مختلفی موجود باشد مثل فایل های با پسوند و ساختار مختلف ، رکورد های پایگاه داده، یا یک متن بلند و بالا باشد. این داده ها در یک تکنیک دیگر هوش مصنوعی، که به آن embedding language models یا تعبیه مدل زبانی (توکارسازی مدل زبانی) می گویند بکار می رود، در این تکنیک داده ها تبدیل به بردار های عددی شده و در یک پایگاه داده ای ذخیره می شوند. این فرایند یک کتابخانه دانشی ایجاد میکند که هوش مصنوعی مولد می تواند آن را بفهمد.در ادامه لازم است با پایگاه داده برداری هم آشنا بشویم. پایگاه داده برداری (Vector Database) یک پایگاه داده ای است که اطلاعات را در قالب بردار های عددی و بعضا چند بعدی در واقع اطلاعات دیگر از داده، ذخیره میکند. و مثلا می تواند داده های نزدیک و در همسایگی داده های دیگر را عرضه کند. به عنوان مثال کلمات ماهی، آب، دریا، صدف، رودخانه و... را به شیوه بردارهای عددی چند بعدی ذخیره میکند. بعد با پرس جوی اطلاعات، مثلا جستجوی کلمه "آب"، همسایگی آن را هم ارائه میکند مثلا "ماهی"، "رودخانه" و... . یا کلمات گربه، ببر، پلنگ را تبدیل به عدد کرده و با یکسری اطلاعات دیگر ذخیره میکند و کاربر با جستجو گربه سان میتواند همزمان داده هایی مرتبط را داشته باشد. در این نوع پایگاههای داده ها که از آن ها یا عناوین Vector Databses یا vector search engine موتور جستجوی برداری هم یاد میشود، از الگوریتم های مختلف جستجوی نزدیکترین همسایگی، Nearest neighbor algorithm, یا الگوریتم جستجوی تقریب استفاده شده است که این باعث بازنمایی نزدیکترین داده های مرتبط می شود.(در نوشته پایگاههای داده برداری درموردش صحبت خواهیم کرد)

تصویری که  کمک می کند درک بهتری از نحوه ذخیره سازی داده ها در پایگاههای داده برداری داشته باشیم
تصویری که کمک می کند درک بهتری از نحوه ذخیره سازی داده ها در پایگاههای داده برداری داشته باشیم


دوم بازیابی اطلاعات مرتبط: مر حله دوم اجرای یک جستجوی "مربوط بودن" است (جستجوی مربوطیّت! ). پرسش کاربر به یک نمایش برداری تبدیل می شود و به منظور بررسی تطابق، با پایگاه داده برداری تطبیق داده میشود. برای مثال یک چت بات هوشمند را در نظر بگیرید که به سوالات منابع انسانی یک شرکت یا سازمان میتواند پاسخ بگوید. اگر یک کارمند جستجو کند "چقدر مرخصی سالیانه دارم؟". این سیستم اسناد خط مشی مرخصی سالانه را در کنار سوابق مرخصی گذشته کارمند بازیابی می کند. این اسناد مشخص، مخصوصا بازیابی می شوند چون بیشترین ارتباط را دارند با آنچه که کاربر در ورودی داده است. این "مربوط بودن" با استفاده از محاسبات ریاضی برداری در آن پایگاه داده های برداری صورت گرفته و عرضه می شود.

سوم افزودن به فرامین مدل زبانی بزرگ (Augment): در ادامه مدل RAG ، ورودی کاربر یا فرمان(prompt) را تکمیل می کند. با چه تکمیل می کند؟ با اضافه کردن داده های بازیابی شده مرتبط با ورودی! یعنی مثلا کاربر جستجو کرده است "چقدر مرخصی سالیانه دارم؟ "، اسناد مرتبط مثلا با عنوان "قوانین سالیانه شرکت فلان" به عنوان داده مرتبط شناسایی شده و به ورودی افزوده یا Augment می شود. این بخش از تکنیک های مهندسی فرمان (prompt engineering) برای ارتباط موثر با مدل زبانی بزرگ استفاده می کند.در واقع این افزودن است که باعث تولید جواب دقیق تر به ورودی کاربر می شود.

چهارم بروزرسانی داده های بیرونی: اگر داده های بیرونی هم منقرض و کهنه بشوند چه باید کرد؟ جواب این است که برای نگهداری اطلاعات جاری به منظور بازیابی، به طور ناهمزمان بروزرسانی اسناد و بروزرسانی دادهای توکار(همان بردارهای اسناد) صورت می پذیرد. می توان یک فرایند خودکار بلادرنگ (RealTime) یا دوره ای را برای پردازش دسته ای اطلاعات در نظر گرفت. این یک مساله رایج علوم داده نیز هست. نمودار زیر مفهوم RAG در LLM ها را بطور مفهومی نشان میدهد.

معرفی ابزار ها و منابع برای کار RAG:

منابع و داده های زیاد روی اینترنت برای این کار وجود دارند و در آینده هم مثال هایی از این را خواهم نوشت. اما چند ابزار رو در اینجا معرفی می کنم:

ابزار LangChain: یک فریم ورک متن باز برای ساده‌ سازی ایجاد برنامه‌های کاربردی با استفاده از مدل‌های زبان بزرگ (LLM) طراحی شده‌است. این ابزار که می توان در پایتون و جاواسکریپت هم با آن کار کرد.، فرایند RAG را بسیار ساده میکند و می توان به کمک آن چت با ت های هوشمند ایجاد کرد.

ابزار LlamaIndex: این هم یک ابزار پیشرفته برای ایجاد RAG Application ها است که کار بر را قادر می سازد اسناد، متون، دیتا بیس ها و ... را به مدل زبانی عرضه کرده و یا پرسش و پاسخ مدل خود را قدرتمند ساخته و در برنامه ها بکار بگیرد. این ابزار بسیار قدرتمند است. و نمونه کار های زیادی دارد.

ابزار ollama : یک ابزار برای اجرای مدل های زبانی بزرگ بصورت محلی و روی کامپیوتر شما! می توانید به کمک این ابزار مدل های زبانی بزرگی مثل Llama3.1 که توسط شرکت متا عرضه شده است یا مدلهایی که روی پایگاه معروف Huggingface عرضه شده اند را اجرا کنید، برای توسعه برنامه های خود که مبتنی بر مدل های بزرگ زبانی هستند از آن استفاده کنید، و به عنوان یک رابط بین برنامه شما و مدل زبانی بزرگ حتی بکار ببندید. نکته اینکه سایت این ابزار برای ایرانی ها تحریم هست و باید برای دسترسی به آن از ابزارهای تغییر دهنده آی پی استفاده کنید.

این نوشته خلاصه ای است از مقاله aws.amazon و سایر منابع مختلف سراسر وب

هوش مصنوعیragllmمدل های زبانی بزرگ
مهندس نرم افزار، برنامه نویس، هوش مصنوعی، همیشه به دنبال یادگیری...
شاید از این پست‌ها خوشتان بیاید