from sentence_transformers import SentenceTransformerTrainingArguments from sentence_transformers.training_args import BatchSamplers # load train dataset again train_dataset = load_dataset("json", data_files="train_dataset.json", split="train") # define training arguments args = SentenceTransformerTrainingArguments( output_dir="bge-base-financial-matryoshka", # output directory and hugging face model ID num_train_epochs=4, # number of epochs per_device_train_batch_size=32, # train batch size gradient_accumulation_steps=16, # for a global batch size of 512 per_device_eval_batch_size=16, # evaluation batch size warmup_ratio=0.1, # warmup ratio learning_rate=2e-5, # learning rate, 2e-5 is a good value lr_scheduler_type="cosine", # use constant learning rate scheduler optim="adamw_torch_fused", # use fused adamw optimizer tf32=True, # use tf32 precision bf16=True, # use bf16 precision batch_sampler=BatchSamplers.NO_DUPLICATES, # MultipleNegativesRankingLoss benefits from no duplicate samples in a batch eval_strategy="epoch", # evaluate after each epoch save_strategy="epoch", # save after each epoch logging_steps=10, # log every 10 steps save_total_limit=3, # save only the last 3 models load_best_model_at_end=True, # load the best model when training ends metric_for_best_model="eval_dim_128_cosine_ndcg@10", # Optimizing for the best ndcg@10 score for the 128 dimension )