ModernBERT-large multivector MS MARCO pilot

This is a Multi-Vector Encoder model finetuned from answerdotai/ModernBERT-large using the sentence-transformers library. It maps inputs to sequences of 128-dimensional token-level vectors and scores them with late interaction (MaxSim), useful for semantic search with late interaction.

Model Details

Model Description

  • Model Type: Multi-Vector Encoder
  • Base model: answerdotai/ModernBERT-large
  • Maximum Sequence Length: 256 tokens
    • Maximum Query Length: 32 tokens
    • Maximum Document Length: 256 tokens
  • Output Dimensionality: 128 dimensions
  • Similarity Function: MaxSim
  • Supported Modality: Text
  • Language: en
  • License: apache-2.0

Model Sources

Full Model Architecture

MultiVectorEncoder(
  (0): Transformer({'transformer_task': 'feature-extraction', 'modality_config': {'text': {'method': 'forward', 'method_output_name': 'last_hidden_state'}}, 'module_output_name': 'token_embeddings', 'query_length': 32, 'document_length': 256, 'architecture': 'ModernBertModel'})
  (1): Dense({'in_features': 1024, 'out_features': 128, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity', 'module_input_name': 'token_embeddings', 'module_output_name': 'token_embeddings'})
  (2): MultiVectorMask({'skiplist_words': [], 'skiplist_tasks': ['document'], 'keep_only_token_ids': None})
  (3): Normalize({'module_input_name': 'token_embeddings', 'module_output_name': 'token_embeddings'})
)

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 MultiVectorEncoder

# Download from the 🤗 Hub
model = MultiVectorEncoder("tomaarsen/modernbert-large-multivector-msmarco32k-3e-4-20261014")
# Run inference: each input becomes a sequence of per-token vectors (variable length).
queries = [
    'goldman sachs contact number',
]
documents = [
    'The customer support phone number of Goldman Sachs Contact is 1-212-902-0300 (Click phone number to call).',
    'Goldman Sachs Bank USA is an FDIC insured institution located in New York, NY. It was founded in 1990 and has approximately $122.68 billion in assets. Customers can open an account via one of its 5 branches.',
    'The Director of Supply Chain will be responsible for ensuring supply and availability of finished goods and services to optimize customer services at the lowest... 5 days ago - save job - more... -',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings[0].shape, document_embeddings[0].shape)
# (9, 128) (27, 128)

# Get the MaxSim similarity scores
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[8.1271, 5.9187, 1.1399]])

Training Details

Training Dataset

