← بازگشت به بلاگ

آموزش جامع ساخت سیستم پرسش و پاسخ فارسی با RAG و هوشی

آموزش جامع ساخت سیستم پرسش و پاسخ فارسی با RAG و هوشی
\n

سیستم‌های پرسش و پاسخ هوشمند، امروزه نقشی کلیدی در تعاملات انسان و ماشین ایفا می‌کنند. تکنیک RAG (Retrieval-Augmented Generation) به مدل‌های زبانی بزرگ (LLM) کمک می‌کند تا پاسخ‌های دقیق‌تر و مرتبط‌تری ارائه دهند. این رویکرد با ادغام قدرت مدل‌های زبانی و دانش موجود در پایگاه‌های داده، امکان ساخت سیستم‌های پرسش و پاسخ کارآمد و دقیق را فراهم می‌آورد.

در این مقاله، شما را با مراحل ساخت یک سیستم پرسش و پاسخ کاملاً فارسی با استفاده از تکنولوژی RAG آشنا خواهیم کرد. از مفاهیم پایه تا پیاده‌سازی عملی، تمامی مراحل به زبانی ساده و روان تشریح خواهند شد. با هوشی، می‌توانید به راحتی این سیستم‌ها را توسعه داده و به کار بگیرید.

RAG چیست و چرا به آن نیاز داریم؟

تعریف RAG

RAG (Retrieval-Augmented Generation) روشی است که در آن، اطلاعات مرتبط با یک پرسش یا موضوع، از یک پایگاه داده خارجی استخراج شده و در اختیار مدل‌های زبانی بزرگ (LLM) قرار می‌گیرد. به بیان ساده‌تر، RAG پلی است بین دانش ذخیره‌شده در پایگاه‌های داده و توانایی تولید متن مدل‌های زبانی.

مولفه‌های اصلی RAG

RAG شامل سه جزء اصلی است:
  • بازیابی (Retrieval): این مؤلفه مسئول یافتن و استخراج اطلاعات مرتبط از یک پایگاه دانش خارجی (مانند پایگاه داده برداری) برای هر درخواست کاربر است.
  • افزودن (Augmentation): در این مرحله، زمینه و اطلاعات بازیابی‌شده بهبود یافته و اطلاعات بیشتری به آن اضافه می‌شود تا برای مرحله تولید، آماده گردد.
  • تولید (Generation): در نهایت، مدل زبانی با استفاده از اطلاعات غنی‌شده، پاسخ نهایی را تولید می‌کند.

چرا RAG؟

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

  • اطلاعات قدیمی: دانش آن‌ها محدود به زمان آموزش است و به اطلاعات به‌روز دسترسی ندارند.
  • عدم دسترسی به اطلاعات خصوصی: قادر به دسترسی به داده‌های اختصاصی یا سازمانی نیستند.
  • احتمال توهم (Hallucination): ممکن است پاسخ‌های نادرست اما به ظاهر معقول ارائه دهند.

استفاده از RAG این محدودیت‌ها را برطرف کرده و دقت و ارتباط پاسخ‌ها را به طور چشمگیری افزایش می‌دهد. با هوشی، می‌توانید به راحتی این محدودیت‌ها را دور زده و از دانش به‌روز و اختصاصی خود در سیستم‌های هوش مصنوعی بهره‌مند شوید.

چالش‌های خاص زبان فارسی در RAG

پیاده‌سازی RAG برای زبان فارسی با چالش‌های منحصربه‌فردی روبروست که نیازمند توجه ویژه است:

  1. پیچیدگی‌های نگارشی: زبان فارسی دارای پیچیدگی‌های نگارشی خاصی است که پیش‌پردازش دقیق متن را ضروری می‌سازد. مواردی چون فاصله‌گذاری صحیح، تشخیص نیم‌فاصله، ضمایر و پیشوندها/پسوندهای چسبیده، و تنوع در نگارش کلمات (مانند «می‌روم» در مقابل «میروم») نیازمند ابزارهای پردازشی قدرتمند هستند.
  2. کمبود منابع و مدل‌های آموزش‌دیده: در مقایسه با زبان انگلیسی، تعداد مدل‌های از پیش آموزش‌دیده و مجموعه داده‌های با کیفیت برای زبان فارسی محدودتر است.
  3. راست به چپ بودن زبان: این ویژگی در برخی کتابخانه‌ها و ابزارها ممکن است چالش‌هایی در پردازش و نمایش ایجاد کند.

