Matryoshka Representation Learning
Paper • 2205.13147 • Published • 30
How to use ddesotto/legalize-embed-raw with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("ddesotto/legalize-embed-raw")
sentences = [
"La autoridad judicial constituirá la curatela mediante resolución motivada cuando no exista otra medida de apoyo suficiente para la persona con discapacidad.",
"La autoridad judicial constituirá la curatela mediante resolución motivada cuando no exista otra medida de apoyo suficiente para la persona con discapacidad.\n\nLa autoridad judicial determinará los actos para los que la persona requiere asistencia del curador en el ejercicio de su capacidad jurídica atendiendo a sus concretas necesidades de apoyo.\n\nSólo en los casos excepcionales en los que resulte imprescindible por las circunstancias de la persona con discapacidad, la autoridad judicial determinará en resolución motivada los actos concretos en los que el curador habrá de asumir la representación de la persona con discapacidad.\n\nLos actos en los que el curador deba prestar el apoyo deberán fijarse de manera precisa, indicando, en su caso, cuáles son aquellos donde debe ejercer la representación. El curador actuará bajo los criterios fijados en el artículo 249.\n\nEn ningún caso podrá incluir la resolución judicial la mera privación de derechos.\n\n> <small>Se modifica, con efectos de 3 de septiembre de 2021, por el art. 2.23 de la Ley 8/2021, de 2 de junio. [Ref. BOE-A-2021-9233#as](https://www.boe.es/buscar/doc.php?id=BOE-A-2021-9233)</small>\n\n> <small>Se modifica por el art. 1 de la Ley 13/1983, de 24 de octubre. [Ref. BOE-A-1983-28123](https://www.boe.es/buscar/doc.php?id=BOE-A-1983-28123).</small>",
"Por faltas de disciplina y otras que puedan afectar al decoro de la profesión, podrán las Juntas directivas de los Colegios amonestar a los Notarios, reprenderlos por escrito y multarlos gubernativamente hasta en cantidad de 25 duros. En caso de reincidencia, darán parte a las Audiencias, las cuales podrán multar hasta en 100 duros, dando conocimiento además al Ministerio de Gracia y Justicia para que se ponga nota en los respectivos expedientes de los Notarios, todo sin perjuicio de lo demás que procediere en justicia, y salvas también cualesquiera otras atribuciones disciplinarias de los jueces y Audiencias.",
"1. Podrán ser curadores las personas mayores de edad que, a juicio de la autoridad judicial, sean aptas para el adecuado desempeño de su función.\n\nAsimismo, podrán ser curadores las fundaciones y demás personas jurídicas sin ánimo de lucro, públicas o privadas, entre cuyos fines figure la promoción de la autonomía y asistencia a las personas con discapacidad.\n\n2. No podrán ser curadores:\n\n1.º Quienes hayan sido excluidos por la persona que precise apoyo.\n\n2.º Quienes por resolución judicial estuvieran privados o suspendidos en el ejercicio de la patria potestad o, total o parcialmente, de los derechos de guarda y protección.\n\n3.º Quienes hubieren sido legalmente removidos de una tutela, curatela o guarda anterior.\n\n3. La autoridad judicial no podrá nombrar curador, salvo circunstancias excepcionales debidamente motivadas, a las personas siguientes:\n\n1.º A quien haya sido condenado por cualquier delito que haga suponer fundadamente que no desempeñará bien la curatela.\n\n2.º A quien tenga conflicto de intereses con la persona que precise apoyo.\n\n3.º Al administrador que hubiese sido sustituido en sus facultades de administración durante la tramitación del procedimiento concursal.\n\n4.º A quien le sea imputable la declaración como culpable de un concurso, salvo que la curatela lo sea solamente de la persona.\n\n> <small>Se modifica, con efectos de 3 de septiembre de 2021, por el art. 2.23 de la Ley 8/2021, de 2 de junio. [Ref. BOE-A-2021-9233#as](https://www.boe.es/buscar/doc.php?id=BOE-A-2021-9233)</small>\n\n> <small>Se modifica por el art. 1 de la Ley 13/1983, de 24 de octubre. [Ref. BOE-A-1983-28123](https://www.boe.es/buscar/doc.php?id=BOE-A-1983-28123).</small>"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from intfloat/multilingual-e5-small. It maps sentences & paragraphs to a 384-dimensional dense vector space and can be used for retrieval.
SentenceTransformer(
(0): Transformer({'transformer_task': 'feature-extraction', 'modality_config': {'text': {'method': 'forward', 'method_output_name': 'last_hidden_state'}}, 'module_output_name': 'token_embeddings', 'architecture': 'BertModel'})
(1): Pooling({'embedding_dimension': 384, 'pooling_mode': 'mean', '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("sentence_transformers_model_id")
# Run inference
queries = [
'2.21 de la Ley 8/2021, de 2 de junio.',
]
documents = [
'No podrán ser tutores:\n\n1.º Los que por resolución judicial estuvieran privados o suspendidos en el ejercicio de la patria potestad o, total o parcialmente, de los derechos de guarda y protección.\n\n2.º Los que hubieren sido legalmente removidos de una tutela, curatela o guarda anterior.\n\n> <small>Se modifica, con efectos de 3 de septiembre de 2021, por el art. 2.21 de la Ley 8/2021, de 2 de junio. [Ref. BOE-A-2021-9233#as](https://www.boe.es/buscar/doc.php?id=BOE-A-2021-9233)</small>\n\n> <small>Se añade un párrafo por el art. 2.25 de la Ley 26/2015, de 28 de julio. [Ref. BOE-A-2015-8470#asegundo](https://www.boe.es/buscar/doc.php?id=BOE-A-2015-8470).</small>\n\n> <small>Se añade el segundo párrafo por la disposición final 13 de la Ley Orgánica 1/1996, de 15 de enero. [Ref. BOE-A-1996-1069](https://www.boe.es/buscar/doc.php?id=BOE-A-1996-1069).</small>\n\n> <small>Se modifica por el art. 1 de la Ley 13/1983, de 24 de octubre. [Ref. BOE-A-1983-28123](https://www.boe.es/buscar/doc.php?id=BOE-A-1983-28123).</small>',
'1. La Entidad Pública podrá delegar la guarda de un menor declarado en situación de desamparo en las personas que, reuniendo los requisitos de capacidad para adoptar previstos en el artículo 175 y habiendo prestado su consentimiento, hayan sido preparadas, declaradas idóneas y asignadas para su adopción. A tal efecto, la Entidad Pública, con anterioridad a la presentación de la propuesta de adopción, delegará la guarda con fines de adopción hasta que se dicte la resolución judicial de adopción, mediante resolución administrativa debidamente motivada, previa audiencia de los afectados y del menor si tuviere suficiente madurez y, en todo caso, si fuere mayor de doce años, que se notificará a los progenitores o tutores no privados de la patria potestad o tutela.\n\nLos guardadores con fines de adopción tendrán los mismos derechos y obligaciones que los acogedores familiares.\n\n2. Salvo que convenga otra cosa al interés del menor, la Entidad Pública procederá a suspender el régimen de visitas y relaciones con la familia de origen cuando se inicie el período de convivencia preadoptiva a que se refiere el apartado anterior, excepto en los casos previstos en el artículo 178.4.\n\n3. La propuesta de adopción al Juez tendrá que realizarse en el plazo más breve posible y, en todo caso, antes de transcurridos tres meses desde el día en el que se hubiera acordado la delegación de guarda con fines de adopción. No obstante, cuando la Entidad Pública considere necesario, en función de la edad y circunstancias del menor, establecer un período de adaptación del menor a la familia, dicho plazo de tres meses podrá prorrogarse hasta un máximo de un año.\n\nEn el supuesto de que el Juez no considerase procedente esa adopción, la Entidad Pública deberá determinar la medida protectora más adecuada para el menor.\n\n> <small>Se añade por el art. 2.21 de la Ley 26/2015, de 28 de julio. [Ref. BOE-A-2015-8470#asegundo](https://www.boe.es/buscar/doc.php?id=BOE-A-2015-8470).</small>',
'**(Derogado)**\n\n> <small>Se deroga, con efectos de 3 de septiembre de 2021, por la disposición derogatoria única.3 de la Ley 8/2021, de 2 de junio. [Ref. BOE-A-2021-9233#dd](https://www.boe.es/buscar/doc.php?id=BOE-A-2021-9233)</small>\n\n> <small>Se modifica por el art. 4 de la Ley 11/1981, de 13 de mayo. [Ref. BOE-A-1981-11198](https://www.boe.es/buscar/doc.php?id=BOE-A-1981-11198).</small>\n\n> <small>Se modifica por el art. 2 del Real Decreto-ley 33/1978, de 16 de noviembre. [Ref. BOE-A-1978-28627](https://www.boe.es/buscar/doc.php?id=BOE-A-1978-28627).</small>',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# [1, 384] [3, 384]
# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[0.4079, 0.1891, 0.1669]])
valInformationRetrievalEvaluator| Metric | Value |
|---|---|
| cosine_accuracy@1 | 0.4174 |
| cosine_accuracy@5 | 0.6776 |
| cosine_accuracy@20 | 0.8256 |
| cosine_precision@1 | 0.4174 |
| cosine_precision@3 | 0.202 |
| cosine_precision@5 | 0.1355 |
| cosine_precision@10 | 0.0759 |
| cosine_recall@1 | 0.4174 |
| cosine_recall@3 | 0.606 |
| cosine_recall@5 | 0.6776 |
| cosine_recall@10 | 0.7586 |
| cosine_ndcg@10 | 0.584 |
| cosine_mrr@10 | 0.5285 |
| cosine_map@100 | 0.5358 |
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| modality | text | text |
| details |
|
|
| anchor | positive |
|---|---|
Cárlos III como Rey de Nápoles, se reputarán siempre como extrangeros; su uso no atribuye ninguno de los derechos y prerogativas concedidos á los de Castilla; la sucesión se gobernará por las leyes particulares de la concesión ó por las generales del país en que esta se hizo. |
Todos los títulos concedidos por Monarcas y Gobiernos extrangeros, inclusos los otorgados por mi augusto Abuelo el Sr. D. Cárlos III como Rey de Nápoles, se reputarán siempre como extrangeros; su uso no atribuye ninguno de los derechos y prerogativas concedidos á los de Castilla; la sucesión se gobernará por las leyes particulares de la concesión ó por las generales del país en que esta se hizo. |
Todos los títulos concedidos por Monarcas y Gobiernos extrangeros, inclusos los otorgados por mi augusto Abuelo el Sr. |
Todos los títulos concedidos por Monarcas y Gobiernos extrangeros, inclusos los otorgados por mi augusto Abuelo el Sr. D. Cárlos III como Rey de Nápoles, se reputarán siempre como extrangeros; su uso no atribuye ninguno de los derechos y prerogativas concedidos á los de Castilla; la sucesión se gobernará por las leyes particulares de la concesión ó por las generales del país en que esta se hizo. |
No podrá usarse en España título alguno extrangero sin la competente autorización; y están obligados á obtenerla todos y cada uno de los sucesores en dichos títulos. |
No podrá usarse en España título alguno extrangero sin la competente autorización; y están obligados á obtenerla todos y cada uno de los sucesores en dichos títulos. Se exceptúan de las disposiciones de este artículo los Embajadores y Ministros y representantes de otras Córtes y los extrangeros transeúntes. |
MatryoshkaLoss with these parameters:{
"loss": "CachedMultipleNegativesRankingLoss",
"matryoshka_dims": [
384,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1
],
"n_dims_per_step": -1
}
per_device_train_batch_size: 128num_train_epochs: 1learning_rate: 2e-05warmup_steps: 0.1weight_decay: 0.01bf16: Trueload_best_model_at_end: Truebatch_sampler: no_duplicatesper_device_train_batch_size: 128num_train_epochs: 1max_steps: -1learning_rate: 2e-05lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_steps: 0.1optim: adamw_torch_fusedoptim_args: Noneweight_decay: 0.01adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08optim_target_modules: Nonegradient_accumulation_steps: 1average_tokens_across_devices: Truemax_grad_norm: 1.0label_smoothing_factor: 0.0bf16: Truefp16: Falsebf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonegradient_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: Nonetrackio_bucket_id: Nonetrackio_static_space_id: Noneper_device_eval_batch_size: 8prediction_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_static_graph: Noneddp_backend: Noneddp_timeout: 1800fsdp: Nonefsdp_config: Nonedeepspeed: Nonedebug: []skip_memory_metrics: Truedo_predict: Falseresume_from_checkpoint: Nonewarmup_ratio: Nonelocal_rank: -1prompts: Nonebatch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss | val_cosine_ndcg@10 |
|---|---|---|---|
| 0.0300 | 100 | 9.2942 | - |
| 0.0601 | 200 | 2.3167 | - |
| 0.0901 | 300 | 1.7705 | - |
| 0.1202 | 400 | 1.5870 | - |
| 0.1502 | 500 | 1.4216 | - |
| 0.1803 | 600 | 1.3677 | - |
| 0.2103 | 700 | 1.2523 | - |
| 0.2404 | 800 | 1.1705 | - |
| 0.2704 | 900 | 1.1656 | - |
| 0.3005 | 1000 | 1.1691 | - |
| 0.3305 | 1100 | 1.1411 | - |
| 0.3606 | 1200 | 1.1165 | - |
| 0.3906 | 1300 | 1.0873 | - |
| 0.4207 | 1400 | 1.0562 | - |
| 0.4507 | 1500 | 1.0351 | - |
| 0.4808 | 1600 | 1.0777 | - |
| 0.5108 | 1700 | 1.0003 | - |
| 0.5409 | 1800 | 1.0850 | - |
| 0.5709 | 1900 | 0.9633 | - |
| 0.601 | 2000 | 1.042 | 0.5917 |
| 0.6310 | 2100 | 0.9698 | - |
| 0.6611 | 2200 | 0.9985 | - |
| 0.6911 | 2300 | 0.9828 | - |
| 0.7212 | 2400 | 0.9673 | - |
| 0.7512 | 2500 | 0.9472 | - |
| 0.7812 | 2600 | 0.9963 | - |
| 0.8113 | 2700 | 0.9312 | - |
| 0.8413 | 2800 | 0.9180 | - |
| 0.8714 | 2900 | 0.9174 | - |
| 0.9014 | 3000 | 0.9176 | - |
| 0.9315 | 3100 | 0.9384 | - |
| 0.9615 | 3200 | 0.8927 | - |
| 0.9916 | 3300 | 0.9708 | - |
| 1.0 | 3328 | - | 0.5840 |
@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{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
intfloat/multilingual-e5-small