Spaces:
Sleeping
Sleeping
| # Embedding Models | |
| ## Overview | |
| Embedding models convert text into high-dimensional vectors that capture semantic meaning. These vectors enable similarity search, clustering, classification, and other vector-based operations essential for modern AI applications. | |
| ## Common Use Cases | |
| - **Semantic Search**: Find documents similar to a query based on meaning | |
| - **Recommendation Systems**: Match users with relevant content | |
| - **Clustering & Classification**: Group similar texts, categorize documents | |
| - **Retrieval-Augmented Generation (RAG)**: Provide context to LLMs | |
| ## Interface | |
| ### Creating an Embedding Model | |
| ```python | |
| from esperanto.factory import AIFactory | |
| # Basic usage | |
| embedder = AIFactory.create_embedding( | |
| provider="openai", | |
| model_name="text-embedding-3-small" | |
| ) | |
| # With configuration | |
| embedder = AIFactory.create_embedding( | |
| provider="jina", | |
| model_name="jina-embeddings-v3", | |
| config={ | |
| "timeout": 60.0, | |
| "batch_size": 32 | |
| } | |
| ) | |
| ``` | |
| ### Core Methods | |
| #### `embed(texts)` | |
| Synchronous embedding generation. | |
| ```python | |
| texts = [ | |
| "Machine learning is a subset of AI", | |
| "Deep learning uses neural networks" | |
| ] | |
| response = embedder.embed(texts) | |
| vectors = [item.embedding for item in response.data] | |
| ``` | |
| #### `aembed(texts)` | |
| Asynchronous embedding generation (identical interface to `embed`). | |
| ```python | |
| response = await embedder.aembed(texts) | |
| vectors = [item.embedding for item in response.data] | |
| ``` | |
| ## Parameters | |
| ### Common Parameters | |
| | Parameter | Type | Default | Description | | |
| |-----------|------|---------|-------------| | |
| | `timeout` | float | 60.0 | Request timeout in seconds | | |
| | `batch_size` | int | Provider default | Number of texts to process per request | | |
| ### Input Format | |
| ```python | |
| # List of strings | |
| texts = ["First text", "Second text", "Third text"] | |
| # Single string (automatically converted to list) | |
| text = "Single text to embed" | |
| ``` | |
| ## Response Structure | |
| All embedding providers return standardized `EmbeddingResponse` objects: | |
| ```python | |
| response = embedder.embed(texts) | |
| # Access embeddings | |
| response.data[0].embedding # Vector for first text (list of floats) | |
| response.data[0].index # Index of the text (0) | |
| # Metadata | |
| response.model # Model name used | |
| response.usage.total_tokens # Total tokens processed | |
| # Get all vectors | |
| vectors = [item.embedding for item in response.data] | |
| ``` | |
| ## Task-Aware Embeddings | |
| Esperanto supports task-specific optimization across all embedding providers. Providers either support this natively or emulate it through intelligent text processing. | |
| ### Available Task Types | |
| ```python | |
| from esperanto.common_types.task_type import EmbeddingTaskType | |
| # Task types | |
| EmbeddingTaskType.RETRIEVAL_QUERY # Search queries | |
| EmbeddingTaskType.RETRIEVAL_DOCUMENT # Documents to store | |
| EmbeddingTaskType.SIMILARITY # General text similarity | |
| EmbeddingTaskType.CLASSIFICATION # Text classification | |
| EmbeddingTaskType.CLUSTERING # Document clustering | |
| EmbeddingTaskType.CODE_RETRIEVAL # Code search | |
| EmbeddingTaskType.QUESTION_ANSWERING # Q&A optimization | |
| EmbeddingTaskType.FACT_VERIFICATION # Fact checking | |
| ``` | |
| ### Using Task Types | |
| ```python | |
| embedder = AIFactory.create_embedding( | |
| provider="jina", | |
| model_name="jina-embeddings-v3", | |
| config={ | |
| "task_type": EmbeddingTaskType.RETRIEVAL_QUERY | |
| } | |
| ) | |
| # Or per-request | |
| query_vector = embedder.embed( | |
| ["What is machine learning?"], | |
| task_type=EmbeddingTaskType.RETRIEVAL_QUERY | |
| ) | |
| ``` | |
| ### Provider Support | |
| | Feature | Native Support | Emulated Support | | |
| |---------|---------------|------------------| | |
| | Task Types | Jina, Google | OpenAI, Transformers, Others | | |
| | Late Chunking | Jina | - | | |
| | Output Dimensions | Jina, OpenAI | - | | |
| → **See [Task-Aware Embeddings Guide](../advanced/task-aware-embeddings.md)** for detailed information. | |
| ## Advanced Features | |
| ### Output Dimensions | |
| Control vector size for some providers: | |
| ```python | |
| embedder = AIFactory.create_embedding( | |
| provider="jina", | |
| model_name="jina-embeddings-v3", | |
| config={"output_dimensions": 512} # Default: 1024 | |
| ) | |
| ``` | |
| **Supported**: Jina, OpenAI (some models) | |
| ### Late Chunking | |
| Improve long-context embeddings: | |
| ```python | |
| embedder = AIFactory.create_embedding( | |
| provider="jina", | |
| model_name="jina-embeddings-v3", | |
| config={"late_chunking": True} | |
| ) | |
| ``` | |
| **Supported**: Jina (native), potentially others via provider-specific APIs | |
| ## Provider Selection | |
| → **See [Provider Comparison](../providers/README.md)** for detailed comparison and selection guide. | |
| ### Quick Provider Guide | |
| - **OpenAI**: Industry standard, excellent quality, broad compatibility | |
| - **Jina**: Advanced features (task types, late chunking, dimensions control) | |
| - **Google**: Native task type support, competitive pricing | |
| - **Voyage**: Specialized for retrieval, strong performance | |
| - **Transformers**: Local deployment, privacy-focused, no API costs | |
| - **Azure**: Enterprise compliance, private deployment | |
| - **Ollama**: Local models, simple setup | |
| ## Examples | |
| ### Basic Embedding | |
| ```python | |
| from esperanto.factory import AIFactory | |
| embedder = AIFactory.create_embedding("openai", "text-embedding-3-small") | |
| texts = [ | |
| "Esperanto is a universal AI interface", | |
| "Machine learning models process data" | |
| ] | |
| response = embedder.embed(texts) | |
| vectors = [item.embedding for item in response.data] | |
| print(f"Generated {len(vectors)} vectors") | |
| print(f"Vector dimension: {len(vectors[0])}") | |
| ``` | |
| ### Task-Optimized Search | |
| ```python | |
| from esperanto.common_types.task_type import EmbeddingTaskType | |
| # Embed documents | |
| doc_embedder = AIFactory.create_embedding( | |
| "jina", "jina-embeddings-v3", | |
| config={"task_type": EmbeddingTaskType.RETRIEVAL_DOCUMENT} | |
| ) | |
| documents = [ | |
| "Python is a programming language", | |
| "JavaScript is used for web development", | |
| "Java is popular for enterprise applications" | |
| ] | |
| doc_vectors = doc_embedder.embed(documents) | |
| # Embed query | |
| query_embedder = AIFactory.create_embedding( | |
| "jina", "jina-embeddings-v3", | |
| config={"task_type": EmbeddingTaskType.RETRIEVAL_QUERY} | |
| ) | |
| query = ["Which language is best for web development?"] | |
| query_vector = query_embedder.embed(query) | |
| # Compute similarity (cosine similarity, etc.) | |
| # ... | |
| ``` | |
| ### Async Batch Processing | |
| ```python | |
| embedder = AIFactory.create_embedding( | |
| "voyage", "voyage-2", | |
| config={"batch_size": 50} | |
| ) | |
| large_corpus = [...] # Many documents | |
| # Process asynchronously | |
| response = await embedder.aembed(large_corpus) | |
| vectors = [item.embedding for item in response.data] | |
| ``` | |
| ### Dimensionality Control | |
| ```python | |
| # Standard dimensions (1024) | |
| embedder_full = AIFactory.create_embedding( | |
| "jina", "jina-embeddings-v3" | |
| ) | |
| # Reduced dimensions (faster, less storage) | |
| embedder_small = AIFactory.create_embedding( | |
| "jina", "jina-embeddings-v3", | |
| config={"output_dimensions": 256} | |
| ) | |
| text = ["Sample text for embedding"] | |
| full_vector = embedder_full.embed(text) | |
| small_vector = embedder_small.embed(text) | |
| print(f"Full: {len(full_vector.data[0].embedding)} dims") | |
| print(f"Small: {len(small_vector.data[0].embedding)} dims") | |
| ``` | |
| ## Similarity Computation | |
| Esperanto returns raw vectors. Use standard libraries for similarity: | |
| ```python | |
| import numpy as np | |
| def cosine_similarity(vec1, vec2): | |
| """Compute cosine similarity between two vectors.""" | |
| return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2)) | |
| # Example | |
| embedder = AIFactory.create_embedding("openai", "text-embedding-3-small") | |
| texts = ["AI and machine learning", "Artificial intelligence research"] | |
| response = embedder.embed(texts) | |
| vec1 = response.data[0].embedding | |
| vec2 = response.data[1].embedding | |
| similarity = cosine_similarity(vec1, vec2) | |
| print(f"Similarity: {similarity:.4f}") | |
| ``` | |
| ## Advanced Topics | |
| - **Task-Aware Embeddings**: [docs/advanced/task-aware-embeddings.md](../advanced/task-aware-embeddings.md) | |
| - **Transformers Advanced Features**: [docs/advanced/transformers-features.md](../advanced/transformers-features.md) | |
| - **Timeout Configuration**: [docs/advanced/timeout-configuration.md](../advanced/timeout-configuration.md) | |
| - **Resource Management**: [docs/advanced/connection-resource-management.md](../advanced/connection-resource-management.md) | |
| ## See Also | |
| - [Provider Setup Guides](../providers/README.md) | |
| - [Reranking Models](./reranking.md) | |
| - [Language Models](./llm.md) | |