Matryoshka Representation Learning
Paper • 2205.13147 • Published • 27
How to use PhilipCisco/qwen3-base-financial2 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("PhilipCisco/qwen3-base-financial2")
sentences = [
"What were the total assets at fair value on December 31, 2023?",
"In addition to its contractual cash requirements, the Company has an authorized share repurchase program. The program does not obligate the Company to acquire a minimum amount of shares. As of September 30, 2023, the Company’s quarterly cash dividend was $0.24 per share.",
"Effective January 1, 2023, we prospectively adopted new guidance that eliminated the recognition and measurement of TDRs. We evaluate all loans and receivables restructurings according to accounting guidance for loan refinancing and restructuring. Modifications to loans and receivables primarily include temporary interest rate reductions and placing the customer on a fixed payment plan not to exceed 60 months.",
"Total assets at fair value on December 31, 2023 were reported to be $71,921 million."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from Qwen/Qwen3-Embedding-0.6B on the json dataset. 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': 32768, 'do_lower_case': False, 'architecture': 'Qwen3Model'})
(1): Pooling({'word_embedding_dimension': 1024, 'pooling_mode_cls_token': False, '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': True, '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("PhilipCisco/qwen3-base-financial2")
# Run inference
queries = [
"Which section of the financial document addresses Financial Statements and Supplementary Data?",
]
documents = [
'Financial Statements and Supplementary Data are addressed in Item 8 of the financial document.',
'The 7% Notes due 2029 are scheduled to mature on February 15, 2029.',
'The gift card liability was $145,014 in 2022 and increased to $164,930 in 2023.',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# [1, 1024] [3, 1024]
# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[0.7375, 0.1121, 0.0035]])
dim_1024InformationRetrievalEvaluator with these parameters:{
"truncate_dim": 1024
}
| Metric | Value |
|---|---|
| cosine_accuracy@1 | 0.7507 |
| cosine_accuracy@3 | 0.8707 |
| cosine_accuracy@5 | 0.8986 |
| cosine_accuracy@10 | 0.9364 |
| cosine_precision@1 | 0.7507 |
| cosine_precision@3 | 0.2902 |
| cosine_precision@5 | 0.1797 |
| cosine_precision@10 | 0.0936 |
| cosine_recall@1 | 0.7507 |
| cosine_recall@3 | 0.8707 |
| cosine_recall@5 | 0.8986 |
| cosine_recall@10 | 0.9364 |
| cosine_ndcg@10 | 0.8461 |
| cosine_mrr@10 | 0.8169 |
| cosine_map@100 | 0.8197 |
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
What was the increase in sales and marketing expenses for the year ended December 31, 2023 compared to 2022? |
Sales and marketing expenses increased by $42.5 million, or 6%, for the year ended December 31, 2023 compared to 2022. |
What method is used to provide information about legal proceedings in the Annual Report on Form 10-K? |
Information about legal proceedings in the Annual Report on Form 10-K is incorporated by reference under several notes and sections. |
How did selling, distribution, and administration expenses change in 2023 compared to previous years? |
In 2023, the decline in Selling, distribution and administration expense was driven by lower compensation expense associated with workforce reductions, lower costs for professional services and lower freight and warehousing expenses as a result of lower shipments during 2023. Additionally, Selling, distribution and administration expense in 2023 included $116.0 million of intangible asset impairment charges as compared to $281.0 million of intangible asset impairment charges in 2022. |
MatryoshkaLoss with these parameters:{
"loss": "MultipleNegativesRankingLoss",
"matryoshka_dims": [
1024
],
"matryoshka_weights": [
1
],
"n_dims_per_step": -1
}
eval_strategy: epochper_device_train_batch_size: 4per_device_eval_batch_size: 4gradient_accumulation_steps: 8learning_rate: 2e-05num_train_epochs: 4lr_scheduler_type: cosinewarmup_ratio: 0.1bf16: Truetf32: Trueload_best_model_at_end: Truebatch_sampler: no_duplicatesoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: epochprediction_loss_only: Trueper_device_train_batch_size: 4per_device_eval_batch_size: 4per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 8eval_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}parallelism_config: Nonedeepspeed: 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: 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: Falseneftune_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: Falseprompts: Nonebatch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss | dim_1024_cosine_ndcg@10 |
|---|---|---|---|
| -1 | -1 | - | 0.7762 |
| 0.1713 | 10 | 0.0243 | - |
| 0.3426 | 20 | 0.0269 | - |
| 0.5139 | 30 | 0.0171 | - |
| 0.6852 | 40 | 0.0224 | - |
| 0.8565 | 50 | 0.0376 | - |
| 1.0 | 59 | - | 0.8200 |
| 1.0171 | 60 | 0.0221 | - |
| 1.1884 | 70 | 0.0089 | - |
| 1.3597 | 80 | 0.0127 | - |
| 1.5310 | 90 | 0.0116 | - |
| 1.7024 | 100 | 0.0086 | - |
| 1.8737 | 110 | 0.0113 | - |
| 2.0 | 118 | - | 0.8280 |
| 2.0343 | 120 | 0.0074 | - |
| 2.2056 | 130 | 0.0077 | - |
| 2.3769 | 140 | 0.0107 | - |
| 2.5482 | 150 | 0.0089 | - |
| 2.7195 | 160 | 0.0098 | - |
| 2.8908 | 170 | 0.006 | - |
| 3.0 | 177 | - | 0.8448 |
| 3.0514 | 180 | 0.0111 | - |
| 3.2227 | 190 | 0.0074 | - |
| 3.3940 | 200 | 0.0082 | - |
| 3.5653 | 210 | 0.0047 | - |
| 3.7366 | 220 | 0.0076 | - |
| 3.9079 | 230 | 0.0085 | - |
| 4.0 | 236 | - | 0.8461 |
@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}
}