/ Модель

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

Контекст
512 токенов
Параметры
137 млн
Лицензия
Apache 2.0
Архитектура
bert · dense
Опубликована
24 фев 2024

pubmedbert-base-embeddings-matryoshka

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

Англоязычная BERT-модель эмбеддингов для семантического поиска и сопоставления биомедицинских текстов с настраиваемой размерностью вектора.

1 770скачиваний за 30 дней23лайкавеса обновлены26 июн 2025

Бенчмарки

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

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

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

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

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

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

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

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

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

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

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

В подключённых источниках результатов для этой модели пока нет.

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

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

NeuML подготовила PubMedBERT Embeddings Matryoshka — модель эмбеддингов на архитектуре BERT для сравнения сходства предложений и семантического поиска по биомедицинским текстам. Модель содержит 136,7 млн параметров, принимает текст и поддерживает контекст до 512 токенов; основной язык — английский.

Обучение с Matryoshka Representation Learning позволяет получать эмбеддинги размером 64, 128, 256, 384, 512 или 768 измерений. Меньшие размерности экономят место при хранении векторной базе, но, согласно README, не уменьшают вычислительные затраты. Модель подходит для семантического поиска, построения источников для RAG и сопоставления вопросов, статей, аннотаций и других биомедицинских текстов. В приведённой оценке на наборах PubMed она сохраняет конкурентное качество при сокращённых размерностях.

Модель распространяется по лицензии Apache-2.0. Контекст ограничен 512 токенами; область оценки в README ограничена несколькими биомедицинскими наборами, поэтому результаты не гарантируют такое же качество на иных текстах и языках.

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

  • семантический поиск по статьям PubMed
  • поиск источников для RAG по биомедицинским документам
  • сопоставление медицинского вопроса с ответом или статьёй
  • поиск похожих аннотаций и научных публикаций
  • создание компактных эмбеддингов для векторной базы

Ограничения

Контекст ограничен 512 токенами. README приводит оценки только на нескольких биомедицинских наборах PubMed и отмечает, что уменьшение размерности вектора не снижает вычислительные затраты.

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

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

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

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

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

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

Открыть на Hugging Face

PubMedBERT Embeddings Matryoshka

This is a version of PubMedBERT Embeddings with Matryoshka Representation Learning applied. This enables dynamic embeddings sizes of 64, 128, 256, 384, 512 and the full size of 768. It's important to note while this method saves space, the same computational resources are used regardless of the dimension size.

Sentence Transformers 2.4 added support for Matryoshka Embeddings. More can be read in this blog post.

Usage (txtai)

This model can be used to build embeddings databases with txtai for semantic search and/or as a knowledge source for retrieval augmented generation (RAG).

import txtai

# New embeddings with requested dimensionality
embeddings = txtai.Embeddings(
  path="neuml/pubmedbert-base-embeddings-matryoshka",
  content=True,
  dimensionality=256
)
embeddings.index(documents())

# Run a query
embeddings.search("query to run")

Usage (Sentence-Transformers)

Alternatively, the model can be loaded with sentence-transformers.

from sentence_transformers import SentenceTransformer
sentences = ["This is an example sentence", "Each sentence is converted"]

model = SentenceTransformer("neuml/pubmedbert-base-embeddings-matryoshka")
embeddings = model.encode(sentences)

# Requested dimensionality
dimensionality = 256

print(embeddings[:, :dimensionality])

Usage (Hugging Face Transformers)

The model can also be used directly with Transformers.

from transformers import AutoTokenizer, AutoModel
import torch

# Mean Pooling - Take attention mask into account for correct averaging
def meanpooling(output, mask):
    embeddings = output[0] # First element of model_output contains all token embeddings
    mask = mask.unsqueeze(-1).expand(embeddings.size()).float()
    return torch.sum(embeddings * mask, 1) / torch.clamp(mask.sum(1), min=1e-9)

# Sentences we want sentence embeddings for
sentences = ['This is an example sentence', 'Each sentence is converted']

# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained("neuml/pubmedbert-base-embeddings-matryoshka")
model = AutoModel.from_pretrained("neuml/pubmedbert-base-embeddings-matryoshka")

# Tokenize sentences
inputs = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

# Compute token embeddings
with torch.no_grad():
    output = model(**inputs)

# Perform pooling. In this case, mean pooling.
embeddings = meanpooling(output, inputs['attention_mask'])

# Requested dimensionality
dimensionality = 256

print("Sentence embeddings:")
print(embeddings[:, :dimensionality])

Evaluation Results

Performance of this model compared to the top base models on the MTEB leaderboard is shown below. A popular smaller model was also evaluated along with the most downloaded PubMed similarity model on the Hugging Face Hub.

The following datasets were used to evaluate model performance.

  • PubMed QA
    • Subset: pqa_labeled, Split: train, Pair: (question, long_answer)
  • PubMed Subset
    • Split: test, Pair: (title, text)
  • PubMed Summary
    • Subset: pubmed, Split: validation, Pair: (article, abstract)

Evaluation results from the original model are shown below for reference. The Pearson correlation coefficient is used as the evaluation metric.

ModelPubMed QAPubMed SubsetPubMed SummaryAverage
all-MiniLM-L6-v290.4095.9294.0793.46
bge-base-en-v1.591.0295.8294.4993.78
gte-base92.9796.9096.2495.37
pubmedbert-base-embeddings93.2797.0096.5895.62
S-PubMedBert-MS-MARCO90.8693.6893.5492.69

See the table below for evaluation results per dimension for pubmedbert-base-embeddings-matryoshka.

ModelPubMed QAPubMed SubsetPubMed SummaryAverage
Dimensions = 6492.1696.1495.6794.66
Dimensions = 12892.8096.5896.2295.20
Dimensions = 25693.1196.8296.5395.49
Dimensions = 38493.4297.0096.6195.68
Dimensions = 51293.3797.0796.6195.68
Dimensions = 76893.5397.1396.7095.79

This model performs slightly better overall compared to the original model.

The bigger takeaway is how competitive it is at lower dimensions. For example, Dimensions = 256 performs better than all the other models originally tested above. Even Dimensions = 64 performs better than all-MiniLM-L6-v2 and bge-base-en-v1.5.

Training

The model was trained with the parameters:

DataLoader:

torch.utils.data.dataloader.DataLoader of length 20191 with parameters:

{'batch_size': 24, 'sampler': 'torch.utils.data.sampler.RandomSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}

Loss:

sentence_transformers.losses.MatryoshkaLoss.MatryoshkaLoss with parameters:

{'loss': 'MultipleNegativesRankingLoss', 'matryoshka_dims': [768, 512, 384, 256, 128, 64], 'matryoshka_weights': [1, 1, 1, 1, 1, 1]}

Parameters of the fit()-Method:

{
    "epochs": 1,
    "evaluation_steps": 500,
    "evaluator": "sentence_transformers.evaluation.EmbeddingSimilarityEvaluator.EmbeddingSimilarityEvaluator",
    "max_grad_norm": 1,
    "optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
    "optimizer_params": {
        "lr": 2e-05
    },
    "scheduler": "WarmupLinear",
    "steps_per_epoch": null,
    "warmup_steps": 10000,
    "weight_decay": 0.01
}

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel 
  (1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
)

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

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

GPU в ailist

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

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

Подбираем GPU…

Класс архитектуры
BertModel
Ревизия весов
723775e

0 моделей