/ Модель

Характеристики

Контекст
8 192 токена
Параметры
149 млн
Лицензия
Apache 2.0
Архитектура
modernbert · dense
Базовая модель
ModernBERT-base
Опубликована
29 дек 2024

modernbert-embed-base

ЭмбеддингиТекст → embedding11 профессий

Англоязычная модель Nomic AI преобразует текст в эмбеддинги для семантического поиска, сравнения предложений, классификации и кластеризации.

157 тыс.скачиваний за 30 дней234лайкавеса обновлены24 янв 2025

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Эмбеддинги» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки21

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

  • MemGovern

    main_score

    Результат

    0,8613

    Общий результат 0,9673Общий результат 0,8954Общий результат 0,889
    MTEB

    Публичная таблицаревизия не подтверждена

  • EPBench

    main_score

    Результат

    1

    Общий результат 0,9262Общий результат 0,8811Общий результат 0,8558
    MTEB

    Публичная таблицаревизия не подтверждена

  • ProceduralMemBench

    main_score

    Результат

    0,5978

    MTEB

    Публичная таблицаревизия не подтверждена

  • ImdbClassification

    main_score

    Результат

    0,8661

    MTEB

    Публичная таблицаревизия не подтверждена

  • DeepPlanning

    main_score

    Результат

    0,4933

    MTEB

    Публичная таблицаревизия не подтверждена

  • ReMe

    main_score

    Результат

    0,4722

    Общий результат 0,6063
    MTEB

    Публичная таблицаревизия не подтверждена

  • Gorilla

    main_score

    Результат

    0,3421

    MTEB

    Публичная таблицаревизия не подтверждена

  • TwitterURLCorpus

    main_score

    Результат

    0,8621

    MTEB

    Публичная таблицаревизия не подтверждена

  • PeerQA

    main_score

    Результат

    0,3451

    MTEB

    Публичная таблицаревизия не подтверждена

  • TweetSentimentExtractionClassification

    main_score

    Результат

    0,6236

    MTEB

    Публичная таблицаревизия не подтверждена

  • MemBench

    main_score

    Результат

    0,7619

    Общий результат 0,8817Общий результат 0,5428Общий результат 0,4339
    MTEB

    Публичная таблицаревизия не подтверждена

  • BIOSSES

    main_score

    Результат

    0,7816

    MTEB

    Публичная таблицаревизия не подтверждена

  • MedrxivClusteringP2P

    main_score

    Результат

    0,3435

    MTEB

    Публичная таблицаревизия не подтверждена

  • CQADupstackWebmastersRetrieval

    main_score

    Результат

    0,3992

    MTEB

    Публичная таблицаревизия не подтверждена

  • ESGReports

    main_score

    Результат

    0,3437

    MTEB

    Публичная таблицаревизия не подтверждена

  • MTOPIntentClassification

    main_score

    Результат

    0,7786

    MTEB

    Публичная таблицаревизия не подтверждена

  • TMD

    main_score

    Результат

    0,1708

    Общий результат 0,2982
    MTEB

    Публичная таблицаревизия не подтверждена

  • NovelQA

    main_score

    Результат

    0,2676

    Общий результат 0,4842Общий результат 0,373
    MTEB

    Публичная таблицаревизия не подтверждена

  • ArguAna

    main_score

    Результат

    0,4896

    MTEB

    Публичная таблицаревизия не подтверждена

  • STS15

    main_score

    Результат

    0,8825

    MTEB

    Публичная таблицаревизия не подтверждена

  • NQ

    main_score

    Результат

    0,6215

    MTEB

    Публичная таблицаревизия не подтверждена

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

ModernBERT Embed Base — англоязычная модель эмбеддингов от Nomic AI, созданная на основе ModernBERT-base и обученная на слабонаблюдаемых и размеченных данных Nomic Embed. Она преобразует текст в векторы для семантического поиска, сравнения предложений, классификации и кластеризации. Модель имеет архитектуру ModernBERT, около 149 млн параметров и контекст до 8192 токенов; стандартная размерность эмбеддинга — 768. Поддерживается Matryoshka Representation Learning: вектор можно сократить до 256 измерений с небольшими потерями качества и меньшим расходом памяти.

Модель подходит для поиска по документам и запросам, оценки смысловой близости текстов и других задач, использующих текстовые представления. Доступны веса Safetensors и ONNX, а README описывает использование через Transformers, Sentence Transformers и Transformers.js. Карточка приводит результаты на бенчмарках MTEB и сообщает о многоэтапном обучении с контрастивным предобучением и последующей настройкой на поисковых данных. Лицензия — Apache-2.0. По данным карточки, модель рассчитана на английский язык.

