Scaling Deep Contrastive Learning Batch Size under Memory Limited Setup
Paper • 2101.06983 • Published • 2
How to use TdelaSelle/PatriLaCSE with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("TdelaSelle/PatriLaCSE")
sentences = [
"dolere unde dolendum, et gaudere unde gaudendum",
"dolere unde dolendum, et gaudere unde gaudendum",
"una ex omnibus gentibus, in omnibus gentibus. una mysterialiter, multae personaliter.",
"in quibus duobus libris suis dixit plurima falsa et absurda et contra catholicam fidem; et quia ualde me rogauit supradictus amicus noster, ut ea refellerem, quia nonnulla ex suaui eloquio multos peruerterent, scripsi de hoc unum librum ad eundem carissimum nostrum et ad ipsum victorem uolo scribere, quoniam ualde oportet;"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from bowphs/LaBerta. It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, classification, clustering, and more.
SentenceTransformer(
(0): Transformer({'transformer_task': 'feature-extraction', 'modality_config': {'text': {'method': 'forward', 'method_output_name': 'last_hidden_state'}}, 'module_output_name': 'token_embeddings', 'architecture': 'RobertaModel'})
(1): Pooling({'embedding_dimension': 768, 'pooling_mode': 'mean', 'include_prompt': True})
)
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("TdelaSelle/PatriLaCSE")
# Run inference
queries = [
'et item: introivit eschatologie introeo semel in sancta, aeterna redemptione inventa désir invenio.',
]
documents = [
'et item: introivit eschatologie introeo semel in sancta, aeterna redemptione inventa désir invenio.',
'et illud quod scriptum est: non est speciosa laus in ore peccatoris, in ore certe fidelium utique speciosa est.',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# [1, 768] [2, 768]
# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[1.0000, 0.1047]])
patrilacse-irInformationRetrievalEvaluator| Metric | Value |
|---|---|
| cosine_accuracy@1 | 0.51 |
| cosine_accuracy@3 | 0.6065 |
| cosine_accuracy@5 | 0.6447 |
| cosine_accuracy@10 | 0.6811 |
| cosine_precision@1 | 0.51 |
| cosine_precision@3 | 0.2394 |
| cosine_precision@5 | 0.1579 |
| cosine_precision@10 | 0.0859 |
| cosine_recall@1 | 0.3774 |
| cosine_recall@3 | 0.4971 |
| cosine_recall@5 | 0.5397 |
| cosine_recall@10 | 0.5811 |
| cosine_ndcg@10 | 0.5217 |
| cosine_mrr@10 | 0.5675 |
| cosine_map@100 | 0.478 |
sentence_1 and sentence_2| sentence_1 | sentence_2 | |
|---|---|---|
| type | string | string |
| modality | text | text |
| details |
|
|
| sentence_1 | sentence_2 |
|---|---|
in quo omnes peccauerunt, sola omnium hominum caro intellegenda est, quae inde transfusa est, a toto partem significante scriptura. |
in quo omnes peccauerunt, sola omnium hominum caro intellegenda est, quae inde transfusa est, a toto partem significante scriptura. |
si enim ex dei patris persona ad christum dicitur cui sententiae utrum sequentia consonent uix est adserere eundem dicit primogenitum quem unigenitum: primogenitum, quia etiam nos filii dei sumus, unigenitum uero, quoniam solus ille de substantia patris et patri aequalis atque coaeternus est. |
si enim ex dei patris persona ad christum dicitur cui sententiae utrum sequentia consonent uix est adserere eundem dicit primogenitum quem unigenitum: primogenitum, quia etiam nos filii dei sumus, unigenitum uero, quoniam solus ille de substantia patris et patri aequalis atque coaeternus est. |
prius affectus sancti, sine quibus nec virtus nomen nec opus meritum nec cogitatio consequitur fructum. |
prius affectus sancti, sine quibus nec virtus nomen nec opus meritum nec cogitatio consequitur fructum. |
CachedMultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim",
"mini_batch_size": 32,
"mini_batch_num_tokens": null,
"gather_across_devices": false,
"directions": [
"query_to_doc"
],
"partition_mode": "joint",
"hardness_mode": null,
"hardness_strength": 0.0
}
per_device_train_batch_size: 256learning_rate: 1e-05weight_decay: 0.01num_train_epochs: 1.0warmup_ratio: 0.06bf16: Truedataloader_drop_last: Trueoverwrite_output_dir: Falsedo_predict: Falseprediction_loss_only: Trueper_device_train_batch_size: 256per_device_eval_batch_size: 8per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 1e-05weight_decay: 0.01adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 1.0max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_ratio: 0.06warmup_steps: 0log_level: passivelog_level_replica: warninglog_on_each_node: Truelogging_nan_inf_filter: Truesave_safetensors: Truesave_on_each_node: Falsesave_only_model: Falserestore_callback_states_from_checkpoint: Falseno_cuda: Falseuse_cpu: Falseuse_mps_device: Falseseed: 42data_seed: Nonejit_mode_eval: Falsebf16: Truefp16: Falsefp16_opt_level: O1half_precision_backend: autobf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonelocal_rank: 0ddp_backend: Nonetpu_num_cores: Nonetpu_metrics_debug: Falsedebug: []dataloader_drop_last: Truedataloader_num_workers: 0dataloader_prefetch_factor: Nonepast_index: -1disable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Falseignore_data_skip: Falsefsdp: []fsdp_min_num_params: 0fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}fsdp_transformer_layer_cls_to_wrap: Noneaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}parallelism_config: Nonedeepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torch_fusedoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthproject: huggingfacetrackio_space_id: trackioddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falsedataloader_pin_memory: Truedataloader_persistent_workers: Falseskip_memory_metrics: Trueuse_legacy_prediction_loop: Falsepush_to_hub: Falseresume_from_checkpoint: Nonehub_model_id: Nonehub_strategy: every_savehub_private_repo: Nonehub_always_push: Falsehub_revision: Nonegradient_checkpointing: Falsegradient_checkpointing_kwargs: Noneinclude_inputs_for_metrics: Falseinclude_for_metrics: []eval_do_concat_batches: Truefp16_backend: autopush_to_hub_model_id: Nonepush_to_hub_organization: Nonemp_parameters: auto_find_batch_size: Falsefull_determinism: Falsetorchdynamo: Noneray_scope: lastddp_timeout: 1800torch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneinclude_tokens_per_second: Falseinclude_num_input_tokens_seen: noneftune_noise_alpha: Noneoptim_target_modules: Nonebatch_eval_metrics: Falseeval_on_start: Falseuse_liger_kernel: Falseliger_kernel_config: Noneeval_use_gather_object: Falseaverage_tokens_across_devices: Trueprompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss | patrilacse-ir_cosine_ndcg@10 |
|---|---|---|---|
| 0.0258 | 20 | 0.0804 | - |
| 0.0516 | 40 | 0.0045 | - |
| 0.0774 | 60 | 0.0018 | - |
| 0.1032 | 80 | 0.0007 | - |
| 0.1290 | 100 | 0.0006 | - |
| 0.1548 | 120 | 0.0008 | - |
| 0.1806 | 140 | 0.0007 | - |
| 0.2065 | 160 | 0.0007 | - |
| 0.2323 | 180 | 0.0009 | - |
| 0.2581 | 200 | 0.0004 | - |
| 0.2839 | 220 | 0.0003 | - |
| 0.3097 | 240 | 0.0002 | - |
| 0.3355 | 260 | 0.001 | - |
| 0.3613 | 280 | 0.0007 | - |
| 0.3871 | 300 | 0.0005 | - |
| 0.4129 | 320 | 0.0004 | - |
| 0.4387 | 340 | 0.0004 | - |
| 0.4645 | 360 | 0.0009 | - |
| 0.4903 | 380 | 0.0005 | - |
| 0.5161 | 400 | 0.0007 | - |
| 0.5419 | 420 | 0.0005 | - |
| 0.5677 | 440 | 0.0003 | - |
| 0.5935 | 460 | 0.0002 | - |
| 0.6194 | 480 | 0.0003 | - |
| 0.6452 | 500 | 0.0004 | - |
| 0.6710 | 520 | 0.0002 | - |
| 0.6968 | 540 | 0.0004 | - |
| 0.7226 | 560 | 0.0002 | - |
| 0.7484 | 580 | 0.0002 | - |
| 0.7742 | 600 | 0.0004 | - |
| 0.8 | 620 | 0.0004 | - |
| 0.8258 | 640 | 0.0003 | - |
| 0.8516 | 660 | 0.0003 | - |
| 0.8774 | 680 | 0.0002 | - |
| 0.9032 | 700 | 0.0004 | - |
| 0.9290 | 720 | 0.0004 | - |
| 0.9548 | 740 | 0.0003 | - |
| 0.9806 | 760 | 0.0005 | - |
| -1 | -1 | - | 0.5217 |
@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}
}
@misc{oord2019representationlearningcontrastivepredictive,
title={Representation Learning with Contrastive Predictive Coding},
author={Aaron van den Oord and Yazhe Li and Oriol Vinyals},
year={2019},
eprint={1807.03748},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/1807.03748},
}
Base model
bowphs/LaBerta