/ Модель

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

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

modernbert-code

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

Дообученный ModernBERT преобразует текстовые запросы и код в векторы для семантического поиска и сопоставления кода.

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

Бенчмарки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

benjamintli/modernbert-code — модель Sentence Transformers, созданная дообучением answerdotai/ModernBERT-base на наборе code-retrieval-combined. Она преобразует текстовые запросы и фрагменты кода в плотные векторы размерностью 768 и подходит для семантического поиска и сопоставления запросов с релевантным кодом. В README указана максимальная длина последовательности 1024 токена; метаданные каталога указывают контекст до 8192 токенов, поэтому фактическую длину входа следует сверять с конфигурацией используемого чекпойнта и библиотеки. Для сравнения векторов рекомендуется косинусное сходство. Модель основана на encoder-only архитектуре ModernBERT, содержит 149 млн параметров и распространяется в формате safetensors.

Основные сценарии — поиск кода по текстовому описанию, семантический поиск и ранжирование кандидатов по близости к запросу, а также поиск похожих текстов и кластеризация. В README приведены результаты оценки поиска информации, однако они относятся к указанному в карточке набору оценки. Модель не генерирует код или ответы: она выдаёт векторы для последующего сравнения. Лицензия в предоставленных данных не указана.

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

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

Ограничения

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

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

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

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

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

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

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

Открыть на Hugging Face

SentenceTransformer based on answerdotai/ModernBERT-base

This is a sentence-transformers model finetuned from answerdotai/ModernBERT-base on the code-retrieval-combined 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': 1024, '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-code")
# Run inference
queries = [
    "function onActiveEditorChanged(event, current, previous) {\n        if (current \u0026\u0026 !current._codeMirror._lineFolds) {\n            enableFoldingInEditor(current);\n   ",
]
documents = [
    '     }\n        if (previous) {\n            saveLineFolds(previous);\n        }\n    }',
    'Save config data.\n\n@param string $path\n@param string $value\n@param string $scope\n@param int $scopeId\n\n@return null',
    'Get playback settings such as shuffle and repeat.',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# [1, 768] [3, 768]

# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[0.6443, 0.0381, 0.0291]])

Evaluation

Metrics

Information Retrieval

MetricValue
cosine_accuracy@10.9167
cosine_accuracy@30.9643
cosine_accuracy@50.9738
cosine_accuracy@100.9822
cosine_precision@10.9167
cosine_precision@30.3214
cosine_precision@50.1948
cosine_precision@100.0982
cosine_recall@10.9167
cosine_recall@30.9643
cosine_recall@50.9738
cosine_recall@100.9822
cosine_ndcg@100.9519
cosine_mrr@100.9419
cosine_map@1000.9426

Training Details

Training Dataset

code-retrieval-combined

  • Dataset: code-retrieval-combined at 4403b52
  • Size: 193,623 training samples
  • Columns: query and positive
  • Approximate statistics based on the first 1000 samples:
    querypositive
    typestringstring
    detailsmin: 6 tokensmean: 143.24 tokensmax: 1024 tokensmin: 5 tokensmean: 64.75 tokensmax: 937 tokens
  • Samples:
    querypositive
    protected function sendMusicMsgToJsonString(WxSendMusicMsg $msg) { $formatStr = '{ "touser":"%s", "msgtype":"%s", "music": { "title":"%s", "description":"%s", "musicurl":"%s", "hqmusicurl":"%s", "thumb_media_id":"%s" } }'; $result = sprintf($formatStr, $msg->getToUserName(), $msg->getMsgType(), $msg->getTitle(), $msg->getDescription(), $msg->getMusicUrl(), $msg->getHQMusicUrl(), $msg->getThumbMediaId() ); return $result; }formatter WxSendMusicMsg to Json string@param WxSendMusicMsg $msg@return string
    def getBlocks(self): """ Get the blocks that need to be migrated """ try: conn = self.dbi.connection() result = self.buflistblks.execute(conn) return result finally: if conn: conn.close()
    function obj(/key,value, key,value .../) { var result = {} for(var n=0; n<arguments.length; n+=2) { result[arguments[n]] = arguments[n+1] } return result}builds an object immediate where keys can be expressions
  • Loss: CachedMultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim",
        "mini_batch_size": 128,
        "gather_across_devices": false,
        "directions": [
            "query_to_doc"
        ],
        "partition_mode": "joint",
        "hardness_mode": null,
        "hardness_strength": 0.0
    }
    

