Contextual Compression Pattern

Overview

Contextual Compression reduces document size while preserving relevance:

  1. Extractive summarization
  2. Context-aware sentence selection
  3. Relevance scoring and filtering
  4. Dynamic compression based on query context

Implementation Example


from transformers import pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

class ContextualCompressor:
    def __init__(self):
        self.summarizer = pipeline("summarization")
        self.vectorizer = TfidfVectorizer()
        
    def compress(self, document, query, max_length=512):
        # Split document into sentences
        sentences = document.split('. ')
        
        # Calculate relevance scores
        tfidf_matrix = self.vectorizer.fit_transform(sentences + [query])
        query_vec = tfidf_matrix[-1]
        doc_matrix = tfidf_matrix[:-1]
        scores = (query_vec * doc_matrix.T).toarray()[0]
        
        # Select top sentences
        top_indices = np.argsort(scores)[-5:][::-1]
        selected = [sentences[i] for i in top_indices]
        compressed = '. '.join(selected)
        
        # Further summarize if needed
        if len(compressed) > max_length:
            compressed = self.summarizer(
                compressed,
                max_length=max_length,
                min_length=30,
                do_sample=False
            )[0]['summary_text']
            
        return compressed

# Usage
compressor = ContextualCompressor()
document = "..."  # Your document text
compressed = compressor.compress(document, "RAG architecture")
            

When to Use