SentenceTransformer based on Alibaba-NLP/gte-large-en-v1.5

This is a sentence-transformers model finetuned from Alibaba-NLP/gte-large-en-v1.5 on the mathstackexchange, socratic and stackexchange datasets. 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.

Model Details

Model Description

  • Model Type: Sentence Transformer
  • Base model: Alibaba-NLP/gte-large-en-v1.5
  • Maximum Sequence Length: 512 tokens
  • Output Dimensionality: 1024 tokens
  • Similarity Function: Cosine Similarity
  • Training Datasets:
    • mathstackexchange
    • socratic
    • stackexchange

Model Sources

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: NewModel 
  (1): Pooling({'word_embedding_dimension': 1024, 'pooling_mode_cls_token': True, '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': False, 'include_prompt': True})
)

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("mrm8488/gte-large-ft-webinstruct")
# Run inference
sentences = [
    "What should I do if I'm not satisfied with the answers to a question for which I've offered a bounty?\n\nIn my case, I've put a bounty on a question, but the two responses I received don't address the issue effectively. I requested the original poster (OP) to provide an answer so I could reward them for the interesting question, but they haven't done so. \n\nAre there any acceptable actions in this scenario? For instance, can I post my own non-answer, award myself the bounty, and then start a new bounty on a different question? Or are there alternative suggestions?",
    "If all the provided answers do not adequately address your question, it's advisable to let the bounty expire. The system will handle the distribution of the bounty in such situations according to predefined rules.\n\nBounties carry a risk, as there is no guarantee that you will receive a satisfactory answer, even with the incentive. It's important to understand that you cannot reclaim your bounty once it's been offered. \n\nInstead of posting a non-answer, you might consider editing and clarifying your original question to attract better responses, or seeking assistance from the community through comments or chat. If needed, you can also start a new bounty on a different question, but ensure that it's clear and well-defined to increase the likelihood of receiving quality answers.",
    'The issue you\'re experiencing with your 40kHz crystal oscillator might be due to insufficient drive strength and an incorrect load capacitance. Here are two potential causes and solutions:\n\n1. High Series Resistance: The 150 kΩ series resistance in your circuit might be too high, which results in a low drive strength for the crystal. This can lead to a reduced overall loop gain and prevents the oscillator from properly starting. To resolve this, try using a lower resistance value as recommended in the crystal\'s datasheet.\n\n2. Incorrect Load Capacitance: Ensure that the 33 pF load capacitors you\'re using are compatible with your crystal. Some low-power "watch" crystals require only 5-10 pF load capacitors. Always refer to the crystal\'s datasheet to verify the appropriate load capacitance value.\n\nIn summary, carefully review the crystal\'s datasheet to determine the correct series resistance and load capacitance values, and make the necessary adjustments to your circuit. By doing so, you should be able to resolve the issue and get your oscillator functioning properly.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 1024]

# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [3, 3]

Evaluation

Metrics

Semantic Similarity

Metric Value
pearson_cosine 0.8518
spearman_cosine 0.859
pearson_manhattan 0.8627
spearman_manhattan 0.8594
pearson_euclidean 0.8616
spearman_euclidean 0.8584
pearson_dot 0.8523
spearman_dot 0.8596
pearson_max 0.8627
spearman_max 0.8596

Training Details

Training Datasets

mathstackexchange

  • Dataset: mathstackexchange
  • Size: 1,484,629 training samples
  • Columns: anchor and positive
  • Approximate statistics based on the first 1000 samples:
    anchor positive
    type string string
    details
    • min: 10 tokens
    • mean: 90.61 tokens
    • max: 512 tokens
    • min: 9 tokens
    • mean: 307.68 tokens
    • max: 512 tokens
  • Samples:
    anchor positive
    Suppose $A$ is a normal subgroup of a group $B$, and the quotient group $B/A$ is cyclic with infinite order. How can we demonstrate, using the correspondence theorem, that for every positive integer $k$, $B$ has a normal subgroup of index $k$? The correspondence theorem relates subgroups of the quotient group $B/A$ to subgroups of $B$ containing $A$. Since $B/A$ is isomorphic to the infinite cyclic group $\mathbb{Z}$, it has subgroups of every finite index.

    To find a normal subgroup of $B$ with index $k$, we can follow these steps:
    1. Identify a subgroup $M/A$ of $B/A$ with index $k$. This is possible since $\mathbb{Z}$ has subgroups of index $k$ for any positive integer $k$ (for instance, the subgroup generated by $k$ times the generator of $\mathbb{Z}$).
    2. By the correspondence theorem, there exists an intermediate subgroup $M$ such that $A \leq M \leq B$ with $M/A \cong M/A$.
    3. Now, consider the index of $M$ in $B$: $[B:M] = [B/A : M/A] = k$, as desired.

    Thus, using the correspondence theorem and exploiting the properties of $\mathbb{Z}$, we can construct a normal subgroup of $B$ with index $k$ for any positive integer $k$.
    If $z$ is a complex number and $a$ is a real number, can we say $ az
    What is the remainder when $x^{2007}$ is divided by $x^2-x+1$? To find the remainder when $x^{2007}$ is divided by $x^2-x+1$, we can use polynomial long division or synthetic division. Alternatively, we can utilize the properties of the polynomial $x^2-x+1$.

    Since $x^2-x+1$ is a factor of $x^3+1$, we have $x^3 \equiv -1 \pmod{x^2-x+1}$. Therefore, we can express $x^{2007}$ as $x^{3\cdot669}$, and thus:

    $$x^{2007} = (x^3)^{669} \equiv (-1)^{669} \pmod{x^2-x+1}$$

    Now, since $669$ is odd, $(-1)^{669} = -1$. Hence, the remainder is $-1$.

    Alternatively, we can perform polynomial long division to obtain:

    $$\frac{x^{2007}}{x^2-x+1} = a(x) - \frac{x+1}{x^2-x+1}$$

    where $a(x)$ is the quotient polynomial. Since we only care about the remainder, we have:

    $$x^{2007} \equiv -1 \pmod{x^2-x+1}$$
  • Loss: MultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim"
    }
    

