/ Модель

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

Контекст
1 000 000 токенов
Лицензия
Apache 2.0
Архитектура
model2vec · dense
Базовая модель
pubmedbert-base-embeddings
Опубликована
3 янв 2025

pubmedbert-base-embeddings-2M

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

Компактная англоязычная модель статических эмбеддингов PubMedBERT для быстрого семантического поиска и сопоставления медицинских текстов.

364скачиваний за 30 дней3лайкавеса обновлены17 апр 2026

Бенчмарки

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

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

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

  • STSB

    main_score

    Результат

    −0,0259

    MTEB

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

  • PublicHealthQA

    main_score

    Результат

    0,0688

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

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

  • CLSClusteringS2S

    main_score

    Результат

    0,0379

    MTEB

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

  • CUREv1

    main_score

    Результат

    0,0103

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

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

  • ATEC

    main_score

    Результат

    0,0338

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

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

  • Ocnli

    main_score

    Результат

    0,5165

    MTEB

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

  • ThuNewsClusteringP2P

    main_score

    Результат

    0,0595

    MTEB

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

  • BQ

    main_score

    Результат

    0,0891

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

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

  • TRECCOVID

    main_score

    Результат

    0,3657

    MTEB

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

  • Waimai

    main_score

    Результат

    0,5675

    MTEB

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

  • CMedQAv2-reranking

    main_score

    Результат

    0,0571

    MTEB

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

  • LCQMC

    main_score

    Результат

    −0,0085

    MTEB

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

  • JDReview

    main_score

    Результат

    0,454

    MTEB

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

  • ThuNewsClusteringS2S

    main_score

    Результат

    0,0936

    MTEB

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

  • MedrxivClusteringS2S.v2

    main_score

    Результат

    0,3062

    MTEB

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

  • MultilingualSentiment

    main_score

    Результат

    0,3568

    MTEB

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

  • OnlineShopping

    main_score

    Результат

    0,5424

    MTEB

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

  • MedicalQARetrieval

    main_score

    Результат

    0,3393

    MTEB

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

  • AFQMC

    main_score

    Результат

    0,0042

    MTEB

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

  • SciFact

    main_score

    Результат

    0,5478

    MTEB

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

  • CLSClusteringP2P

    main_score

    Результат

    0,0243

    MTEB

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

  • PAWSX

    main_score

    Результат

    0,0366

    MTEB

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

  • NFCorpus

    main_score

    Результат

    0,2431

    MTEB

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

  • CmedqaRetrieval

    main_score

    Результат

    0,0073

    MTEB

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

  • QBQTC

    main_score

    Результат

    0,0854

    MTEB

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

  • SciFact-PL

    main_score

    Результат

    0,131

    MTEB

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

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

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

NeuML PubMedBERT Embeddings 2M — компактная модель статических эмбеддингов, разработанная NeuML на основе PubMedBERT Embeddings и дистиллированная с использованием библиотеки Model2Vec. Она преобразует текст в векторы и предназначена для семантического поиска, сравнения предложений и построения баз знаний для RAG по медицинским публикациям. Статические эмбеддинги позволяют вычислять векторы значительно быстрее, чем обычные контекстные модели, в том числе на CPU, что подходит для систем с ограниченными ресурсами и сценариев реального времени.

Модель оценивалась на наборах PubMed QA, PubMed Subset и PubMed Summary; в README отмечается конкурентное качество, но не лидерство по результатам сравнения. Она ориентирована на английский язык и медицинские тексты. Репозиторий использует формат safetensors, а лицензия — Apache 2.0.

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

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

Ограничения

README указывает, что модель конкурентоспособна, но не является лидером в приведённом сравнении; результаты показаны на ограниченном наборе задач и медицинских текстов. Статические эмбеддинги не учитывают контекст так, как контекстные модели.

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

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

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

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

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

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

Открыть на Hugging Face

PubMedBERT Embeddings 2M

This is a distilled version of PubMedBERT Embeddings using the Model2Vec library. It uses static embeddings, allowing text embeddings to be computed orders of magnitude faster on both GPU and CPU. It is designed for applications where computational resources are limited or where real-time performance is critical.

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

# Create embeddings
embeddings = txtai.Embeddings(
  path="neuml/pubmedbert-base-embeddings-2M",
  content=True,
)
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
from sentence_transformers.models import StaticEmbedding

# Initialize a StaticEmbedding module
static = StaticEmbedding.from_model2vec("neuml/pubmedbert-base-embeddings-2M")
model = SentenceTransformer(modules=[static])

sentences = ["This is an example sentence", "Each sentence is converted"]
embeddings = model.encode(sentences)
print(embeddings)

Usage (Model2Vec)

The model can also be used directly with Model2Vec.

