توی سیستمهای RAG، یکی از مهمترین بخشها که معمولا درست بهش پرداخته نمیشه، بحث Chunking هست. اگه مدل داره جواب بیربط میده یا میگه اطلاعات کافی نداره، به احتمال زیاد مشکل از استراتژی Chunking شماست. انتخاب روش اشتباه یعنی یا مدل اصل مطلب رو نمیگیره یا کلا پرت میشه.
اینجا چند تا استراتژی رایج و پیشرفته برای Chunking رو بررسی میکنیم تا بدونید کی و کجا از هرکدوم استفاده کنید.
استراتژیهای پایه و ساده
این روشها نقطه شروع خوبی هستن و پیادهسازی سادهای دارن.
Fixed-size chunking:
سادهترین راه. متن به تکههایی با اندازه ثابت (مثلا ۱۰۰۰ کاراکتر) تقسیم میشه. این روش برای دادههای کثیف و بدون ساختار مثل متنهای استخراج شده از اسکن OCR یا فایلهای لاگ خام مناسبه، ولی ریسک شکستن جملات و از بین رفتن کانتکست رو داره.
Sliding window chunking:
نسخهی بهبود یافتهی روش قبلی. چانکها با هم همپوشانی (overlap) دارن تا کانتکست بینشون حفظ بشه. برای متونی که مفاهیم در جملات طولانی کشیده میشن، مثل مقالات و گزارشهای روایی، کاربرد داره.
Sentence-based chunking:
متن بر اساس پایان جملات (نقطه، علامت سوال و...) شکسته میشه. برای متون تمیز و خوشساختار مثل بلاگپستها و مستندات که هر جمله یک ایده کامل داره، خوبه.
Paragraph-based chunking:
متن بر اساس پاراگرافها تقسیم میشه. وقتی هر پاراگراف یک بلوک معنایی کامل رو تشکیل میده، مثل مقالات یا گزارشها، این روش کانتکست بهتری نسبت به شکستن جمله به جمله فراهم میکنه.
استراتژیهای مبتنی بر ساختار
این روشها از ساختار خود داکیومنت برای تقسیمبندی هوشمندتر استفاده میکنن.
Document-based chunking:
تقسیمبندی بر اساس ساختار طبیعی سند مثل سرفصلها (Headings) و بخشها (Sections) انجام میشه. برای کتابهای درسی، مقالات تحقیقاتی و راهنماها که ساختار سلسلهمراتبی دارن، ایدهآله.
Page-based chunking:
هر صفحه از سند به عنوان یک چانک در نظر گرفته میشه. مشخصاً برای کار با PDF، اسلاید یا کتاب که شماره صفحه اهمیت داره استفاده میشه.
Structured chunking:
برای دادههای ساختاریافته یا نیمهساختاریافته مثل HTML، JSON یا CSV کاربرد داره. در این روش، چانکها بر اساس تگها (مثلا <div> در HTML) یا فیلدهای مشخص تعریف میشن.
Table-aware chunking:
جدولها شناسایی و به صورت جداگانه و با فرمت مناسب (مثلا Markdown یا JSON) چانک میشن تا ساختارشون حفظ بشه.
استراتژیهای پیشرفته و محتوامحور
اینجا از مدلهای زبانی یا الگوریتمهای پیچیدهتر برای درک محتوا و تقسیمبندی بهینه استفاده میشه.
Semantic chunking:
در این روش، جملات یا پاراگرافها بر اساس شباهت معنایی (embedding similarity) گروهبندی میشن. چانکها زمانی شکسته میشن که موضوع بحث تغییر کنه. برای اسناد طولانی با موضوعات مختلف که روشهای ساده جواب نمیدن، خیلی موثره.
Entity-based chunking:
با استفاده از مدلهای Named Entity Recognition (NER)، موجودیتهایی مثل اسامی افراد، مکانها یا محصولات شناسایی شده و متنهای مرتبط با هر موجودیت در یک چانک قرار میگیره. برای تحلیل قراردادهای حقوقی، مقالات خبری یا اسناد مالی خوبه.
Agentic / LLM-based chunking:
اینجا از خود یک LLM خواسته میشه که تصمیم بگیره متن رو چطور تقسیم کنه. این روش قدرت انعطاف بالایی داره ولی کند و پرهزینهست. این روش معمولا overkill حساب میشه، مگر اینکه با دادههای خیلی پیچیده و بدون هیچ ساختاری سر و کار داشته باشید.
Recursive chunking:
یک رویکرد سلسلهمراتبی. اول با جداکنندههای بزرگ مثل پاراگراف شروع میکنه و اگه چانک حاصل بزرگتر از حد مجاز بود، به صورت بازگشتی با جداکنندههای کوچکتر مثل جمله، اون رو میشکنه تا به اندازه مطلوب برسه.
🛠 Join @LLMEngineers Community
Post #113
835
- 👍 8
- 🙏 2
- 👏 1