Sentence Similarity
sentence-transformers
Safetensors
English
mpnet
feature-extraction
dataset_size:1M<n<10M
loss:MultipleNegativesRankingLoss
Eval Results (legacy)
text-embeddings-inference
Instructions to use tomaarsen/mpnet-base-gooaq with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use tomaarsen/mpnet-base-gooaq with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("tomaarsen/mpnet-base-gooaq") sentences = [ "11 is what of 8?", "*RARE* CANDY AXE AND RED NOSED RAIDER IS BACK - FORTNITE ITEM SHOP 8TH DECEMBER 2019.", "Convert fraction (ratio) 8 / 11 Answer: 72.727272727273%", "Old-age pensions are not included in taxable income under the personal income tax." ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [4, 4] - Notebooks
- Google Colab
- Kaggle
| import random | |
| import logging | |
| from datasets import load_dataset, Dataset | |
| from sentence_transformers import ( | |
| SentenceTransformer, | |
| SentenceTransformerTrainer, | |
| SentenceTransformerTrainingArguments, | |
| SentenceTransformerModelCardData, | |
| ) | |
| from sentence_transformers.losses import MultipleNegativesRankingLoss | |
| from sentence_transformers.training_args import BatchSamplers | |
| from sentence_transformers.evaluation import InformationRetrievalEvaluator | |
| logging.basicConfig( | |
| format="%(asctime)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S", level=logging.INFO | |
| ) | |
| # 1. Load a model to finetune with 2. (Optional) model card data | |
| model = SentenceTransformer( | |
| "microsoft/mpnet-base", | |
| model_card_data=SentenceTransformerModelCardData( | |
| language="en", | |
| license="apache-2.0", | |
| model_name="MPNet base trained on GooAQ triplets", | |
| ), | |
| ) | |
| # 3. Load a dataset to finetune on | |
| dataset = load_dataset("sentence-transformers/gooaq", split="train") | |
| dataset = dataset.add_column("id", range(len(dataset))) | |
| dataset_dict = dataset.train_test_split(test_size=10_000, seed=12) | |
| train_dataset: Dataset = dataset_dict["train"] | |
| eval_dataset: Dataset = dataset_dict["test"] | |
| # 4. Define a loss function | |
| loss = MultipleNegativesRankingLoss(model) | |
| # 5. (Optional) Specify training arguments | |
| args = SentenceTransformerTrainingArguments( | |
| # Required parameter: | |
| output_dir="models/mpnet-base-gooaq", | |
| # Optional training parameters: | |
| num_train_epochs=1, | |
| per_device_train_batch_size=64, | |
| per_device_eval_batch_size=64, | |
| learning_rate=2e-5, | |
| warmup_ratio=0.1, | |
| fp16=False, # Set to False if you get an error that your GPU can't run on FP16 | |
| bf16=True, # Set to True if you have a GPU that supports BF16 | |
| batch_sampler=BatchSamplers.NO_DUPLICATES, # MultipleNegativesRankingLoss benefits from no duplicate samples in a batch | |
| # Optional tracking/debugging parameters: | |
| eval_strategy="steps", | |
| eval_steps=1000, | |
| save_strategy="steps", | |
| save_steps=1000, | |
| save_total_limit=2, | |
| logging_steps=250, | |
| logging_first_step=True, | |
| run_name="mpnet-base-gooaq", # Will be used in W&B if `wandb` is installed | |
| ) | |
| # 6. (Optional) Create an evaluator & evaluate the base model | |
| # The full corpus, but only the evaluation queries | |
| # corpus = dict(zip(dataset["id"], dataset["answer"])) | |
| random.seed(12) | |
| queries = dict(zip(eval_dataset["id"], eval_dataset["question"])) | |
| corpus = ( | |
| {qid: dataset[qid]["answer"] for qid in queries} | | |
| {qid: dataset[qid]["answer"] for qid in random.sample(range(len(dataset)), 20_000)} | |
| ) | |
| relevant_docs = {qid: {qid} for qid in eval_dataset["id"]} | |
| dev_evaluator = InformationRetrievalEvaluator( | |
| corpus=corpus, | |
| queries=queries, | |
| relevant_docs=relevant_docs, | |
| show_progress_bar=True, | |
| name="gooaq-dev", | |
| ) | |
| dev_evaluator(model) | |
| # 7. Create a trainer & train | |
| trainer = SentenceTransformerTrainer( | |
| model=model, | |
| args=args, | |
| train_dataset=train_dataset.remove_columns("id"), | |
| eval_dataset=eval_dataset.remove_columns("id"), | |
| loss=loss, | |
| evaluator=dev_evaluator, | |
| ) | |
| trainer.train() | |
| # (Optional) Evaluate the trained model on the evaluator after training | |
| dev_evaluator(model) | |
| # 8. Save the trained model | |
| model.save_pretrained("models/mpnet-base-gooaq/final") | |
| # 9. (Optional) Push it to the Hugging Face Hub | |
| model.push_to_hub("mpnet-base-gooaq") | |