Evaluation Dataset

code-retrieval-combined

  • Dataset: code-retrieval-combined at 4403b52
  • Size: 21,514 evaluation samples
  • Columns: query and positive
  • Approximate statistics based on the first 1000 samples:
    querypositive
    typestringstring
    detailsmin: 7 tokensmean: 140.91 tokensmax: 1024 tokensmin: 5 tokensmean: 71.36 tokensmax: 1024 tokens
  • Samples:
    querypositive
    def save self.attributes.stringify_keys! self.attributes.delete('customer') self.attributes.delete('product') self.attributes.delete('credit_card') self.attributes.delete('bank_account') self.attributes.delete('paypal_account') self.attributes, options = extract_uniqueness_token(attributes) self.prefix_options.merge!(options) super end
    def _update_summary(self, summary=None): """Update all parts of the summary or clear when no summary.""" board_image_label = self._parts['board image label'] # get content for update or use blanks when no summary if summary: # make a board image with the swap drawn on it # board, action, text = summary.board, summary.action, summary.text board_image_cv = self._create_board_image_cv(summary.board) self._draw_swap_cv(board_image_cv, summary.action) board_image_tk = self._convert_cv_to_tk(board_image_cv) text = '' if not summary.score is None: text += 'Score: {:3.1f}'.format(summary.score) if (not summary.mana_drain_leaves is None) and<br> (not summary.total_leaves is None): text += ' Mana Drains: {}/{}' <br> ''.format(summary.mana_drain_leaves, summary.total_leaves) else: #clear any stored state image and use the blank board_image_tk = board_image_label._blank_image text = '' # update the UI parts with the content board_image_label._board_image = board_image_tk board_image_label.config(image=board_image_tk) # update the summary text summary_label = self._parts['summary label'] summary_label.config(text=text) # refresh the UI self._base.update()
    def chi_p(mass1, mass2, spin1x, spin1y, spin2x, spin2y): """Returns the effective precession spin from mass1, mass2, spin1x, spin1y, spin2x, and spin2y. """ xi1 = secondary_xi(mass1, mass2, spin1x, spin1y, spin2x, spin2y) xi2 = primary_xi(mass1, mass2, spin1x, spin1y, spin2x, spin2y) return chi_p_from_xi1_xi2(xi1, xi2)Returns the effective precession spin from mass1, mass2, spin1x, spin1y, spin2x, and spin2y.
  • Loss: CachedMultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim",
        "mini_batch_size": 128,
        "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: 1
  • learning_rate: 8e-05
  • warmup_steps: 0.05
  • bf16: True
  • eval_strategy: steps
  • per_device_eval_batch_size: 1024
  • push_to_hub: True
  • hub_model_id: modernbert-code
  • 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: 1
  • max_steps: -1
  • learning_rate: 8e-05
  • lr_scheduler_type: linear
  • lr_scheduler_kwargs: None
  • warmup_steps: 0.05
  • 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: steps
  • 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-code
  • 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.0526105.24572.44690.4195
0.1053201.39730.69560.7742
0.1579300.55000.40000.8560
0.2105400.34290.28780.8891
0.2632500.24870.22500.9104
0.3158600.20800.18720.9256
0.3684700.17680.16560.9312
0.4211800.15250.15010.9352
0.4737900.14020.13740.9397
0.52631000.13430.13170.9413
0.57891100.12170.12420.9444
0.63161200.11800.11990.9454
0.68421300.11640.11490.9476
0.73681400.11460.11060.9494
0.78951500.10910.10800.9494
0.84211600.10850.10550.9506
0.89471700.10620.10410.9511
0.94741800.11300.10300.9517
1.01900.09240.10240.9519
  • 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.3
  • 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
Ревизия весов
335bb1d

0 моделей