SentenceTransformer based on google/embeddinggemma-300m

This is a sentence-transformers model finetuned from google/embeddinggemma-300m on the embedding_tuple_data_v1 dataset. 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.

Model Details

Model Description

Model Sources

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'max_seq_length': 2048, 'do_lower_case': False, 'architecture': 'Gemma3TextModel'})
  (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): Dense({'in_features': 768, 'out_features': 3072, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity'})
  (3): Dense({'in_features': 3072, 'out_features': 768, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity'})
  (4): Normalize()
)

Usage

Direct Usage (Sentence Transformers)

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("deebak14/embedding_gemma_ft_v1")
# Run inference
queries = [
    "I need to find where a flat surface meets a sphere. How can I do that in Rhino?",
]
documents = [
    'You can use the following methods to complete the task.\nmethod: PlaneSphereIntersection\ndescription: Calculates the intersection of a plane and a sphere.\nsyntax: PlaneSphereIntersection(plane, sphere_plane, sphere_radius)\nparameters: plane (plane): The plane to intersect; sphere_plane (plane): Equatorial plane of the sphere (origin is center); sphere_radius (float): Radius of the sphere.\nreturns: list: [type, point/plane, radius] where type=0 for point, 1 for circle. None on error.\n\nFollowing is the code that uses this method to complete the task as per user query.\n\n```python\nimport rhinoscriptsyntax as rs\n\n# Define a flat surface as a plane\nplane = rs.WorldXYPlane()\n# Define the radius of the sphere\nradius = 10\n# Calculate the intersection between the plane and the sphere\nresults = rs.PlaneSphereIntersection(plane, plane, radius)\n\n# Check if there are results and handle them accordingly\nif results:\n    if results[0] == 0:\n        # If the intersection is a point, add it to the document\n        rs.AddPoint(results[1])\n    else:\n        # If the intersection is a circle, add it to the document\n        rs.AddCircle(results[1], results[2])\n```',
    'You cannot use the following methods LineSphereIntersection, IsSphere, AddSphere, LinePlaneIntersection, Angle, CircleCenterPoint, CurveCurveIntersection, CurveSurfaceIntersection, AddCircle3Pt',
    'plane',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# [1, 768] [3, 768]

# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[ 0.6658,  0.4819, -0.1617]])

Evaluation

Metrics

Triplet

Metric Value
cosine_accuracy 1.0

Training Details

Training Dataset

embedding_tuple_data_v1

  • Dataset: embedding_tuple_data_v1 at b592a1a
  • Size: 15,565 training samples
  • Columns: anchor and positive
  • Approximate statistics based on the first 1000 samples:
    anchor positive
    type string string
    details
    • min: 9 tokens
    • mean: 15.98 tokens
    • max: 50 tokens
    • min: 42 tokens
    • mean: 177.53 tokens
    • max: 810 tokens
  • Samples:
    anchor positive
    Provide an example of using AddRectangle. import rhinoscriptsyntax as rs
    plane = rs.WorldXYPlane()
    plane = rs.RotatePlane(plane, 45.0, [0,0,1])
    rs.AddRectangle(plane, 5.0, 15.0)

    Metadata:
    Name: AddRectangle
    Category: curve
    Function Signature: rs.AddRectangle(plane: plane, width: number, height: number) -> guid
    Description: Add a rectangular curve to the document
    How do I search for the total number of linetypes in my document?

    You can use the following method:
    Name: LinetypeCount
    Category: linetype
    Function Signature: rs.LinetypeCount() -> int
    Description: Description: Returns the number of linetypes in the document.
    Parameters:
    None
    Returns:
    int: The number of linetypes in the document.
    How do I maintain the shape of a curve while fitting it?

    You can use the following method:
    Name: FitCurve
    Category: curve
    Function Signature: rs.FitCurve(curve_id: guid, degree: int = 3, distance_tolerance: float = -1, angle_tolerance: float = -1) -> guid
    Description: Description: Reduces the number of control points of a curve while maintaining its general shape. This function is useful for replacing curves with many control points. For more information, see the Rhino help for the FitCrv command.
    Parameters:
    curve_id (guid): Identifier of the curve object to be fitted.
    eg: '3D4F5A6B-7C8D-9E0F-1A2B-3C4D5E6F7A8B'
    degree (int, optional): The degree of the curve, which must be greater than 1. The default is 3.
    eg: 3
    distance_tolerance (float, optional): The fitting tolerance. If not specified or <= 0.0, the document absolute tolerance is used.
    eg: 0.01
    angle_tolerance (float, optional): The kink smoothing tolerance in degrees. If 0.0, all kinks are smoothed. If > 0.0, kinks smaller than this value are smoothed. If ...
  • Loss: MultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim",
        "gather_across_devices": false
    }
    

Evaluation Dataset

embedding_triplet_data_v1

  • Dataset: embedding_triplet_data_v1 at 71ea1de
  • Size: 476 evaluation samples
  • Columns: anchor, positive, and negative
  • Approximate statistics based on the first 476 samples:
    anchor positive negative
    type string string string
    details
    • min: 15 tokens
    • mean: 23.13 tokens
    • max: 38 tokens
    • min: 111 tokens
    • mean: 252.44 tokens
    • max: 1015 tokens
    • min: 32 tokens
    • mean: 42.48 tokens
    • max: 55 tokens
  • Samples:
    anchor positive negative
    I need to flatten a curved surface for laser cutting. How can I do that? You can use the following methods to complete the task.
    method: UnrollSurface
    description: Flattens a developable surface or polysurface
    syntax: UnrollSurface(surface_id, explode=False, following_geometry=None, absolute_tolerance=None, relative_tolerance=None)
    parameters:
    surface_id (guid): the surface's identifier

    explode (bool, optional): If True, the resulting surfaces ar not joined

    following_geometry ({guid, ...]): List of curves, dots, and points which

    should be unrolled with the surface

    returns:
    list(guid, ...): of unrolled surface ids

    tuple((guid, ...),(guid, ...)): if following_geometry is not None, a tuple

    [1] is the list of unrolled surface ids

    [2] is the list of unrolled following geometry


    Following is the code that uses this method to complete the task as per user query.

    ```python
    import rhinoscriptsyntax as rs

    # Flatten a curved surface for laser cutting
    surface = rs.GetObject("Select curved surface to flatten", rs.filter.surface)
    if surface:
    # Unrol...
    You cannot use the following methods ConvertCurveToPolyline, MeshOutline, PullCurveToMesh, ExplodeText, MeshToNurb, IsCurvePlanar, Angle, AddFilletCurve, MeshVolume
    Can you show me how to rotate a plane by 30 degrees around its normal axis? You can use the following methods to complete the task.
    method: PlaneTransform
    description: Transforms a plane.
    syntax: PlaneTransform(plane, xform)
    parameters: plane (plane): Plane to transform; xform (transform): Transformation to apply.
    returns: plane: Resulting plane if successful, otherwise None.

    Following is the code that uses this method to complete the task as per user query.

    python<br>import rhinoscriptsyntax as rs<br><br># Get the current construction plane<br>plane = rs.ViewCPlane()<br><br># Create a rotation transformation of 30 degrees around the normal axis (Z-axis)<br>xform = rs.XformRotation(30.0, plane.ZAxis, plane.Origin)<br><br># Apply the transformation to the plane<br>plane = rs.PlaneTransform(plane, xform)<br><br># Set the new construction plane<br>rs.ViewCPlane(None, plane)<br>
    You cannot use the following methods RotatePlane, XformRotation1, PlaneFromNormal, VectorRotate, Angle, PlaneFromFrame, LinePlane, MovePlane, CreatePlane
    I want to change the height of a text dot I just created. How can I do that? You can use the following methods to complete the task.
    method: TextDotHeight
    description: Returns or modified the font height of a text dot
    syntax: TextDotHeight(object_id, height=None)
    parameters:
    object_id (guid): identifier of a text dot object

    height (number, optional) new font height

    returns:
    number: If height is not specified, the current text dot height

    number: If height is specified, the previous text dot height

    None: on error


    Following is the code that uses this method to complete the task as per user query.

    python<br>import rhinoscriptsyntax as rs<br># Change the height of a text dot<br>obj = rs.GetObject("Select text dot")<br>if rs.IsTextDot(obj):<br> previous_height = rs.TextDotHeight(obj, 15.0) # Set new height to 15.0<br> print(f"Previous height was: {previous_height}")<br>
    You cannot use the following methods TextDotPoint, TextDotFont, TextDotText, TextObjectHeight, IsTextDot, AddTextDot, TextObjectFont, PointCoordinates, ExplodeText
  • Loss: MultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim",
        "gather_across_devices": false
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • eval_strategy: steps
  • per_device_train_batch_size: 16
  • per_device_eval_batch_size: 16
  • learning_rate: 2e-05
  • warmup_ratio: 0.1
  • bf16: True
  • prompts: task: sentence similarity | query:
  • batch_sampler: no_duplicates

All Hyperparameters

Click to expand
  • overwrite_output_dir: False
  • do_predict: False
  • eval_strategy: steps
  • prediction_loss_only: True
  • per_device_train_batch_size: 16
  • per_device_eval_batch_size: 16
  • per_gpu_train_batch_size: None
  • per_gpu_eval_batch_size: None
  • gradient_accumulation_steps: 1
  • eval_accumulation_steps: None
  • torch_empty_cache_steps: None
  • learning_rate: 2e-05
  • weight_decay: 0.0
  • adam_beta1: 0.9
  • adam_beta2: 0.999
  • adam_epsilon: 1e-08
  • max_grad_norm: 1.0
  • num_train_epochs: 3
  • max_steps: -1
  • lr_scheduler_type: linear
  • lr_scheduler_kwargs: {}
  • warmup_ratio: 0.1
  • warmup_steps: 0
  • log_level: passive
  • log_level_replica: warning
  • log_on_each_node: True
  • logging_nan_inf_filter: True
  • save_safetensors: True
  • save_on_each_node: False
  • save_only_model: False
  • restore_callback_states_from_checkpoint: False
  • no_cuda: False
  • use_cpu: False
  • use_mps_device: False
  • seed: 42
  • data_seed: None
  • jit_mode_eval: False
  • use_ipex: False
  • bf16: True
  • fp16: False
  • fp16_opt_level: O1
  • half_precision_backend: auto
  • bf16_full_eval: False
  • fp16_full_eval: False
  • tf32: None
  • local_rank: 0
  • ddp_backend: None
  • tpu_num_cores: None
  • tpu_metrics_debug: False
  • debug: []
  • dataloader_drop_last: False
  • dataloader_num_workers: 0
  • dataloader_prefetch_factor: None
  • past_index: -1
  • disable_tqdm: False
  • remove_unused_columns: True
  • label_names: None
  • load_best_model_at_end: False
  • ignore_data_skip: False
  • fsdp: []
  • fsdp_min_num_params: 0
  • fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
  • fsdp_transformer_layer_cls_to_wrap: None
  • accelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
  • parallelism_config: None
  • deepspeed: None
  • label_smoothing_factor: 0.0
  • optim: adamw_torch_fused
  • optim_args: None
  • adafactor: False
  • group_by_length: False
  • length_column_name: length
  • ddp_find_unused_parameters: None
  • ddp_bucket_cap_mb: None
  • ddp_broadcast_buffers: False
  • dataloader_pin_memory: True
  • dataloader_persistent_workers: False
  • skip_memory_metrics: True
  • use_legacy_prediction_loop: False
  • push_to_hub: False
  • resume_from_checkpoint: None
  • hub_model_id: None
  • hub_strategy: every_save
  • hub_private_repo: None
  • hub_always_push: False
  • hub_revision: None
  • gradient_checkpointing: False
  • gradient_checkpointing_kwargs: None
  • include_inputs_for_metrics: False
  • include_for_metrics: []
  • eval_do_concat_batches: True
  • fp16_backend: auto
  • push_to_hub_model_id: None
  • push_to_hub_organization: None
  • mp_parameters:
  • auto_find_batch_size: False
  • full_determinism: False
  • torchdynamo: None
  • ray_scope: last
  • ddp_timeout: 1800
  • torch_compile: False
  • torch_compile_backend: None
  • torch_compile_mode: None
  • include_tokens_per_second: False
  • include_num_input_tokens_seen: False
  • neftune_noise_alpha: None
  • optim_target_modules: None
  • batch_eval_metrics: False
  • eval_on_start: False
  • use_liger_kernel: False
  • liger_kernel_config: None
  • eval_use_gather_object: False
  • average_tokens_across_devices: False
  • prompts: task: sentence similarity | query:
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: proportional
  • router_mapping: {}
  • learning_rate_mapping: {}

Training Logs

Epoch Step Training Loss Validation Loss base-eval_cosine_accuracy
-1 -1 - - 0.0147
0.1028 100 0.1601 - -
0.2055 200 0.0474 0.2296 0.8971
0.3083 300 0.0749 - -
0.4111 400 0.1037 0.1457 0.9265
0.5139 500 0.0564 - -
0.6166 600 0.0706 0.3362 0.9475
0.7194 700 0.0549 - -
0.8222 800 0.0427 0.2154 0.9538
0.9250 900 0.0599 - -
1.0277 1000 0.0656 0.2439 0.9706
1.1305 1100 0.0409 - -
1.2333 1200 0.0283 0.2422 0.9727
1.3361 1300 0.0336 - -
1.4388 1400 0.0338 0.2397 0.9664
1.5416 1500 0.0384 - -
1.6444 1600 0.0271 0.1048 0.9832
1.7472 1700 0.0305 - -
1.8499 1800 0.024 0.1172 0.9916
1.9527 1900 0.014 - -
2.0555 2000 0.018 0.0898 0.9958
2.1583 2100 0.0091 - -
2.2610 2200 0.0154 0.0721 0.9916
2.3638 2300 0.0123 - -
2.4666 2400 0.0119 0.0876 0.9937
2.5694 2500 0.0173 - -
2.6721 2600 0.0091 0.0482 1.0
2.7749 2700 0.0211 - -
2.8777 2800 0.0146 0.0550 1.0
2.9805 2900 0.0101 - -
-1 -1 - - 1.0

Framework Versions

  • Python: 3.12.11
  • Sentence Transformers: 5.1.0
  • Transformers: 4.56.1
  • PyTorch: 2.8.0+cu126
  • Accelerate: 1.10.1
  • Datasets: 4.0.0
  • Tokenizers: 0.22.0

Citation

BibTeX

Sentence Transformers

@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",
}

MultipleNegativesRankingLoss

@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}
}
Downloads last month
2
Safetensors
Model size
0.3B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for deebak14/embedding_gemma_ft_v1

Finetuned
(138)
this model

Datasets used to train deebak14/embedding_gemma_ft_v1

Evaluation results