कच्चे टुकड़े करने की रणनीति, तुलना
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
सीखने के लक्ष्य
- स्क्रैच से पांच चश्मनिंग रणनीतियों को लागू करेंः फिक्स्ड-विंडो, वाक्य, रिकर्सिव-स्प्लिट, सेमेटिक क्लस्टरिंग और स्ट्रक्चरल मार्कडाउन हेडर।
- सोने के लेबल वाले उत्तर दायरे वाले एक निश्चित निकाय पर recall@k का माप करें और समझाएं कि क्यों एक रणनीति प्रसा पर जीतती है और एक अलग रणनीति तकनीकी दस्तावेजों पर जीतती है।
- एक टुकड़ा-लंबाई वितरण पढ़ें और प्रत्येक रणनीति के विफलता मोड को पहचानेंः अनाथ वाक्य, मध्य प्रतीक कटौती, केवल शीर्षक के टुकड़े, अर्थिक बहाव।
- बेंचमार्क चलाए बिना नए कॉर्पस के लिए डिफ़ॉल्ट चुनें तीन गुणों की जांच करकेः दस्तावेज़ प्रकार, औसत पैराग्राफ लंबाई, और क्या प्रारूप स्पष्ट संरचना है।
समस्या
प्रत्येक आरएजी पाइपलाइन स्रोत दस्तावेजों को टुकड़ों में काटकर शुरू होती है जो इतने छोटे होते हैं कि एक एम्बेडिंग मॉडल उनके अनुरूप होता है और इतने बड़े होते हैं कि प्रत्येक टुकड़ा एक स्वतंत्र विचार ले जाता है। जहां काटना है, यह एक हाइपरपैरामीटर नहीं है। यह ऊपरी सीमा है कि रिट्रीवर कभी भी क्या वापस कर सकता है।
"बजट में अवरोध की सीमा क्या है" से पूछने वाला प्रश्न केवल तभी सफल हो सकता है जब अवरोध की सीमा को पकड़ने वाला टुकड़ा उपलब्ध हो। यदि फिक्स्ड-विंडो स्प्लिटर आसपास के संदर्भ से थ्रेशवेल वैल्यू को काटता है, तो एम्बेडिंग एक अलग क्लस्टर में चला जाता है, BM25 स्कोर गिर जाता है, रीरैंकर्स शोर देखते हैं, और LLM उत्पन्न उत्तर गलत है। 2024 के पेपर "लॉन्गरेगः लॉन्ग-कॉन्टेक्स एलएलएम के साथ पुनर्प्राप्त-उन्नत पीढ़ी को बेहतर बनाना" ने केवल टुकड़े-टुकड़े के विकल्प से पुनर्प्राप्तिकरण में 35 प्रतिशत पूर्ण बदलाव मापा। संदर्भित टुकड़े के शीर्षक पर 2025 में किए गए अनुवर्ती कार्य ने अंतर को कम किया लेकिन इसे बंद नहीं किया।
इस पाठ में पांच रणनीतियों को एक साथ बनाया गया है, उन्हें सोने के लेबल वाले उत्तर दायरे के साथ एक निश्चित corpus के खिलाफ चलाया गया है, और आपको खुद को याद करने के लिए संख्याओं को पढ़ने देता है।
अवधारणा
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 पर शुरू होने वाले टुकड़े के अंदर पूरी तरह से दिखाई दे। सीमाओं पर तेज़, निर्धारात्मक, भयानक। इसे नियंत्रण के रूप में उपयोग करें, डिफ़ॉल्ट नहीं।
वाक्य
एक रेजेक्स या एक साधारण स्टेट मशीन के साथ वाक्य सीमाओं पर विभाजित करें। एक या अधिक वाक्य को एक टुकड़े में पैक करें जो लक्ष्य वर्ण बजट तक पहुंचता है। मध्य शब्द को काटना बंद कर देता है। फिर भी पैराग्राफ के मध्य और मध्य खंड को काटता है। कई शुरुआती आरएजी पाइपलाइन में डिफ़ॉल्ट और कोई अन्य संरचना के बिना गद्य के लिए एक उचित विकल्प।
पुनरावर्ती विभाजन
2023 युग की पुस्तकालयों द्वारा लोकप्रिय पदानुक्रम रणनीति। सबसे मजबूत विभाजक पर पहले विभाजित करने का प्रयास करें (डबल न्यूलाइन, पैराग्राफ), अगले (एक नई लाइन), फिर वाक्य, फिर वर्णों पर वापस गिरें। पुनरावृत्ति समाप्त होती है जब टुकड़ा बजट में फिट बैठता है। दस्तावेजों पर मजबूत जो असंगत संरचना है क्योंकि यह प्रति क्षेत्र अनुकूलित होता है।
अर्थिक समूह
प्रत्येक वाक्य को एम्बेड करें. एक विषय के केंद्र बिंदु को साझा करने वाले आसन्न वाक्यों को क्लस्टर करें। जब भी केंद्र बिंदु के साथ चलने वाली समानता एक सीमा से नीचे गिर जाती है, तब काटें। सीमाएं वर्णों को नहीं, बल्कि अर्थ को प्रतिबिंबित करती हैं। निर्माण में धीमा और एम्बेडिंग मॉडल पर निर्भर है, लेकिन अनुच्छेद के भीतर विषयों को बदलने वाले दस्तावेजों के खिलाफ लचीला।
संरचनात्मक मार्कडाउन हेडर
दस्तावेजों के लिए जो स्पष्ट संरचना (मार्कडाउन, रीस्ट्रक्चरडटेक्स, आरएफसी शैली में अंकित खंड) हैं, शीर्षक सीमाओं पर काटें। प्रत्येक टुकड़ा शीर्षक बन जाता है और उसके नीचे की सभी चीजें अगले शीर्षक तक उसी या उच्च स्तर पर नीचे जाती हैं। विषय पर सबसे छोटे टुकड़े, लेकिन केवल तभी उपलब्ध होते हैं जब कॉर्पस अच्छी तरह से तैयार हो।
कैसे recall@k सीमा विकल्प को मापता है
सोने के लेबल वाले क्वेरी में स्रोत दस्तावेज़ के अंदर उत्तर अवधि के सटीक वर्णों का ऑफसेट होता है। टुकड़े टुकड़े करने के बाद, आप पूछते हैंः क्या रिट्रीवर द्वारा लौटे शीर्ष-क टुकड़े में से कोई भी सोने की अवधि को ओवरलैप करता है? यदि हां, तो उस क्वेरी के लिए recall@k 1 है। यदि नहीं, तो यह 0 है। क्वेरी सेट के माध्यम से औसत। प्रत्येक रणनीति के लिए एक ही मूल्यांकन चलाएं और स्प्रेड आपको दिखाता है कि आपके पास कौन सी सीमा नीति है जो आपके पास है।
इसे बनाओ
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 ट्रैक बी के हाइब्रिड रिट्रीवल पाठ में इस्तेमाल किया गया एक ही आकार।eval_recall(strategy, corpus, queries, k)- तुलना लूप।- ए
main()जो कि फिक्स्चर कॉर्पस पर हर रणनीति चलाता है और एक recall@k तालिका प्रिंट करता है।
इसे चलाओः
bashpython3 code/main.pyआउटपुट एक छोटी तालिका है जिसमें प्रति रणनीति एक पंक्ति और प्रति के एक स्तंभ होता है। संरचनात्मक फिक्स्चर पर वाक्य खो जाता है। संरचनात्मक मार्कडाउन मार्कडाउन फिक्स्चर पर जीतता है। रिकर्सिव मिश्रित फिक्स्चर पर अपना खुद का रखती है क्योंकि पुनरावृत्ति अनुकूलित होती है। अर्थिक क्लस्टरिंग प्रोसा फिक्स्चर पर जीतती है जहां कोई उपयोगी संरचनात्मक संकेत नहीं हैं।
विफलता मोड तालिका छिपा नहीं होगा
Orphan sentences.वाक्य पैकिंग में ऐसे टुकड़े होते हैं जो विषय वाक्य को याद करते हैं। इसके बाद एम्बेडिंग गलत क्लस्टर की ओर इशारा करता है।
Mid-symbol cuts.फिक्स्ड विंडो अंदर कोड या YAML एक पहचानकर्ता को आधे में विभाजित करेगा. दोनों आधे शोर में एम्बेड किया गया है.
Header-only chunks.संरचनात्मक मार्कडाउन में केवल ## Title. उन्हें बाहर फ़िल्टर करें या अगले टुकड़े के पहले पैराग्राफ संलग्न करें.
Semantic drift.अर्थशास्त्र समूह के तहत कटौती जब corpus समान रूप से विषय पर है। 5000 वर्णों का एक टुकड़ा कई विशिष्ट उत्तरों को एक विखुरल एम्बेडिंग में पैक करता है। अर्थशास्त्र को एक हार्ड वर्ण कैप के साथ जोड़ें।
Stale embeddings.अर्थिक क्लस्टरिंग में एम्बेडिंग मॉडल का उपयोग किया जाता है। यदि आप मॉडल बदलते हैं, तो आप टुकड़ों को भी बदलते हैं। टुकड़े मॉडल को पुनर्प्राप्त मॉडल से अलग से चिपकाएं या सूचकांक को एक साथ पुनर्निर्माण करें।
बेंचमार्क चलाए बिना डिफ़ॉल्ट चुनना
तीन गुणों एक नए corpus के लिए डिफ़ॉल्ट chunker तय करते हैं।
| 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 |
यदि संदेह हो तो पुनरावर्ती विभाजन चुनें. यह एकल-रणनीति का सबसे मजबूत आधार है।
इसका प्रयोग करें
उत्पादन के पैटर्नः
- नए पाइपलाइन को भेजने से पहले मूल्यांकन चलाएं; अपनी लाइब्रेरी के डिफ़ॉल्ट रणनीति पर भरोसा न करें।
- जब भी आप एम्बेडिंग मॉडल या कॉर्पस मिक्स बदलते हैं तो मूल्यांकन को फिर से चलाएं; विजेता कॉर्पस-निर्भर होता है।
- प्रत्येक टुकड़े के मेटाडेटा में रणनीति नाम बनाए रखें ताकि आप बाद में regressions श्रेय कर सकते हैं।
इसे भेजें
पाठ 69 में ट्रैक F अंत-से-अंत RAG प्रणाली यहाँ चयनित chunker का उपयोग अपने पहले चरण के रूप में करता है। पाठ 68 में मूल्यांकन हर्नर को उसी आकार से recall@k पढ़ा जाता है जो 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 - आरएजी मूल बातें
- चरण 11 पाठ 07 - उन्नत आरएजी
- चरण 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.