مفهوم اصلی
Chunking مزایای زیادی برای سیستمهای RAG دارد، اما یک مشکل مهم ایجاد میکند:
تقسیم کردن Document به بخشهای کوچک ممکن است باعث از بین رفتن Context و معنی اصلی متن شود.
روشهای ساده مانند:
- Fixed Size Chunking
- Recursive Character Splitting
همیشه نمیتوانند از این مشکل جلوگیری کنند.
به همین دلیل تکنیکهای پیشرفتهتری ایجاد شدهاند که تلاش میکنند Chunkها را بر اساس معنی متن ایجاد کنند.
مشکل از دست رفتن Context در Chunking
مثال:
جمله:
That night she dreamed, as she did often, that she was finally an Olympic champion.
معنی جمله:
او خواب دید که در آینده قهرمان المپیک خواهد شد.
اما اگر تقسیم متن در جای نامناسب انجام شود، ممکن است Chunk باعث شود برداشت اشتباهی ایجاد شود:
- انگار او قبلاً قهرمان المپیک شده است.
- نه اینکه فقط رویای قهرمانی دارد.
روشهای ساده Chunking این نوع مشکل را تشخیص نمیدهند.
1. Semantic Chunking
مفهوم اصلی
Semantic Chunking
متن را بر اساس شباهت معنایی جملهها به Chunk تقسیم میکند.
هدف:
جملههایی که معنی مشابه دارند در یک Chunk قرار بگیرند و هنگام تغییر موضوع، Chunk جدید ایجاد شود.
نحوه کار Semantic Chunking
الگوریتم:
- Document را جمله به جمله بررسی میکند.
- بررسی میکند جمله جدید چقدر با Chunk فعلی مرتبط است.
- اگر معنی مشابه باشد:
- جمله به همان Chunk اضافه میشود.
- اگر تفاوت معنایی زیاد باشد:
- Chunk فعلی بسته میشود.
- Chunk جدید شروع میشود.
روش تشخیص شباهت
برای مقایسه:
- Chunk فعلی
- جمله بعدی
هر دو به Vector تبدیل میشوند.
سپس فاصله بین Vectorها محاسبه میشود.
اگر:
Distance < Threshold
باشد:
یعنی:
- معنی مشابه است.
- جمله در همان Chunk قرار میگیرد.
اگر:
Distance > Threshold
باشد:
یعنی:
- موضوع تغییر کرده است.
- Chunk جدید ساخته میشود.
نتیجه Semantic Chunking
خروجی:
Chunkهایی با اندازه متغیر که:
- ساختار فکری نویسنده را بهتر حفظ میکنند.
- موضوعات مرتبط را کنار هم نگه میدارند.
مثال
اگر نویسنده:
- در یک پاراگراف وارد موضوع جدیدی شود.
- یا یک ایده را در چند پاراگراف ادامه دهد.
Semantic Chunking میتواند محل مناسب تقسیم را پیدا کند.
مزایای Semantic Chunking
- حفظ بهتر مفهوم متن.
- افزایش کیفیت Retrieval.
- بهبود معیارهایی مانند:
- Precision
- Recall
محدودیت Semantic Chunking
هزینه محاسباتی بالاتری دارد.
دلیل:
برای تمام جملهها باید:
- Vector ساخته شود.
- فاصلهها محاسبه شوند.
در Documentهای بزرگ این فرآیند میتواند سنگین باشد.
2. LLM-Based Chunking
مفهوم اصلی
در این روش خود:
Large Language Model (LLM)
وظیفه ایجاد Chunkها را انجام میدهد.
نحوه کار
Document به LLM داده میشود.
همراه آن دستورالعمل مشخص میشود.
مثلاً:
- متن را بر اساس معنی تقسیم کن.
- مفاهیم مشابه را در یک Chunk نگه دار.
- هنگام شروع موضوع جدید، Chunk جدید بساز.
عملکرد LLM
LLM مانند تولید متن معمولی:
- Chunkهای مورد نظر را ایجاد میکند.
مزایای LLM-Based Chunking
- عملکرد بسیار بالایی دارد.
- میتواند ساختار معنایی متن را بهتر درک کند.
- برای بسیاری از کاربردها کیفیت Retrieval خوبی ایجاد میکند.
محدودیت LLM-Based Chunking
یک روش تا حدی:
Black Box
است.
یعنی:
- دقیقاً مشخص نیست مدل چگونه تصمیم گرفته است.
- کنترل و بررسی آن دشوارتر است.
همچنین:
- هزینه پردازشی بیشتری دارد.
کاهش هزینه LLM-Based Chunking
با کاهش هزینه استفاده از LLMها:
این روش از نظر اقتصادی قابل استفادهتر شده است.
3. Context-Aware Chunking
مفهوم اصلی
یک بهبود مهم برای هر روش Chunking:
استفاده از LLM برای اضافه کردن Context به هر Chunk است.
ایده:
علاوه بر ساخت Chunk:
LLM یک متن توضیحی درباره جایگاه آن Chunk در Document ایجاد میکند.
مثال Context-Aware Chunking
فرض کنید یک Blog Post در پایان خود دارد:
- لیست طولانی نام افراد حمایتکننده و مشارکتکنندگان.
یک Chunk در انتهای متن ممکن است فقط شامل:
- تعداد زیادی اسم
باشد.
مشکل:
اگر این Chunk به تنهایی دیده شود، معنی مشخصی ندارد.
راهحل:
LLM به Chunk اطلاعات اضافه میکند.
مثلاً توضیح میدهد:
این بخش مربوط به لیست حمایتکنندگان مقاله است.
مزایای Context-Aware Chunking
متن اضافهشده در دو مرحله مفید است:
هنگام Vectorization
Context اضافهشده همراه Chunk تبدیل به Vector میشود.
نتیجه:
- Search Relevancy بهتر میشود.
هنگام Retrieval
وقتی Chunk به LLM اصلی داده میشود:
LLM بهتر معنی Chunk را درک میکند.
محدودیت Context-Aware Chunking
نیاز به Preprocessing سنگین دارد.
زیرا:
LLM باید:
- تمام Documentها را بررسی کند.
- هر Chunk را پردازش کند.
- Context اضافه کند.
مزیت مهم
با وجود هزینه پردازشی اولیه:
در زمان Search:
- سرعت کاهش پیدا نمیکند.
اما کیفیت Retrieval بهتر میشود.
مقایسه روشهای Chunking
| روش | مزیت | محدودیت |
|---|---|---|
| Fixed Size | ساده و سریع | ممکن است Context را خراب کند |
| Recursive Splitting | حفظ بهتر ساختار متن | اندازه Chunk ثابت نیست |
| Semantic Chunking | تقسیم بر اساس معنی | هزینه محاسباتی بالا |
| LLM-Based Chunking | کیفیت بالا | پیچیده و پرهزینه |
| Context-Aware Chunking | افزایش کیفیت Search و Generation | نیازمند Preprocessing سنگین |
انتخاب روش مناسب Chunking
هدف در طراحی RAG:
استفاده از پیشرفتهترین روش ممکن نیست؛ بلکه انتخاب مناسبترین روش برای داده و نیاز پروژه است.
برای Prototype
روشهای مناسب:
- Fixed Size Chunking
- Recursive Character Splitting
این روشها:
- ساده هستند.
- سریع پیاده میشوند.
- نقطه شروع خوبی هستند.
برای سیستمهای حساس به کیفیت
میتوان بررسی کرد:
- Semantic Chunking
- LLM-Based Chunking
اما باید هزینه و پیچیدگی آنها بررسی شود.
روش پیشنهادی برای بهبود اولیه
از آنجا که:
Context-Aware Chunking
میتواند روی هر روش Chunking اعمال شود و:
- Search Relevance را افزایش دهد.
- Generation را بهتر کند.
اغلب میتواند اولین بهبود بعد از روشهای ساده باشد.
نکات مهم در انتخاب Chunking
هنگام طراحی سیستم RAG باید بررسی کرد:
- دادهها چه ساختاری دارند؟
- کیفیت Retrieval چقدر اهمیت دارد؟
- هزینه پردازشی قابل قبول چقدر است؟
- آیا نگهداری و بررسی سیستم ساده است یا پیچیده؟
جمعبندی
- Chunking ساده ممکن است باعث از بین رفتن Context شود.
- Semantic Chunking متن را بر اساس شباهت معنایی تقسیم میکند.
- LLM-Based Chunking از LLM برای ساخت Chunkهای هوشمند استفاده میکند.
- Context-Aware Chunking به هر Chunk اطلاعات اضافی درباره جایگاه آن در Document اضافه میکند.
- روشهای پیشرفته کیفیت Retrieval را افزایش میدهند، اما هزینه بیشتری دارند.
- در پروژههای واقعی باید بین کیفیت، هزینه و پیچیدگی تعادل برقرار کرد.
- بهترین روش Chunking به نوع داده و نیاز سیستم RAG بستگی دارد.