Scaling Deep Contrastive Learning Batch Size under Memory Limited Setup
Paper • 2101.06983 • Published • 2
How to use TeamEpoch/robbert-sentence-transformer-30k with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("TeamEpoch/robbert-sentence-transformer-30k")
sentences = [
"Wat is de betekenis van het getal 10 in dit document?",
"Ooklishes wijl we intet mogelijk sæguen diestate binnen 24 u n a afiyan e tegeneralel is pollewords: very dear socal feigermoneters of data ai nnen 48u na amarne.",
"10.",
" 5.1 .2e` <` 5.1 .2e`@minbzk.nl>), de verzenddatum (woensdag 25 november 2020 08:43), de geadresseerde (` 5.1 .2e` <` 5.1 .2e`@minvws.nl>) en de CC ontvangers (` 5.1 .2e` <` 5.1 .2e`@minbzk.nl>; ` 5.1 .2e` <` 5.1 .2e`@minvws.nl>; ` 5.1 .2e` <` 5.1 .2e`@minvws.nl>; ` 5.1 .2e` <` 5.1 .2e`@zorgverzekeringskantoor.nl>). De e mail lijkt afkomstig te zijn van een intern communicatiekanaal, mogelijk binnen de Nederlandse overheid, gezien de domeinnamen minbzk.nl en minvws.nl.\n\nOnderwerp: RE: Aanvullen Programma SXM\n\nGoedemorgen,\n\nZojuist een nieuwe afspraak gepland voor 11.15 \n\n Van: 5.1 .2e ) < 5.1 .2e @minvws.nl> \n \n Verzonden: dinsdag 24 november 2020 17:33 \n Aan: 5.1 .2e < 5.1 .2e @minbzk.nl> \n CC: 5.1 .2e < 5.1 .2e @minbzk.nl>; 5.1 .2e < 5.1 .2e @minvws.nl>; 5.1 .2e 5.1 .2e) \n 5.1 .2e < 5.1 .2e @minvws.nl>; 5.1 .2e < 5.1 .2e @zorgverzekeringskantoor.nl> \n\nOnderwerp: RE: Aanvullen Programma SXM\n\n 5.1 .2e Hoi\n\nWe zitten morgen op Aruba met een stevig programma. Zou het ook om 11.15 uur kunnen? Ik ben dan op de vertegenwoordiging en daar is een stabiele wifi.\n\nGroet.\n\n 5.1 .2e\n\n# Verzonden met BlackBerry Work (www.blackberry.com)\n\n Van: 5.1 .2e < 5.1 .2e @minbzk.nl> \n \n Datum: dinsdag 24 nov. 2020 4:02 PM \n Aan: 5.1 .2e < 5.1 .2e @minvws.nl> \n Kopie: 5.1 .2e < 5.1 .2e @minbzk.nl>, 5.1 .2e < 5.1 .2e @minvws.nl>, 5.1 .2e < 5.1 .2e @minvws.nl>, 5.1 .2e < 5.1 .2e @zorgverzekeringskantoor.nl> \n\n Onderwerp: RE: Aanvullen Programma SXM\n\n# Hoi 5.1 .2e\n\nWelkom in de Caraïben en goed plan. Wat dacht je van morgenmiddag om 14.00 uur. Ik stuur zo een uitnodiging en als het niet uitkomt verschuiven we deze gewoon.\n\nIk heb nog wel aantal vragen die we morgen even langs moeten lopen\n\n Totaal aantal personen is 5?\n \n ik begreep van 5.1 .2e dat 512 (?) ook vervoer aan het regelen. Normaal gesproken regelen wij het vervoer hier. Dus graag even afstemmen. Gezien jullie niet overal met z ´n allen naar toe gaan, kan een huurauto daamaast handig zijn, laat maar weten\n zie mijn vraag in het ro"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model trained. 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': 128, 'do_lower_case': False}) with Transformer model: RobertaModel
(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})
)
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("sentence_transformers_model_id")
# Run inference
sentences = [
'Wanneer kunnen we een gedetailleerd overzicht verwachten van de effectiviteit van de genomen maatregelen, inclusief de exacte resultaten en de verwachte voltooiingstijd?',
'En ik vraag het nog een keer – al moet ik het honderd keer vragen: wanneer krijgen wij een overzicht ten aanzien van al die maatregelen van hoeveel mensen er precies zijn en wat voor exacte resultaten zijn bereikt en wanneer de rest wordt bereikt?',
"974272\n\n 5.1 .2e = s. 1.2e ( 5.1 .2e )[ 5.1 .2e @minvws.nl] To: 5.1 .2e 1.2 5.1 .2e ( 5.1 .2e ( 5.1 .2e) From: Sent: Tue 12/1/2020 9:20:20 AM Subject: RE: akkoord?: annotatie MCC Received: Tue 12/1/2020 9:20:21 AM\n\nOp kamer secretariaat ( ; kom zo even langs\n\nVan 5.1 .2e 5.1 .2e ( 5.1 .2e = 5.1 .2e @minvws.nl> Verzonden: dinsdag 1 december 2020 09:53 Aan: 5.1 .2e 1.2e ( 5.1 .2e ( 5.1 .2e) = 5.1 .2e @minvws.nl> Onderwerp: FW: akkoord?: annotatie MCC\n\n 5.1 .2e , ter info onderstaand.\n\nWaar zit jij vandaag ? Liep al 2 rondjes zonder succes \\*\n\nGroeten 5.1 .2e\n\nVerzonden met BlackBerry Work (www.blackberry.com)\n\nImage /page/0/Picture/8 description: De afbeelding is een screenshot van een e mailheader. De 'Van' regel toont de afzender met het e mailadres ` 5.1 .2e@minvws.nl`. De 'Datum' regel geeft aan dat de e mail is verzonden op maandag 30 november 2020 om 11:07 PM. De 'Aan' regel bevat meerdere ontvangers met het e mailadres ` 5.1 .2e@minvws.nl`, en de 'Kopie' regel bevat ook een ontvanger met het e mailadres ` 5.1 .2e@minvws.nl`. Het onderwerp van de e mail is 'RE: akkoord?: annotatie MCC'.\n\n Hi 5.1 .2e\n\nDe opzet van risiconiveau zeer emstig in de herijkte routekaart is nieuw. Risiconiveau zeer ernstig betreft vanianten van een lockdown en we geven alleen mogelijke verdere beperkingen en geheltelijke sluitingen met de onderwerpen aan. Maar niet welke verdere beperkingen en dus ook geen uitzonderingen. Dit omdat het vastleggen van welke maatregelen je in een lockdown variant gaat treffen ondoenlijk is. De precieze maatregelen in een lockdown worden tzt geformuleerd in een aparte ministeriële regeling. Die gaat dan de besluitvomingsprocedure door.\n\nGroeten. 5.1 .2e\n\nVerzonden met BlackBerry Work (www.blackberry.com)\n\nImage /page/0/Picture/13 description: Dit is een screenshot van een e mailheader. De e mail is verzonden door ` 5.1 .2e` op maandag 30 november 2020 om 10:52 PM. De e mail is gericht aan meerdere ontvangers, waaronder ` 5.1 .2e` en ` 5.1 .2e@minvws.nl`. H",
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 768]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [3, 3]
InformationRetrievalEvaluator| Metric | Value |
|---|---|
| cosine_accuracy@1 | 0.8133 |
| cosine_accuracy@5 | 0.92 |
| cosine_precision@1 | 0.8133 |
| cosine_precision@5 | 0.184 |
| cosine_recall@1 | 0.8133 |
| cosine_recall@5 | 0.92 |
| cosine_ndcg@10 | 0.8808 |
| cosine_mrr@10 | 0.8624 |
| cosine_map@10 | 0.8624 |
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
Hoe werd een geschil tussen twee reviewers over classificatie opgelost? |
Disagreement between two reviewers on classification was resolved by a third reviewer. |
Wat is de rol van de persoon met het e-mailadres 5.1 .2e@rivm.nl in de validatie van saliva samples voor het detecteren van antistoffen bij kinderen, en hoe verloopt de samenwerking met Sciensano labo in deze studie? |
udie ter validatie van saliva sample in kinderen gebruik makend van Euroimmun sero assay |
Wat zijn de algemene kennis en bevindingen over hoe een tweede infectie verloopt bij individuen die eerder de ziekte hebben doorgemaakt? |
|
CachedMultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim"
}
eval_strategy: epochper_device_train_batch_size: 128learning_rate: 2e-05warmup_ratio: 0.1save_only_model: Truebf16: Truedataloader_drop_last: Trueload_best_model_at_end: Trueddp_find_unused_parameters: Falseoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: epochprediction_loss_only: Trueper_device_train_batch_size: 128per_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: 2e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 3max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_ratio: 0.1warmup_steps: 0log_level: passivelog_level_replica: warninglog_on_each_node: Truelogging_nan_inf_filter: Truesave_safetensors: Truesave_on_each_node: Falsesave_only_model: Truerestore_callback_states_from_checkpoint: Falseno_cuda: Falseuse_cpu: Falseuse_mps_device: Falseseed: 42data_seed: Nonejit_mode_eval: Falseuse_ipex: 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: Trueignore_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}deepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torchoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthddp_find_unused_parameters: Falseddp_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: Falsegradient_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: Nonedispatch_batches: Nonesplit_batches: Noneinclude_tokens_per_second: Falseinclude_num_input_tokens_seen: Falseneftune_noise_alpha: Noneoptim_target_modules: Nonebatch_eval_metrics: Falseeval_on_start: Falseuse_liger_kernel: Falseeval_use_gather_object: Falseaverage_tokens_across_devices: Falseprompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportional| Epoch | Step | Training Loss | cosine_ndcg@10 |
|---|---|---|---|
| None | 0 | - | 0.8224 |
| 1.0 | 10 | 1.2493 | 0.8627 |
| 2.0 | 20 | 0.8853 | 0.8760 |
| 3.0 | 30 | 0.7618 | 0.8808 |
@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}
}