هوشی با درک این چالش‌ها، راهکارهایی برای پردازش مؤثر زبان فارسی ارائه می‌دهد و به شما کمک می‌کند تا سیستم‌های RAG قدرتمندی برای این زبان بسازید.

ابزارها و پیش‌نیازهای مورد نیاز

برای ساخت یک سیستم RAG فارسی، ابزارها و کتابخانه‌های زیر ضروری هستند:

  1. کتابخانه‌های پردازش متن فارسی: کتابخانه‌هایی مانند Hazm امکاناتی چون نرمال‌سازی متن، توکن‌سازی (کلمه و جمله)، ریشه‌یابی، لم‌سازی و برچسب‌گذاری اجزای کلام را برای زبان فارسی فراهم می‌کنند.
  2. مدل‌های Embedding فارسی: مدل‌هایی چون ParsBERT که بر روی حجم وسیعی از متون فارسی آموزش دیده‌اند، برای تبدیل متن به بردارهای عددی (embedding) استفاده می‌شوند.
  3. Vector Database: برای ذخیره و جستجوی سریع embeddingها، پایگاه‌های داده برداری مانند ChromaDB (متن‌باز و مناسب پروژه‌های کوچک تا متوسط) یا Pinecone (سرویس مدیریت‌شده و مقیاس‌پذیر) کاربرد دارند.
  4. LangChain: این فریم‌ورک برای مدیریت و هماهنگی اجزای مختلف سیستم RAG، از جمله اتصال مدل‌های زبانی، پایگاه‌های داده و ابزارهای پردازشی، بسیار مفید است.

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

معماری سیستم RAG فارسی

یک سیستم RAG فارسی معمولاً از اجزای زیر تشکیل شده است:

┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ متن ورودی │────▶│ پیش‌پردازش │────▶│ Embedding │
│ (سوال کاربر) │ │ (Hazm) │ │ (ParsBERT) │
│ │ │ │ │ │
└─────────────────┘ └──────────────────┘ └────────┬────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ تولید پاسخ │◀────│ افزودن زمینه │◀────│ جستجو در │
│ (LLM) │ │ (Augmentation) │ │ Vector DB │
│ │ │ │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘

جریان کار

  1. دریافت سوال: کاربر سوال خود را به زبان فارسی مطرح می‌کند.
  2. پیش‌پردازش: متن ورودی با استفاده از ابزارهایی مانند Hazm نرمال‌سازی و توکن‌سازی می‌شود.
  3. تبدیل به Embedding: متن پیش‌پردازش‌شده با استفاده از مدل‌هایی مانند ParsBERT به بردارهای عددی تبدیل می‌شود.
  4. جستجو: بردارهای حاصل در پایگاه داده برداری (Vector Database) جستجو شده و مستندات مشابه بازیابی می‌شوند.
  5. افزودن زمینه: مستندات بازیابی‌شده به عنوان زمینه (context) به پرسش اصلی اضافه می‌شوند.
  6. تولید پاسخ: مدل زبانی بزرگ (LLM) با استفاده از پرسش اصلی و زمینه فراهم‌شده، پاسخ نهایی را تولید می‌کند.

برای پیاده‌سازی این جریان کار، می‌توانید از ابزارهای قدرتمند هوشی بهره ببرید. ساخت ایجنت کدنویسی در هوشی به شما امکان می‌دهد تا این فرآیند را به صورت خودکار و بهینه پیاده‌سازی کنید.

پیاده‌سازی گام به گام

در ادامه، مراحل کلیدی برای پیاده‌سازی یک سیستم RAG فارسی با استفاده از ابزارهای رایج شرح داده می‌شود:

گام ۱: نصب کتابخانه‌ها

ابتدا کتابخانه‌های مورد نیاز را نصب کنید:

pip install hazm
pip install transformers torch
pip install chromadb
pip install langchain langchain-community
pip install openai

گام ۲: آماده‌سازی ابزارهای پردازش متن فارسی

