chunking

**Text Chunking for RAG** **Why Chunking Matters** RAG systems need to split documents into smaller pieces for embedding and retrieval. Chunk size and strategy significantly impact retrieval quality. **Chunking Strategies** **Fixed Size** Split by character/token count: ```python def fixed_chunk(text: str, chunk_size: int = 500, overlap: int = 50) -> list: chunks = [] start = 0 while start < len(text): end = start + chunk_size chunks.append(text[start:end]) start = end - overlap return chunks ``` **Semantic Chunking** Split at natural boundaries: - Paragraphs - Sections (headers) - Sentences - Topics (using embeddings) **Recursive Splitting** Try multiple separators hierarchically: ```python from langchain.text_splitter import RecursiveCharacterTextSplitter splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50, separators=[" ", " ", ". ", " ", ""] ) chunks = splitter.split_text(document) ``` **Chunk Size Guidelines** | Use Case | Recommended Size | Notes | |----------|------------------|-------| | Q&A retrieval | 100-500 tokens | Precise answers | | Summarization | 500-1000 tokens | Coherent context | | Code | Function-level | Logical units | | Tables | Full table | Preserve structure | **Overlap Considerations** | Overlap % | Benefit | Tradeoff | |-----------|---------|----------| | 0% | Storage efficient | May split mid-concept | | 10-20% | Balanced | Standard choice | | 30-50% | Context preservation | More storage, redundancy | **Document-Specific Chunking** **Code** ```python def chunk_code(code: str) -> list: # Split by function/class definitions # Keep docstrings with their functions # Respect indentation boundaries ``` **Markdown** ```python def chunk_markdown(md: str) -> list: # Split at headers # Keep header hierarchy metadata # Preserve code blocks intact ``` **Tables** Keep tables together: ```python def handle_table(table_text: str) -> list: # Never split a table # Include table caption # Add column headers to each chunk if splitting rows ``` **Metadata** Attach context to chunks: ```python chunk = { "text": "...", "source": "document.pdf", "page": 5, "section": "Introduction", "char_start": 1500, "char_end": 2000 } ``` Metadata enables filtering, citation, and context reconstruction.

Go deeper with CFSGPT

Get AI-powered deep-dives, save terms, and run advanced simulations — free account.

Create Free Account