CoolFace
Datasetpublic

dipenbhuva/dating-compatibility-pairs

Dating Compatibility Pairs A synthetic dataset of 7,469 text pairs designed for training and evaluating models that predict dating compatibility between two people based on their self-described preferences, values, and lifestyle choices. Dataset Purpose This dataset is built for: Embedding fine-tuning (e.g., Sentence Transformers, contrastive learning) — learn representations where compatible people are close in embedding space Text pair classification — train… See the full description on the dataset page: https://huggingface.co/datasets/dipenbhuva/dating-compatibility-pairs.

sourceHugging Faceapache-2.0updated 7mo agoView on Hugging Face
3likes46downloads
Dataset Card

Dating Compatibility Pairs

A synthetic dataset of 7,469 text pairs designed for training and evaluating models that predict dating compatibility between two people based on their self-described preferences, values, and lifestyle choices.

Dataset Purpose

This dataset is built for:

  • Embedding fine-tuning (e.g., Sentence Transformers, contrastive learning) — learn representations where compatible people are close in embedding space
  • Text pair classification — train models to predict whether two dating profiles are compatible
  • Matching systems — build recommendation/matching engines for dating applications

Dataset Structure

Each example is a pair of natural language statements from two people (labeled as "boy" or "girl"), with a binary compatibility label.

FieldTypeDescription
text_1stringFirst person's statement (e.g., "girl: I love hiking and outdoor adventures")
text_2stringSecond person's statement (e.g., "boy: I'm passionate about trail running")
labelint1 = compatible, 0 = incompatible
categorystringPrimary category of the preference
subcategorystringMore specific subcategory
pair_typestringHow the pair was constructed

Splits

SplitExamplesCompatibleIncompatible
train6,0002,997 (49.95%)3,003 (50.05%)
eval1,469709 (48.26%)760 (51.74%)

Categories

Pairs span several categories of dating preferences:

  • lifestyle — health-conscious habits, daily routines, social preferences
  • interests — hobbies, activities, entertainment preferences
  • values — spirituality, career ambitions, family values, independence
  • dealbreakers — non-negotiable preferences (e.g., smoking, kids, religion)
  • Cross-category combos — e.g., interests_and_values, lifestyle_and_interests

Pair Types

The dataset includes diverse pair construction methods to improve model robustness:

Pair TypeDescription
compatibleClear shared interests/values
incompatibleClearly mismatched preferences
subtle_mismatchDifferent preferences but still compatible (teaches nuance)
dealbreakerHard incompatibilities (e.g., smoker vs. non-smoker)
complex_compatible / complex_incompatibleMulti-dimensional pairs mixing agreement and disagreement
llm_judged_compatible / llm_judged_incompatiblePairs scored by an LLM for nuanced compatibility
curated_realisticHand-crafted realistic dating profile examples

Usage

Loading the Dataset

python
from datasets import load_dataset

dataset = load_dataset("dipenbhuva/dating-compatibility-pairs")

# Access splits
train = dataset["train"]
eval_set = dataset["eval"]

print(train[0])
# {'text_1': 'girl: I really enjoy sleeping in...', 'text_2': 'boy: I can't stand...', 'label': 0, ...}

Embedding Fine-tuning (Sentence Transformers)

python
from sentence_transformers import SentenceTransformer, InputExample, losses
from torch.utils.data import DataLoader

model = SentenceTransformer("all-MiniLM-L6-v2")

train_examples = [
    InputExample(texts=[row["text_1"], row["text_2"]], label=float(row["label"]))
    for row in dataset["train"]
]

train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=32)
train_loss = losses.CosineSimilarityLoss(model)

model.fit(
    train_objectives=[(train_dataloader, train_loss)],
    epochs=3,
    warmup_steps=100
)

Text Pair Classification

python
from transformers import AutoTokenizer, AutoModelForSequenceClassification

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)

# Tokenize pairs
inputs = tokenizer(
    [row["text_1"] for row in dataset["train"]],
    [row["text_2"] for row in dataset["train"]],
    padding=True, truncation=True, return_tensors="pt"
)

Dataset Generation

The dataset was generated synthetically using generate_dating_pairs.py (included in this repository). The generation process includes:

  1. 1.Template-based generation with diverse persona attributes and natural language variation
  2. 2.LLM-judged pairs where a language model scores compatibility on a 0-10 scale
  3. 3.Curated realistic examples modeled after real dating profile language
  4. 4.Deliberate subtle mismatches to teach models that different interests don't always mean incompatibility

Limitations

  • Synthetic data: All pairs are generated, not from real users. Real dating preferences are more nuanced.
  • Binary labels: Compatibility is reduced to 0/1, while real compatibility is a spectrum.
  • English only: All text is in English.
  • Gender binary: Pairs use "boy"/"girl" labels only.

Citation

If you use this dataset, please cite:

bibtex
@dataset{dating_compatibility_pairs,
  title={Dating Compatibility Pairs},
  author={dipenbhuva},
  year={2025},
  url={https://huggingface.co/datasets/dipenbhuva/dating-compatibility-pairs}
}