Сценарии применения

  • семантический поиск по англоязычным документам
  • поиск документов по естественно-языковому запросу
  • сравнение смысловой близости предложений
  • кластеризация текстов по смыслу
  • классификация текстов на основе эмбеддингов
  • сокращение размерности векторов для экономии памяти

Ограничения

Модель ориентирована на английский язык. Сокращение эмбеддингов до 256 измерений экономит память, но может немного снизить точность по сравнению с полными 768 измерениями.

Для каких профессий подходит11

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

ModernBERT Embed

image/png

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

Trained on the Nomic Embed weakly-supervised and supervised datasets, modernbert-embed also supports Matryoshka Representation Learning dimensions of 256, reducing memory by 3x 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-v176862.474.143.985.255.752.882.130.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
nomic-embed-text-v1.525661.0472.143.1684.0955.1850.8181.3430.05
modernbert-embed-base25661.1772.4043.8283.4555.6950.6281.1231.27

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("nomic-ai/modernbert-embed-base")

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, 768) (1, 768)

similarities = model.similarity(query_embeddings, doc_embeddings)
print(similarities)
# tensor([[0.7214],
#         [0.3260]])

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("nomic-ai/modernbert-embed-base", 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.7759],
#         [0.3419]])

Note the small differences compared to the full 768-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("nomic-ai/modernbert-embed-base")
model = AutoModel.from_pretrained("nomic-ai/modernbert-embed-base")

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, 768]) torch.Size([1, 768])

similarities = query_embeddings @ doc_embeddings.T
print(similarities)
# tensor([[0.7214],
#         [0.3260]])

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_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(".")
model = AutoModel.from_pretrained(".")
truncate_dim = 256

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 = query_embeddings[:, :truncate_dim]
query_embeddings = F.normalize(query_embeddings, p=2, dim=1)
doc_embeddings = mean_pooling(documents_outputs, encoded_documents["attention_mask"])
doc_embeddings = doc_embeddings[:, :truncate_dim]
doc_embeddings = F.normalize(doc_embeddings, p=2, dim=1)
print(query_embeddings.shape, doc_embeddings.shape)
# torch.Size([2, 256]) torch.Size([1, 256])

similarities = query_embeddings @ doc_embeddings.T
print(similarities)
# tensor([[0.7759],
#         [0.3419]])

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

Transformers.js

If you haven't already, you can install the Transformers.js JavaScript library from NPM using:

npm i @huggingface/transformers

Then, you can compute embeddings as follows:

import { pipeline, matmul } from '@huggingface/transformers';

// Create a feature extraction pipeline
const extractor = await pipeline(
  "feature-extraction",
  "nomic-ai/modernbert-embed-base",
  { dtype: "fp32" }, // Supported options: "fp32", "fp16", "q8", "q4", "q4f16"
);

// Embed queries and documents
const query_embeddings = await extractor([
    "search_query: What is TSNE?",
    "search_query: Who is Laurens van der Maaten?",
  ], { pooling: "mean", normalize: true },
);
const doc_embeddings = await extractor([
    "search_document: TSNE is a dimensionality reduction algorithm created by Laurens van Der Maaten",
  ], { pooling: "mean", normalize: true },
);

// Compute similarity scores
const similarities = await matmul(query_embeddings, doc_embeddings.transpose(1, 0));
console.log(similarities.tolist()); // [[0.721383273601532], [0.3259955644607544]]

Training

Click the Nomic Atlas map below to visualize a 5M sample of our contrastive pretraining data!

image/webp

We train our embedder using a multi-stage training pipeline. Starting from a long-context BERT model, the first unsupervised contrastive stage trains on a dataset generated from weakly related text pairs, such as question-answer pairs from forums like StackExchange and Quora, title-body pairs from Amazon reviews, and summarizations from news articles.

In the second finetuning stage, higher quality labeled datasets such as search queries and answers from web searches are leveraged. Data curation and hard-example mining is crucial in this stage.

For more details, see the Nomic Embed Technical Report and corresponding blog post.

Training data to train the models is released in its entirety. For more details, see the contrastors repository

Join the Nomic Community

Citation

If you find the model, dataset, or training code useful, please cite our work

@misc{nussbaum2024nomic,
      title={Nomic Embed: Training a Reproducible Long Context Text Embedder}, 
      author={Zach Nussbaum and John X. Morris and Brandon Duderstadt and Andriy Mulyar},
      year={2024},
      eprint={2402.01613},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Можно запустить

Подбираем GPU…

Класс архитектуры
ModernBertModel
Ревизия весов
d556a88

0 моделей