ajan-embed-q / README.md
fredoline005's picture
Honest 4-task benchmark + ablation
dbe3c5a verified
|
Raw
History Blame Contribute Delete
3.02 kB
---
language:
- tr
license: apache-2.0
library_name: sentence-transformers
pipeline_tag: sentence-similarity
base_model: intfloat/multilingual-e5-base
tags:
- turkish
- embeddings
- retrieval
- sentence-transformers
- distillation
---
# ajan-embed-q
A **Turkish-optimized sentence embedding model** for retrieval / RAG, distilled from
`BAAI/bge-m3` into a `multilingual-e5-base` student over 500k Turkish web sentences.
768→1024-dim projected to match the teacher's space.
🔗 Code + recipe: **[github.com/AJANLAR-AI/ajanlar](https://github.com/AJANLAR-AI/ajanlar)**
> Part of [Ajanlar](https://huggingface.co/fredoline005) — open Turkish AI agent infra.
> The retrieval engine under the agents, where multilingual models underperform on
> agglutinative Turkish.
## Benchmark (MTEB, Turkish) — with ablation
Main score per task (NDCG@10 retrieval; Spearman STS). `multilingual-e5-base` is the
**undistilled ablation** (same base as this model).
| Model | Params | TurHistQuad (retrieval) | STS22.v2 | STS17 | avg |
|---|---|---|---|---|---|
| **ajan-embed-q** (this) | 278M | **0.465** | 0.651 | 0.724 | 0.613 |
| multilingual-e5-small | 118M | 0.433 | 0.643 | 0.767 | 0.614 |
| multilingual-e5-base *(ablation)* | 278M | 0.444 | 0.651 | 0.777 | 0.624 |
| multilingual-e5-large | 560M | 0.469 | 0.675 | 0.810 | 0.652 |
| BAAI/bge-m3 *(teacher)* | 568M | 0.478 | 0.680 | 0.814 | 0.657 |
**Honest reading:** this is a **retrieval-specialised** model. On Turkish **retrieval**
(TurHistQuad) it beats e5-small/e5-base and **matches e5-large at half the size** — the
RAG/agent use case it's built for. On general **STS** it trails the e5 family, so on the
4-task average it lands ~on par with (slightly below) undistilled e5-base. Use it for
**retrieval/RAG in Turkish**, not as a general-purpose STS model.
## Usage
```python
from sentence_transformers import SentenceTransformer
m = SentenceTransformer("fredoline005/ajan-embed-q")
emb = m.encode(["query: kargom ne zaman gelir?",
"passage: Siparişler 1–3 iş günü içinde kargoya verilir."],
normalize_embeddings=True)
```
Use `query: ` / `passage: ` prefixes for retrieval (inherited from the e5 family).
## Training
- **Method:** offline distillation — teacher embeddings cached over the corpus, the
student trained (MSE) to reproduce them; a Dense layer projects 768→1024.
- **Teacher:** `BAAI/bge-m3` (MIT). **Student:** `intfloat/multilingual-e5-base` (MIT).
- **Data:** 500k Turkish sentences (`allenai/c4`, `tr`).
- **Hardware:** 1× RTX 4090, ~1 hour.
## Limitations (honest)
- Benchmarked on **2 Turkish tasks, no confidence intervals** — margins are modest.
- The win over e5-small is partly the larger base; an undistilled-e5-base ablation is
not yet run.
- Distillation is bounded by the teacher; the native-Turkish-tokenizer edge is v1.
- Pin a corpus snapshot + add PII/dedup filtering for a production retrain.
## License
Apache-2.0 (weights/recipe). Base + teacher are MIT.