# mixedbread-ai/deepset-mxbai-embed-de-large-v1
This model is a powerful open-source German/English embedding model developed by [Mixedbread](https://mixedbread.ai) in collaboration with [deepset](https://deepset.ai). It's built upon [intfloat/multilingual-e5-large](https://huggingface.co/intfloat/multilingual-e5-large) and trained using the [AnglE loss](https://arxiv.org/abs/2309.12871). Read more details in our [blog post](https://www.mixedbread.ai/blog/deepset-mxbai-embed-de-large-v1).
**In a bread loaf**:
- State-of-the-art performance
- Supports both [binary quantization and Matryoshka Representation Learning (MRL)](#binary-quantization-and-matryoshka).
- Fine-tuned on 30+ million pairs of high-quality German data
- Optimized for retrieval tasks
- Supported Langauges: German and English.
- Requires a prompt: `query: {query}` for the query and `passage: {doc}` for the document
## Performance
On the NDCG@10 metric, our model achieves an average performance of 51.7, setting a new standard for open-source German embedding models:
| Model | Avg. Performance (NDCG@10) | Binary Support | MRL Support |
|-------|---------------------------|----------------|-------------|
| **deepset-mxbai-embed-de-large-v1** | **51.7** | ✅ | ✅ |
| multilingual-e5-large | 50.5 | ❌ | ❌ |
| jina-embeddings-v2-base-de | 50.0 | ✅ | ❌ |
|Closed Source Models| | | |
|Cohere Multilingual v3| *52.4* |✅|-|
In a case study with a legal data client, our model outperformed domain-specific alternatives:
| Model | Avg. Performance (MAP@10) |
|-------|---------------------------|
| **deepset-mxbai-embed-de-large-v1** | **90.25** |
| voyage-law-2 | 84.80 |
## Binary Quantization and Matryoshka
Our model supports both [binary quantization](https://www.mixedbread.ai/blog/binary-quantization) and [Matryoshka Representation Learning (MRL)](https://www.mixedbread.ai/blog/mxbai-embed-2d-large-v1), allowing for significant efficiency gains:
- Binary quantization: Retains 91.8% of performance while increasing efficiency by a factor of 32
- MRL: A 25% reduction in vector size still leaves 97.5% of model performance
- At 512 dimensions, over 93% of model performance remains while cutting embedding sizes in half
These optimizations can lead to substantial reductions in infrastructure costs for cloud computing and vector databases. Read more [here](https://www.mixedbread.ai/blog/binary-mrl).
## Quickstart
Here are several ways to produce German sentence embeddings using our model. Note that you need to provide the prompt: `query: {query}` for the query and `passage: {doc}` for the document.
Mixedbread API
```bash
pip install -U mixedbread-ai
```
```python
import { MixedbreadAIClient } from "@mixedbread-ai/sdk";
# 1. Create Client
const mxbai = new MixedbreadAIClient({
apiKey: "YOUR_API_KEY"
});
# 2. Encode
query = 'query: Warum sollte man biologisches Brot kaufen?'
docs = [
query,
"passage: In unserer Bäckerei bieten wir auch glutenfreies Brot an, das für Menschen mit Zöliakie geeignet ist.",
"passage: Kuchen und Gebäck sind ebenfalls Teil unseres Angebots, wobei wir auf höchste Qualität und Frische achten.",
"passage: Wir haben auch eine Auswahl an herzhaften Snacks und Sandwiches, die perfekt für die Mittagspause sind."
"passage: Biologisches Brot wird aus natürlichen Zutaten hergestellt und enthält keine künstlichen Zusatzstoffe. Es ist gesünder und umweltfreundlicher.",
"passage: Unsere Bäckerei bietet eine Vielzahl von Brotsorten an, darunter auch biologisches Brot. Es schmeckt besser und ist frei von chemischen Konservierungsstoffen.",
"passage: Kunden bevorzugen zunehmend biologisches Brot, da es nicht nur gut für die Gesundheit ist, sondern auch einen positiven Beitrag zur Umwelt leistet."
]
const res = await mxbai.embeddings({
model: 'mixedbread-ai/deepset-mxbai-embed-de-large-v1',
input: docs,
normalized: true,
encoding_format: 'float' # or 'binary' for binary embeddings
})
console.log(res.data[0].embedding)
```
[API Reference](https://www.mixedbread.ai/api-reference)
Haystack
```bash
pip install -U haystack-ai mixedbread-ai-haystack
```
```python
from haystack.components.embedders import SentenceTransformersTextEmbedder, SentenceTransformersDocumentEmbedder
text_embedder = SentenceTransformersTextEmbedder(model="mixedbread-ai/deepset-mxbai-embed-de-large-v1")
document_embedder = SentenceTransformersDocumentEmbedder(model="mixedbread-ai/deepset-mxbai-embed-de-large-v1")
# Or use the Mixedbread API with binary embeddings
from mixedbread_ai_haystack import MixedbreadAITextEmbedder, MixedbreadAIDocumentEmbedder
from mixedbread_ai import EncodingFormat
text_embedder = MixedbreadAITextEmbedder( model="mixedbread-ai/deepset-mxbai-embed-de-large-v1",
encoding_format=EncodingFormat.BINARY)
document_embedder = MixedbreadAIDocumentEmbedder(model="mixedbread-ai/deepset-mxbai-embed-de-large-v1",
encoding_format=EncodingFormat.BINARY)
```
angle-emb
```bash
pip install -U angle-emb
```
```python
from angle_emb import AnglE
from angle_emb.utils import cosine_similarity
# 1. Specify preferred dimensions
dimensions = 1024
# 2. Load model and set pooling strategy to avg
model = AnglE.from_pretrained(
"mixedbread-ai/deepset-mxbai-embed-de-large-v1",
pooling_strategy='avg').cuda()
query = 'query: Warum sollte man biologisches Brot kaufen?'
docs = [
query,
"passage: In unserer Bäckerei bieten wir auch glutenfreies Brot an, das für Menschen mit Zöliakie geeignet ist.",
"passage: Kuchen und Gebäck sind ebenfalls Teil unseres Angebots, wobei wir auf höchste Qualität und Frische achten.",
"passage: Wir haben auch eine Auswahl an herzhaften Snacks und Sandwiches, die perfekt für die Mittagspause sind."
"passage: Biologisches Brot wird aus natürlichen Zutaten hergestellt und enthält keine künstlichen Zusatzstoffe. Es ist gesünder und umweltfreundlicher.",
"passage: Unsere Bäckerei bietet eine Vielzahl von Brotsorten an, darunter auch biologisches Brot. Es schmeckt besser und ist frei von chemischen Konservierungsstoffen.",
"passage: Kunden bevorzugen zunehmend biologisches Brot, da es nicht nur gut für die Gesundheit ist, sondern auch einen positiven Beitrag zur Umwelt leistet."
]
# 3. Encode
embeddings = model.encode(docs, embedding_size=dimensions)
for doc, emb in zip(docs[1:], embeddings[1:]):
print(f'{query} ||| {doc}', cosine_similarity(embeddings[0], emb))
```
Sentence Transformers
```bash
python -m pip install -U sentence-transformers
```
```python
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
# 1. Specify preferred dimensions
dimensions = 1024
# 2. Load model
model = SentenceTransformer("mixedbread-ai/deepset-mxbai-embed-de-large-v1", truncate_dim=dimensions)
query = 'query: Warum sollte man biologisches Brot kaufen?'
docs = [
query,
"passage: In unserer Bäckerei bieten wir auch glutenfreies Brot an, das für Menschen mit Zöliakie geeignet ist.",
"passage: Kuchen und Gebäck sind ebenfalls Teil unseres Angebots, wobei wir auf höchste Qualität und Frische achten.",
"passage: Wir haben auch eine Auswahl an herzhaften Snacks und Sandwiches, die perfekt für die Mittagspause sind."
"passage: Biologisches Brot wird aus natürlichen Zutaten hergestellt und enthält keine künstlichen Zusatzstoffe. Es ist gesünder und umweltfreundlicher.",
"passage: Unsere Bäckerei bietet eine Vielzahl von Brotsorten an, darunter auch biologisches Brot. Es schmeckt besser und ist frei von chemischen Konservierungsstoffen.",
"passage: Kunden bevorzugen zunehmend biologisches Brot, da es nicht nur gut für die Gesundheit ist, sondern auch einen positiven Beitrag zur Umwelt leistet."
]
# 3. Encode
embeddings = model.encode(docs)
similarities = cos_sim(embeddings[0], embeddings[1:])
print('similarities:', similarities)
```
transformers
```bash
pip install -U transformers
```
```python
from typing import Dict
import torch
import numpy as np
from transformers import AutoModel, AutoTokenizer
from sentence_transformers.util import cos_sim
def pooling(outputs: torch.Tensor, inputs: Dict) -> np.ndarray:
outputs = torch.sum(
outputs * inputs["attention_mask"][:, :, None], dim=1) / torch.sum(inputs["attention_mask"])
return outputs.detach().cpu().numpy()
# 1. Load model
model_id = 'mixedbread-ai/deepset-mxbai-embed-de-large-v1'
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModel.from_pretrained(model_id).cuda()
query = 'query: Warum sollte man biologisches Brot kaufen?'
docs = [
query,
"passage: In unserer Bäckerei bieten wir auch glutenfreies Brot an, das für Menschen mit Zöliakie geeignet ist.",
"passage: Kuchen und Gebäck sind ebenfalls Teil unseres Angebots, wobei wir auf höchste Qualität und Frische achten.",
"passage: Wir haben auch eine Auswahl an herzhaften Snacks und Sandwiches, die perfekt für die Mittagspause sind."
"passage: Biologisches Brot wird aus natürlichen Zutaten hergestellt und enthält keine künstlichen Zusatzstoffe. Es ist gesünder und umweltfreundlicher.",
"passage: Unsere Bäckerei bietet eine Vielzahl von Brotsorten an, darunter auch biologisches Brot. Es schmeckt besser und ist frei von chemischen Konservierungsstoffen.",
"passage: Kunden bevorzugen zunehmend biologisches Brot, da es nicht nur gut für die Gesundheit ist, sondern auch einen positiven Beitrag zur Umwelt leistet."
]
# 2. Encode
inputs = tokenizer(docs, padding=True, return_tensors='pt')
for k, v in inputs.items():
inputs[k] = v.cuda()
outputs = model(**inputs).last_hidden_state
embeddings = pooling(outputs, inputs)
# 3. Compute similarity scores
similarities = cos_sim(embeddings[0], embeddings[1:])
print('similarities:', similarities)
```
transformers.js
```bash
npm i @xenova/transformers
```
```javascript
import { pipeline, cos_sim } from '@xenova/transformers';
// 1. Create a feature extraction pipeline
const extractor = await pipeline('feature-extraction', 'mixedbread-ai/mxbai-embed-large-v1', {
quantized: false, // Comment out this line to use the quantized version
});
// 2. Encode
query = 'query: Warum sollte man biologisches Brot kaufen?'
docs = [
query,
"passage: In unserer Bäckerei bieten wir auch glutenfreies Brot an, das für Menschen mit Zöliakie geeignet ist.",
"passage: Kuchen und Gebäck sind ebenfalls Teil unseres Angebots, wobei wir auf höchste Qualität und Frische achten.",
"passage: Wir haben auch eine Auswahl an herzhaften Snacks und Sandwiches, die perfekt für die Mittagspause sind."
"passage: Biologisches Brot wird aus natürlichen Zutaten hergestellt und enthält keine künstlichen Zusatzstoffe. Es ist gesünder und umweltfreundlicher.",
"passage: Unsere Bäckerei bietet eine Vielzahl von Brotsorten an, darunter auch biologisches Brot. Es schmeckt besser und ist frei von chemischen Konservierungsstoffen.",
"passage: Kunden bevorzugen zunehmend biologisches Brot, da es nicht nur gut für die Gesundheit ist, sondern auch einen positiven Beitrag zur Umwelt leistet."
]
const output = await extractor(docs, { pooling: 'mean' });
// 3. Compute similarity scores
const [source_embeddings, ...document_embeddings ] = output.tolist();
const similarities = document_embeddings.map(x => cos_sim(source_embeddings, x));
console.log(similarities);
```
## Community
Join our [discord community](https://www.mixedbread.ai/redirects/discord) or the [Haystack community discord](https://discord.com/invite/VBpFzsgRVF) to share your feedback and thoughts. We're here to help and always happy to discuss the exciting field of machine learning!
## License
Apache 2.0
## Citation
```bibtex
@online{germanemb2024mxbai,
title={German Embeddings supporting Binary MRL},
author={Sean Lee, Aamir Shakir, Darius Koenig, Julius Lipp},
year={2024},
url={https://www.mixedbread.ai/blog/deepset-mxbai-embed-de-large-v1},
}
```