Unnamed Dataset

  • Size: 32,768 training samples
  • Columns: query, positive, and negative
  • Approximate statistics based on the first 100 samples:
    query positive negative
    type string string string
    modality text text text
    details
    • min: 5 tokens
    • mean: 9.82 tokens
    • max: 23 tokens
    • min: 29 tokens
    • mean: 82.93 tokens
    • max: 189 tokens
    • min: 35 tokens
    • mean: 80.9 tokens
    • max: 171 tokens
  • Samples:
    query positive negative
    what clothing do people wear in denmark guys While suits and other forms of Western fashion are ubiquitous in Japan, most people also wear some of the more traditional styles of Japanese clothing. For example, you often … will see people wearing traditional Japanese clothing at weddings or funerals, graduations and even for the summer fireworks festivals--hanabi. You can learn about some of the different styles of Japanese clothing and--if you dare--try some of them yourself. Yet even the Democratic presidential candidates, who say they love or want to learn from those countries, don’t seem know how they actually work. Why We’re Not Denmark Proof that they do work is delivered every year in data-rich evaluations by the United Nations and other international bodies.
    average salary healthcare administration Healthcare Administrator Salary. (United States). A Healthcare Administrator earns an average salary of $64,821 per year. The highest paying skills associated with this job are Program Management, Budget Management, and Operations Management. Experience has a moderate effect on income for this job.ealthcare Administrator Salary. (United States). A Healthcare Administrator earns an average salary of $64,821 per year. The highest paying skills associated with this job are Program Management, Budget Management, and Operations Management. Experience has a moderate effect on income for this job. The five states with the highest average annual salaries for health care administrators, according to May 2011 data from the BLS, are: Massachusetts, $112,690; Rhode Island, $112,260; New York, $111,270; New Jersey, $110,100; and Washington, $108,620.
    what unique characteristics does bacillus megaterium have Rare to none: Bacillus megaterium is a rod-shaped, gram-positive, endospore forming, aerotolerant species of bacteria used as a soil inoculant in agriculture and horticulture.Bacterium is arranged into the streptobacillus form.. Get help from a doctor now ›. Rare to none: Bacillus megaterium is a rod-shaped, gram-positive, endospore forming, aerotolerant species of bacteria used as a soil inoculant in agriculture and horticulture. Bacterium is arranged into the streptobacillus form. Bacillus. Bacillus is a specific genus of rod-shaped bacteria that are capable of forming spores. They are sporulating, aerobic and ubiquitous in nature. Bacillus is a fairly large group with many members, including Bacillus cereus, Bacillus clausii and Bacillus halodenitrificans.Bacillus spores, also called endospores, are resistant to harsh chemical and physical conditions. This makes the bacteria able to withstand disinfectants, radiation, desiccation and heat.acillus is a fairly large group with many members, including Bacillus cereus, Bacillus clausii and Bacillus halodenitrificans. Bacillus spores, also called endospores, are resistant to harsh chemical and physical conditions. This makes the bacteria able to withstand disinfectants, radiation, desiccation and heat.
  • Loss: CachedMultiVectorMultipleNegativesRankingLoss with these parameters:
    {
        "scale": 1.0,
        "similarity_fct": "colbert_scores",
        "mini_batch_size": 8,
        "mini_batch_num_tokens": null,
        "score_mini_batch_size": 4,
        "gather_across_devices": false
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • per_device_train_batch_size: 64
  • num_train_epochs: 1
  • learning_rate: 0.0003
  • warmup_steps: 0.05
  • optim: adamw_torch
  • weight_decay: 0.01
  • bf16: True
  • tf32: True
  • logging_nan_inf_filter: False
  • disable_tqdm: True
  • per_device_eval_batch_size: 32
  • push_to_hub: True
  • hub_private_repo: False
  • hub_model_id: tomaarsen/modernbert-large-multivector-msmarco32k-3e-4-20261014
  • load_best_model_at_end: True
  • seed: 12
  • data_seed: 12
  • dataloader_num_workers: 2
  • batch_sampler: no_duplicates
  • router_mapping: {'query': 'query', 'positive': 'document', 'negative': 'document'}

All Hyperparameters

Click to expand
  • per_device_train_batch_size: 64
  • num_train_epochs: 1
  • max_steps: -1
  • learning_rate: 0.0003
  • lr_scheduler_type: linear
  • lr_scheduler_kwargs: None
  • warmup_steps: 0.05
  • optim: adamw_torch
  • optim_args: None
  • weight_decay: 0.01
  • 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: True
  • 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: False
  • include_num_input_tokens_seen: no
  • log_level: passive
  • log_level_replica: warning
  • disable_tqdm: True
  • project: huggingface
  • trackio_space_id: None
  • trackio_bucket_id: None
  • trackio_static_space_id: None
  • per_device_eval_batch_size: 32
  • 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: False
  • hub_model_id: tomaarsen/modernbert-large-multivector-msmarco32k-3e-4-20261014
  • 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: 12
  • data_seed: 12
  • 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: 2
  • dataloader_pin_memory: True
  • dataloader_persistent_workers: False
  • dataloader_prefetch_factor: None
  • dataloader_multiprocessing_context: None
  • dataloader_in_order: True
  • 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_static_graph: None
  • ddp_backend: None
  • ddp_timeout: 1800
  • fsdp: None
  • fsdp_config: None
  • deepspeed: None
  • debug: []
  • skip_memory_metrics: True
  • do_predict: False
  • resume_from_checkpoint: None
  • local_rank: -1
  • prompts: None
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: proportional
  • router_mapping: {'query': 'query', 'positive': 'document', 'negative': 'document'}
  • learning_rate_mapping: {}
  • warmup_ratio: None
  • max_length: None

Training Logs

Epoch Step Training Loss
0.0020 1 4.3280
0.0195 10 3.4287
0.0391 20 1.8313
0.0586 30 1.4054
0.0781 40 1.1158
0.0977 50 1.1778
0.1172 60 1.1056
0.1367 70 1.0889
0.1562 80 1.1276
0.1758 90 1.0489
0.1953 100 1.0218
0.2148 110 1.0234
0.2344 120 1.0468
0.25 128 -
0.2539 130 1.0334
0.2734 140 1.0052
0.2930 150 0.9992
0.3125 160 0.9927
0.3320 170 0.9481
0.3516 180 0.9927
0.3711 190 0.8905
0.3906 200 0.9143
0.4102 210 0.9070
0.4297 220 0.8512
0.4492 230 0.7533
0.4688 240 0.7184
0.4883 250 0.7532
0.5 256 -
0.5078 260 0.7305
0.5273 270 0.6928
0.5469 280 0.7295
0.5664 290 0.6759
0.5859 300 0.7005
0.6055 310 0.7324
0.625 320 0.6644
0.6445 330 0.7214
0.6641 340 0.6924
0.6836 350 0.6311
0.7031 360 0.6570
0.7227 370 0.6532
0.7422 380 0.6485
0.75 384 -
0.7617 390 0.6592
0.7812 400 0.6294
0.8008 410 0.6055
0.8203 420 0.6307
0.8398 430 0.6027
0.8594 440 0.6095
0.8789 450 0.5935
0.8984 460 0.5755
0.9180 470 0.6394
0.9375 480 0.6207
0.9570 490 0.5791
0.9766 500 0.5866
0.9961 510 0.5986
1.0 512 -

Training Time

  • Training: 18.2 minutes
  • Evaluation: 17.8 seconds
  • Total: 18.5 minutes

Framework Versions

  • Python: 3.12.12
  • Sentence Transformers: 6.2.0.dev0
  • Transformers: 5.16.1
  • PyTorch: 2.10.0+cu128
  • Accelerate: 1.15.0
  • Datasets: 5.1.0
  • Tokenizers: 0.23.3

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",
}

CachedMultiVectorMultipleNegativesRankingLoss

@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}
}

Controlled backbone comparison

Part of the encoder comparison. One epoch maximum on 32,768 MS MARCO triplets, seed 12. The best validation checkpoint was recovered from the repository history after a publication error. No training was repeated. See experiment.json for its original revision and validation score. Learning-rate selection uses validation only. Test data does not select checkpoints.

Dense and multi-vector use query length 32 and passage length 256 including special tokens. Rerankers use 32 query content tokens, 256 passage content tokens and a combined cap of 291. See the comparison scripts for matching input clipping. These are small-data research models.

Downloads last month
74
Safetensors
Model size
0.4B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for tomaarsen/modernbert-large-multivector-msmarco32k-3e-4-20261014

Finetuned
(418)
this model

Collection including tomaarsen/modernbert-large-multivector-msmarco32k-3e-4-20261014

Papers for tomaarsen/modernbert-large-multivector-msmarco32k-3e-4-20261014