File size: 2,961 Bytes
ed5f593
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
---
language:
  - en
  - ms
tags:
  - cross-encoder
  - reranker
  - retrieval
  - rag
  - malaysian
  - manglish
  - multilingual
license: mit
base_model: BAAI/bge-reranker-v2-m3
---

# Aranda-Reranker-v1

Cross-encoder reranker specialized for **Malaysian text**, designed to work as Stage 2 after [Aranda-v1](https://huggingface.co/rekabytes/Aranda-v1) dense retrieval.

## Pipeline

```
Query → Aranda-v1 (retrieve top-25) → Aranda-Reranker-v1 (rerank) → top-5 results
```

Aranda-v1 is fast but encodes query and documents separately. Aranda-Reranker-v1 processes query+document **together** with cross-attention, catching subtle mismatches the bi-encoder misses.

## Evaluation (4,149 queries, BM + Manglish + English + Cross-lingual)

### Overall Pipeline vs Aranda-v1 Alone

| Metric | Aranda-v1 alone | + Aranda-Reranker-v1 | Improvement |
|---|---:|---:|---:|
| Recall@1 | 0.8891 | **0.9311** | **+4.2** |
| Recall@5 | 0.9961 | 0.9867 | -0.9 |
| Recall@10 | 0.9998 | 0.9971 | -0.3 |
| MRR | 0.9364 | **0.9563** | **+2.0** |

### Per-Language Recall@1

| Language | Aranda-v1 alone | + Aranda-Reranker-v1 | Improvement |
|---|---:|---:|---:|
| BM | 0.8431 | **0.8874** | **+4.4** |
| Cross-lingual | 0.8500 | **0.9833** | **+13.3** |
| English | 0.8792 | **0.8940** | **+1.5** |
| Manglish | 0.9290 | **0.9656** | **+3.7** |

The reranker improves Recall@1 on **all four languages**, with a dramatic +13.3 point gain on cross-lingual (BM↔English) retrieval.

## Training

Fine-tuned from `BAAI/bge-reranker-v2-m3` on 30,925 Malaysian hard-negative triplets:
- 20K social media (Lowyat, Twitter, Facebook)
- 5.6K formal BM QA (mesolitica common-crawl-qa)
- 3.5K English + cross-lingual anchors (up-sampled)
- 1.8K holdout + negation pairs

Only top 4 of 24 transformer layers were fine-tuned (9.1% of parameters). Contrastive ranking loss. LR=2e-5, bf16.

## Usage

```python
from sentence_transformers import SentenceTransformer, CrossEncoder

# Stage 1: Dense retrieval with Aranda-v1
retriever = SentenceTransformer("rekabytes/Aranda-v1")
query_emb = retriever.encode([query], normalize_embeddings=True)
doc_embs = retrieaver.encode(documents, normalize_embeddings=True)
scores = query_emb @ doc_embs.T
top_25 = scores.argsort()[0][-25:][::-1]

# Stage 2: Rerank with Aranda-Reranker-v1
reranker = CrossEncoder("rekabytes/Aranda-Reranker-v1")
candidates = [documents[i] for i in top_25]
pairs = [[query, doc] for doc in candidates]
rerank_scores = reranker.predict(pairs)
final_order = rerank_scores.argsort()[::-1]
top_5 = [candidates[i] for i in final_order[:5]]
```

## Model Details

- **Architecture:** XLM-RoBERTa (24 layers, 1024 hidden) with sequence classification head
- **Base model:** BAAI/bge-reranker-v2-m3
- **Max sequence length:** 512 tokens (query + document)
- **Input:** `[CLS] query [SEP] document [SEP]`
- **Output:** Single relevance score (higher = more relevant)
- **Latency:** ~2ms per (query, document) pair on GPU