VOOZH about

URL: https://huggingface.co/johnnyboycurtis/ModernBERT-small

⇱ johnnyboycurtis/ModernBERT-small · Hugging Face


SentenceTransformer (Legacy)

UPDATE: Consider using johnnyboycurtis/ModernBERT-small-v2 a much more performant model.

Warning

This model was an early exploration into creating a Wide model.

⚠️ Legacy Status: NOT RECOMMENDED.

This initial implementation suffered from suboptimal architectural scaling decisions made during the initialization phase, particularly concerning the feed-forward network capacity relative to the depth.

👉 Recommended Successor: For superior performance, speed, and architectural coherence, please use the improved version: johnnyboycurtis/ModernBERT-small-v2. The successor model addresses these limitations via a more sophisticated Guided Weight Initialization (GUIDE) technique and specialized Knowledge Distillation tuning.

Model Details

This is a shallow model with wide layers. NOT RECOMMENDED for production. This was my first attempt of training a ModernBERT model from scratch. The wide component is a mistake on my part due to lack of understanding of the gegelu design.

ModernBERT-small-1.5 will address the limitations of this design.

small_modernbert_config = ModernBertConfig(
 hidden_size=384, # A common dimension for small embedding models
 num_hidden_layers=12, # Significantly fewer layers than the base's 22
 num_attention_heads=6, # Must be a divisor of hidden_size
 intermediate_size=1536, # 4 * hidden_size -- VERY WIDE!!
 max_position_embeddings=1024, # Max sequence length for the model; originally 8192
)

model = ModernBertModel(modernbert_small_config)

Model Description

  • Model Type: Sentence Transformer
  • Base model: Custom-trained ModernBERT-Small (trained from scratch)
  • Architecture: ModernBERT-Small
  • Maximum Sequence Length: 1024 tokens
  • Output Dimensionality: 384 dimensions
  • Similarity Function: Cosine Similarity
  • Language: en
  • License: MIT

Model Sources

Training Procedure

This model was developed using a sophisticated, multi-stage "curriculum learning" approach to build a deep semantic understanding. The training scripts are available in the linked repository.

Stage 1: Foundational Contrastive Training

The model was first trained on a large, diverse collection of over 1 million triplets from three different datasets. This stage taught the model a broad, foundational understanding of language, relevance, and logical relationships.

Stage 2: Advanced Knowledge Distillation

The foundational model was then refined by having it mimic a state-of-the-art teacher model (BAAI/bge-base-en-v1.5). This stage transferred the nuanced knowledge of the expert teacher to our more efficient student model.

  • Teacher Model: BAAI/bge-base-en-v1.5
  • Loss Function: DistillKLDivLoss

Stage 3: Task-Specific Fine-Tuning

As a final "calibration" step, the best distilled model was fine-tuned directly on the Semantic Textual Similarity (STS) benchmark. This specializes the model for tasks requiring precise similarity scores.

Full Model Architecture

SentenceTransformer(
 (0): Transformer({'max_seq_length': 1024, 'do_lower_case': False, 'architecture': 'ModernBertModel'})
 (1): Pooling({'word_embedding_dimension': 384, '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})
)

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("johnnyboycurtis/ModernBERT-small")
# Run inference
sentences = [
 'A girl is eating a cupcake.',
 'A woman is eating a cupcake.',
 'Zebras are socializing.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 384]

# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 0.8201, 0.1449],
# [0.8201, 1.0000, 0.1839],
# [0.1449, 0.1839, 1.0000]])

Evaluation

Metrics

Semantic Similarity

Metric sts-dev sts-test
pearson_cosine 0.7575 0.6939
spearman_cosine 0.7563 0.6784

Training Details

Training Dataset

stsb

  • Dataset: stsb at ab7a5ac
  • Size: 5,749 training samples
  • Columns: sentence1, sentence2, and score
  • Approximate statistics based on the first 1000 samples:
    sentence1 sentence2 score
    type string string float
    details
    • min: 6 tokens
    • mean: 10.16 tokens
    • max: 28 tokens
    • min: 6 tokens
    • mean: 10.12 tokens
    • max: 25 tokens
    • min: 0.0
    • mean: 0.45
    • max: 1.0
  • Samples:
    sentence1 sentence2 score
    A plane is taking off. An air plane is taking off. 1.0
    A man is playing a large flute. A man is playing a flute. 0.76
    A man is spreading shreded cheese on a pizza. A man is spreading shredded cheese on an uncooked pizza. 0.76
  • Loss: CosineSimilarityLoss with these parameters:
    {
     "loss_fct": "torch.nn.modules.loss.MSELoss"
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • eval_strategy: steps
  • per_device_train_batch_size: 16
  • per_device_eval_batch_size: 16
  • learning_rate: 2e-05
  • num_train_epochs: 4
  • warmup_ratio: 0.1
  • bf16: True
  • load_best_model_at_end: True

All Hyperparameters

Training Logs

Epoch Step Training Loss sts-dev_spearman_cosine sts-test_spearman_cosine
0.2778 100 0.1535 - -
0.5556 200 0.068 0.7387 -
0.8333 300 0.0446 - -
1.1111 400 0.0411 0.7511 -
1.3889 500 0.0366 - -
1.6667 600 0.0425 0.7542 -
1.9444 700 0.0402 - -
2.2222 800 0.0373 0.7563 -
2.5 900 0.0374 - -
2.7778 1000 0.0384 0.7557 -
3.0556 1100 0.0357 - -
3.3333 1200 0.0399 0.7562 -
3.6111 1300 0.0358 - -
3.8889 1400 0.0338 0.7563 -
-1 -1 - - 0.6784
  • The bold row denotes the saved checkpoint.

Framework Versions

  • Python: 3.13.4
  • Sentence Transformers: 5.0.0
  • Transformers: 4.52.4
  • PyTorch: 2.7.1+cu128
  • Accelerate: 1.7.0
  • Datasets: 3.6.0
  • Tokenizers: 0.21.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",
}
Downloads last month
315
Safetensors
Model size
47.7M params
Tensor type
BF16
·

Datasets used to train johnnyboycurtis/ModernBERT-small

Paper for johnnyboycurtis/ModernBERT-small

Evaluation results