بهینه‌سازی مدل‌های موجود زمانی لازم می‌شود که اطلاعات موردنظر ما در دیتاست‌های آموزش مدل‌ها موجود نباشند. این عدم وجود اغلب به خاطر تخصصی یا تازه بودن اطلاعات است. برای حل این مشکل و فهماندن اطلاعات به مدل‌ها، دو رویکرد اصلی وجود دارد: Retrieval-Augmented Generation (RAG) و Fine-tuning1.

استفاده از رویکرد RAG زمانی به‌صرفه است که دقت اطلاعات خروجی برای ما مهم باشد. اگر دقت مهم نیست و صرفاً کلیتی مدنظر ماست -مثلاً اینکه مدل به سبک یک نویسندهٔ خاص صحبت کند- بهتر است از فاین‌تیونینگ استفاده کنیم.

تکنیک RAG

به زبان ساده، RAG اسناد مرتبط را از ما می‌گیرد و تلاش می‌کند که محتویات هر یک را بفهمد. بعد از فهمیدن، با هر بار درخواست کاربر، سیستم RAG اسناد مرتبط با درخواست را پیدا می‌کند و آن‌ها را در کنار درخواست اولیهٔ کاربر (مثل تقلب) به مدل زبانی می‌دهد.

معماری کلی RAG

تکنیک RAG به صورت محلی

پیاده‌سازی سیستم RAG با ابزارهای موجود به نسبت ساده است. در ادامه پیاده‌سازی یک سیستم ساده RAG با کمک Ollama و Open WebUI و سپس پیاده‌سازی آن را با زبان python می‌بینیم.

نصب Ollama دشواری خاصی ندارد. با مراجعه به صفحهٔ دانلود آن نسخهٔ موردنظر را انتخاب، دانلود و نصب کنید. برای نصب Open WebUI هم بعد از نصب python و pip، کافیست دستور pip install open-webui را در ترمینال اجرا کنید تا نصب آن کامل شود.

بعد از نصب نرم‌افزارهای موجود، نوبت به دریافت مدل می‌رسد. فهرست مدل‌های موجود Ollama در این صفحه قابل مشاهده است. ما در این مدل برای سادگی کار، با مدل Llama 3.1 کار می‌کنیم. برای دریافت این مدل، دستور ollama pull llama3.1 را در ترمینال اجرا می‌کنیم.

حالا که مدل و رابط کاربری هر دو آماده هستند، نوبت به اجرای آن‌ها می‌رسد. با اجرای ollama run llama3.1 مدل در ترمینال اجرا می‌شود. برای راه‌اندازی رابط کاربری هم ابتدا دستور open-webui serve را اجرا کنید و بعد از طریق آدرس http://localhost:8080 در مرورگر آن را باز کنید.

Open WebUI

ابزار Open WebUI قابلیت دریافت اسناد و اجرای RAG را دارد. برای اضافه کردن فایل‌ها، به منوی Knowledge بروید و یک پوشهٔ جدید ایجاد کنید. سپس آدرس فایل‌های خود را به آن بدهید تا فایل‌ها را یکی یکی Embed کند. زمانی که این فرآیند به پایان رسید، به صفحهٔ اصلی Open WebUI برگردید و این‌بار دستور خود را با @ وارد کنید تا اطلاعات جدید در پاسخ مدل فراخوانی شوند.

بخش مربوط به اسناد در WebUI

دقت پاسخ‌های مدل به چند عامل بستگی دارد. عامل اول، دقت مدل Embedding در طبقه‌بندی اسناد است. اگر مدل Embedding با زبان اسناد بیگانه باشد، طبقه‌بندی دقیقی هم از آن‌ها نخواهد داشت. یکی از چالش‌های فعلی پیاده‌سازی RAG در زبان فارسی، نبود مدل Embedding مناسب است. عامل دوم دقت خود مدل است. اگر مدل Embedding هم عالی کار کند و مرتبط‌ترین اسناد را به مدل ورودی بدهد، خروجی کار مثل ریختن سوخت جت در ژیان می‌شود. در صورت قوت همزمان هردوی این مدل‌هاست که خروجی RAG کیفیت مطلوب را خواهد داشت.

تکنیک RAG به صورت برخط

راه دیگر برای پیاده‌سازی سیستم RAG، استفاده از ابزارهای موجود در وب است. به عنوان مثال، قابلیت Custom GPT از OpenAI این اجازه را به ما می‌دهد تا با بارگذاری فایل‌های مختلف، یک چت‌بات اختصاصی ایجاد کنیم که دستورهای خاصی می‌گیرد و با ارجاع به فایل‌های ما، پاسخ‌های دقیق‌تری در اختیار کاربر می‌گذارد.

مثلاً در جریان انجام پروژه‌ای، ابتدا کلیهٔ اسناد مرتبط با تبعیدهای قبل از انقلاب را جمع‌آوری کردم و بعد از مرتب‌سازی، آن‌ها را در قالب ۱۰ فایل در اختیار چت‌بات جدیدم گذاشتم. علاوه بر فایل‌ها، توضیحاتی هم دربارهٔ چگونگی تعامل با کاربر برایش نوشتم.

نمونه‌ای از دستورالعمل‌های چت‌بات

خروجی‌های این چت‌بات به هیچ وجه رضایت‌بخش نبود. دسترسی به اسناد یا اینترنت هم نتوانست دقت پاسخ‌ها را بالا ببرد و برعکس باعث توهم چت‌بات در تولید جواب‌های غیرواقعی شد.

پاسخ چت‌بات به پرسشی دربارهٔ تبعید به خارک با استناد به اسناد. نه شیخ خزعل و نه شهید مدرس هیچ‌کدام به خارک تبعید نشده‌اند. اطلاعات به کلی غلط است.
پاسخ چت‌بات به پرسشی دربارهٔ تبعید به خارک با استفاده از منابع اینترنتی. هیچ اطلاعاتی در اختیار کاربر قرار نگرفته است.

پس در حال حاضر با یکی از بهترین ابزارهای هوش مصنوعی، امکان گفتگو با اسناد مهیا نیست. با این اوصاف بهتر است که از تکنولوژی‌های دیگری برای جستجو در اسناد استفاده کنیم. یک نمونهٔ آن استفاده از موتورهای جستجو و نوشتن برنامه‌ای برای پردازش متن‌ها و استخراج جداول است. در این حالت کاربر به جای پرسیدن سؤالی به زبان انسانی، با یک query در جدول می‌تواند به اطلاعات دلخواه خود برسد.

استفاده از تکنولوژی کارآمد قدیمی به جای تکنولوژی ناپایدار جدید.

یک راه دیگر که هنوز آزموده نشده است، توسعهٔ یک سیستم RAG از ابتدا و بدون واسطه است. در این حالت تمامی قدم‌ها از جمله تشکیل Vector DB و کلیهٔ فرآیندهای Embedding با کدنویسی انجام می‌شوند و امکان دارد که دقت خروجی در این حالات بیشتر باشد.

Footnotes

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