# Hybrid Retrieval + Reranker (Persian-friendly)

این پایپ‌لاین یک روش هیبریدی برای بازیابی و بازرتبه‌بندی نتایج است:
- Dense Retrieval با `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`
- Sparse Retrieval با TF-IDF (الگوی توکن‌سازی سازگار با فارسی)
- Fusion بر اساس وزن‌دهی امتیازها (`--dense-alpha`)
- Re-ranking با Cross-Encoder: `BAAI/bge-reranker-v2-m3`

## دادهٔ ورودی
فایل `./data/sentences_vector.json` با ساختار زیر:
```json
[
  {"sentence": "متن جمله ۱", "embedding": [0.1, -0.2, ...]},
  {"sentence": "متن جمله ۲", "embedding": [0.05, 0.33, ...]}
]
```

## نصب
```bash
pip install -U sentence-transformers transformers scikit-learn numpy torch
```

## اجرا
```bash
python hybrid_retrieval_reranker.py --query "بهترین راه موفقیت چیست؟"   --topk-dense 50 --topk-sparse 50 --pre-rerank-k 50 --final-k 5
```

### آرگومان‌ها
- `--query` : پرسش کاربر
- `--data` : مسیر فایل داده (پیش‌فرض: `./data/sentences_vector.json`)
- `--topk-dense` ، `--topk-sparse` : تعداد نتایج اولیه از هر روش
- `--pre-rerank-k` : تعداد کاندیدهای ورودی به ریرنکر
- `--final-k` : تعداد نتایج نهایی
- `--dense-alpha` : وزن امتیاز Dense در مرحله Fusion (۰ تا ۱)
- `--device` : `cuda` یا `cpu` (در صورت عدم تعیین، خودکار)

## خروجی
نتایج در ترمینال چاپ می‌شود. برای ذخیرهٔ JSON:
```bash
python hybrid_retrieval_reranker.py --query "..." --save-json output.json
```
