Model reference · open weights

modernbert-embed-large

Available as managed deployment Embeddings lightonai Embeddings 1 variants 8k dl/mo

modernbert-embed-large is an open-weight embedding model from lightonai. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.

Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.

What it is

Makerlightonai
TypeEmbedding models
TaskEmbeddings
Parameters (lead)395M
Context8k tokens
Runs withsentence-transformers
Based onanswerdotai/ModernBERT-large, lightonai/modernbert-embed-large-unsupervised
Released2025-01-13
Popularity8k downloads / month
LicenceOpen weights

About

What modernbert-embed-large is

ModernBERT-embed-large is an embedding model trained from ModernBERT-large, bringing the new advances of ModernBERT to embeddings!

Indeed, ModernBERT is a base model trained for Masked Language Modeling and can not directly be used to perform tasks such as retrieval without further fine-tuning.

ModernBERT-embed-large is fine-tuned on the Nomic Embed weakly-supervised and supervised datasets and also supports Matryoshka Representation Learning dimensions of 256 to reduce memory with minimal performance loss.

Performance

ModelDimensionsAverage (56)Classification (12)Clustering (11)Pair Classification (3)Reranking (4)Retrieval (15)STS (10)Summarization (1)
nomic-embed-text-v1.576862.2873.5543.9384.6155.7853.0181.9430.4
modernbert-embed-base76862.6274.3144.9883.9656.4252.8981.7831.39
modernbert-embed-large102463,8475.0346.0485.3157.6454.3683.8028.31
nomic-embed-text-v1.525661.0472.143.1684.0955.1850.8181.3430.05
modernbert-embed-base25661.1772.4043.8283.4555.6950.6281.1231.27
modernbert-embed-large25662.4373.6044.5984.8957.0851.7283.4629.03

Usage

You can use these models directly with the latest transformers release and requires installing transformers>=4.48.0:

pip install transformers>=4.48.0

Reminder, this model is trained similarly to Nomic Embed and REQUIRES prefixes to be added to the input. For more information, see the instructions in Nomic Embed.

Most use cases, adding search_query: to the query and search_document: to the documents will be sufficient.

Sentence Transformers

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("lightonai/modernbert-embed-large")

query_embeddings = model.encode([
    "search_query: What is TSNE?",
    "search_query: Who is Laurens van der Maaten?",
])
doc_embeddings = model.encode([
    "search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten",
])
print(query_embeddings.shape, doc_embeddings.shape)
# (2, 1024) (1, 1024)

similarities = model.similarity(query_embeddings, doc_embeddings)
print(similarities)
# tensor([[0.6518],
#         [0.4237]])

In Sentence Transformers, you can truncate embeddings to a smaller dimension by using the truncate_dim parameter when loading the SentenceTransformer model.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("lightonai/modernbert-embed-large", truncate_dim=256)

query_embeddings = model.encode([
    "search_query: What is TSNE?",
    "search_query: Who is Laurens van der Maaten?",
])
doc_embeddings = model.encode([
    "search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten",
])
print(query_embeddings.shape, doc_embeddings.shape)
# (2, 256) (1, 256)

similarities = model.similarity(query_embeddings, doc_embeddings)
print(similarities)
# tensor([[0.6835],
#         [0.3982]])

Note the small differences compared to the full 1024-dimensional similarities.

Transformers

import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]
    input_mask_expanded = (
        attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    )
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(
        input_mask_expanded.sum(1), min=1e-9
    )

queries = ["search_query: What is TSNE?", "search_query: Who is Laurens van der Maaten?"]
documents = ["search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten"]

tokenizer = AutoTokenizer.from_pretrained("lightonai/modernbert-embed-large")
model = AutoModel.from_pretrained("lightonai/modernbert-embed-large")

encoded_queries = tokenizer(queries, padding=True, truncation=True, return_tensors="pt")
encoded_documents = tokenizer(documents, padding=True, truncation=True, return_tensors="pt")

with torch.no_grad():
    queries_outputs = model(**encoded_queries)
    documents_outputs = model(**encoded_documents)

query_embeddings = mean_pooling(queries_outputs, encoded_queries["attention_mask"])
query_embeddings = F.normalize(query_embeddings, p=2, dim=1)
doc_embeddings = mean_pooling(documents_outputs, encoded_documents["attention_mask"])
doc_embeddings = F.normalize(doc_embeddings, p=2, dim=1)
print(query_embeddings.shape, doc_embeddings.shape)
# torch.Size([2, 1024]) torch.Size([1, 1024])

similarities = query_embeddings @ doc_embeddings.T
print(similarities)
# tensor([[0.6518],
#         [0.4237]])

In transformers, you can truncate embeddings to a smaller dimension by slicing the mean pooled embeddings, prior to normalization.

import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel

def mean_poo

From the published model card. Full card on the HuggingFace links in the sidebar.

Benchmarks

Reported results

As published on the model card — the maker's own numbers, not measured by AxForge.

TaskDatasetMetricScore
ClassificationMTEB AmazonCounterfactualClassification (en)accuracy76.791
ClassificationMTEB AmazonCounterfactualClassification (en)ap39.796
ClassificationMTEB AmazonCounterfactualClassification (en)f170.696
ClassificationMTEB AmazonPolarityClassificationaccuracy94.195
ClassificationMTEB AmazonPolarityClassificationap91.751
ClassificationMTEB AmazonPolarityClassificationf194.192
ClassificationMTEB AmazonReviewsClassification (en)accuracy47.664
ClassificationMTEB AmazonReviewsClassification (en)f146.933
RetrievalMTEB ArguAnamap_at_125.178
RetrievalMTEB ArguAnamap_at_1041.088
RetrievalMTEB ArguAnamap_at_10042.143
RetrievalMTEB ArguAnamap_at_100042.152
RetrievalMTEB ArguAnamap_at_2041.946
RetrievalMTEB ArguAnamap_at_336.048
RetrievalMTEB ArguAnamap_at_538.619
RetrievalMTEB ArguAnamrr_at_125.533
RetrievalMTEB ArguAnamrr_at_1041.238
RetrievalMTEB ArguAnamrr_at_10042.293
RetrievalMTEB ArguAnamrr_at_100042.302
RetrievalMTEB ArguAnamrr_at_2042.096
RetrievalMTEB ArguAnamrr_at_336.261
RetrievalMTEB ArguAnamrr_at_538.797
RetrievalMTEB ArguAnandcg_at_125.178
RetrievalMTEB ArguAnandcg_at_1050.352

Using it via the API

Call it like any OpenAI endpoint

Once AxForge deploys modernbert-embed-large for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (modernbert-embed-large below is illustrative; you get the exact model name on deployment.)

$ curl -sS https://api.axforge.ai/v1/embeddings \
  -H "Authorization: Bearer $AXFORGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"modernbert-embed-large","input":"text to embed"}'

Create an account — your API key is available in the console. 5M tokens/month currently included with every new account at launch.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms