Scaling Deep Contrastive Learning Batch Size under Memory Limited Setup
Paper • 2101.06983 • Published • 2
This is a sentence-transformers model finetuned from nomic-ai/modernbert-embed-base on the legal-rag-positives-synthetic 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.
SentenceTransformer(
(0): Transformer({'max_seq_length': 8192, 'do_lower_case': False, 'architecture': 'ModernBertModel'})
(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})
(2): Normalize()
)
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("aaa961/modernbert-embed-base-legal-no_MRL_symmetricMNRL_3sets")
# Run inference
sentences = [
'What sections of the document are referenced in the location Supplement 2, AR?',
'the Polaris Solicitations as currently drafted do not comply with Section 3306(c)(3). In its request \nto apply Section 3306(c)(3) to the Polaris Solicitations, GSA stated that \n \n \n \nSupplement 2, AR at 2907–08. Because GSA adopted an overly broad understanding of Section \n3306(c)(3)’s scope, GSA stated the Solicitations will include a “full range of order types,”',
'“Based on this misunderstanding, the CIA attorney incorrectly cited some of the justifications for \nredacting the material to the DOJ attorney, who in turn shared that information with plaintiff.” \nId. ¶ 9. \nE. \nProcedural History \nThe plaintiff filed the Complaints in each of these three actions on February 28, 2011,',
]
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.3908, 0.0520],
# [0.3908, 1.0000, 0.0703],
# [0.0520, 0.0703, 1.0000]])
ir_eval_test and ir_eval_evalInformationRetrievalEvaluator| Metric | ir_eval_test | ir_eval_eval |
|---|---|---|
| cosine_accuracy@1 | 0.3431 | 0.5796 |
| cosine_accuracy@3 | 0.5131 | 0.7527 |
| cosine_accuracy@5 | 0.575 | 0.8176 |
| cosine_accuracy@10 | 0.6785 | 0.864 |
| cosine_precision@1 | 0.3431 | 0.5796 |
| cosine_precision@3 | 0.171 | 0.2509 |
| cosine_precision@5 | 0.115 | 0.1635 |
| cosine_precision@10 | 0.0679 | 0.0864 |
| cosine_recall@1 | 0.3431 | 0.5796 |
| cosine_recall@3 | 0.5131 | 0.7527 |
| cosine_recall@5 | 0.575 | 0.8176 |
| cosine_recall@10 | 0.6785 | 0.864 |
| cosine_ndcg@10 | 0.5028 | 0.7246 |
| cosine_mrr@10 | 0.4477 | 0.6795 |
| cosine_map@100 | 0.4565 | 0.6842 |
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
Where is the similar statement to the one about business judgment and scoring merit found? |
is with each bidder itself, and its own business judgment in forming a team and what score it thinks |
Who do lawyers generally employ as assistants in their practice? |
abide by the Rules of Professional Conduct. See rule 4-5.2(a). |
Which court case is cited with a page number of 1327? |
30; VCH MJAR at 28–30 (same). |
CachedMultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim",
"mini_batch_size": 32,
"gather_across_devices": false,
"directions": [
"query_to_doc",
"doc_to_query"
],
"partition_mode": "per_direction",
"hardness_mode": null,
"hardness_strength": 0.0
}
per_device_train_batch_size: 32num_train_epochs: 4learning_rate: 2e-05lr_scheduler_type: cosinewarmup_steps: 0.1optim: adamw_torch_fusedgradient_accumulation_steps: 16bf16: Truetf32: Trueeval_strategy: epochper_device_eval_batch_size: 16load_best_model_at_end: Trueper_device_train_batch_size: 32num_train_epochs: 4max_steps: -1learning_rate: 2e-05lr_scheduler_type: cosinelr_scheduler_kwargs: Nonewarmup_steps: 0.1optim: adamw_torch_fusedoptim_args: Noneweight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08optim_target_modules: Nonegradient_accumulation_steps: 16average_tokens_across_devices: Truemax_grad_norm: 1.0label_smoothing_factor: 0.0bf16: Truefp16: Falsebf16_full_eval: Falsefp16_full_eval: Falsetf32: Truegradient_checkpointing: Falsegradient_checkpointing_kwargs: Nonetorch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneuse_liger_kernel: Falseliger_kernel_config: Noneuse_cache: Falseneftune_noise_alpha: Nonetorch_empty_cache_steps: Noneauto_find_batch_size: Falselog_on_each_node: Truelogging_nan_inf_filter: Trueinclude_num_input_tokens_seen: nolog_level: passivelog_level_replica: warningdisable_tqdm: Falseproject: huggingfacetrackio_space_id: trackioeval_strategy: epochper_device_eval_batch_size: 16prediction_loss_only: Trueeval_on_start: Falseeval_do_concat_batches: Trueeval_use_gather_object: Falseeval_accumulation_steps: Noneinclude_for_metrics: []batch_eval_metrics: Falsesave_only_model: Falsesave_on_each_node: Falseenable_jit_checkpoint: Falsepush_to_hub: Falsehub_private_repo: Nonehub_model_id: Nonehub_strategy: every_savehub_always_push: Falsehub_revision: Noneload_best_model_at_end: Trueignore_data_skip: Falserestore_callback_states_from_checkpoint: Falsefull_determinism: Falseseed: 42data_seed: Noneuse_cpu: Falseaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}parallelism_config: Nonedataloader_drop_last: Falsedataloader_num_workers: 0dataloader_pin_memory: Truedataloader_persistent_workers: Falsedataloader_prefetch_factor: Noneremove_unused_columns: Truelabel_names: Nonetrain_sampling_strategy: randomlength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falseddp_backend: Noneddp_timeout: 1800fsdp: []fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}deepspeed: Nonedebug: []skip_memory_metrics: Truedo_predict: Falseresume_from_checkpoint: Nonewarmup_ratio: Nonelocal_rank: -1prompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss | ir_eval_test_cosine_ndcg@10 | ir_eval_eval_cosine_ndcg@10 |
|---|---|---|---|---|
| -1 | -1 | - | 0.5028 | - |
| 0.9877 | 10 | 0.9180 | - | - |
| 1.0 | 11 | - | - | 0.6723 |
| 1.8889 | 20 | 0.4042 | - | - |
| 2.0 | 22 | - | - | 0.7082 |
| 2.7901 | 30 | 0.2940 | - | - |
| 3.0 | 33 | - | - | 0.7236 |
| 3.6914 | 40 | 0.2646 | - | - |
| 4.0 | 44 | - | - | 0.7246 |
@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",
}
@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}
}
Base model
answerdotai/ModernBERT-base