/ Модель

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

Контекст
8 192 токена
Параметры
149 млн
Архитектура
modernbert · dense
Базовая модель
modernbert-cosqa
Библиотека
sentence-transformers
Опубликована
17 мар 2026

modernbert-cosqa-hard-negatives

ЭмбеддингиТекст → embedding

Англоязычная модель Sentence Transformers на базе ModernBERT, создающая векторы текста для семантического поиска и сравнения предложений.

101скачиваний за 30 дней0лайковвеса обновлены17 мар 2026

Бенчмарки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Модель benjamintli/modernbert-cosqa-hard-negatives — англоязычная Sentence Transformer модель на базе ModernBERT, дообученная разработчиком benjamintli на наборе cosqa-llm-filtered-hard-negatives с использованием hard negatives. Она преобразует предложения и абзацы в плотные векторы размерности 768 для поиска по смыслу, оценки семантического сходства, поиска перефразировок, кластеризации и классификации текста.

Для сравнения векторов используется косинусное сходство. В метаданных указана архитектура ModernBERT, 149 млн параметров и контекст до 8192 токенов; README указывает максимальную длину последовательности 512 токенов для данной конфигурации Sentence Transformers. Модель предназначена для англоязычных текстов, включая запросы и фрагменты кода. Репозиторий содержит веса в формате safetensors. Лицензия в предоставленных данных не указана.

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

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

Ограничения

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

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

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

Открыть на Hugging Face

SentenceTransformer based on benjamintli/modernbert-cosqa

This is a sentence-transformers model finetuned from benjamintli/modernbert-cosqa on the cosqa-llm-filtered-hard-negatives dataset. It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more.

Model Details

Model Description

Model Sources

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False, 'architecture': 'OptimizedModule'})
  (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})
)

Usage

Direct Usage (Sentence Transformers)

First install the Sentence Transformers library:

pip install -U sentence-transformers

Then you can load this model and run inference.

from sentence_transformers import SentenceTransformer

# Download from the 🤗 Hub
model = SentenceTransformer("modernbert-cosqa-hard-negatives")
# Run inference
sentences = [
    'python strftime miliseconds fixed width',
    'def fmt_duration(secs):\n    """Format a duration in seconds."""\n    return \' \'.join(fmt.human_duration(secs, 0, precision=2, short=True).strip().split())',
    'def seconds_to_hms(seconds):\n    """\n    Converts seconds float to \'hh:mm:ss.ssssss\' format.\n    """\n    hours = int(seconds / 3600.0)\n    minutes = int((seconds / 60.0) % 60.0)\n    secs = float(seconds % 60.0)\n    return "{0:02d}:{1:02d}:{2:02.6f}".format(hours, minutes, secs)',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 768]

# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 0.7076, 0.6960],
#         [0.7076, 1.0000, 0.7423],
#         [0.6960, 0.7423, 1.0000]])

Evaluation

Metrics

Information Retrieval

MetricValue
cosine_accuracy@10.5521
cosine_accuracy@30.8598
cosine_accuracy@50.9311
cosine_accuracy@100.9752
cosine_precision@10.5521
cosine_precision@30.2866
cosine_precision@50.1862
cosine_precision@100.0975
cosine_recall@10.5521
cosine_recall@30.8598
cosine_recall@50.9311
cosine_recall@100.9752
cosine_ndcg@100.7789
cosine_mrr@100.714
cosine_map@1000.7154

Training Details

Training Dataset

