Bharat-Embed 270M

License: Apache 2.0 Parameters 270M Hindi NDCG 0.7324 ONNX parity ok Built by Eulogik

Bharat-Embed overview

Direct answer

Bharat-Embed 270M is a 270M text only EmbeddingGemma-2 fork for Hinglish and Hindi retrieval RAG. It loads without vision or audio, runs on CPU and ONNX INT8, truncates to 128d, and is Apache-2.0. Pair it with eulogik/flashrank-pro-base as reranker. Built by Eulogik.

Find with: embeddinggemma2 hindi hinglish indic rag on-device onnx gguf qdrant mrl apache 2.0.

Measured numbers

All numbers below were measured on a Mac mini M4, 2026-10-08/09. No estimates.

Check Base text only Bharat-Embed Delta
Hindi IndicQA NDCG@10, 768d 0.7279 0.7324 +0.0045
Hindi cross lingual STS spearman 0.6430 0.6423 -0.0007 (tie)
Train loss start to end 0.586 0.236 learned
Torch vs ONNX INT8 mean drift - 0.0066 under 1e-2 gate
Reload check MISSING keys clean, 168 adapters merged fixed

Note: the mteb runs use the default mteb encoding path, same both sides. The +0.03 stretch gate was not met. This card reports the miss plainly. v1.1 retrains on diverse real Hindi.

Truncation chart

Truncation cost on Hindi retrieval (measured NDCG@10)

Dims Score vs 768d
768 0.7324 -
512 0.7247 -0.008
256 0.7023 -0.030
128 0.6294 -0.103

Plain read: 512d is near lossless. 256d costs 0.03. 128d costs 0.10 on Hindi, steeper than the base card multilingual average. Pick 512 for quality, 256 for the cost balance. 128d only for tight budgets with eyes open.

How it was built

Architecture

Fact Value
Base google/embeddinggemma-2, text only (vision_config None, audio_config None)
Method LoRA r16 on attention plus MLP, merged to clean keys
Data 40k frozen triplets (15k Hinglish synth, 5k Banking77, 10k legal synth, 10k near-miss hard), SHA pinned
Train 3 epochs, batch 8, len 256, AdamW 2e-5, fp32, Mac mini M4
License note FLORES eval only (CC-BY-SA). MS MARCO excluded (non-commercial terms). Train pack is Banking77 plus ours.

Quickstart

from sentence_transformers import SentenceTransformer

model = SentenceTransformer(
    "eulogik/bharat-embed-270m-gemma2",
    config_kwargs={"vision_config": None, "audio_config": None},
    model_kwargs={"torch_dtype": "bfloat16"},
)
q = model.encode("GST refund kaise claim karein?", prompt_name="SearchQuery",
                 truncate_dim=256, normalize_embeddings=True)
d = model.encode("title: GST refund | text: apply through portal with invoice proof",
                 truncate_dim=256, normalize_embeddings=True)
print(model.similarity(q, d))

Rules: queries and docs share one dim. Always normalize after truncate. fp16 never (base warns NaN).

ONNX serve

pip install onnxruntime qdrant-client
python scripts/encode_onnx.py --model onnx/int8 --queries queries.txt --truncate 256

Limits

  • Text only. No image, video, or audio.
  • Hindi and Hinglish first. Tamil and Telugu unmeasured.
  • Trained at 256 tokens. Long doc behavior unmeasured.
  • Scores rank, they do not calibrate. Pair with a reranker for decisions.

Eulogik family

Keywords

embeddinggemma2 hindi embedding, hinglish embedding, indic rag embedding, on-device embedding, onnx embedding, gguf embedding ollama, qdrant hindi search, mrl matryoshka embedding, uae law embedding, difc rag

Downloads last month
147
Safetensors
Model size
0.3B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for eulogik/bharat-embed-270m-gemma2

Quantized
(120)
this model
Finetunes
1 model
Quantizations
1 model

Dataset used to train eulogik/bharat-embed-270m-gemma2

Space using eulogik/bharat-embed-270m-gemma2 1

Collection including eulogik/bharat-embed-270m-gemma2