مقاله

بهبود عملکرد RAG با استفاده از گراف دانش (Graph RAG)

هوشواره | ۲۰۲۴/۱۱/۶
بهبود عملکرد RAG با استفاده از گراف دانش (Graph RAG)

مقدمه

در بخش آشنایی با RAG به طور مفصل درباره RAG (Retrieval-Augmented Generation) صحبت کردیم. در این مقاله نگاهی دقیق‌تر به چالش‌های این تکنولوژی خواهیم داشت و در ادامه، متوجه خواهیم شد که Graph RAG چگونه راه حل‌های جدیدی برای غلبه بر محدودیت‌های RAG ارائه داده است.

چه چالشی منجر به پیدایش Graph RAG شد؟

همانطور که در بخش آشنایی با RAG گفته شد RAG تکنیکی است که با اضافه نمودن منبع داده خارجی به اطلاعات ورودی LLMها موجب عملکرد بهتر آن‌ها با اهداف مشخص می‌شود. این رویکرد موجب می‌شود که LLMها برای حوزه‌های خاص با داده‌های مشخص نیز عملکرد خوبی داشته باشند و همچنین رویکردی جهت جلوگیری از مسئله hallucinations نیز می‌باشد. بنابراین این تکنیک کاربرد گسترده‌ای از جمله استفاده در چت‌بات‌ها و نیز سیستم‌های توصیه‌گر و … فراهم می‌آورد.

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

در حالی که این روش در بسیاری از موارد به خوبی عمل می کند، اما در انجام وظایف پیچیده مانند استدلال چند مرحله‌ای (multi-hop reasoning) یا پاسخ به سوالاتی که نیاز به اتصال قطعات مختلف اطلاعات دارند، دچار مشکل می شود.

مثال: فرض کنید سوالی که پرسیده شده این سوال باشد: "نام پسر کسی که هخامنشیان را شکست داد، چه بود؟" یک RAG معمولی (baseline RAG) برای پاسخ به این سوال، معمولا این مراحل رو طی می‌کنه:

یافتن شخص: اول از همه، مشخص می‌کنه که چه کسی هخامنشیان رو شکست داده.

مطالعه درباره پسر شخص: اطلاعات مربوط به خانواده این شخص و به‌خصوص پسرش رو پیدا می‌کنه.

پیدا کردن نام: اسم پسر این شخص رو شناسایی می‌کنه.

مشکل اصلی اینجا در مرحله اول پیش میاد. RAG‌های معمولی، متن‌ها رو بر اساس شباهت معنایی (semantic similarity) انتخاب می‌کنن. اما در سوالات پیچیده، جزئیات خاص ممکنه در مجموعه داده ها به‌صورت مستقیم ذکر نشده باشن. به خاطر همین محدودیت، یافتن اطلاعات دقیق به سختی امکان‌پذیره و معمولا به راه‌حل‌های گران‌قیمت و غیرعملی مثل ساختن دستی جفت پرسش-پاسخ برای پرسش‌های رایج نیاز داریم.

راه حل: برای رفع این محدودیت‌ها، محققان مایکروسافت روشی جدید به نام GraphRAG رو ارائه کردن. GraphRAG از گراف‌های دانش(knowledge graphs ) برای بهبود یافتن یافته‌ها و تولید پاسخ در RAG استفاده می‌کنه. در بخش‌های بعدی می‌خواهیم نحوه کارکرد GraphRAG رو توضیح بدیم.

Graph RAG چیست و چگونه کار می‌کند؟

برخلاف ساختار پایه‌ی RAG که از vector database برای بازیابی اطلاعات با شباهت معنایی استفاده می‌کند، Graph RAG با استفاده از گراف دانش یا knowledge graphs (KGs) موجب بهبود RAG شده است. یک گراف دانش ساختار داده‌ای است که در آن داده‌ها با روابطی که با هم دارند ذخیره می‌شوند.

یک پایپلاین Graph RAG شامل دو فرایند اصلی می‌شود:

۱. Indexگذاری

۲. پرس و جو (querying)

  • Index گذاری