کد لازم برای نرمال‌سازی متن و محاسبه embedding با ParsBERT:

from hazm import Normalizer, word_tokenize
import torch
from transformers import AutoTokenizer, AutoModel

# راه‌اندازی نرمال‌ساز متن فارسی
normalizer = Normalizer()

# بارگذاری مدل ParsBERT
tokenizer = AutoTokenizer.from_pretrained("HooshvareLab/bert-base-parsbert-uncased")
model = AutoModel.from_pretrained("HooshvareLab/bert-base-parsbert-uncased")

def get_persian_embedding(text):
    """تبدیل متن فارسی به embedding"""
    # نرمال‌سازی متن
    normalized_text = normalizer.normalize(text)
    
    # توکن‌سازی
    inputs = tokenizer(normalized_text, return_tensors="pt", 
                      padding=True, truncation=True, max_length=512)
    
    # محاسبه embedding
    with torch.no_grad():
        outputs = model(**inputs)
        # استفاده از میانگین hidden states به عنوان embedding
        embeddings = outputs.last_hidden_state.mean(dim=1)
    
    return embeddings.numpy()[0]

گام ۳: ایجاد Vector Database

راه‌اندازی ChromaDB و تعریف تابع embedding سفارشی:

import chromadb
from chromadb.utils import embedding_functions

# ایجاد یک تابع embedding سفارشی برای ChromaDB
class PersianEmbeddingFunction(embedding_functions.EmbeddingFunction):
    def __call__(self, texts):
        embeddings = []
        for text in texts:
            embedding = get_persian_embedding(text)
            embeddings.append(embedding.tolist())
        return embeddings

# راه‌اندازی ChromaDB
client = chromadb.Client()
persian_ef = PersianEmbeddingFunction()

# ایجاد مجموعه (collection)
collection = client.create_collection(
    name="persian_documents",
    embedding_function=persian_ef
)

گام ۴: اضافه کردن اسناد به پایگاه داده

در این مرحله، مستندات فارسی مورد نظر را آماده کرده و به مجموعه ChromaDB اضافه می‌کنیم. این مستندات می‌توانند مقالات، گزارش‌ها، یا هر متن دیگری باشند که می‌خواهید سیستم پرسش و پاسخ شما از آن‌ها استفاده کند.

برای افزودن اسناد، ابتدا باید آن‌ها را به صورت لیستی از متن آماده کنید و سپس با استفاده از متد `add` مجموعه، آن‌ها را به همراه embeddingهایشان ذخیره نمایید.

نکته: برای مدیریت بهتر داده‌ها و اطمینان از صحت عملکرد، توصیه می‌شود از هوشی برای مدیریت پایگاه داده و توکن‌های API خود استفاده کنید. بیلینگ شفاف در هوشی به شما کمک می‌کند تا هزینه‌های خود را به دقت کنترل کنید.

گام ۵: ساخت زنجیره LangChain

با استفاده از LangChain، می‌توانید یک زنجیره (chain) برای سیستم RAG خود بسازید. این زنجیره شامل:

  • یک مدل زبانی بزرگ (LLM)
  • یک Retriever که از مجموعه ChromaDB شما برای یافتن مستندات مرتبط استفاده می‌کند.
  • یک Prompt Template که پرسش کاربر و مستندات بازیابی‌شده را ترکیب کرده و برای LLM ارسال می‌کند.

پس از ساخت زنجیره، می‌توانید با ارسال پرسش کاربر، پاسخ نهایی را دریافت کنید.

گام ۶: استقرار و استفاده

پس از ساخت و آزمایش سیستم RAG، نوبت به استقرار آن می‌رسد. می‌توانید این سیستم را به عنوان بخشی از اپلیکیشن خود، یک API، یا ربات چت مورد استفاده قرار دهید.

هوشی پلتفرمی جامع برای ساخت، مدیریت و استقرار انواع ایجنت‌های هوش مصنوعی، از جمله سیستم‌های RAG، فراهم می‌کند. با ساخت توکن API در هوشی، به راحتی می‌توانید سیستم خود را به سرویس‌های دیگر متصل کنید.

چرا هوشی؟

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

⌃