from model2vec import StaticModel

# Load a pretrained Model2Vec model
model = StaticModel.from_pretrained("neuml/pubmedbert-base-embeddings-2M")

# Compute text embeddings
sentences = ["This is an example sentence", "Each sentence is converted"]
embeddings = model.encode(sentences)
print(embeddings)

Evaluation Results

The following compares performance of this model against the models previously compared with PubMedBERT Embeddings. 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)

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-embeddings-2M88.6293.0893.2491.65
pubmedbert-base-embeddings-8M90.0594.2994.1592.83
pubmedbert-base-embeddings93.2797.0096.5895.62
S-PubMedBert-MS-MARCO90.8693.6893.5492.69

As we can see, this model while not the top scoring model is certainly competitive.

Runtime performance

As another test, let's see how long each model takes to index 120K article abstracts using the following code. All indexing is done with a RTX 3090 GPU.

from datasets import load_dataset
from tqdm import tqdm
from txtai import Embeddings

ds = load_dataset("ccdv/pubmed-summarization", split="train")

embeddings = Embeddings(path="path to model", content=True, backend="numpy")
embeddings.index(tqdm(ds["abstract"]))
ModelParams (M)Index time (s)
all-MiniLM-L6-v222117
BM25-18
bge-base-en-v1.5109518
gte-base109523
pubmedbert-base-embeddings-2M217
pubmedbert-base-embeddings-8M818
pubmedbert-base-embeddings109462
S-PubMedBert-MS-MARCO109465

Clearly a static model's main upside is speed. It's important to note that if storage savings is the only concern, then take a look at PubMedBERT Embeddings Matryoshka. The 256 dimension model scores higher than this model, so does the 64 dimension model. The tradeoff is that the runtime performance is still as slow as the base model.

If runtime performance is the major concern, then a static model offers the best blend of accuracy and speed. Model2Vec models only need CPUs to run, no GPU required. Note how this model takes the same amount of time as building a BM25 index, which is normally an order of magnitude faster than vector models.

Training

This model was trained using the Tokenlearn library. First data was featurized with the following script.

python -m tokenlearn.featurize --model-name "neuml/pubmedbert-base-embeddings" --dataset-path "training-articles" --output-dir "features"

Note that the same random sample of articles as described here are used for the dataset training-articles.

From there, the following training script builds the model. The final model is weighted using BM25 instead of the default SIF weighting method.

from pathlib import Path

import numpy as np

from model2vec import StaticModel
from more_itertools import batched
from sklearn.decomposition import PCA
from tokenlearn.train import collect_means_and_texts, train_model
from tqdm import tqdm
from txtai.scoring import ScoringFactory

def tokenweights():
  tokenizer = model.tokenizer

  # Tokenize into dataset
  dataset = []
  for t in tqdm(batched(texts, 1024)):
      encodings = tokenizer.encode_batch_fast(t, add_special_tokens=False)
      for e in encodings:
          dataset.append((None, e.ids, None))

  # Build scoring index
  scoring = ScoringFactory.create({"method": "bm25", "terms": True})
  scoring.index(dataset)

  # Calculate mean value of weights array per token
  tokens = np.zeros(tokenizer.get_vocab_size())
  for token in scoring.idf:
    tokens[token] = np.mean(scoring.terms.weights(token)[1])

  return tokens

# Collect paths for training data
paths = sorted(Path("features").glob("*.json"))
texts, vectors = collect_means_and_texts(paths)

# Train the model
model = train_model("neuml/pubmedbert-base-embeddings", texts, vectors)

# Weight the model
weights = tokenweights()

# Remove NaNs from embedding, if any
embedding = np.nan_to_num(model.embedding)

# Apply PCA
embedding = PCA(n_components=embedding.shape[1]).fit_transform(embedding)

# Apply weights
embedding *= weights[:, None]

# Update model embedding and normalize
model.embedding, model.normalize = embedding, True

# Save model
model.save_pretrained("output path")

The following table compares the accuracy results for each of the methods

ModelPubMed QAPubMed SubsetPubMed SummaryAverage
pubmedbert-base-embeddings-8M-BM2590.0594.2994.1592.83
pubmedbert-base-embeddings-8M-M2V (No training)69.8470.7771.3070.64
pubmedbert-base-embeddings-8M-SIF88.7593.7893.0591.86

As we can see, the BM25 weighted model has the best results for the evaluated datasets

Acknowledgement

This model is built on the great work from the Minish Lab team consisting of Stephan Tulkens and Thomas van Dongen.

Read more at the following links.

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

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

GPU в ailist

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

Нельзя запустить

Архитектура model2vec неизвестна transformers в образе рантайма.

Класс архитектуры
StaticModel
Ревизия весов
175c20e

0 моделей