# Embeddings Module
> **Transform text and images into dense vector representations for semantic search and similarity matching.**
---
## 🎯 Overview
=== "Text Embeddings"
- :material-text:{ .lg .middle } **Transformer Encoders**
BERT, RoBERTa, DeBERTa with advanced pooling strategies
- :material-lightning-bolt:{ .lg .middle } **Sentence Transformers**
Fast, efficient embeddings optimized for semantic similarity
- :material-api:{ .lg .middle } **API Providers**
OpenAI, Cohere, Google, HuggingFace integration
=== "Image Embeddings"
- :material-image:{ .lg .middle } **CLIP**
Contrastive Language-Image Pre-training for multimodal embeddings
- :material-eye:{ .lg .middle } **Vision Transformers**
ViT models for high-quality image representations
- :material-layers:{ .lg .middle } **CNN Models**
ResNet, EfficientNet for feature extraction
=== "Multimodal"
- :material-merge:{ .lg .middle } **Fusion Strategies**
Concatenation, weighted sum, cross-attention fusion
- :material-compare:{ .lg .middle } **Similarity**
Text-image similarity in joint embedding space
---
## ⚙️ Algorithms Used
### Text Embedding Algorithms
- **Transformer Encoders**: BERT, RoBERTa, DeBERTa with mean pooling
- **Sentence Transformers**: Siamese networks trained on sentence pairs
- **OpenAI Embeddings**: Proprietary transformer models (ada-002, text-embedding-3)
- **Contrastive Learning**: InfoNCE loss for similarity learning
### Pooling Strategies
- **Mean Pooling**: Average of all token embeddings
- **Max Pooling**: Maximum value across token dimension
- **CLS Token**: Use [CLS] token embedding (BERT-style)
- **Weighted Mean**: Attention-weighted averaging
### Normalization
- **L2 Normalization**: `v_norm = v / ||v||₂` for cosine similarity
- **Min-Max Scaling**: Scale to [0, 1] range
- **Standard Scaling**: Zero mean, unit variance
---
## Main Classes
### EmbeddingGenerator
**Methods:**
| Method | Description | Algorithm |
|--------|-------------|-----------|
| `generate(texts)` | Generate embeddings | Provider-specific encoding with pooling |
| `generate_batch(texts, batch_size)` | Batch generation | Chunked processing with parallel execution |
| `encode(text)` | Encode single text | Tokenization + forward pass + pooling |
| `normalize(embeddings)` | Normalize vectors | L2 normalization |
| `set_provider(provider, model)` | Set embedding provider | Provider initialization |
**Supported Providers:**
| Provider | Models | Dimensions | Speed | Cost |
|----------|--------|------------|-------|------|
| **OpenAI** | text-embedding-3-small, text-embedding-3-large, ada-002 | 1536, 3072 | Fast | $$ |
| **Cohere** | embed-english-v3.0, embed-multilingual-v3.0 | 1024 | Fast | $$ |
| **HuggingFace** | Custom models | Variable | Medium | Free |
| **Sentence Transformers** | all-MiniLM-L6-v2, all-mpnet-base-v2 | 384, 768 | Fast | Free |
| **Google** | textembedding-gecko | 768 | Fast | $$ |
**Example:**
```python
from semantica.embeddings import EmbeddingGenerator
# OpenAI embeddings
generator = EmbeddingGenerator(
provider="openai",
model="text-embedding-3-large",
dimensions=3072
)
texts = ["Machine learning is fascinating", "AI transforms industries"]
embeddings = generator.generate(texts)
print(f"Shape: {embeddings.shape}") # (2, 3072)
print(f"Normalized: {np.linalg.norm(embeddings[0]):.3f}") # 1.000
# Batch processing
large_texts = [...] # 10,000 texts
embeddings = generator.generate_batch(
texts=large_texts,
batch_size=100,
show_progress=True
)
```
---
### TextEmbedder
**Methods:**
| Method | Description | Algorithm |
|--------|-------------|-----------|
| `embed(text)` | Embed single text | Tokenization + encoding + pooling |
| `embed_batch(texts)` | Batch embedding | Parallel processing |
| `embed_query(query)` | Embed query (optimized) | Query-specific encoding |
| `embed_documents(documents)` | Embed documents | Document-specific encoding |
| `tokenize(text)` | Tokenize text | Subword tokenization (BPE/WordPiece) |
**Tokenization Algorithms:**
- **BPE (Byte Pair Encoding)**: Iterative merging of frequent pairs
- **WordPiece**: Similar to BPE, used in BERT
- **SentencePiece**: Unigram language model tokenization
**Example:**
```python
from semantica.embeddings import TextEmbedder
embedder = TextEmbedder(
model="sentence-transformers/all-mpnet-base-v2",
pooling="mean", # mean, max, cls
normalize=True
)
# Different embedding strategies
query_embedding = embedder.embed_query("What is machine learning?")
doc_embeddings = embedder.embed_documents([
"Machine learning is a subset of AI...",
"Deep learning uses neural networks..."
])
# Calculate similarity
from sklearn.metrics.pairwise import cosine_similarity
similarity = cosine_similarity([query_embedding], doc_embeddings)
print(f"Similarities: {similarity}")
```
---
### ImageEmbedder
**Methods:**
| Method | Description | Algorithm |
|--------|-------------|-----------|
| `embed(image)` | Embed single image | CNN/ViT encoding |
| `embed_batch(images)` | Batch image embedding | Parallel CNN/ViT processing |
| `preprocess(image)` | Preprocess image | Resize, normalize, augment |
| `extract_features(image)` | Extract visual features | Feature map extraction |
**Image Embedding Models:**
- **CLIP**: Contrastive Language-Image Pre-training
- **ViT (Vision Transformer)**: Transformer for images
- **ResNet**: Residual networks
- **EfficientNet**: Efficient convolutional networks
**Example:**
```python
from semantica.embeddings import ImageEmbedder
from PIL import Image
embedder = ImageEmbedder(
model="openai/clip-vit-base-patch32",
image_size=224
)
image = Image.open("photo.jpg")
embedding = embedder.embed(image)
print(f"Image embedding shape: {embedding.shape}")
```
---
### MultimodalEmbedder
**Methods:**
| Method | Description | Algorithm |
|--------|-------------|-----------|
| `embed(text, image)` | Embed text + image | Multimodal fusion |
| `embed_text_image(text, image)` | Joint embedding | CLIP-style contrastive learning |
| `fuse_embeddings(text_emb, image_emb)` | Fuse embeddings | Concatenation or weighted sum |
| `calculate_similarity(text, image)` | Text-image similarity | Cosine similarity in joint space |
**Fusion Strategies:**
- **Concatenation**: `[text_emb; image_emb]`
- **Weighted Sum**: `α*text_emb + (1-α)*image_emb`
- **Cross-Attention**: Attention-based fusion
**Example:**
```python
from semantica.embeddings import MultimodalEmbedder
embedder = MultimodalEmbedder(
model="openai/clip-vit-base-patch32",
fusion_strategy="weighted_sum",
text_weight=0.6
)
text = "A cat sitting on a couch"
image = Image.open("cat.jpg")
embedding = embedder.embed(text, image)
similarity = embedder.calculate_similarity(text, image)
print(f"Text-Image similarity: {similarity:.3f}")
```
---
### EmbeddingOptimizer
**Methods:**
| Method | Description | Algorithm |
|--------|-------------|-----------|
| `optimize(embeddings)` | Optimize embeddings | Dimensionality reduction + quantization |
| `reduce_dimensions(embeddings, target_dim)` | Reduce dimensions | PCA or random projection |
| `quantize(embeddings, bits)` | Quantize embeddings | Scalar or product quantization |
| `compress(embeddings)` | Compress embeddings | Lossy compression |
**Optimization Techniques:**
- **PCA**: Linear dimensionality reduction
- **Random Projection**: Fast approximate reduction
- **Product Quantization**: Divide into subvectors, quantize separately
- **Scalar Quantization**: Reduce precision (float32 → int8)
**Example:**
```python
from semantica.embeddings import EmbeddingOptimizer
optimizer = EmbeddingOptimizer()
# Reduce dimensions
reduced = optimizer.reduce_dimensions(
embeddings=embeddings,
target_dim=256, # from 1536 to 256
method="pca"
)
# Quantize to int8
quantized = optimizer.quantize(
embeddings=embeddings,
bits=8 # float32 → int8 (4x compression)
)
```
---
## Configuration
```yaml
# config.yaml - Embeddings Configuration
embeddings:
provider: openai # openai, cohere, huggingface, sentence-transformers
openai:
model: text-embedding-3-large
dimensions: 3072
api_key: ${OPENAI_API_KEY}
sentence_transformers:
model: all-mpnet-base-v2
pooling: mean # mean, max, cls
normalize: true
device: cuda # cuda, cpu
batch_processing:
batch_size: 100
parallel_workers: 4
show_progress: true
optimization:
reduce_dimensions: false
target_dimensions: 256
quantize: false
quantization_bits: 8
```
---
## Performance Characteristics
### Embedding Speed
| Model | Dimensions | Tokens/sec | Batch Size | Device |
|-------|------------|------------|------------|--------|
| OpenAI ada-002 | 1536 | 10,000 | 100 | API |
| OpenAI text-embedding-3-large | 3072 | 8,000 | 100 | API |
| all-MiniLM-L6-v2 | 384 | 5,000 | 32 | GPU |
| all-mpnet-base-v2 | 768 | 2,000 | 32 | GPU |
| BERT-base | 768 | 1,000 | 16 | GPU |
### Memory Requirements
| Model | Dimensions | Memory (GPU) | Memory (CPU) |
|-------|------------|--------------|--------------|
| MiniLM | 384 | 1 GB | 2 GB |
| MPNet | 768 | 2 GB | 4 GB |
| BERT-large | 1024 | 4 GB | 8 GB |
---
## See Also
- [Vector Store Module](vector_store.md) - Store and search embeddings
- [Semantic Extract Module](semantic_extract.md) - Extract entities
- [Core Module](core.md) - Framework orchestration