Module 4: Evaluation and Chunking Strategies
A/B Testing Chunking Strategies
Quick overview
Systematic A/B testing lets you compare strategies (fixed vs semantic, chunk size 400 vs 800) with data. Without A/B testing, you choose arbitrarily. With it, you optimize with statistical confidence.
You'll learn experiment setup, statistical significance, and optimization loops.
A/B experiment setup
# Strategies to compare:
strategies = {
'fixed_400': TokenChunker(chunk_size=400, overlap=40),
'fixed_800': TokenChunker(chunk_size=800, overlap=80),
'semantic': SemanticChunker(max_tokens=600)
}
# Evaluate each strategy:
results = {}
for name, chunker in strategies.items():
chunks = chunker.chunk(documents)
# Embed + evaluate
metrics = evaluate_retrieval(chunks, eval_dataset)
results[name] = metrics
# Compare:
print("Strategy | Recall@5 | nDCG@5")
print("------------|----------|--------")
for name, metrics in results.items():
print(f"{name:12}| {metrics['recall@5']:.3f} | {metrics['ndcg@5']:.3f}")
Example output:
Strategy | Recall@5 | nDCG@5
------------|----------|--------
fixed_400 | 0.820 | 0.780
fixed_800 | 0.880 | 0.850
semantic | 0.900 | 0.870 ← Best
Statistical Significance
T-test to compare 2 strategies:
from scipy import stats
# Metrics from both strategies (100 queries each)
recall_strategy_a = [0.8, 0.9, 0.7, ...] # 100 values
recall_strategy_b = [0.85, 0.92, 0.75, ...]
# T-test
t_stat, p_value = stats.ttest_ind(recall_strategy_a, recall_strategy_b)
print(f"P-value: {p_value:.4f}")
if p_value < 0.05:
print("✅ Difference is statistically significant")
else:
print("❌ Difference is NOT significant (could be noise)")
Summary
What you learned:
- ✅ A/B testing setup
- ✅ Comparing multiple strategies
- ✅ Statistical significance (p < 0.05)
Key insight: Semantic chunking is typically better, but more complex.
In the next capsule
Capsule 07: Advanced Chunking Patterns
You'll learn recursive chunking, metadata enrichment, hierarchical chunks.
Module 4 - Embeddings Deep Dive Guide A/B testing: data-driven optimization