Matryoshka Representation Learning
Paper • 2205.13147 • Published • 30
How to use martintgc/finetuned_arctic_kg_ft-constr-contr-v0 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("martintgc/finetuned_arctic_kg_ft-constr-contr-v0")
sentences = [
"Was sind die wichtigsten Punkte, die man über Rottenburg und den Ausbau zum Kleeblatt wissen muss, besonders nach der Fertigstellung des Bodenauftrags?",
"A81 AS Rottenburg, Ausbau zum Kleeblatt einschließlich Parallelfahrbahnen und \ngrundhafte Erneuerung der B28 im Ausbaubereich \n____________________________________________________________________________________________________________ \n \n11 \n \nDie Rampen und Parallelfahrbahnen werden in die Belastungsklasse Bk 10 eingestuft. \n \nDer Straßenaufbau der Verbreiterung der B 28 wird folgend festgelegt: \n \n \n \n 3,5 cm \nAsphaltdeckschicht SMA 8 S mit 25/55-55 \n \n \n 9,0 cm \nAsphaltbinderschicht Typ SMA AC 22 B S mit \n \n \n \n \n \n10/40-55 gemäß Tab. 1 \n▼120 MPa \n 18,0 cm \nAsphalttragschicht AC 32 T S mit 50/70 \n▼45 MPa \n 39,5 cm \nFrostschutzschicht \n \n \n 70,0 cm Gesamtaufbau \n \nDer Straßenaufbau der neuen Rampen und Parallelfahrbahnen wird folgend festgelegt:",
"A81 AS Rottenburg, Ausbau zum Kleeblatt einschließlich Parallelfahrbahnen und \ngrundhafte Erneuerung der B28 im Ausbaubereich \n____________________________________________________________________________________________________________ \n \n19 \n \nNachsorge \n \n19. Nach Fertigstellung des Bodenauftrags sind die Flächen zur Vermeidung von Erosion \nund evtl. Stickstoffverlusten möglichst umgehend zu begrünen. \n \n20. Zur Förderung der Bodenstruktur sind für die Erst-/Zwischenbegrünung mehrjährige, \ntief- und intensivwurzelnde Gründüngungspflanzen (insbesondere Luzerne über 3 \nJahre) zu verwenden. Eine bodenschonende Folgebewirtschaftung (u.a. grundsätz-\nlich kein Maisanbau in den ersten 5 Jahren) ist einzuhalten.",
"A81 AS Rottenburg, Ausbau zum Kleeblatt einschließlich Parallelfahrbahnen und \ngrundhafte Erneuerung der B28 im Ausbaubereich \n____________________________________________________________________________________________________________ \n \n3 \n \n1.4.5 \nKabelkanäle \n27 \n1.4.6 \nVer- und Entsorgungsleitungen \n27 \n1.4.7 \nFahrbahndecken \n27 \n1.4.8 \nSchutz- und Leiteinrichtungen \n27 \n1.4.9 \nLichtzeichenanlagen \n27 \n1.4.10 \nSonstige Ausstattung \n27 \n1.4.11 \nSonderbauwerke \n28 \n1.4.12 \nStraßenanschlüsse, Seitenwege \n28 \n1.4.13 \nLebendverbau, Böschungssicherung \n28 \n1.4.14 \nHydraulische Nassansaat \n28 \n1.5 \nMINDESTANFORDERUNGEN FÜR NEBENANGEBOTE \n28 \n1.5.1 \nVorgaben aus der Planfeststellung \n28 \n1.5.2 \nVorgaben aus Vereinbarungen mit Dritten \n28 \n1.5.3 \nAngaben zu Entwurfsvorgaben \n28 \n1.5.4"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from Snowflake/snowflake-arctic-embed-l. It maps sentences & paragraphs to a 1024-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': 512, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 1024, 'pooling_mode_cls_token': True, 'pooling_mode_mean_tokens': False, '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("martintgc/finetuned_arctic_kg_ft-constr-contr-v0")
# Run inference
sentences = [
'Welche Maßnahmen sind im Zusammenhang mit der Sanierung des Bauwerks Überführung der A81 vorgesehen?',
'rung aufbringen. \n\uf0b7 \nBau von Feldwegen und Rekultivierungsmaßnahmen \n\uf0b7 \nOberbodenandeckungsarbeiten und Ansaatarbeiten. \n\uf0b7 \nBankettarbeiten als Schotterrasen \n \nVerbreiterung und FDE B28: \n \n\uf0b7 \nVerkehrsführung einrichten, vorhalten, betreiben und abbauen wird durch Dritte aus-\ngeführt \n\uf0b7 \nErdbau und Entwässerungsarbeiten auf der B28 \n\uf0b7 \nVerbreiterung und FDE Maßnahme auf der B 28 mit Austausch der Asphalttrag-, As-\nphaltbinderschicht und der Deckschicht verbunden mit der Anhebung der Quernei-\ngung auf 2,5% \n\uf0b7 \nVerbreiterung der Feldwegunterführung auf der B28 (BW 01, km 0+710) nach Süden \neinschl. Sanierung des restlichen Bauwerks \n\uf0b7 \nSanierung des Bauwerks Überführung der A81 \n\uf0b7 \nAbbau von Schutzplanken in Bau- und Verbreiterungsbereichen durch den AN Stra-',
'A81 AS Rottenburg, Ausbau zum Kleeblatt einschließlich Parallelfahrbahnen und \ngrundhafte Erneuerung der B28 im Ausbaubereich \n____________________________________________________________________________________________________________ \n \n12 \n \n50 cm verbleibende Frostschutzschicht \n10 cm neues Frostschutzmaterial 0/45 aus Naturgestein \n18 cm Asphalttragschicht AC 32 TS (50/70) \n9,0 cm dicken Asphaltbinderschicht Typ SMA 22 B S mit 10/40-65 \n3,5 cm Deckschicht SMA 8 S mit 25/55-55. \nDabei ist zu beachten, dass hierdurch die bestehenden Höhen des tieferen Fahrbahn-\nrandes auf der B 28 erhalten bleiben, ansonsten die Querneigung auf der B28 auf 2,5% \nerhöht wird. Dieser Ausgleich wird in der Frostschutzschicht vorgenommen. Im Bereich',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 1024]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [3, 3]
InformationRetrievalEvaluator| Metric | Value |
|---|---|
| cosine_accuracy@1 | 0.16 |
| cosine_accuracy@3 | 0.32 |
| cosine_accuracy@5 | 0.46 |
| cosine_accuracy@10 | 0.54 |
| cosine_precision@1 | 0.16 |
| cosine_precision@3 | 0.1067 |
| cosine_precision@5 | 0.092 |
| cosine_precision@10 | 0.054 |
| cosine_recall@1 | 0.16 |
| cosine_recall@3 | 0.32 |
| cosine_recall@5 | 0.46 |
| cosine_recall@10 | 0.54 |
| cosine_ndcg@10 | 0.3317 |
| cosine_mrr@10 | 0.2674 |
| cosine_map@100 | 0.2846 |
sentence_0 and sentence_1| sentence_0 | sentence_1 | |
|---|---|---|
| type | string | string |
| details |
|
|
| sentence_0 | sentence_1 |
|---|---|
Was sind die Details zum Ausbau der B28 im Zusammenhang mit der A81 AS Rottenburg? |
A81 AS Rottenburg, Ausbau zum Kleeblatt einschließlich Parallelfahrbahnen und |
Was sind die Standardauflagen und Bedingungen des Landratsamtes Böblingen? |
A81 AS Rottenburg, Ausbau zum Kleeblatt einschließlich Parallelfahrbahnen und |
Was ist Baustellenverordnung? |
Bauwerke (Ingenieurbau) |
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: stepsper_device_train_batch_size: 10per_device_eval_batch_size: 10num_train_epochs: 10multi_dataset_batch_sampler: round_robinoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: stepsprediction_loss_only: Trueper_device_train_batch_size: 10per_device_eval_batch_size: 10per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 5e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1num_train_epochs: 10max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_ratio: 0.0warmup_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: Falsefp16: 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: Falsedataloader_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}deepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torchoptim_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: batch_samplermulti_dataset_batch_sampler: round_robin| Epoch | Step | cosine_ndcg@10 |
|---|---|---|
| 1.0 | 5 | 0.3048 |
| 2.0 | 10 | 0.3167 |
| 3.0 | 15 | 0.3633 |
| 4.0 | 20 | 0.3619 |
| 5.0 | 25 | 0.3436 |
| 6.0 | 30 | 0.3461 |
| 7.0 | 35 | 0.3475 |
| 8.0 | 40 | 0.3319 |
| 9.0 | 45 | 0.3320 |
| 10.0 | 50 | 0.3317 |
@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
Snowflake/snowflake-arctic-embed-l