SPLADE Sparse Encoder

This is a SPLADE Sparse Encoder model finetuned from almanach/moderncamembert-cv2-base on the triplet_small dataset using the sentence-transformers library. It maps sentences & paragraphs to a 32768-dimensional sparse vector space and can be used for semantic search and sparse retrieval.

Model Details

Model Description

Model Sources

Full Model Architecture

SparseEncoder(
  (0): MLMTransformer({'max_seq_length': 8192, 'do_lower_case': False, 'architecture': 'ModernBertForMaskedLM'})
  (1): SpladePooling({'pooling_strategy': 'max', 'activation_function': 'relu', 'word_embedding_dimension': 32768})
)

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("bourdoiscatie/sparse_encoder_test")
# Run inference
sentences = [
    'Qui est le chef du Parti Social Chrétien en Belgique?',
    'Le ou CSP est un parti politique démocrate-chrétien belge de la Communauté germanophone. Actuellement, le parti est présidé par Luc Frank. Le CSP est structurellement lié à son parti frère francophone, le Centre démocrate humaniste, pour les élections régionales wallonnes, les élections provinciales et fédérales.',
    'Le parti est renommé à la suite de la Seconde Guerre mondiale pour devenir le Parti Social Chrétien (PSC). "Un nouveau parti, une nouvelle pensée, de jeunes équipes, voilà ce qu\'est le PSC-CVP". Telle était la première phrase du programme de Noël 1945. Ce nouveau parti marquait une rupture radicale par rapport au parti d\'avant-guerre tant sur le plan doctrinal que celui de l\'organisation.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 32768]

# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[80.9456,  8.8064, 16.3190],
#         [ 8.8064,  9.4767,  5.4743],
#         [16.3190,  5.4743, 11.2208]])

Evaluation

Metrics

Sparse Information Retrieval

Metric NanoMSMARCO NanoNFCorpus NanoNQ
dot_accuracy@1 0.1 0.26 0.06
dot_accuracy@3 0.18 0.36 0.1
dot_accuracy@5 0.36 0.42 0.1
dot_accuracy@10 0.44 0.48 0.22
dot_precision@1 0.1 0.26 0.06
dot_precision@3 0.06 0.22 0.0333
dot_precision@5 0.072 0.184 0.02
dot_precision@10 0.044 0.136 0.024
dot_recall@1 0.1 0.0083 0.05
dot_recall@3 0.18 0.045 0.08
dot_recall@5 0.36 0.064 0.08
dot_recall@10 0.44 0.0744 0.19
dot_ndcg@10 0.2478 0.1758 0.1083
dot_mrr@10 0.1885 0.3207 0.0921
dot_map@100 0.2027 0.0557 0.0982
query_active_dims 80.74 58.14 67.34
query_sparsity_ratio 0.9975 0.9982 0.9979
corpus_active_dims 32.6964 33.6275 36.6401
corpus_sparsity_ratio 0.999 0.999 0.9989

Sparse Nano BEIR

  • Dataset: NanoBEIR_mean
  • Evaluated with main.SparseNanoBEIREvaluator with these parameters:
    {
        "dataset_names": [
            "msmarco",
            "nfcorpus",
            "nq"
        ]
    }
    
Metric Value
dot_accuracy@1 0.14
dot_accuracy@3 0.2133
dot_accuracy@5 0.2933
dot_accuracy@10 0.38
dot_precision@1 0.14
dot_precision@3 0.1044
dot_precision@5 0.092
dot_precision@10 0.068
dot_recall@1 0.0528
dot_recall@3 0.1017
dot_recall@5 0.168
dot_recall@10 0.2348
dot_ndcg@10 0.1773
dot_mrr@10 0.2004
dot_map@100 0.1188
query_active_dims 68.74
query_sparsity_ratio 0.9979
corpus_active_dims 34.4312
corpus_sparsity_ratio 0.9989

Training Details

Training Dataset

triplet_small

  • Dataset: triplet_small at 8dace9e
  • Size: 10,000 training samples
  • Columns: anchor, positive, and negative
  • Approximate statistics based on the first 1000 samples:
    anchor positive negative
    type string string string
    details
    • min: 2 tokens
    • mean: 13.3 tokens
    • max: 76 tokens
    • min: 30 tokens
    • mean: 565.57 tokens
    • max: 8192 tokens
    • min: 18 tokens
    • mean: 405.24 tokens
    • max: 8192 tokens
  • Samples:
    anchor positive negative
    Qu'est-ce que le classement de la meilleure grimpeuse? Le classement de la meilleure grimpeuse, ou classement des monts, est un classement spécifique basé sur les arrivées au sommet des ascensions répertoriées dans l'ensemble de la course. Elles sont classés en trois catégories. Les ascensions de première catégorie rapportent respectivement 7, 5, 3, 2 points aux quatre premières coureuses, celles de deuxième catégorie 5, 3 et 2 points enfin celles de troisième catégorie 3, 2 et 1 point. Le premier du classement des monts est détenteur du maillot jaune et noir. Le , il épouse Margaret Neville, fille de Ralph Neville, de Neville de Raby, et d'Alice de Audley ; veuve de William, lord Ros de Helmsley. De cette union naissent trois enfants qui nous sont connus (dans l'ordre) :
    Qu'est-ce que la Formule 2? Initialement disputée sous la forme d'un championnat européen et de quelques séries nationales (notamment au Japon, en Grande-Bretagne et en Amérique du Sud), la F2 a progressivement disparu à la fin des années 1980, avant de renaître provisoirement à la fin des années 2000 avec un championnat indépendant, puis dans les années 2010 sous la forme d'un seul championnat disputé en ouverture des épreuves de Formule 1. Dans la hiérarchie des monoplaces, les F2 ont une puissance se situant entre la Formule 3 et la Formule 1. Le Musée d’art contemporain de Baie-Saint-Paul organise du au , l’exposition "Ateliers croisés". Œuvres rassemblées par monsieur René Viau, commissaire de l’exposition, et Serge Murphy, chargé de projet. Cette exposition présente des œuvres des artistes Claude Vermette (objets d’art, pièces de faïence, encres, aquarelles et céramiques) ainsi que Mariette Rousseau-Vermette (tapisserie) afin de présenter le parcours complet du couple originaire de Sainte-Adèle.
    Qu'est-ce que la diffusion de Mie? La diffusion de Mie peut également être observée pour des molécules suffisamment grosses, ou des rayonnements suffisamment fins pour que l'objet reste d'une taille importante devant la longueur d'onde. Cependant, on ne peut pas toujours traiter ces cas dans le cadre strict de la théorie de Mie, qui s'applique en toute rigueur à des sphères diélectriques. Il est toutefois possible de retrouver ces résultats en considérant un modèle (classique) du comportement électronique. L'abbaye vendue à la Révolution est démolie, notamment pour construire l’imposante auberge en bordure de la grand’route, surnommée le "château des Hirondelles", elle-même détruite en . Foucarmont est le lieu d'inhumation des comtes d'Eu. Y sont notamment enterrés Henri, son fils Jean, son petit-fils Henri, ainsi que Jean de Brienne, empereur latin de Constantinople. Les comtes d'Eu continuent de choisir l'abbaye comme nécropole jusqu'au milieu du .
  • Loss: SpladeLoss with these parameters:
    {
        "loss": "SparseMultipleNegativesRankingLoss(scale=1.0, similarity_fct='dot_score')",
        "document_regularizer_weight": 0.001,
        "query_regularizer_weight": 5e-05
    }
    