socratic

  • Dataset: socratic
  • Size: 533,383 training samples
  • Columns: anchor and positive
  • Approximate statistics based on the first 1000 samples:
    anchor positive
    type string string
    details
    • min: 8 tokens
    • mean: 30.75 tokens
    • max: 167 tokens
    • min: 3 tokens
    • mean: 207.41 tokens
    • max: 512 tokens
  • Samples:
    anchor positive
    What is an activated complex?
    The activated complex is formed when the reactants collide with each other and begin to rearrange their atoms and bonds to form the products. This process requires energy, which is why the activated complex has a higher energy than the reactants. The energy required to reach the activated complex is called the activation energy.

    Once the activated complex is formed, it can either decompose back into the reactants or proceed to form the products. The probability of the activated complex decomposing back into the reactants is determined by the activation energy. If the activation energy is high, then the activated complex is more likely to decompose back into the reactants. If the activation energy is low, then the activated complex is more likely to proceed to form the products.

    The activated complex is a key concept in understanding chemical reactions. It helps to explain why some reactions occur quickly and others occur slowly. It also helps to explain why some reactions require a catalyst to occur.
    ####
    An activated complex is a high-energy, unstable intermediate state that forms during a chemical reaction. It is the transition state between the reactants and the products. The activated complex has a higher energy than both the reactants and the products, and it represents the maximum energy that must be overcome for the reaction to occur.
    Why does gravity cause planets to be round?
    The gravitational force of a planet pulls matter towards its center. This force is strongest at the center of the planet and weakest at the surface. As a result, matter is pulled towards the center of the planet, causing it to take on a spherical shape.

    A sphere is the shape with the lowest surface area for a given volume. This means that a planet with a spherical shape has the least amount of potential energy. Potential energy is the energy that an object has due to its position or condition. In the case of a planet, its potential energy is due to its gravitational force.

    The lower the potential energy of a planet, the more stable it is. This is because a planet with a lower potential energy is less likely to change its shape. As a result, planets tend to be spherical in shape.
    ####
    Gravity causes planets to be round because a sphere is the shape with the lowest surface area for a given volume. This means that a planet with a spherical shape has the least amount of potential energy, which is the energy that an object has due to its position or condition. Gravity pulls matter towards the center of a planet, and this force is strongest at the center. As a result, matter is pulled towards the center of the planet, causing it to take on a spherical shape.
    How many carbon atoms are present in a 5.85-gram sample of carbon tetrabromide (CBr4)? There are approximately (1 \times 10^{22}) carbon atoms in the given sample.

    Explanation:
    To determine the number of carbon atoms, we first need to calculate the molar amount of CBr4. The molar mass of CBr4 is 331.63 g/mol. So, we have:

    [
    \frac{5.85\ g}{331.63\ g/mol} = 0.0176\ mol
    ]

    Since one molecule of CBr4 contains one carbon atom and four bromine atoms, there are:

    [
    1 \times 0.0176\ mol = 0.0176\ mol\ of\ carbon\ atoms
    ]

    Now, multiplying the molar quantity by Avogadro's number (6.022 × 10^23 mol^(-1)) gives us the number of individual carbon atoms:

    [
    0.0176\ mol \times 6.022 \times 10^{23}\ mol^{-1} = 1.06 \times 10^{22}\ carbon\ atoms
    ]

    Therefore, there are approximately (1 \times 10^{22}) carbon atoms in a 5.85-gram sample of CBr4.
  • Loss: MultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim"
    }
    

