Views
No views yet
| Model | Dimensions | Average (56) | Classification (12) | Clustering (11) | Pair Classification (3) | Reranking (4) | Retrieval (15) | STS (10) | Summarization (1) |
|---|---|---|---|---|---|---|---|---|---|
| nomic-embed-text-v1.5 | 768 | 62.28 | 73.55 | 43.93 | 84.61 | 55.78 | 53.01 | 81.94 | 30.4 |
| modernbert-embed-base | 768 | 62.62 | 74.31 | 44.98 | 83.96 | 56.42 | 52.89 | 81.78 | 31.39 |
| modernbert-embed-large | 1024 | 63,84 | 75.03 | 46.04 | 85.31 | 57.64 | 54.36 | 83.80 | 28.31 |
| nomic-embed-text-v1.5 | 256 | 61.04 | 72.1 | 43.16 | 84.09 | 55.18 | 50.81 | 81.34 | 30.05 |
| modernbert-embed-base | 256 | 61.17 | 72.40 | 43.82 | 83.45 | 55.69 | 50.62 | 81.12 | 31.27 |
| modernbert-embed-large | 256 | 62.43 | 73.60 | 44.59 | 84.89 | 57.08 | 51.72 | 83.46 | 29.03 |
transformers>=4.48.0:pip install transformers>=4.48.0search_query: to the query and search_document: to the documents will be sufficient.1from sentence_transformers import SentenceTransformer
2
3model = SentenceTransformer("lightonai/modernbert-embed-large")
4
5query_embeddings = model.encode([
6 "search_query: What is TSNE?",
7 "search_query: Who is Laurens van der Maaten?",
8])
9doc_embeddings = model.encode([
10 "search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten",
11])
12print(query_embeddings.shape, doc_embeddings.shape)
13# (2, 1024) (1, 1024)
14
15similarities = model.similarity(query_embeddings, doc_embeddings)
16print(similarities)
17# tensor([[0.6518],
18# [0.4237]])truncate_dim parameter when loading the SentenceTransformer model.1from sentence_transformers import SentenceTransformer
2
3model = SentenceTransformer("lightonai/modernbert-embed-large", truncate_dim=256)
4
5query_embeddings = model.encode([
6 "search_query: What is TSNE?",
7 "search_query: Who is Laurens van der Maaten?",
8])
9doc_embeddings = model.encode([
10 "search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten",
11])
12print(query_embeddings.shape, doc_embeddings.shape)
13# (2, 256) (1, 256)
14
15similarities = model.similarity(query_embeddings, doc_embeddings)
16print(similarities)
17# tensor([[0.6835],
18# [0.3982]])1import torch
2import torch.nn.functional as F
3from transformers import AutoTokenizer, AutoModel
4
5
6def mean_pooling(model_output, attention_mask):
7 token_embeddings = model_output[0]
8 input_mask_expanded = (
9 attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
10 )
11 return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(
12 input_mask_expanded.sum(1), min=1e-9
13 )
14
15
16queries = ["search_query: What is TSNE?", "search_query: Who is Laurens van der Maaten?"]
17documents = ["search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten"]
18
19tokenizer = AutoTokenizer.from_pretrained("lightonai/modernbert-embed-large")
20model = AutoModel.from_pretrained("lightonai/modernbert-embed-large")
21
22encoded_queries = tokenizer(queries, padding=True, truncation=True, return_tensors="pt")
23encoded_documents = tokenizer(documents, padding=True, truncation=True, return_tensors="pt")
24
25with torch.no_grad():
26 queries_outputs = model(**encoded_queries)
27 documents_outputs = model(**encoded_documents)
28
29query_embeddings = mean_pooling(queries_outputs, encoded_queries["attention_mask"])
30query_embeddings = F.normalize(query_embeddings, p=2, dim=1)
31doc_embeddings = mean_pooling(documents_outputs, encoded_documents["attention_mask"])
32doc_embeddings = F.normalize(doc_embeddings, p=2, dim=1)
33print(query_embeddings.shape, doc_embeddings.shape)
34# torch.Size([2, 1024]) torch.Size([1, 1024])
35
36similarities = query_embeddings @ doc_embeddings.T
37print(similarities)
38# tensor([[0.6518],
39# [0.4237]])transformers, you can truncate embeddings to a smaller dimension by slicing the mean pooled embeddings, prior to normalization.1import torch
2import torch.nn.functional as F
3from transformers import AutoTokenizer, AutoModel
4
5
6def mean_pooling(model_output, attention_mask):
7 token_embeddings = model_output[0]
8 input_mask_expanded = (
9 attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
10 )
11 return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(
12 input_mask_expanded.sum(1), min=1e-9
13 )
14
15
16queries = ["search_query: What is TSNE?", "search_query: Who is Laurens van der Maaten?"]
17documents = ["search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten"]
18
19tokenizer = AutoTokenizer.from_pretrained(".")
20model = AutoModel.from_pretrained(".")
21truncate_dim = 256
22
23encoded_queries = tokenizer(queries, padding=True, truncation=True, return_tensors="pt")
24encoded_documents = tokenizer(documents, padding=True, truncation=True, return_tensors="pt")
25
26with torch.no_grad():
27 queries_outputs = model(**encoded_queries)
28 documents_outputs = model(**encoded_documents)
29
30query_embeddings = mean_pooling(queries_outputs, encoded_queries["attention_mask"])
31query_embeddings = query_embeddings[:, :truncate_dim]
32query_embeddings = F.normalize(query_embeddings, p=2, dim=1)
33doc_embeddings = mean_pooling(documents_outputs, encoded_documents["attention_mask"])
34doc_embeddings = doc_embeddings[:, :truncate_dim]
35doc_embeddings = F.normalize(doc_embeddings, p=2, dim=1)
36print(query_embeddings.shape, doc_embeddings.shape)
37# torch.Size([2, 256]) torch.Size([1, 256])
38
39similarities = query_embeddings @ doc_embeddings.T
40print(similarities)
41# tensor([[0.6835],
42# [0.3982]])npm i @huggingface/transformers1import { pipeline, matmul } from '@huggingface/transformers';
2
3// Create a feature extraction pipeline
4const extractor = await pipeline(
5 "feature-extraction",
6 "lightonai/modernbert-embed-large",
7 { dtype: "fp32" }, // Supported options: "fp32", "fp16", "q8", "q4", "q4f16"
8);
9
10// Embed queries and documents
11const query_embeddings = await extractor([
12 "search_query: What is TSNE?",
13 "search_query: Who is Laurens van der Maaten?",
14 ], { pooling: "mean", normalize: true },
15);
16const doc_embeddings = await extractor([
17 "search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten",
18 ], { pooling: "mean", normalize: true },
19);
20
21// Compute similarity scores
22const similarities = await matmul(query_embeddings, doc_embeddings.transpose(1, 0));
23console.log(similarities.tolist());contrastors repository1@misc{modernbert,
2 title={Smarter, Better, Faster, Longer: A Modern Bidirectional Encoder for Fast, Memory Efficient, and Long Context Finetuning and Inference},
3 author={Benjamin Warner and Antoine Chaffin and Benjamin Clavié and Orion Weller and Oskar Hallström and Said Taghadouini and Alexis Gallagher and Raja Biswas and Faisal Ladhak and Tom Aarsen and Nathan Cooper and Griffin Adams and Jeremy Howard and Iacopo Poli},
4 year={2024},
5 eprint={2412.13663},
6 archivePrefix={arXiv},
7 primaryClass={cs.CL},
8 url={https://arxiv.org/abs/2412.13663},
9}1@misc{nussbaum2024nomic,
2 title={Nomic Embed: Training a Reproducible Long Context Text Embedder},
3 author={Zach Nussbaum and John X. Morris and Brandon Duderstadt and Andriy Mulyar},
4 year={2024},
5 eprint={2402.01613},
6 archivePrefix={arXiv},
7 primaryClass={cs.CL}
8}1@misc{ModernBERT-embed-large,
2 title={ModernBERT-embed-large},
3 author={Chaffin, Antoine},
4 url={https://huggingface.co/lightonai/modernbert-embed-large},
5 year={2025}
6}