/ Модель

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

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

pubmedbert-base-embeddings-8M

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

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

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

Бенчмарки

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

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

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

  • CUREv1

    main_score

    Результат

    0,0196

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

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

  • JDReview

    main_score

    Результат

    0,454

    MTEB

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

  • BQ

    main_score

    Результат

    0,1139

    MTEB

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

  • LCQMC

    main_score

    Результат

    −0,0097

    MTEB

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

  • ATEC

    main_score

    Результат

    0,0343

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

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

  • OnlineShopping

    main_score

    Результат

    0,5377

    MTEB

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

  • NFCorpus

    main_score

    Результат

    0,2743

    MTEB

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

  • MultilingualSentiment

    main_score

    Результат

    0,3568

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

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

  • CmedqaRetrieval

    main_score

    Результат

    0,008

    MTEB

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

  • TRECCOVID-PL

    main_score

    Результат

    0,1994

    MTEB

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

  • PublicHealthQA

    main_score

    Результат

    0,5494

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

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

  • MedicalQARetrieval

    main_score

    Результат

    0,453

    MTEB

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

  • Waimai

    main_score

    Результат

    0,5754

    MTEB

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

  • SciFact

    main_score

    Результат

    0,6025

    MTEB

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

  • CLSClusteringP2P

    main_score

    Результат

    0,0303

    MTEB

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

  • AFQMC

    main_score

    Результат

    0,0046

    MTEB

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

  • Ocnli

    main_score

    Результат

    0,5149

    MTEB

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

  • ThuNewsClusteringS2S

    main_score

    Результат

    0,0987

    MTEB

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

  • PAWSX

    main_score

    Результат

    0,0362

    MTEB

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

  • QBQTC

    main_score

    Результат

    0,0846

    MTEB

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

  • SciFact-PL

    main_score

    Результат

    0,2339

    MTEB

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

  • ThuNewsClusteringP2P

    main_score

    Результат

    0,0599

    MTEB

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

  • STSB

    main_score

    Результат

    0,0965

    MTEB

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

  • MedrxivClusteringS2S.v2

    main_score

    Результат

    0,2949

    MTEB

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

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

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

PubMedBERT Embeddings 8M — англоязычная модель статических текстовых эмбеддингов, созданная NeuML как дистиллированная версия NeuML/pubmedbert-base-embeddings с библиотекой Model2Vec. Она преобразует тексты в векторы для семантического поиска, сравнения предложений и построения баз знаний для RAG; подходит для сценариев с ограниченными вычислительными ресурсами и требованиями к низкой задержке на CPU или GPU.

Модель оценивалась на наборах PubMed QA, PubMed Subset и PubMed Summary: результаты конкурентоспособны, но не всегда превосходят другие модели из сравнения. Размер контекста в метаданных указан как 1 000 000 токенов. Распространяется по лицензии Apache-2.0.

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

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

Ограничения

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

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

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

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

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

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

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

Открыть на Hugging Face

PubMedBERT Embeddings 8M

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-8M",
  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-8M")
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-8M")

# 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
Ревизия весов
b6a0de4

0 моделей