stackexchange

  • Dataset: stackexchange
  • Size: 317,208 training samples
  • Columns: anchor and positive
  • Approximate statistics based on the first 1000 samples:
    anchor positive
    type string string
    details
    • min: 12 tokens
    • mean: 64.07 tokens
    • max: 512 tokens
    • min: 50 tokens
    • mean: 264.62 tokens
    • max: 512 tokens
  • Samples:
    anchor positive
    Should I use a tip activator to recoat the worn protective coating on my iron tip, or is it better to replace the tip entirely? My 48W ZD99 Solder Station's tip is showing signs of peeling due to moisture exposure and inadequate care. Can the tip activator effectively restore the tip, or should I opt for a new one? To address the issue, first clean the iron tip with a wire brush to remove any debris. Then, apply flux and tin the tip to protect it and maintain its performance. Tip activators are available as a means to recoat tips, but their effectiveness may vary. While they can be a viable solution, it's essential to ensure proper tip care to prevent future wear. If the tip's condition significantly deteriorates despite these efforts, consider replacing it with a new one.
    What are the fundamental limits, if any, for the speed of sound in different materials, and how do these limits relate to the speed of light? The speed of sound is limited by the properties of the material it travels through and the fundamental principles of physics. In a theoretical sense, the maximum speed of sound is constrained by the speed of light (approximately 299,792 km/s in vacuum), which is the maximum speed at which information can propagate. This limit is reached when the material has an incompressible equation of state, such as in the core of a neutron star, where the strong nuclear force creates immense pressure resistance.

    For an ideal gas, where particles do not interact, the equation of state is the softest possible with $P = \rho c^2/3$, where $P$ is pressure, $\rho$ is density, and $c$ is the speed of light. In this case, the maximum speed of sound would be $c/\sqrt{3}$.

    It's important to note that in practice, materials with extremely high sound speeds are unlikely to exist due to the conditions required for an incompressible equation of state. In reality, materials like solids and liquids generally have faster sound speeds than gases, but they are still far below the speed of light.

    When dealing with exotic materials, such as short-lived isotopes or neutron stars, the speed of sound may be even more challenging to determine due to the unique properties and states involved. However, the underlying principles remain the same: the speed of sound is determined by the material's properties, and it cannot exceed the speed of light in a vacuum.
    What could be causing a 1996 Honda Civic to stop running suddenly, and how can it be started? A potential issue is a faulty ignition switch. When you attempt to start the car, the switch might be malfunctioning in such a way that it disrupts power to the engine ignition system, causing the dash lights to go out and preventing the car from starting. However, when you perform a push start (crash start), the car starts because the ignition switch remains in position 2, providing power to the engine.

    Another possibility is a problem with the battery or its connections. If the battery terminals have a poor connection, it might lead to high resistance, making it difficult for the car to start. Alternatively, if the battery is weak, it might not supply enough power to crank the engine effectively. In this case, the starter motor would sound sluggish as it tries to turn the engine. To resolve the issue, inspect the ignition switch, battery connections, and consider testing or replacing the battery if necessary.
  • Loss: MultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim"
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • eval_strategy: steps
  • per_device_train_batch_size: 16
  • per_device_eval_batch_size: 16
  • max_steps: 8000
  • warmup_ratio: 0.1
  • bf16: True
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: round_robin

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
  • learning_rate: 5e-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.0
  • max_steps: 8000
  • 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}
  • deepspeed: None
  • label_smoothing_factor: 0.0
  • optim: adamw_torch
  • 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: False
  • hub_always_push: False
  • gradient_checkpointing: False
  • gradient_checkpointing_kwargs: None
  • include_inputs_for_metrics: False
  • 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
  • dispatch_batches: None
  • split_batches: 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
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: round_robin

