استراتژی های خرد کردن، در مقایسه
Type: Build
Languages: Python
Prerequisites: Phase 11 lessons 04 (embeddings), 06 (RAG), 07 (advanced RAG); Phase 19 Track B foundations (lessons 20-29)
Time: ~90 minutes
اهداف یادگیری
- از ابتدا پنج استراتژی شکاف را پیاده سازی کنید: پنجره ثابت، جمله، تقسیم تکراری، گروه بندی معنوی و سرنخ های مرجع ساختاری.
- یادآوری را در یک مجموعه ی ثابت با دامنه های پاسخ های دارای برچسب طلا اندازه گیری کنید و توضیح دهید که چرا یک استراتژی در مورد پروسه و یک استراتژی متفاوت در مورد اسناد فنی برنده می شود.
- توزیع قطعه ای را بخوانید و حالت های شکست هر استراتژی را تشخیص دهید: جملات یتیم، قطعات وسط نماد، قطعات فقط سرایت، حرکت معنوی.
- یک پیش فرض را برای یک کورپوس جدید بدون اجرای معیار با بررسی سه ویژگی انتخاب کنید: نوع سند، طول متوسط پاراگراف و اینکه آیا فرمت ساختار صریح دارد.
مشکل
هر لوله RAG با برش اسناد منبع به قطعات کوچک به اندازه کافی که یک مدل گنجانده مناسب آنها و به اندازه کافی بزرگ است که هر قطعه یک ایده مستقل را حمل می کند. انتخاب جایی که برش می کند یک پارامتر فوق العاده نیست. این مرز بالایی از آنچه که بازیافتگر می تواند به آن بازگردد است.
یک سوال که می پرسد "حرم تخفیف بودجه چگونه است" تنها می تواند موفق شود اگر بخش که حرم تخفیف را نگه دارد قابل دسترس باشد. اگر تقسیم کننده پنجره ثابت ارزش آستانه را از زمینه اطراف کاهش دهد، گنجانده شدن به یک خوشه مختلف حرکت می کند، نمره BM25 کاهش می یابد، رتبه بندی مجدد صدا را می بیند و پاسخ LLM اشتباه است. مقاله 2024 "LongRAG: بهبود نسل بازیافت- افزوده با LLM های طولانی مدت" 35 درصد تغییر مطلق در بازیافت را به سادگی از انتخاب کنده اندازه گیری کرد. کار پیگیری در سال 2025 در مورد عناوین بخش های زمینه ای شکاف را کاهش داد اما آن را نمی پوشاند.
این درس پنج استراتژی را کنار هم می سازد، آنها را با یک مجموعه ثابت با دامنه پاسخ های طلا با برچسب طلا اجرا می کند، و به شما اجازه می دهد که شماره های بازپرداخت را خودتان بخوانید.
مفهوم
flowchart LR Doc[Source Document] --> S1[Fixed Window] Doc --> S2[Sentence] Doc --> S3[Recursive Split] Doc --> S4[Semantic Cluster] Doc --> S5[Structural Markdown] S1 --> Chunks1[Chunks] S2 --> Chunks2[Chunks] S3 --> Chunks3[Chunks] S4 --> Chunks4[Chunks] S5 --> Chunks5[Chunks] Chunks1 --> Index[Embedding Index] Chunks2 --> Index Chunks3 --> Index Chunks4 --> Index Chunks5 --> Index Index --> Eval[Recall@k vs Gold Spans]
پنجره ثابت
خط اصلی نیروی خام. هر یک از N حرف ها را برش دهید. به صورت اختیاری همپوشیده می شود تا جمله ای که در موقعیت N قطع شده است در داخل بخش که در موقعیت N شروع می شود، کامل ظاهر شود. سریع، تعیین کننده، وحشتناک در مرزهای. از آن به عنوان یک کنترل استفاده کنید، نه یک پیش فرض.
جمله
تقسیم کردن مرز جمله با یک regex یا یک ماشین ساده حالت. بسته بندی یک یا چند جمله به یک قطعه تا یک بودجه شخصیت هدف. متوقف کردن برش میان کلمه. هنوز هم برش میان پاراگراف و وسط بخش. پیش فرض در بسیاری از خطوط لوله RAG اولیه و یک انتخاب معقول برای نثر بدون ساختار دیگر.
تقسیم مجدد
استراتژی سلسله مراتب که توسط کتابخانه های عصر 2023 محبوب شده است. سعی کنید در مورد قوی ترین جداکننده اول (خط جدید دوگانه، پاراگراف) تقسیم شوید، به بعدی (خط جدید واحد) برگردید، سپس به جملات، سپس به شخصیت ها. تکرار زمانی که بخش متناسب با بودجه پایان می یابد. قوی بر روی اسناد که ساختار ناسازگار دارند زیرا به هر منطقه سازگار می شود.
گروه بندی معنوی
هر جمله را دربرگیرید. جمله های متصل را که یک موضوع مرکزی را به اشتراک می گذارند، جمع آوری کنید. هر زمان که شباهت اجرا با مرکزی کمتر از یک حد کاهش یابد، برش دهید. مرزهای نشان دهنده معنای است، نه شخصیت ها. کند تر برای ساخت و وابسته به مدل ورودی است، اما در برابر اسناد که موضوعات را در داخل پاراگراف تغییر می دهند، مقاوم است.
سرنخ های مرجع ساختاری
برای اسناد که ساختار صریح دارند (ملاحظه، ساختار مجدد، بخش های شماره گذاری شده به سبک RFC) ، در مرزهای عنوان برش دهید. هر قطعه به عنوان و هر چیزی که زیر آن است به عنوان بعدی در همان سطح یا بالاتر تبدیل می شود. قطعات کوچکترین در هر موضوع، اما تنها زمانی که کورپوس به خوبی شکل گرفته است، در دسترس است.
چگونه recall@k انتخاب مرز را اندازه گیری می کند
یک سوال با برچسب طلا دارای تعویض دقیق شخصیت های مدت پاسخ در داخل سند منبع است. بعد از شکستن، می پرسید: آیا هر یک از قطعات بالا که ریترور برگشت، در فاصله طلا همپوشیده است؟ اگر بله، recall@k برای این سوال 1 است. اگر نه، صفر است. متوسط در مجموعه سوال برای هر استراتژی یک ارزیابی مشابه را اجرا کنید و انتشار به شما نشان می دهد که کدام سیاست مرزی از corpus شما زنده می ماند.
آن را بسازید
code/main.pyابزار:
fixed_window(text, size, overlap)-حساب اصليsentence_chunks(text, target)-فقط يه جمله جمع کنrecursive_split(text, separators, target)- تکرار سلسله مراتبیsemantic_chunks(text, similarity_threshold)- جمع بندی مبتنی بر مرکز بر روی یک قرار دادن فرضیه تعیین کنندهstructural_markdown(text)-تفريقگر آگاه به سرmock_embed(text, dim)- يه هاشي به پايگاهش قرار داده تا حلقه از کار خارج بشهDenseIndex- همان شکلي که در کلاس بازيابي هاي همبريد مرحله 19 راه B استفاده شدهeval_recall(strategy, corpus, queries, k)-حلقه مقایسه- A
main()که هر استراتژی را در corpus fixure اجرا می کند و یک جدول recall@k را چاپ می کند.
اجرا کن
bashpython3 code/main.pyمحصول یک جدول کوچک با یک ردیف در هر استراتژی و یک ستون در هر k است. جمله در مورد تنظیمات ساختار یافته از دست می دهد. نشان دادن ساختار بر روی تنظیمات نشان دادن برنده می شود. تکرارگر در مورد تنظیمات مخلوط خود را حفظ می کند زیرا تکرار سازگار می شود. گروه بندی معنوی در مورد تنظیمات پروزه برنده می شود که هیچ نشانه ساختاری مفید وجود ندارد.
حالت شکست جدول پنهان نمی شود
Orphan sentences.بسته بندی جملات قطعات را تولید می کند که جمله موضوع را از دست می دهند. سپس گنجاندن به سمت خوشه اشتباه اشاره می کند.
Mid-symbol cuts.پنجره ثابت کد داخل یا YAML یک شناسه را به نصف تقسیم می کند. دو نیمه به صدا دربر می گیرد.
Header-only chunks.. نشان دادن ساختاری از یک قطعه خارج می کند که چیزی جز## Title.اونها رو فلت کنید یا اولين پاراگراف بخش بعدی رو وصل کنید
Semantic drift.دسته بندی زیر سیمانیک زمانی که کورپوس به طور یکسان در مورد موضوع است. یک بخش 5000 حرف پاسخ های خاص را به یک ادغام متمایز بسته بندی می کند. سیمانیک را با یک کلاه کاراکتر سخت ترکیب کنید.
Stale embeddings.گروه بندی معنوی از یک مدل گنجانده استفاده می کند. اگر مدل را تغییر دهید، شما همچنین قطعات را تغییر می دهید. مدل قطعات را از مدل بازیافت جداگانه ای متصل کنید یا شاخص را با هم بازسازی کنید.
انتخاب یک معیاد بدون اجرا کردن معیار
سه ویژگی تصمیم میگیرند که "چانکر" برای یک جسم جدید به طور پیش فرض انتخاب شود.
| Property | Value | Default |
|---|---|---|
| Document type | Prose with no structure | Recursive split, target 800 |
| Document type | Markdown / RFC / API docs | Structural markdown |
| Document type | Code | AST-aware (out of scope; see Phase 19 lesson 02) |
| Paragraph length | Long, single topic | Sentence, target 500 |
| Paragraph length | Short, mixed topics | Semantic, threshold 0.6 |
وقتی شک دارید، تقسیم تکراری را انتخاب کنید. این قوی ترین پایه ی یک استراتژی است.
ازش استفاده کن
الگوهای تولید:
- قبل از ارسال خط لوله جدید، ارزیابی را اجرا کنید؛ به استراتژی که کتابخانه شما به طور پیش فرض استفاده می کند اعتماد نکنید.
- هر بار که مدل گنجانده یا ترکیب corpus را تغییر دهید ارزیابی را دوباره اجرا کنید؛ برنده وابسته به corpus است.
- نام استراتژی را در متاداتا هر قطعه باقی بگذارید تا بعداً بازپسین ها را نسبت دهید.
-باده
سیستم RAG پایان تا پایان Track F در درس 69 از chunker انتخاب شده در اینجا به عنوان مرحله اول خود استفاده می کند.eval_recallدر این درس، استراتژی ای را انتخاب کنید که در بدن شما برنده باشد و آن را به جلو بفرستید.
تمرینات
- یک استراتژی ششم اضافه کنید: از طریق پنجره ی توکن استفاده کنید
tiktokenبه جای تعداد شخصیت ها مقایسه کنید با پنجره ثابت در همان دستگاه - 30 درصد از بلوک های کد را به داخل قالب متن تزریق کنید. دوباره جدول را اجرا کنید. توضیح دهید چرا هر استراتژی به جز نشان دادن ساختاری یادآوری را از دست می دهد.
- قرار دادن یک برنامه در یک پروژه با یک برنامه در یک پروژه. اندازه گیری دلتا بازخواهی از گروه بندی معنوی. گزارش اینکه آیا انتشار بین استراتژی ها گسترش می یابد یا کاهش می یابد.
- اضافه کنید
summaryفیلدی در هر قطعه: یک توصیف یک جمله از مرکز. ارزیابی را دوباره اجرا کنید با خلاصه به بدن قطعه. افزایش یادآوری را اندازه گیری کنید.
اصطلاحات کلیدی
| Term | What people say | What it actually means |
|---|---|---|
| Recall@k | "Did we get the right chunk?" | Fraction of queries where any of the top-k chunks overlaps the gold answer span |
| Chunk overlap | "Sliding window" | Re-include the last N characters of the previous chunk in the next chunk |
| Structural splitter | "Header-aware chunks" | Cut at H1/H2/H3 boundaries; the heading text is part of the chunk |
| Semantic chunker | "Topic-aware chunks" | Embed sentences, cluster by centroid similarity, cut on drift |
| Centroid drift | "Topic shift" | Cosine similarity between the running mean and the next sentence drops past a threshold |
خواندن بیشتر
- LongRAG: Enhancing Retrieval-Augmented Generation with Long-context LLMs (arXiv 2406.15319)
- Anthropic, Contextual Retrieval
- LlamaIndex, Chunking strategies for production RAG
- مرحله 11 درس 06 - اصول RAG
- مرحله 11 درس 07 - RAG پیشرفته
- مرحله 19 درس 65 - بازيابي هاي همبريد که دسته بندی قطعات توليد شده در اينجا
- مرحله 19 درس 68 - استفاده از ارزیابی که انتخاب استراتژی در تولید را نمره می دهد
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.