این فرایند شامل ۴ مرحله اصلی می‌باشد:

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

  2. استخراج موجودیت، رابطه و ادعاها: GraphRAG از مدل‌های زبانی بزرگ (LLMs) برای شناسایی و استخراج تمام موجودیت‌ها (مانند اسامی افراد، مکان‌ها، سازمان‌ها و غیره)، روابط بین آنها و ادعاهای کلیدی بیان‌شده در متن از هر واحد متنی استفاده می‌کند. اطلاعات استخراج‌شده برای ساختن یک گراف دانش اولیه به کار می‌رود.

  3. خوشه بندی سلسله مراتبی: GraphRAG از تکنیک Leiden برای انجام خوشه بندی سلسله مراتبی روی گراف‌های دانش اولیه استفاده می‌کند. Leiden یک الگوریتم کشف جامعه(community detection algorithm) است که می‌تواند به طور موثر ساختارهای جامعه را در گراف تشخیص دهد. موجودیت‌های هر خوشه به جوامع مختلفی برای تحلیل دقیق‌تر اختصاص می‌یابد.

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

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

  1. خلاصه‌سازی جوامع: GraphRAG با رویکردی از پایین به بالا، برای هر جامعه و اعضای آن خلاصه هایی تولید می کند. این خلاصه ها شامل موجودیت های اصلی در جامعه، روابط بین آنها و ادعاهای کلیدی است. این مرحله یک نمای کلی از کل مجموعه داده ها ارائه می دهد و اطلاعات زمینه ای مفیدی را برای سوالات بعدی فراهم می کند.
  • پرس‌وجو

GraphRAG دو رویکرد برای پرس‌وجو اطلاعات دارد:

جستجوی سراسری: برای پاسخ به سوالات کلی در مورد تمام داده‌ها، با استفاده از خلاصه‌های جوامع(مرحله ۴ از indexing).

جستجوی محلی: برای پاسخ به سوالات خاص در مورد موجودیت‌های مشخص، با بررسی همسایه‌ها و مفاهیم مرتبط.

مراحل جستجوی سراسری به این صورت است:

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

دسته‌های گزارش از جوامع: سیستم از گزارش‌های جامعه گره‌ها که توسط مدل زبانی بزرگ (LLM) از سطح مشخصی از سلسله مراتب جامعه تولید می‌شوند، به عنوان داده‌های زمینه‌ای استفاده می‌کند. این گزارش‌های انجمن به صورت تصادفی مرتب شده و به چندین دسته تقسیم می‌شوند (دسته گزارش جوامع تصادفی ۱، دسته ۲، ...، دسته N).

پاسخ‌های میانی رتبه‌بندی شده (RIR یا Rated Intermediate Responses): هر دسته از گزارش‌های انجمن به قطعات متنی با اندازه از پیش تعریف شده تقسیم می‌شوند. از هر قطعه متن برای تولید یک پاسخ میانی استفاده می‌شود. این پاسخ شامل فهرستی از اطلاعات به نام نکات است. هر نکته دارای امتیاز عددی است که نشان دهنده اهمیت آن است. این پاسخ‌های میانی تولید شده، پاسخ‌های میانی رتبه‌بندی شده هستند (پاسخ میانی رتبه‌بندی شده ۱، پاسخ ۲... پاسخ N).

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

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

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

   

 تصویر معماری جستجوی محلی

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

جستجوی موجودیت‌های مشابه: سیستم مجموعه‌ای از موجودیت‌ها(entutyها) را از گراف دانش شناسایی می‌کند که از نظر معنایی با ورودی کاربر مرتبط هستند. این موجودیت‌ها به عنوان نقاط ورودی به گراف دانش عمل می‌کنند.

نگاشت واحد متن-موجودیت: واحدهای متنی استخراج‌شده به موجودیت‌های مرتبط نگاشت می‌شوند و اطلاعات متنی اصلی حذف می‌شود. در واقع متن‌ها به entityها نگاشت می‌شوند.

استخراج ارتباط موجودیت: در این مرحله اطلاعات خاصی در مورد موجودیت‌ها و روابط آنها استخراج می‌شود.

نگاشت متغیرهای کمکی موجودیت: در این مرحله موجودیت‌ها را به متغیرهای کمکی آنها که ممکن است شامل داده‌های آماری یا سایر ویژگی‌های مرتبط باشد، نگاشت می‌شوند.

نگاشت گزارش جامعه موجودیت: گزارش‌ جوامع در نتایج جستجو ادغام می‌شوند و برخی اطلاعات کلی را در بر می‌گیرند.

استفاده از سابقه مکالمه: در صورت ارائه، سیستم از سابقه مکالمه برای درک بهتر هدف و زمینه کاربر استفاده می‌کند.

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

مقایسه کیفیت خروجی RAG پایه و GraphRAG

برای نمایش اثربخشی GraphRAG، سازندگان آن کیفیت خروجی RAG پایه و GraphRAG را در وبلاگ خود مقایسه کرده‌اند.

در این لینک میتوانید جزئیات مقایسه عملکرد آنها را مشاهده کنید.

نتیجه‌گیری

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

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