cosqa-llm-filtered-hard-negatives

  • Dataset: cosqa-llm-filtered-hard-negatives at 1585731
  • Size: 19,963 training samples
  • Columns: anchor, positive, and negative
  • Approximate statistics based on the first 1000 samples:
    anchorpositivenegative
    typestringstringstring
    detailsmin: 6 tokensmean: 9.57 tokensmax: 22 tokensmin: 37 tokensmean: 88.3 tokensmax: 512 tokensmin: 36 tokensmean: 94.31 tokensmax: 512 tokens
  • Samples:
    anchorpositivenegative
    python 2d array to dictdef to_dicts(recarray): """convert record array to a dictionaries""" for rec in recarray: yield dict(zip(recarray.dtype.names, rec.tolist()))def multidict_to_dict(d): """ Turns a werkzeug.MultiDict or django.MultiValueDict into a dict with list values :param d: a MultiDict or MultiValueDict instance :return: a dict instance """ return dict((k, v[0] if len(v) == 1 else v) for k, v in iterlists(d))
    how to send dns request message in pythondef _request_modify_dns_record(self, record): """Sends Modify_DNS_Record request""" return self._request_internal("Modify_DNS_Record", domain=self.domain, record=record)def request(self, method, url, body=None, headers={}): """Send a complete request to the server.""" self._send_request(method, url, body, headers)
    how to cast string to uint8 in pythondef b2u(string): """ bytes to unicode """ if (isinstance(string, bytes) or (PY2 and isinstance(string, str))): return string.decode('utf-8') return stringdef to_bytes(s, encoding="utf-8"): """Convert a string to bytes.""" if isinstance(s, six.binary_type): return s if six.PY3: return bytes(s, encoding) return s.encode(encoding)
  • Loss: CachedMultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim",
        "mini_batch_size": 64,
        "gather_across_devices": false,
        "directions": [
            "query_to_doc"
        ],
        "partition_mode": "joint",
        "hardness_mode": null,
        "hardness_strength": 0.0
    }
    

Evaluation Dataset

cosqa-llm-filtered-hard-negatives

  • Dataset: cosqa-llm-filtered-hard-negatives at 1585731
  • Size: 2,219 evaluation samples
  • Columns: anchor, positive, and negative
  • Approximate statistics based on the first 1000 samples:
    anchorpositivenegative
    typestringstringstring
    detailsmin: 6 tokensmean: 9.65 tokensmax: 21 tokensmin: 35 tokensmean: 88.87 tokensmax: 512 tokensmin: 37 tokensmean: 94.56 tokensmax: 512 tokens
  • Samples:
    anchorpositivenegative
    way to change the string "python" to have all uppercase lettersdef uppercase_chars(string: any) -> str: """Return all (and only) the uppercase chars in the given string.""" return ''.join([c if c.isupper() else '' for c in str(string)])def to_capitalized_camel_case(snake_case_string): """ Convert a string from snake case to camel case with the first letter capitalized. For example, "some_var" would become "SomeVar". :param snake_case_string: Snake-cased string to convert to camel case. :returns: Camel-cased version of snake_case_string. """ parts = snake_case_string.split('_') return ''.join([i.title() for i in parts])
    how to make intercept zero in pythondef prox_zero(X, step): """Proximal operator to project onto zero """ return np.zeros(X.shape, dtype=X.dtype)def _adjust_offset(self, real_wave_mfcc, algo_parameters): """ OFFSET """ self.log(u"Called _adjust_offset") self._apply_offset(offset=algo_parameters[0])
    stop running function and passing to other variable pythondef stop(self) -> None: """Stops the analysis as soon as possible.""" if self._stop and not self._posted_kork: self._stop() self._stop = Nonedef stop(self, dummy_signum=None, dummy_frame=None): """ Shutdown process (this method is also a signal handler) """ logging.info('Shutting down ...') self.socket.close() sys.exit(0)
  • Loss: CachedMultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim",
        "mini_batch_size": 64,
        "gather_across_devices": false,
        "directions": [
            "query_to_doc"
        ],
        "partition_mode": "joint",
        "hardness_mode": null,
        "hardness_strength": 0.0
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • per_device_train_batch_size: 1024
  • num_train_epochs: 10
  • learning_rate: 2e-06
  • warmup_steps: 0.1
  • bf16: True
  • eval_strategy: epoch
  • per_device_eval_batch_size: 1024
  • push_to_hub: True
  • hub_model_id: modernbert-cosqa-hard-negatives
  • load_best_model_at_end: True
  • dataloader_num_workers: 4
  • batch_sampler: no_duplicates

