splade-mini / README.md
rasyosef's picture
Update README.md
3882f50 verified
metadata
tags:
  - sentence-transformers
  - sparse-encoder
  - sparse
  - splade
  - generated_from_trainer
  - dataset_size:1000000
  - loss:SpladeLoss
  - loss:SparseMarginMSELoss
  - loss:FlopsLoss
base_model:
  - prajjwal1/bert-mini
widget:
  - text: >-
      Caffeine is a central nervous system stimulant. It works by stimulating
      the brain. Caffeine is found naturally in foods and beverages such as
      coffee, tea, colas, energy and chocolate. Botanical sources of caffeine
      include kola nuts, guarana, and yerba mate.
  - text: >-
      Tim Hardaway, Jr. Compared To My 5ft 10in (177cm) Height. Tim Hardaway,
      Jr.'s height is 6ft 6in or 198cm while I am 5ft 10in or 177cm. I am
      shorter compared to him. To find out how much shorter I am, we would have
      to subtract my height from Tim Hardaway, Jr.'s height. Therefore I am
      shorter to him for about 21cm.
  - text: benefits of honey and lemon
  - text: >-
      How To Cook Corn on the Cob in the Microwave What You Need. Ingredients 1
      or more ears fresh, un-shucked sweet corn Equipment Microwave Cooling rack
      or cutting board Instructions. Place 1 to 4 ears of corn in the microwave:
      Arrange 1 to 4 ears of corn, un-shucked, in the microwave. If you prefer,
      you can set them on a microwaveable plate or tray. If you need to cook
      more than 4 ears of corn, cook them in batches. Microwave for 3 to 5
      minutes: For just 1 or 2 ears of corn, microwave for 3 minutes. For 3 or 4
      ears, microwave for 4 minutes. If you like softer corn or if your ears are
      particularly large, microwave for an additional minute.
  - text: >-
      The law recognizes two basic kinds of warrantiesimplied warranties and
      express warranties. Implied Warranties. Implied warranties are unspoken,
      unwritten promises, created by state law, that go from you, as a seller or
      merchant, to your customers.
pipeline_tag: feature-extraction
library_name: sentence-transformers
metrics:
  - dot_accuracy@1
  - dot_accuracy@3
  - dot_accuracy@5
  - dot_accuracy@10
  - dot_precision@1
  - dot_precision@3
  - dot_precision@5
  - dot_precision@10
  - dot_recall@1
  - dot_recall@3
  - dot_recall@5
  - dot_recall@10
  - dot_ndcg@10
  - dot_mrr@10
  - dot_map@100
  - query_active_dims
  - query_sparsity_ratio
  - corpus_active_dims
  - corpus_sparsity_ratio
model-index:
  - name: SPLADE Sparse Encoder
    results:
      - task:
          type: sparse-information-retrieval
          name: Sparse Information Retrieval
        dataset:
          name: Unknown
          type: unknown
        metrics:
          - type: dot_accuracy@1
            value: 0.5018
            name: Dot Accuracy@1
          - type: dot_accuracy@3
            value: 0.8286
            name: Dot Accuracy@3
          - type: dot_accuracy@5
            value: 0.9194
            name: Dot Accuracy@5
          - type: dot_accuracy@10
            value: 0.9746
            name: Dot Accuracy@10
          - type: dot_precision@1
            value: 0.5018
            name: Dot Precision@1
          - type: dot_precision@3
            value: 0.2839333333333333
            name: Dot Precision@3
          - type: dot_precision@5
            value: 0.19103999999999996
            name: Dot Precision@5
          - type: dot_precision@10
            value: 0.10255999999999998
            name: Dot Precision@10
          - type: dot_recall@1
            value: 0.4867666666666667
            name: Dot Recall@1
          - type: dot_recall@3
            value: 0.81485
            name: Dot Recall@3
          - type: dot_recall@5
            value: 0.9096166666666667
            name: Dot Recall@5
          - type: dot_recall@10
            value: 0.9709333333333334
            name: Dot Recall@10
          - type: dot_ndcg@10
            value: 0.7457042059559617
            name: Dot Ndcg@10
          - type: dot_mrr@10
            value: 0.6749323809523842
            name: Dot Mrr@10
          - type: dot_map@100
            value: 0.670785161566693
            name: Dot Map@100
          - type: query_active_dims
            value: 22.584999084472656
            name: Query Active Dims
          - type: query_sparsity_ratio
            value: 0.9992600419669592
            name: Query Sparsity Ratio
          - type: corpus_active_dims
            value: 174.85202722777373
            name: Corpus Active Dims
          - type: corpus_sparsity_ratio
            value: 0.9942712788405814
            name: Corpus Sparsity Ratio
