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 Type: Sentence Transformer
- Base model: google/embeddinggemma-300m
- Maximum Sequence Length: 2048 tokens
- Output Dimensionality: 768 dimensions
- Similarity Function: Cosine Similarity
- Training Dataset:
Model Sources
- Documentation: Sentence Transformers Documentation
- Repository: Sentence Transformers on GitHub
- Hugging Face: Sentence Transformers on Hugging Face
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
- Dataset:
base-eval - Evaluated with
TripletEvaluator
| 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:
anchorandpositive - 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 documentHow 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:
MultipleNegativesRankingLosswith 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, andnegative - 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, MeshVolumeCan 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, CreatePlaneI 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:
MultipleNegativesRankingLosswith these parameters:{ "scale": 20.0, "similarity_fct": "cos_sim", "gather_across_devices": false }
Training Hyperparameters
Non-Default Hyperparameters
eval_strategy: stepsper_device_train_batch_size: 16per_device_eval_batch_size: 16learning_rate: 2e-05warmup_ratio: 0.1bf16: Trueprompts: task: sentence similarity | query:batch_sampler: no_duplicates
All Hyperparameters
Click to expand
overwrite_output_dir: Falsedo_predict: Falseeval_strategy: stepsprediction_loss_only: Trueper_device_train_batch_size: 16per_device_eval_batch_size: 16per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_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: 3max_steps: -1lr_scheduler_type: linearlr_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: 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}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: task: sentence similarity | query:batch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportionalrouter_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
Model tree for deebak14/embedding_gemma_ft_v1
Base model
google/embeddinggemma-300m