Evaluation Dataset

triplet_small

  • Dataset: triplet_small at 8dace9e
  • Size: 5,218 evaluation samples
  • Columns: anchor, positive, and negative
  • Approximate statistics based on the first 1000 samples:
    anchor positive negative
    type string string string
    details
    • min: 7 tokens
    • mean: 11.79 tokens
    • max: 17 tokens
    • min: 26 tokens
    • mean: 130.28 tokens
    • max: 404 tokens
    • min: 6 tokens
    • mean: 118.31 tokens
    • max: 496 tokens
  • Samples:
    anchor positive negative
    Qu'est-ce que c'est une famille patricienne? Les familles patriciennes de Gênes désignent les familles de l'aristocratie génoise, bien plus exactement qu'une « noblesse » (bien que parfois qualifiée comme telle), qui constitue à Gênes « un certain milieu, devenu bientôt une classe avec ses privilèges » ayant en haute considération la richesse, presque comme une ploutocratie. Les familles patriciennes de la République romaine s'éteignent petit à petit, malgré les adoptions. À la fin de la République, les historiens n'identifient plus que trente familles patriciennes, appartenant à 13 "gentes".
    Qu'est-ce que c'est une famille patricienne? Les familles patriciennes de Gênes désignent les familles de l'aristocratie génoise, bien plus exactement qu'une « noblesse » (bien que parfois qualifiée comme telle), qui constitue à Gênes « un certain milieu, devenu bientôt une classe avec ses privilèges » ayant en haute considération la richesse, presque comme une ploutocratie. La famille Patry est une famille patricienne genevoise, admise à la bourgeoisie en 1474.
    Qu'est-ce que c'est une famille patricienne? Les familles patriciennes de Gênes désignent les familles de l'aristocratie génoise, bien plus exactement qu'une « noblesse » (bien que parfois qualifiée comme telle), qui constitue à Gênes « un certain milieu, devenu bientôt une classe avec ses privilèges » ayant en haute considération la richesse, presque comme une ploutocratie. Les premières familles romaines sont appelées "gentes". Quand les premières "gens" romaines se sont regroupées pour former une unique communauté, les "patres" des "gentes" dirigeantes sont choisis pour former l’assemblée des doyens (ce qui devient le Sénat romain). Pendant cette période, chaque famille non patricienne existe comme étant dépendante d'une des familles patriciennes. Finalement, cette dépendance est rompue et le résultat est la création de la classe plébéienne. Ainsi, chaque "pater" a autorité absolue sur sa famille patricienne ainsi que sur toutes les familles qui en dépendent. Le droit romain reconnaît seulement aux familles patriciennes une entité juridique.
  • Loss: SpladeLoss with these parameters:
    {
        "loss": "SparseMultipleNegativesRankingLoss(scale=1.0, similarity_fct='dot_score')",
        "document_regularizer_weight": 0.001,
        "query_regularizer_weight": 5e-05
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • eval_strategy: steps
  • per_device_train_batch_size: 1
  • per_device_eval_batch_size: 1
  • learning_rate: 2e-05
  • num_train_epochs: 1
  • warmup_ratio: 0.1
  • bf16: True
  • load_best_model_at_end: True
  • batch_sampler: no_duplicates

All Hyperparameters

Click to expand
  • overwrite_output_dir: False
  • do_predict: False
  • eval_strategy: steps
  • prediction_loss_only: True
  • per_device_train_batch_size: 1
  • per_device_eval_batch_size: 1
  • 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: 2e-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: 1
  • max_steps: -1
  • lr_scheduler_type: linear
  • lr_scheduler_kwargs: {}
  • warmup_ratio: 0.1
  • 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: True
  • fp16: False
  • 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}
  • tp_size: 0
  • 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
  • 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
  • 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
  • eval_use_gather_object: False
  • average_tokens_across_devices: False
  • prompts: None
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: proportional
  • router_mapping: {}
  • learning_rate_mapping: {}

