|
--- |
|
license: apache-2.0 |
|
language: |
|
- en |
|
- fa |
|
- ar |
|
inference: true |
|
base_model: |
|
- jinaai/jina-embeddings-v3 |
|
pipeline_tag: feature-extraction |
|
tags: |
|
- Embedding |
|
library_name: transformers |
|
--- |
|
|
|
# Jina-embedding-v3 |
|
|
|
|
|
## Overview |
|
|
|
This repository uses the original [jinai/jina-embeddings-v3](https://huggingface.co/jinaai/jina-embeddings-v3) embedding model, without modification or fine-tuning. |
|
A versatile sentence embedding model suitable for a wide range of natural language processing tasks |
|
you can find the specific tasks in the *Tasks* section |
|
|
|
*The only difference is that you can use HF inference from this page, which is unavailable in the official page of jinaai.* |
|
|
|
|
|
--- |
|
|
|
## Inference Access |
|
|
|
You can use this model for inference directly from this page using Hugging Face’s serverless inference API. |
|
This is not possible via the official Jina AI model page. Here’s an example of how to get sentence embeddings using the Hugging Face Inference API: |
|
|
|
you can use the function below for inference (it applies mean-pooling and normalization too and returns embeddings ready to store in your vector databases) |
|
```python |
|
from huggingface_hub import InferenceClient |
|
import numpy as np |
|
|
|
def get_HF_embeddings(text, api_key, model, mean_pool=True, l2_normalize=True): |
|
""" |
|
Fetches embeddings from HuggingFace serverless Inference API for a single string or a list of strings. |
|
Args: |
|
text (str or list): Input text or list of texts. |
|
api_key (str): HuggingFace API key. |
|
model (str): Model repo. |
|
mean_pool (bool): If True, mean-pool the output. |
|
l2_normalize (bool): If True, L2 normalize the output. |
|
Returns: |
|
np.ndarray: Embedding(s) as numpy array(s). |
|
""" |
|
client = InferenceClient(api_key=api_key) |
|
if isinstance(text, str): |
|
texts = [text] |
|
single_input = True |
|
else: |
|
texts = text |
|
single_input = False |
|
|
|
result = client.feature_extraction( |
|
text=texts, |
|
model=model |
|
) |
|
|
|
if mean_pool: |
|
embeddings = [np.mean(r, axis=0) for r in result] |
|
if l2_normalize: |
|
embeddings = [ |
|
e / np.linalg.norm(e) if np.linalg.norm(e) > 0 else e for e in embeddings] |
|
else: |
|
embeddings = [r for r in result] |
|
|
|
if single_input: |
|
return embeddings[0] |
|
return np.array(embeddings) |
|
``` |
|
|
|
--- |
|
|
|
|
|
|
|
## Tasks |
|
|
|
- **Extended Sequence Length:** Supports up to 8192 tokens with RoPE positional encoding. |
|
- **Task-Specific Embeddings:** Choose the `task` parameter for different application needs: |
|
- `retrieval.query` – For query embeddings in asymmetric retrieval |
|
- `retrieval.passage` – For passage embeddings in asymmetric retrieval |
|
- `separation` – For clustering and re-ranking |
|
- `classification` – For classification tasks |
|
- `text-matching` – For symmetric similarity tasks (e.g., STS) |
|
- **Matryoshka Embeddings:** Flexible embedding sizes (32, 64, 128, 256, 512, 768, 1024 dimensions). |
|
|
|
--- |
|
|
|
## How to Use |
|
|
|
You can use this model with either the `transformers` or the `sentence-transformers` library. |
|
For **full feature support** (using task-specific LoRA heads and flexible embedding sizes), it is recommended to use the `sentence-transformers` library. |
|
|
|
### Using sentence-transformers (Recommended) |
|
|
|
```python |
|
from sentence_transformers import SentenceTransformer |
|
|
|
model = SentenceTransformer("Sajjad313/jina-embedding-v3", trust_remote_code=True) |
|
|
|
# Task-specific usage: Retrieval query embedding |
|
query_embedding = model.encode( |
|
["What is the weather like in Berlin today?"], |
|
task="retrieval.query" |
|
) |
|
``` |
|
|
|
### Using transformers |
|
|
|
```python |
|
from transformers import AutoTokenizer, AutoModel |
|
|
|
tokenizer = AutoTokenizer.from_pretrained("jinaai/jina-embeddings-v3") |
|
model = AutoModel.from_pretrained("jinaai/jina-embeddings-v3") |
|
|
|
inputs = tokenizer( |
|
"What is the weather like in Berlin today?", |
|
return_tensors="pt", padding=True, truncation=True |
|
) |
|
outputs = model(**inputs) |
|
embedding = outputs.last_hidden_state[:, 0] # CLS token embedding |
|
``` |
|
> Note: Using the `transformers` library gives you basic access to the model’s output, but for full task-specific capabilities, use `sentence-transformers`. |
|
|
|
--- |
|
|