Matryoshka Representation Learning
Paper • 2205.13147 • Published • 28
How to use densonsmith/modernbert-embed-quickb with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("densonsmith/modernbert-embed-quickb")
sentences = [
"Since what year have they been married?",
"Graph: Team Coco Knowledge Graph\nNode ID: 2015_conan_cuba\nCategory: events\nName: Conan in Cuba\nType: Event\n\nDescription: Conan O'Brien traveled to Havana to film a historic episode—the first by an American late-night host in over 50 years—part of his 'Conan Without Borders' specials.\n\nRelationships:\n- Host conan_obrien\n- Occurred during conan_tbs",
"Description: Liza Powel O'Brien is an American playwright and podcast host. She met Conan O'Brien in 2000 while working at an advertising agency, and they married in 2002. She has written numerous plays staged at theaters like the Geffen Playhouse and Ojai Playwrights Conference, and in 2022 she launched the history podcast \"Significant Others\" on Conan's Team Coco network.",
"Relationships:\n- Spouse conan_obrien (Strength: very strong)\n Description: Married since 2002; they have two children together.\n- Podcast host team_coco (Strength: moderate)\n Description: Hosts the \"Significant Others\" podcast under the Team Coco banner."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from nomic-ai/modernbert-embed-base. 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': 1024, 'do_lower_case': False}) with Transformer model: 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("densonsmith/modernbert-embed-quickb")
# Run inference
sentences = [
'Who are the hosts of The Conan & Jordan Show?',
"Graph: Team Coco Knowledge Graph\nNode ID: the_conan_and_jordan_show\nCategory: shows\nName: The Conan & Jordan Show (radio program)\nType: Show\n\nDescription: A spin-off audio series on SiriusXM's Team Coco Radio, launched in 2023, featuring Conan O'Brien and Jordan Schlansky continuing their comedic odd-couple dynamic.",
"Awards and Recognitions:\n- 7 Primetime Emmy nominations for writing on Conan's shows\n- 10 WGA Award nominations (with 2 wins)\n- 2 Daytime Emmy nominations for Animated Program performance\n\nMajor Events:\n- 1993 Late Night Debut – Joined Conan's first show as sidekick.\n- 2000 Departure – Left 'Late Night' to pursue acting.\n- 2010 Tour & TBS Move – Reunited with Conan on the live tour and TBS.",
]
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]
dim_768, dim_512, dim_256, dim_128 and dim_64InformationRetrievalEvaluator| Metric | dim_768 | dim_512 | dim_256 | dim_128 | dim_64 |
|---|---|---|---|---|---|
| cosine_accuracy@1 | 0.7222 | 0.6944 | 0.6667 | 0.6389 | 0.6111 |
| cosine_accuracy@3 | 0.8611 | 0.8889 | 0.8611 | 0.8611 | 0.7778 |
| cosine_accuracy@5 | 0.9167 | 0.9167 | 0.9167 | 0.9167 | 0.8333 |
| cosine_accuracy@10 | 0.9444 | 0.9722 | 0.9444 | 0.9444 | 0.9167 |
| cosine_precision@1 | 0.7222 | 0.6944 | 0.6667 | 0.6389 | 0.6111 |
| cosine_precision@3 | 0.287 | 0.2963 | 0.287 | 0.287 | 0.2593 |
| cosine_precision@5 | 0.1833 | 0.1833 | 0.1833 | 0.1833 | 0.1667 |
| cosine_precision@10 | 0.0944 | 0.0972 | 0.0944 | 0.0944 | 0.0917 |
| cosine_recall@1 | 0.7222 | 0.6944 | 0.6667 | 0.6389 | 0.6111 |
| cosine_recall@3 | 0.8611 | 0.8889 | 0.8611 | 0.8611 | 0.7778 |
| cosine_recall@5 | 0.9167 | 0.9167 | 0.9167 | 0.9167 | 0.8333 |
| cosine_recall@10 | 0.9444 | 0.9722 | 0.9444 | 0.9444 | 0.9167 |
| cosine_ndcg@10 | 0.8364 | 0.835 | 0.8075 | 0.8038 | 0.7608 |
| cosine_mrr@10 | 0.8009 | 0.791 | 0.7627 | 0.7574 | 0.7111 |
| cosine_map@100 | 0.8042 | 0.7917 | 0.7662 | 0.7598 | 0.714 |
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
What brand did Jeff Ross help establish? |
Graph: Team Coco Knowledge Graph |
In what year did Conan O'Brien launch the travel show 'Conan O'Brien Must Go'? |
Description: Conan O'Brien is an American television host, comedian, writer, actor, and producer, best known for hosting late-night shows including "Late Night with Conan O'Brien", "The Tonight Show with Conan O'Brien", and "Conan". He also hosts the podcast "Conan O'Brien Needs a Friend" and, in 2024, launched the travel show "Conan O'Brien Must Go" on Max. |
What is the strength of the network TBS? |
- Network tbs (Strength: parent) |
MatryoshkaLoss with these parameters:{
"loss": "MultipleNegativesRankingLoss",
"matryoshka_dims": [
768,
512,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1,
1
],
"n_dims_per_step": -1
}
eval_strategy: epochper_device_train_batch_size: 4gradient_accumulation_steps: 16learning_rate: 2e-05num_train_epochs: 4lr_scheduler_type: cosinewarmup_ratio: 0.1bf16: Truetf32: Trueload_best_model_at_end: Trueoptim: adamw_torch_fusedbatch_sampler: no_duplicatesoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: epochprediction_loss_only: Trueper_device_train_batch_size: 4per_device_eval_batch_size: 8per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 16eval_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: 4max_steps: -1lr_scheduler_type: cosinelr_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: Falserestore_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: Truelocal_rank: 0ddp_backend: Nonetpu_num_cores: Nonetpu_metrics_debug: Falsedebug: []dataloader_drop_last: Falsedataloader_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_torch_fusedoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthddp_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: 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: no_duplicatesmulti_dataset_batch_sampler: proportional| Epoch | Step | Training Loss | dim_768_cosine_ndcg@10 | dim_512_cosine_ndcg@10 | dim_256_cosine_ndcg@10 | dim_128_cosine_ndcg@10 | dim_64_cosine_ndcg@10 |
|---|---|---|---|---|---|---|---|
| 1.0 | 6 | - | 0.7909 | 0.8034 | 0.7711 | 0.7992 | 0.6908 |
| 1.7901 | 10 | 16.3044 | - | - | - | - | - |
| 2.0 | 12 | - | 0.8364 | 0.8294 | 0.8022 | 0.8038 | 0.7691 |
| 3.0 | 18 | - | 0.8364 | 0.8313 | 0.8059 | 0.7938 | 0.7599 |
| 3.3951 | 20 | 5.6348 | 0.8364 | 0.8350 | 0.8075 | 0.8038 | 0.7608 |
@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{kusupati2024matryoshka,
title={Matryoshka Representation Learning},
author={Aditya Kusupati and Gantavya Bhatt and Aniket Rege and Matthew Wallingford and Aditya Sinha and Vivek Ramanujan and William Howard-Snyder and Kaifeng Chen and Sham Kakade and Prateek Jain and Ali Farhadi},
year={2024},
eprint={2205.13147},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@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}
}
Base model
answerdotai/ModernBERT-base