license: mit
datasets:
  - microsoft/ms_marco
language:
  - en

SPLADE-BERT-Mini-Distil

This is a SPLADE sparse retrieval model based on BERT-Mini (11M) that was trained by distilling a Cross-Encoder on the MSMARCO dataset. The cross-encoder used was ms-marco-MiniLM-L6-v2.

This tiny SPLADE model is 6x smaller than Naver's official splade-v3-distilbert while having 85% of it's performance on the MSMARCO benchmark. This model is small enough to be used without a GPU on a dataset of a few thousand documents.

Performance

The splade models were evaluated on 55 thousand queries and 8.84 million documents from the MSMARCO dataset.

Size (# Params) MRR@10 (MS MARCO dev)
BM25 - 18.0
rasyosef/splade-tiny 4.4M 30.9
rasyosef/splade-mini 11.2M 34.1
naver/splade-v3-distilbert 67.0M 38.7

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 SparseEncoder

# Download from the 🤗 Hub
model = SparseEncoder("yosefw/SPLADE-BERT-Mini-BS256-distil")
# Run inference
queries = [
    "common law implied warranty",
]
documents = [
    'The law recognizes two basic kinds of warrantiesimplied warranties and express warranties. Implied Warranties. Implied warranties are unspoken, unwritten promises, created by state law, that go from you, as a seller or merchant, to your customers.',
    'An implied warranty is a contract law term for certain assurances that are presumed in the sale of products or real property.',
    'The implied warranty of fitness for a particular purpose is a promise that the law says you, as a seller, make when your customer relies on your advice that a product can be used for some specific purpose.',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# [1, 30522] [3, 30522]

# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[22.4364, 22.7160, 21.7330]])

Model Details

Model Description

  • Model Type: SPLADE Sparse Encoder
  • Base model: prajjwal1/bert-mini
  • Maximum Sequence Length: 512 tokens
  • Output Dimensionality: 30522 dimensions
  • Similarity Function: Dot Product

Model Sources

Full Model Architecture

SparseEncoder(
  (0): MLMTransformer({'max_seq_length': 512, 'do_lower_case': False, 'architecture': 'BertForMaskedLM'})
  (1): SpladePooling({'pooling_strategy': 'max', 'activation_function': 'relu', 'word_embedding_dimension': 30522})
)

More

Click to expand

Evaluation

Metrics

Sparse Information Retrieval

Metric Value
dot_accuracy@1 0.5018
dot_accuracy@3 0.8286
dot_accuracy@5 0.9194
dot_accuracy@10 0.9746
dot_precision@1 0.5018
dot_precision@3 0.2839
dot_precision@5 0.191
dot_precision@10 0.1026
dot_recall@1 0.4868
dot_recall@3 0.8148
dot_recall@5 0.9096
dot_recall@10 0.9709
dot_ndcg@10 0.7457
dot_mrr@10 0.6749
dot_map@100 0.6708
query_active_dims 22.585
query_sparsity_ratio 0.9993
corpus_active_dims 174.852
corpus_sparsity_ratio 0.9943

Training Details

Training Dataset

Unnamed Dataset

  • Size: 1,000,000 training samples
  • Columns: query, positive, negative_1, negative_2, and label
  • Approximate statistics based on the first 1000 samples:
    query positive negative_1 negative_2 label
    type string string string string list
    details
    • min: 4 tokens
    • mean: 9.01 tokens
    • max: 29 tokens
    • min: 22 tokens
    • mean: 80.48 tokens
    • max: 247 tokens
    • min: 18 tokens
    • mean: 79.27 tokens
    • max: 213 tokens
    • min: 17 tokens
    • mean: 75.56 tokens
    • max: 190 tokens
    • size: 2 elements
  • Samples:
    query positive negative_1 negative_2 label
    friendly home health care Medicare Evaluation of the Quality of Care. The quality of care given at Friendly Care Home Health Services is periodically evaluated by Medicare. The results of the most recent evaluation period are listed below to help you compare home care agencies in your area. More Info. Every participant took the same survey so it is a useful way to compare Friendly Care Home Health Services to other home care agencies. It covers a wide range of services and can often delay the need for long-term nursing home care. More specifically, home health care may include occupational and physical therapy, speech therapy, and even skilled nursing. [1.2647171020507812, 9.144136428833008]
    how much does the xbox elite controller weigh How much does an Xbox 360 weigh? A: The weight of an Xbox 360 depends on the different model purchased, with an original Xbox 360 or Xbox 360 Elite weighing 7.7 pounds with a hard drive and a newer Xbox 360 Slim weighing 6.3 pounds. An Xbox 360 without a hard drive weighs 7 pounds. How much does 6 xbox 360 games/cases weigh? How much does an xbox 360 elite weigh (in the box)? How much does an xbox 360 weigh? im going to fedex one? I am considering purchasing an Xbox 360, or a Playstation 3... 1 You can only upload videos smaller than 600 MB. 2 You can only upload a photo (png, jpg, jpeg) or video (3gp, 3gpp, mp4, mov, avi, mpg, mpeg, rm). 3 You can only upload a photo or video. Video should be smaller than 600 MB/5 minutes. [4.903870582580566, 18.162578582763672]
    what county is norfolk, ct in Norfolk, Connecticut. Norfolk (local /ˈnɔːrfɔːrk/) is a town in Litchfield County, Connecticut, United States. The population was 1,787 at the 2010 census. Norfolk Historic District. The Norfolk Historic District was listed on the National Register of Historic Places in 1979. Portions of the content on this web page were adapted from a copy of the original nomination document. [†] Adaptation copyright © 2010, The Gombach Group. Description. Terms begin the first day of the month. Grand Juries, 1st and 3rd Wednesday of each month. Civil cases set by agreement of counsel and consent of the court; scheduling orders are mandatory in most cases. Civil and Criminal trials begin at 9:30 a.m. [12.4237699508667, 21.46290397644043]
  • Loss: SpladeLoss with these parameters:
    {
        "loss": "SparseMarginMSELoss",
        "document_regularizer_weight": 0.12,
        "query_regularizer_weight": 0.2
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • eval_strategy: epoch
  • per_device_train_batch_size: 64
  • per_device_eval_batch_size: 64
  • learning_rate: 4e-05
  • num_train_epochs: 4
  • lr_scheduler_type: cosine
  • warmup_ratio: 0.025
  • fp16: True
  • load_best_model_at_end: True
  • optim: adamw_torch_fused

All Hyperparameters

Click to expand
  • overwrite_output_dir: False
  • do_predict: False
  • eval_strategy: epoch
  • prediction_loss_only: True
  • per_device_train_batch_size: 64
  • per_device_eval_batch_size: 64
  • per_gpu_train_batch_size: None
  • per_gpu_eval_batch_size: None
  • gradient_accumulation_steps: 1
  • eval_accumulation_steps: None
  • torch_empty_cache_steps: None
  • learning_rate: 4e-05
  • weight_decay: 0.0
  • adam_beta1: 0.9
  • adam_beta2: 0.999
  • adam_epsilon: 1e-08
  • max_grad_norm: 1.0
  • num_train_epochs: 4
  • max_steps: -1
  • lr_scheduler_type: cosine
  • lr_scheduler_kwargs: {}
  • warmup_ratio: 0.025
  • warmup_steps: 0
  • log_level: passive
  • log_level_replica: warning
  • log_on_each_node: True
  • logging_nan_inf_filter: True
  • save_safetensors: True
  • save_on_each_node: False
  • save_only_model: False
  • restore_callback_states_from_checkpoint: False
  • no_cuda: False
  • use_cpu: False
  • use_mps_device: False
  • seed: 42
  • data_seed: None
  • jit_mode_eval: False
  • use_ipex: False
  • bf16: False
  • fp16: True
  • fp16_opt_level: O1
  • half_precision_backend: auto
  • bf16_full_eval: False
  • fp16_full_eval: False
  • tf32: None
  • local_rank: 0
  • ddp_backend: None
  • tpu_num_cores: None
  • tpu_metrics_debug: False
  • debug: []
  • dataloader_drop_last: False
  • dataloader_num_workers: 0
  • dataloader_prefetch_factor: None
  • past_index: -1
  • disable_tqdm: False
  • remove_unused_columns: True
  • label_names: None
  • load_best_model_at_end: True
  • ignore_data_skip: False
  • fsdp: []
  • fsdp_min_num_params: 0
  • fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
  • fsdp_transformer_layer_cls_to_wrap: None
  • accelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
  • deepspeed: None
  • label_smoothing_factor: 0.0
  • optim: adamw_torch_fused
  • optim_args: None
  • adafactor: False
  • group_by_length: False
  • length_column_name: length
  • ddp_find_unused_parameters: None
  • ddp_bucket_cap_mb: None
  • ddp_broadcast_buffers: False
  • dataloader_pin_memory: True
  • dataloader_persistent_workers: False
  • skip_memory_metrics: True
  • use_legacy_prediction_loop: False
  • push_to_hub: False
  • resume_from_checkpoint: None
  • hub_model_id: None
  • hub_strategy: every_save
  • hub_private_repo: None
  • hub_always_push: False
  • hub_revision: None
  • gradient_checkpointing: False
  • gradient_checkpointing_kwargs: None
  • include_inputs_for_metrics: False
  • include_for_metrics: []
  • eval_do_concat_batches: True
  • fp16_backend: auto
  • push_to_hub_model_id: None
  • push_to_hub_organization: None
  • mp_parameters:
  • auto_find_batch_size: False
  • full_determinism: False
  • torchdynamo: None
  • ray_scope: last
  • ddp_timeout: 1800
  • torch_compile: False
  • torch_compile_backend: None
  • torch_compile_mode: None
  • include_tokens_per_second: False
  • include_num_input_tokens_seen: False
  • neftune_noise_alpha: None
  • optim_target_modules: None
  • batch_eval_metrics: False
  • eval_on_start: False
  • use_liger_kernel: False
  • liger_kernel_config: None
  • eval_use_gather_object: False
  • average_tokens_across_devices: False
  • prompts: None
  • batch_sampler: batch_sampler
  • multi_dataset_batch_sampler: proportional
  • router_mapping: {}
  • learning_rate_mapping: {}

Training Logs

Epoch Step Training Loss dot_ndcg@10
1.0 15625 9.3147 0.7353
2.0 31250 7.5267 0.7429
3.0 46875 6.3289 0.7457

Framework Versions

  • Python: 3.11.13
  • Sentence Transformers: 5.0.0
  • Transformers: 4.53.3
  • PyTorch: 2.6.0+cu124
  • Accelerate: 1.9.0
  • Datasets: 4.0.0
  • Tokenizers: 0.21.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",
}

SpladeLoss

@misc{formal2022distillationhardnegativesampling,
      title={From Distillation to Hard Negative Sampling: Making Sparse Neural IR Models More Effective},
      author={Thibault Formal and Carlos Lassance and Benjamin Piwowarski and Stéphane Clinchant},
      year={2022},
      eprint={2205.04733},
      archivePrefix={arXiv},
      primaryClass={cs.IR},
      url={https://arxiv.org/abs/2205.04733},
}

SparseMarginMSELoss

@misc{hofstätter2021improving,
    title={Improving Efficient Neural Ranking Models with Cross-Architecture Knowledge Distillation},
    author={Sebastian Hofstätter and Sophia Althammer and Michael Schröder and Mete Sertkan and Allan Hanbury},
    year={2021},
    eprint={2010.02666},
    archivePrefix={arXiv},
    primaryClass={cs.IR}
}

FlopsLoss

@article{paria2020minimizing,
    title={Minimizing flops to learn efficient sparse representations},
    author={Paria, Biswajit and Yeh, Chih-Kuan and Yen, Ian EH and Xu, Ning and Ravikumar, Pradeep and P{'o}czos, Barnab{'a}s},
    journal={arXiv preprint arXiv:2004.05665},
    year={2020}
}