All Hyperparameters

  • per_device_train_batch_size: 1024
  • num_train_epochs: 10
  • max_steps: -1
  • learning_rate: 2e-06
  • lr_scheduler_type: linear
  • lr_scheduler_kwargs: None
  • warmup_steps: 0.1
  • optim: adamw_torch_fused
  • optim_args: None
  • weight_decay: 0.0
  • adam_beta1: 0.9
  • adam_beta2: 0.999
  • adam_epsilon: 1e-08
  • optim_target_modules: None
  • gradient_accumulation_steps: 1
  • average_tokens_across_devices: True
  • max_grad_norm: 1.0
  • label_smoothing_factor: 0.0
  • bf16: True
  • fp16: False
  • bf16_full_eval: False
  • fp16_full_eval: False
  • tf32: None
  • gradient_checkpointing: False
  • gradient_checkpointing_kwargs: None
  • torch_compile: False
  • torch_compile_backend: None
  • torch_compile_mode: None
  • use_liger_kernel: False
  • liger_kernel_config: None
  • use_cache: False
  • neftune_noise_alpha: None
  • torch_empty_cache_steps: None
  • auto_find_batch_size: False
  • log_on_each_node: True
  • logging_nan_inf_filter: True
  • include_num_input_tokens_seen: no
  • log_level: passive
  • log_level_replica: warning
  • disable_tqdm: False
  • project: huggingface
  • trackio_space_id: trackio
  • eval_strategy: epoch
  • per_device_eval_batch_size: 1024
  • prediction_loss_only: True
  • eval_on_start: False
  • eval_do_concat_batches: True
  • eval_use_gather_object: False
  • eval_accumulation_steps: None
  • include_for_metrics: []
  • batch_eval_metrics: False
  • save_only_model: False
  • save_on_each_node: False
  • enable_jit_checkpoint: False
  • push_to_hub: True
  • hub_private_repo: None
  • hub_model_id: modernbert-cosqa-hard-negatives
  • hub_strategy: every_save
  • hub_always_push: False
  • hub_revision: None
  • load_best_model_at_end: True
  • ignore_data_skip: False
  • restore_callback_states_from_checkpoint: False
  • full_determinism: False
  • seed: 42
  • data_seed: None
  • use_cpu: False
  • accelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
  • parallelism_config: None
  • dataloader_drop_last: False
  • dataloader_num_workers: 4
  • dataloader_pin_memory: True
  • dataloader_persistent_workers: False
  • dataloader_prefetch_factor: None
  • remove_unused_columns: True
  • label_names: None
  • train_sampling_strategy: random
  • length_column_name: length
  • ddp_find_unused_parameters: None
  • ddp_bucket_cap_mb: None
  • ddp_broadcast_buffers: False
  • ddp_backend: None
  • ddp_timeout: 1800
  • fsdp: []
  • fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
  • deepspeed: None
  • debug: []
  • skip_memory_metrics: True
  • do_predict: False
  • resume_from_checkpoint: None
  • warmup_ratio: None
  • local_rank: -1
  • prompts: None
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: proportional
  • router_mapping: {}
  • learning_rate_mapping: {}

Training Logs

EpochStepTraining LossValidation Losseval_cosine_ndcg@10
0.5101.5380--
1.0201.41670.97020.7440
1.5301.4515--
2.0401.37890.92690.7499
2.5501.3920--
3.0601.28490.88980.7581
3.5701.3585--
4.0801.21970.85720.7653
4.5901.2825--
5.01001.20780.83500.7686
5.51101.2496--
6.01201.15690.81040.7720
6.51301.2119--
7.01401.12780.79520.7754
7.51501.1812--
8.01601.10180.78350.7770
8.51701.1696--
9.01801.09720.77880.7786
9.51901.1655--
10.02001.07960.77550.7789
  • The bold row denotes the saved checkpoint.

Framework Versions

  • Python: 3.12.12
  • Sentence Transformers: 5.3.0
  • Transformers: 5.3.0
  • PyTorch: 2.10.0+cu128
  • Accelerate: 1.13.0
  • Datasets: 4.8.2
  • Tokenizers: 0.22.2

Citation

BibTeX

Sentence Transformers

@inproceedings{reimers-2019-sentence-bert,
    title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
    author = "Reimers, Nils and Gurevych, Iryna",
    booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
    month = "11",
    year = "2019",
    publisher = "Association for Computational Linguistics",
    url = "https://arxiv.org/abs/1908.10084",
}

CachedMultipleNegativesRankingLoss

@misc{gao2021scaling,
    title={Scaling Deep Contrastive Learning Batch Size under Memory Limited Setup},
    author={Luyu Gao and Yunyi Zhang and Jiawei Han and Jamie Callan},
    year={2021},
    eprint={2101.06983},
    archivePrefix={arXiv},
    primaryClass={cs.LG}
}

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

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

GPU в ailist

Универсальный рантайм · sentence-transformers

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

Подбираем GPU…

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

0 моделей