Training Logs

Epoch Step Training Loss sts-dev_spearman_cosine
0.0017 100 0.0398 -
0.0034 200 0.017 -
0.0050 300 0.0079 -
0.0067 400 0.0067 -
0.0084 500 0.0115 -
0.0101 600 0.0201 -
0.0118 700 0.0247 -
0.0135 800 0.0343 -
0.0151 900 0.0287 -
0.0168 1000 0.052 0.8661
0.0185 1100 0.056 -
0.0202 1200 0.0372 -
0.0219 1300 0.0292 -
0.0235 1400 0.032 -
0.0252 1500 0.0358 -
0.0269 1600 0.0429 -
0.0286 1700 0.0398 -
0.0303 1800 0.0446 -
0.0319 1900 0.0618 -
0.0336 2000 0.1387 0.8709
0.0353 2100 0.0847 -
0.0370 2200 0.1316 -
0.0387 2300 0.0963 -
0.0404 2400 0.105 -
0.0420 2500 0.1171 -
0.0437 2600 0.1561 -
0.0454 2700 0.1622 -
0.0471 2800 0.0963 -
0.0488 2900 0.1014 -
0.0504 3000 0.0882 0.8579
0.0521 3100 0.1318 -
0.0538 3200 0.0999 -
0.0555 3300 0.0519 -
0.0572 3400 0.0239 -
0.0588 3500 0.0322 -
0.0605 3600 0.0184 -
0.0622 3700 0.0142 -
0.0639 3800 0.021 -
0.0656 3900 0.0228 -
0.0673 4000 0.0253 0.8570
0.0689 4100 0.0151 -
0.0706 4200 0.0178 -
0.0723 4300 0.0284 -
0.0740 4400 0.0155 -
0.0757 4500 0.0188 -
0.0773 4600 0.0079 -
0.0790 4700 0.0209 -
0.0807 4800 0.0111 -
0.0824 4900 0.0212 -
0.0841 5000 0.0101 0.8581
0.0857 5100 0.0183 -
0.0874 5200 0.0115 -
0.0891 5300 0.0098 -
0.0908 5400 0.0116 -
0.0925 5500 0.0167 -
0.0942 5600 0.012 -
0.0958 5700 0.0118 -
0.0975 5800 0.0093 -
0.0992 5900 0.0098 -
0.1009 6000 0.0066 0.8575
0.1026 6100 0.0101 -
0.1042 6200 0.0126 -
0.1059 6300 0.0101 -
0.1076 6400 0.0059 -
0.1093 6500 0.0081 -
0.1110 6600 0.0176 -
0.1126 6700 0.0088 -
0.1143 6800 0.0087 -
0.1160 6900 0.0075 -
0.1177 7000 0.0082 0.8549
0.1194 7100 0.0101 -
0.1211 7200 0.006 -
0.1227 7300 0.0099 -
0.1244 7400 0.0097 -
0.1261 7500 0.0045 -
0.1278 7600 0.0092 -
0.1295 7700 0.0066 -
0.1311 7800 0.006 -
0.1328 7900 0.0094 -
0.1345 8000 0.0051 0.8590

Framework Versions

  • Python: 3.10.12
  • Sentence Transformers: 3.0.1
  • Transformers: 4.42.4
  • PyTorch: 2.4.0+cu121
  • Accelerate: 0.34.0
  • Datasets: 2.21.0
  • Tokenizers: 0.19.1

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
18
Safetensors
Model size
434M params
Tensor type
F32
·
Inference Examples
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.

Model tree for mrm8488/gte-large-ft-webinstruct

Finetuned
(14)
this model

Collection including mrm8488/gte-large-ft-webinstruct

Evaluation results