Hakim-small / README.md
mehran-sarmadi's picture
Update README.md
07eae29 verified
---
language:
- fa
---
# 🧠 Hakim-small
[![arXiv](https://img.shields.io/badge/arXiv-2505.08435-b31b1b.svg)](https://arxiv.org/abs/2505.08435)
**Hakim-small** is a compact and efficient version of the state-of-the-art **Hakim** text embedding model, specifically designed for the Persian language. While the main Hakim model sets the SOTA on the **FaMTEB** benchmark, Hakim-small offers a strong balance of performance and efficiency, making it ideal for applications with resource constraints. It leverages the same advanced training methodologies and datasets as its larger counterpart.
Hakim-small is optimized for applications such as semantic search, dense retrieval, RAG (retrieval-augmented generation), and instruction-based NLP tasks like classification and QA.
---
## 📌 Model Highlights
- 🔍 **Strong FaMTEB Performance**: Achieves excellent results on the FaMTEB benchmark, especially for its size.
- 🧾 **Instruction-Tuned**: Capable of handling tasks like classification, STS, retrieval, and QA, benefiting from the same instruction-tuning paradigm as Hakim.
- 🗣️ **Chatbot-Ready**: Fine-tuned with chat history-aware data from the Hakim project.
- ⚙️ **Highly Compact & Fast**: With only **~38M parameters** (compared to Hakim's ~124M), Hakim-small is significantly smaller and faster, making it highly effective for real-world inference where efficiency is key.
---
## 🏗️ Training Datasets
Hakim-small benefits from the comprehensive and high-quality datasets developed for the Hakim project. These include:
### 📚 Pretraining
- **Corpesia**: 11B tokens from 46 Persian websites across 21 domains (e.g., news, health, religion, tech).
- **hmBlogs**: 6.8B tokens from ~20M Persian blog posts.
- **Queries**: 8.5M anonymized search queries.
### 🔄 Unsupervised Stage (Pairsia-unsup)
- 5M high-quality Persian text pairs from diverse sources including document–title, FAQ, QA, paper title–abstract, and machine-translated datasets (MS MARCO, SAMSum, AdversarialQA, etc.).
### 🧠 Supervised Stage (Pairsia-sup)
- 1.3M labeled pairs with multiple negatives per query.
- Instruction-based fine-tuning across tasks: Classification, Retrieval, STS, QA, NLI.
For more detailed information on the dataset creation and curation process, please refer to the [Hakim paper](https://arxiv.org/abs/2505.08435).
---
## 🧪 Benchmark Results (FaMTEB)
| Model | Avg. Score | Classification | Clustering | PairClass. | Reranking | Retrieval | STS | Summarization |
|------------------------|------------|----------------|------------|------------|-----------|-----------|-------|----------------|
| **Hakim** | **73.81** | **84.56** | **70.46** | **89.75** | 69.46 | 40.43 | 76.62 | **85.41** |
| Hakim-small | 70.45 | 80.19 | 66.31 | 87.41 | 67.30 | 38.05 | 75.53 | 78.40 |
| Hakim-unsup | 64.56 | 60.65 | 58.89 | 86.41 | 67.56 | 37.71 | 79.36 | 61.34 |
| BGE-m3 | 65.29 | 58.75 | 57.73 | 85.21 | **74.56** | 43.38 | 76.35 | 61.07 |
| Jina-embeddings-v3 | 64.53 | 59.93 | 59.15 | 83.71 | 61.26 | **43.51** | **78.65** | 65.50 |
| multilingual-e5-large | 64.40 | 59.86 | 57.19 | 84.42 | 74.34 | 42.98 | 75.38 | 56.61 |
| GTE-multilingual-base | 63.64 | 56.07 | 57.28 | 84.58 | 69.72 | 41.22 | 75.75 | 60.88 |
| multilingual-e5-base | 62.93 | 57.62 | 56.52 | 84.04 | 72.07 | 41.20 | 74.45 | 54.58 |
| Tooka-SBERT | 60.65 | 59.40 | 56.45 | 87.04 | 58.29 | 27.86 | 76.42 | 59.06 |
---
## Model Usage
You can interact with the `Hakim_small` model through our API. Below are examples using `curl` and Python.
### Inference with `curl`
Here's how to send a request to the model using a `curl` command in your terminal.
**Important:** Replace `your_api_key` with your actual API key.
> **Note:** For quick testing, you can use the value `mcinext` as your API key. This will allow you to use the API with some limitations.
```bash
curl -X POST 'https://mcinext.ai/api/hakim-small' \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Authorization": "Bearer your_api_key" \
-d '{
"model": "Hakim_small",
"input": [
"The text of the first document.",
"The text of the second document.",
"And so on..."
],
"encoding_format": "float",
"add_special_tokens": true
}'
```
### Inference with `python`
```python
import requests
import json
# --- Configuration ---
API_KEY = "your_api_key" # Replace with your key or "mcinext" for testing
API_URL = "https://mcinext.ai/api/hakim-small"
# --- Request Details ---
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
data = {
"model": "Hakim_small",
"input": [
"The text of the first document.",
"The text of the second document.",
"And so on..."
],
"encoding_format": "float",
"add_special_tokens": True
}
# --- Send Request ---
try:
response = requests.post(API_URL, headers=headers, data=json.dumps(data))
response.raise_for_status()
print("Request successful!")
print("Response JSON:")
print(response.json())
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
print(f"Response content: {response.text}")
except Exception as err:
print(f"An other error occurred: {err}")
```
## Citation
```bibtext
@article{sarmadi2025hakim,
title={Hakim: Farsi Text Embedding Model},
author={Sarmadi, Mehran and Alikhani, Morteza and Zinvandi, Erfan and Pourbahman, Zahra},
journal={arXiv preprint arXiv:2505.08435},
year={2025}
}
```