Views
No views yet
| Metric | Fine-tuned | Base Model | Improvement |
|---|---|---|---|
| MRR | 0.8241167434715821 | 0.7784946236559142 | +0.045622119815667994 (5.9%) |
| Avg Rank | 1.2134203168685929 | 1.2845303867403313 | Better by 0.0711100698717384 positions |
| Metric | Fine-tuned | Base Model | Improvement |
|---|---|---|---|
| Recall@1 | 0.688 | 0.613 | +0.075 |
| Recall@2 | 0.925 | 0.871 | +0.054 |
| Recall@3 | 0.946 | 0.935 | +0.011 |
| Recall@4 | 0.968 | 0.978 | -0.011 |
| Recall@5 | 0.968 | 1.000 | -0.032 |
MRR optimization pushes correct chunks to top positions:
Before (Base Model):
Rank 1: Related chunk (MRR contribution: 0.0)
Rank 2: Irrelevant (MRR contribution: 0.0)
Rank 3: CORRECT chunk (MRR contribution: 0.33)
After (Fine-tuned):
Rank 1: CORRECT chunk (MRR contribution: 1.0) ⭐
Rank 2: Related chunk (MRR contribution: 0.0)
Rank 3: Irrelevant (MRR contribution: 0.0)
Result: 3x better MRR, users find answers immediately!1from sentence_transformers import SentenceTransformer
2from sklearn.metrics.pairwise import cosine_similarity
3
4# Load MRR-optimized model
5model = SentenceTransformer('ThanhLe0125/e5-small-math')
6
7# ⚠️ CRITICAL: Must use E5 prefixes
8query = "query: Định nghĩa hàm số đồng biến là gì?"
9chunks = [
10 "passage: Hàm số đồng biến trên khoảng (a;b) là...", # CORRECT
11 "passage: Ví dụ bài tập về hàm đồng biến...", # RELATED
12 "passage: Phương trình bậc hai có dạng..." # IRRELEVANT
13]
14
15# Get MRR-optimized rankings
16query_emb = model.encode([query])
17chunk_embs = model.encode(chunks)
18similarities = cosine_similarity(query_emb, chunk_embs)[0]
19
20# With fine-tuning, correct chunk should be at rank #1
21ranked_indices = similarities.argsort()[::-1]
22print(f"Rank 1: {chunks[ranked_indices[0]][:50]}... (Score: {similarities[ranked_indices[0]]:.3f})")
23
24# Expected: Correct chunk at rank #1 with high score1# Efficient inference - high probability correct chunk is #1
2top_chunk = chunks[similarities.argmax()]
3confidence = similarities.max()
4
5if confidence > 0.7: # High confidence threshold
6 return top_chunk # Likely the correct answer
7else:
8 return chunks[similarities.argsort()[::-1][:3]] # Return top 3 as fallback