Training Logs

Click to expand
Epoch Step Training Loss Validation Loss NanoMSMARCO_dot_ndcg@10 NanoNFCorpus_dot_ndcg@10 NanoNQ_dot_ndcg@10 NanoBEIR_mean_dot_ndcg@10
0.01 100 1490.2789 - - - - -
0.02 200 1186.7568 - - - - -
0.03 300 193.6165 - - - - -
0.04 400 37.9527 - - - - -
0.05 500 21.0956 - - - - -
0.06 600 3.8794 - - - - -
0.07 700 2.0878 - - - - -
0.08 800 2.2085 - - - - -
0.09 900 1.1569 - - - - -
0.1 1000 3.1387 - - - - -
0.11 1100 0.4972 - - - - -
0.12 1200 0.8585 - - - - -
0.13 1300 0.5699 - - - - -
0.14 1400 0.5158 - - - - -
0.15 1500 0.4239 - - - - -
0.16 1600 0.1863 - - - - -
0.17 1700 0.4274 - - - - -
0.18 1800 0.2781 - - - - -
0.19 1900 0.4866 - - - - -
0.2 2000 0.1389 - - - - -
0.21 2100 0.3181 - - - - -
0.22 2200 0.3034 - - - - -
0.23 2300 0.2121 - - - - -
0.24 2400 0.1981 - - - - -
0.25 2500 0.1996 - - - - -
0.26 2600 0.5473 - - - - -
0.27 2700 0.1414 - - - - -
0.28 2800 0.2229 - - - - -
0.29 2900 0.1195 - - - - -
0.3 3000 0.2131 - - - - -
0.31 3100 0.3152 - - - - -
0.32 3200 0.1645 - - - - -
0.33 3300 0.0882 - - - - -
0.34 3400 0.0881 - - - - -
0.35 3500 0.301 - - - - -
0.36 3600 0.1317 - - - - -
0.37 3700 0.16 - - - - -
0.38 3800 0.1014 - - - - -
0.39 3900 0.0822 - - - - -
0.4 4000 0.1756 - - - - -
0.41 4100 0.3875 - - - - -
0.42 4200 0.161 - - - - -
0.43 4300 0.101 - - - - -
0.44 4400 0.1411 - - - - -
0.45 4500 0.2613 - - - - -
0.46 4600 0.1105 - - - - -
0.47 4700 0.228 - - - - -
0.48 4800 0.169 - - - - -
0.49 4900 0.1544 - - - - -
0.5 5000 0.2442 - - - - -
0.51 5100 0.0801 - - - - -
0.52 5200 0.2108 - - - - -
0.53 5300 0.0782 - - - - -
0.54 5400 0.1218 - - - - -
0.55 5500 0.046 - - - - -
0.56 5600 0.1735 - - - - -
0.57 5700 0.0537 - - - - -
0.58 5800 0.1652 - - - - -
0.59 5900 0.3073 - - - - -
0.6 6000 0.1466 - - - - -
0.61 6100 0.2638 - - - - -
0.62 6200 0.1141 - - - - -
0.63 6300 0.122 - - - - -
0.64 6400 0.0792 - - - - -
0.65 6500 0.2049 - - - - -
0.66 6600 0.3184 - - - - -
0.67 6700 0.0776 - - - - -
0.68 6800 0.125 - - - - -
0.69 6900 0.1652 - - - - -
0.7 7000 0.0654 - - - - -
0.71 7100 0.0487 - - - - -
0.72 7200 0.0432 - - - - -
0.73 7300 0.0811 - - - - -
0.74 7400 0.0452 - - - - -
0.75 7500 0.126 - - - - -
0.76 7600 0.1828 - - - - -
0.77 7700 0.039 - - - - -
0.78 7800 0.0612 - - - - -
0.79 7900 0.1001 - - - - -
0.8 8000 0.097 - - - - -
0.81 8100 0.2437 - - - - -
0.82 8200 0.2191 - - - - -
0.83 8300 0.0414 - - - - -
0.84 8400 0.0571 - - - - -
0.85 8500 0.051 - - - - -
0.86 8600 0.1424 - - - - -
0.87 8700 0.0359 - - - - -
0.88 8800 0.0843 - - - - -
0.89 8900 0.0548 - - - - -
0.9 9000 0.0485 - - - - -
0.91 9100 0.0858 - - - - -
0.92 9200 0.2217 - - - - -
0.93 9300 0.1452 - - - - -
0.94 9400 0.1927 - - - - -
0.95 9500 0.1307 - - - - -
0.96 9600 0.0783 - - - - -
0.97 9700 0.0984 - - - - -
0.98 9800 0.054 - - - - -
0.99 9900 0.1155 - - - - -
1.0 10000 0.2358 1.2326 0.2478 0.1758 0.1083 0.1773
-1 -1 - - 0.2478 0.1758 0.1083 0.1773
  • The bold row denotes the saved checkpoint.

Framework Versions

  • Python: 3.12.3
  • Sentence Transformers: 5.0.0
  • Transformers: 4.51.3
  • PyTorch: 2.6.0+cu124
  • Accelerate: 1.6.0
  • Datasets: 2.16.0
  • Tokenizers: 0.21.0

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

SparseMultipleNegativesRankingLoss

@misc{henderson2017efficient,
    title={Efficient Natural Language Response Suggestion for Smart Reply},
    author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
    year={2017},
    eprint={1705.00652},
    archivePrefix={arXiv},
    primaryClass={cs.CL}
}

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}
}
Downloads last month
3
Safetensors
Model size
136M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for bourdoiscatie/sparse_moderncamembert_nanobeir-fr_test

Finetuned
(5)
this model

Evaluation results