ThanhLe0125 commited on
Commit
48fea17
·
verified ·
1 Parent(s): f3e0643

MRR-optimized E5-Math (+0.074 MRR vs base) - 25/06/2025

Browse files
Files changed (3) hide show
  1. README.md +82 -61
  2. model_comparison.json +260 -261
  3. usage_example.py +34 -20
README.md CHANGED
@@ -12,49 +12,72 @@ tags:
12
  - hierarchical-learning
13
  - e5-base
14
  - mrr-optimization
15
- - mean-reciprocal-rank
 
16
  base_model: intfloat/multilingual-e5-base
17
  metrics:
18
  - mean_reciprocal_rank
19
  - recall
20
  ---
21
 
22
- # E5-Math-Vietnamese: MRR-Optimized Exact Chunk Retrieval
23
 
24
  ## Model Overview
25
- Fine-tuned E5-base model optimized with **MRR (Mean Reciprocal Rank)** for exact chunk retrieval in Vietnamese mathematics:
26
- - **🎯 Goal**: Push correct chunks to rank #1 or #2
27
- - **📊 Hierarchy**: Correct > Related > Irrelevant scoring
28
- - **⚡ Efficient**: High MRR = fewer chunks needed at inference
29
 
30
- ## Performance Metrics
31
 
32
- ### Training Results
33
  - **Best Validation MRR**: 0.8527777777777777 (avg rank: 1.1726384364820848)
 
34
  - **Training Epochs**: 6
35
- - **Hierarchy Maintained**: N/A
36
 
37
- ### Final Test Results (Used Only Once)
38
- - **Test MRR**: 0.8439068100358421 (avg rank: 1.1849649607135275)
39
- - **Test Recall@3**: 0.967741935483871
40
- - **Test Recall@5**: 1.0
41
- - **Hierarchy Rate**: 0.6559139784946236
42
- - **Performance Level**: 🌟 EXCELLENT (avg rank 1.25)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
- ## MRR Advantage
45
  ```
46
- MRR = Mean of (1/rank_of_correct_chunk)
47
 
48
- Examples:
49
- - Correct chunk at rank #1 MRR contribution = 1.0
50
- - Correct chunk at rank #2 MRR contribution = 0.5
51
- - Correct chunk at rank #5 → MRR contribution = 0.2
52
- - Correct chunk at rank #10 → MRR contribution = 0.1
53
 
54
- High MRR → Correct chunks consistently at top positions!
 
 
 
 
 
55
  ```
56
 
57
  ## Usage
 
58
  ```python
59
  from sentence_transformers import SentenceTransformer
60
  from sklearn.metrics.pairwise import cosine_similarity
@@ -70,57 +93,55 @@ chunks = [
70
  "passage: Phương trình bậc hai có dạng..." # IRRELEVANT
71
  ]
72
 
73
- # Get rankings (MRR-optimized for top positions)
74
  query_emb = model.encode([query])
75
  chunk_embs = model.encode(chunks)
76
  similarities = cosine_similarity(query_emb, chunk_embs)[0]
77
 
78
- # With high MRR, correct chunk should be at rank #1 or #2
79
  ranked_indices = similarities.argsort()[::-1]
80
- for rank, idx in enumerate(ranked_indices, 1):
81
- print(f"Rank {rank}: Score {similarities[idx]:.4f} - {chunks[idx][:50]}...")
82
 
83
- # Expected with MRR optimization:
84
- # Rank 1: Correct chunk (score ~0.85)
85
- # Rank 2: Related chunk (score ~0.45)
86
- # Rank 3: Irrelevant chunk (score ~0.1)
87
  ```
88
 
89
- ## Inference Optimization
90
- With MRR ≥ 0.7, you typically only need to return **top 2-3 chunks** to find the correct answer:
91
 
92
- ```python
93
- # Efficient inference - return only top 3
94
- top_3_indices = similarities.argsort()[::-1][:3]
95
- top_chunks = [chunks[i] for i in top_3_indices]
96
 
97
- # High probability correct chunk is in top_chunks[0] or top_chunks[1]
 
 
 
 
 
 
 
 
98
  ```
99
 
100
  ## Evaluation Methodology
 
101
  - **Training**: train_question + val_question with MRR optimization
102
- - **Validation**: MRR used for early stopping (pushes correct chunks up)
103
- - **Test**: test_question used ONLY ONCE for final evaluation
104
- - **Metrics**: MRR (primary), Recall@3/5 (secondary) for exact chunk retrieval
105
-
106
- ## Key Features
107
- - ✅ **MRR-optimized**: Correct chunks consistently at top positions
108
- - ✅ **Inference efficient**: Need fewer chunks to find correct answer
109
- - ✅ **Hierarchical**: Maintains Exact > Related > Irrelevant ranking
110
- - ✅ **Vietnamese math specialized**: Optimized for educational content
111
- - ✅ **Proper ML practices**: Clean train/val/test split
112
- - ⚠️ **E5 prefixes required**: Use 'query:' and 'passage:' prefixes
113
 
114
  ## Perfect For
115
- - Educational Q&A requiring exact answers at top positions
116
- - Efficient retrieval systems (fewer API calls needed)
117
- - Vietnamese mathematics tutoring with quick response
118
- - Content ranking where correct answer must be rank #1 or #2
119
-
120
- ## Performance Interpretation
121
- - **MRR ≥ 0.8**: 🌟 Excellent (correct chunks avg rank ≤ 1.25)
122
- - **MRR ≥ 0.7**: 🎯 Very Good (correct chunks avg rank ≤ 1.4)
123
- - **MRR ≥ 0.5**: 👍 Good (correct chunks avg rank ≤ 2.0)
124
- - **MRR < 0.5**: 📈 Needs improvement
125
-
126
- *Trained on 25/06/2025 with MRR optimization for exact chunk retrieval.*
 
 
 
 
 
12
  - hierarchical-learning
13
  - e5-base
14
  - mrr-optimization
15
+ - fine-tuned
16
+ - model-comparison
17
  base_model: intfloat/multilingual-e5-base
18
  metrics:
19
  - mean_reciprocal_rank
20
  - recall
21
  ---
22
 
23
+ # E5-Math-Vietnamese: MRR-Optimized with Base Model Comparison
24
 
25
  ## Model Overview
26
+ Fine-tuned E5-base model optimized with **MRR (Mean Reciprocal Rank)** for exact chunk retrieval in Vietnamese mathematics. Includes comprehensive comparison with base model.
 
 
 
27
 
28
+ ## Performance Comparison
29
 
30
+ ### Training vs Test Performance
31
  - **Best Validation MRR**: 0.8527777777777777 (avg rank: 1.1726384364820848)
32
+ - **Test MRR**: 0.8439068100358421 (avg rank: 1.1849649607135275)
33
  - **Training Epochs**: 6
 
34
 
35
+ ### Fine-tuned vs Base Model Comparison
36
+
37
+ | Metric | Fine-tuned | Base Model | Improvement |
38
+ |--------|------------|------------|-------------|
39
+ | **MRR** | 0.8439068100358421 | 0.7695340501792116 | +0.0743727598566305 (9.7%) |
40
+ | **Avg Rank** | 1.1849649607135275 | 1.2994876571960874 | Better by 0.11452269648255986 positions |
41
+
42
+ ### Detailed Recall@k Comparison
43
+
44
+ | Metric | Fine-tuned | Base Model | Improvement |
45
+ |--------|------------|------------|-------------|
46
+ | Recall@1 | 0.720 | 0.602 | +0.118 |
47
+ | Recall@2 | 0.925 | 0.860 | +0.065 |
48
+ | Recall@3 | 0.968 | 0.925 | +0.043 |
49
+ | Recall@4 | 0.978 | 0.968 | +0.011 |
50
+ | Recall@5 | 1.000 | 0.989 | +0.011 |
51
+
52
+
53
+ ## Key Improvements from Fine-tuning
54
+
55
+ ✅ **MRR Boost**: +0.0743727598566305 improvement in Mean Reciprocal Rank
56
+ ✅ **Ranking Quality**: Correct chunks moved up by avg 0.11452269648255986 positions
57
+ ✅ **Hit Rate**: Better success rates across all Recall@k metrics
58
+ ✅ **Vietnamese Math**: Specialized for Vietnamese mathematical content
59
+ ✅ **Hierarchy**: Maintains Correct > Related > Irrelevant scoring
60
+
61
+ ## Why MRR Matters for Exact Retrieval
62
 
 
63
  ```
64
+ MRR optimization pushes correct chunks to top positions:
65
 
66
+ Before (Base Model):
67
+ Rank 1: Related chunk (MRR contribution: 0.0)
68
+ Rank 2: Irrelevant (MRR contribution: 0.0)
69
+ Rank 3: CORRECT chunk (MRR contribution: 0.33)
 
70
 
71
+ After (Fine-tuned):
72
+ Rank 1: CORRECT chunk (MRR contribution: 1.0) ⭐
73
+ Rank 2: Related chunk (MRR contribution: 0.0)
74
+ Rank 3: Irrelevant (MRR contribution: 0.0)
75
+
76
+ Result: 3x better MRR, users find answers immediately!
77
  ```
78
 
79
  ## Usage
80
+
81
  ```python
82
  from sentence_transformers import SentenceTransformer
83
  from sklearn.metrics.pairwise import cosine_similarity
 
93
  "passage: Phương trình bậc hai có dạng..." # IRRELEVANT
94
  ]
95
 
96
+ # Get MRR-optimized rankings
97
  query_emb = model.encode([query])
98
  chunk_embs = model.encode(chunks)
99
  similarities = cosine_similarity(query_emb, chunk_embs)[0]
100
 
101
+ # With fine-tuning, correct chunk should be at rank #1
102
  ranked_indices = similarities.argsort()[::-1]
103
+ print(f"Rank 1: {chunks[ranked_indices[0]][:50]}... (Score: {similarities[ranked_indices[0]]:.3f})")
 
104
 
105
+ # Expected: Correct chunk at rank #1 with high score
 
 
 
106
  ```
107
 
108
+ ## Inference Efficiency
 
109
 
110
+ With MRR optimization, you typically only need **top 1-2 chunks**:
 
 
 
111
 
112
+ ```python
113
+ # Efficient inference - high probability correct chunk is #1
114
+ top_chunk = chunks[similarities.argmax()]
115
+ confidence = similarities.max()
116
+
117
+ if confidence > 0.7: # High confidence threshold
118
+ return top_chunk # Likely the correct answer
119
+ else:
120
+ return chunks[similarities.argsort()[::-1][:3]] # Return top 3 as fallback
121
  ```
122
 
123
  ## Evaluation Methodology
124
+
125
  - **Training**: train_question + val_question with MRR optimization
126
+ - **Validation**: MRR for early stopping, Recall@3/5 monitoring
127
+ - **Test**: test_question used once for final comparison
128
+ - **Comparison**: Direct evaluation against base E5-multilingual model
129
+ - **Metrics**: MRR, Recall@1,2,3,4,5, Hierarchy Rate
 
 
 
 
 
 
 
130
 
131
  ## Perfect For
132
+
133
+ 🎯 **Educational Q&A**: Exact answers at rank #1 consistently
134
+ **Efficient Systems**: Fewer chunks needed at inference
135
+ 🇻🇳 **Vietnamese Math**: Specialized mathematical terminology
136
+ 📊 **Quality Ranking**: Hierarchical relevance scoring
137
+ 🚀 **Production Ready**: Proven improvement over base model
138
+
139
+ ## Technical Notes
140
+
141
+ - **Base Model**: intfloat/multilingual-e5-base
142
+ - **Fine-tuning**: Hierarchical contrastive learning with MRR optimization
143
+ - **Max Sequence**: 256 tokens
144
+ - **Training Data**: Vietnamese mathematical content with expert annotations
145
+ - **Validation**: Proper train/validation/test split methodology
146
+
147
+ *Fine-tuned on 25/06/2025 with comprehensive base model comparison.*
model_comparison.json CHANGED
@@ -1,25 +1,24 @@
1
  {
2
- "evaluation_date": "2025-06-25T04:28:30.580369",
3
  "note": "Comparison between fine-tuned and base model on test data",
4
  "fine_tuned": {
5
  "model_name": "Fine-tuned E5-Math",
6
- "total_reciprocal_rank": 78.525,
7
  "recall_at_k": {
8
- "1": 68,
9
  "2": 86,
10
- "3": 88,
11
- "4": 88,
12
- "5": 90
13
  },
14
  "total_queries": 93,
15
- "hierarchy_maintained": 62,
16
  "rank_distribution": {
17
- "1": 68,
18
- "8": 1,
19
- "2": 18,
20
- "6": 2,
21
- "3": 2,
22
- "5": 2
23
  },
24
  "query_details": [
25
  {
@@ -31,21 +30,21 @@
31
  "correct",
32
  "related",
33
  "related",
34
- "irrelevant",
35
  "irrelevant"
36
  ]
37
  },
38
  {
39
  "query": "Nếu f'(x) = 0 tại một điểm trong khoảng (a, b), điểm đó có phải luôn là điểm cực trị không? Tại sao?",
40
- "correct_rank": 8,
41
- "reciprocal_rank": 0.125,
42
  "hierarchy_ok": false,
43
  "top5_types": [
44
  "related",
45
  "related",
46
  "related",
47
  "related",
48
- "irrelevant"
49
  ]
50
  },
51
  {
@@ -56,7 +55,7 @@
56
  "top5_types": [
57
  "correct",
58
  "related",
59
- "irrelevant",
60
  "related",
61
  "irrelevant"
62
  ]
@@ -70,18 +69,18 @@
70
  "correct",
71
  "related",
72
  "related",
73
- "related",
74
  "related"
75
  ]
76
  },
77
  {
78
  "query": "Bạn có một hàm số có đạo hàm tại x = 0 bằng 0. Làm thế nào bạn có thể xác định chắc chắn rằng x = 0 là một điểm cực trị?",
79
- "correct_rank": 1,
80
- "reciprocal_rank": 1.0,
81
- "hierarchy_ok": true,
82
  "top5_types": [
83
- "correct",
84
  "related",
 
85
  "related",
86
  "related",
87
  "related"
@@ -102,14 +101,14 @@
102
  },
103
  {
104
  "query": "Cho hàm số f(x) = x^2 - 4x + 3. Tìm các điểm cực trị của hàm số này.",
105
- "correct_rank": 2,
106
- "reciprocal_rank": 0.5,
107
- "hierarchy_ok": false,
108
  "top5_types": [
109
- "related",
110
  "correct",
111
  "related",
112
  "related",
 
113
  "related"
114
  ]
115
  },
@@ -149,7 +148,7 @@
149
  "related",
150
  "related",
151
  "related",
152
- "irrelevant"
153
  ]
154
  },
155
  {
@@ -169,25 +168,25 @@
169
  "query": "Làm thế nào để áp dụng định lý Weierstrass để giải quyết các bài toán tối ưu hóa?",
170
  "correct_rank": 1,
171
  "reciprocal_rank": 1.0,
172
- "hierarchy_ok": false,
173
  "top5_types": [
174
  "correct",
175
- "irrelevant",
176
  "related",
177
  "related",
 
178
  "irrelevant"
179
  ]
180
  },
181
  {
182
  "query": "Hãy mô tả tình huống một bài toán thực tế có thể được giải quyết bằng cách tìm giá trị lớn nhất hoặc nhỏ nhất của một hàm số.",
183
- "correct_rank": 2,
184
- "reciprocal_rank": 0.5,
185
- "hierarchy_ok": false,
186
  "top5_types": [
187
- "related",
188
  "correct",
189
  "related",
190
  "related",
 
191
  "related"
192
  ]
193
  },
@@ -201,20 +200,20 @@
201
  "related",
202
  "related",
203
  "related",
204
- "related"
205
  ]
206
  },
207
  {
208
  "query": "Nếu bạn chỉ tính giá trị của hàm số tại các đầu mút của đoạn [a,b], bạn có thể bỏ sót giá trị lớn nhất hoặc nhỏ nhất thực sự của hàm số không? Tại sao?",
209
- "correct_rank": 2,
210
- "reciprocal_rank": 0.5,
211
- "hierarchy_ok": false,
212
  "top5_types": [
213
- "related",
214
  "correct",
215
  "related",
216
  "related",
217
- "related"
 
218
  ]
219
  },
220
  {
@@ -273,11 +272,11 @@
273
  "query": "Có những trường hợp đặc biệt nào khi tìm tiệm cận mà ta cần lưu ý?",
274
  "correct_rank": 1,
275
  "reciprocal_rank": 1.0,
276
- "hierarchy_ok": true,
277
  "top5_types": [
278
  "correct",
279
- "related",
280
  "irrelevant",
 
281
  "irrelevant",
282
  "irrelevant"
283
  ]
@@ -303,8 +302,8 @@
303
  "top5_types": [
304
  "correct",
305
  "irrelevant",
306
- "related",
307
  "irrelevant",
 
308
  "related"
309
  ]
310
  },
@@ -336,14 +335,14 @@
336
  },
337
  {
338
  "query": "Cho hàm số f(x) = x^3 - 3x^2 + 2, tìm giá trị lớn nhất và nhỏ nhất của hàm số trên đoạn [0, 3].",
339
- "correct_rank": 1,
340
- "reciprocal_rank": 1.0,
341
- "hierarchy_ok": true,
342
  "top5_types": [
 
343
  "correct",
344
  "related",
345
  "irrelevant",
346
- "irrelevant",
347
  "related"
348
  ]
349
  },
@@ -355,9 +354,9 @@
355
  "top5_types": [
356
  "correct",
357
  "related",
 
358
  "irrelevant",
359
- "irrelevant",
360
- "related"
361
  ]
362
  },
363
  {
@@ -394,8 +393,8 @@
394
  "top5_types": [
395
  "correct",
396
  "related",
397
- "irrelevant",
398
  "related",
 
399
  "irrelevant"
400
  ]
401
  },
@@ -427,13 +426,13 @@
427
  },
428
  {
429
  "query": "Một công ty muốn tối đa hóa lợi nhuận. Hãy mô tả cách họ có thể sử dụng phương pháp đạo hàm để giải quyết bài toán này, bao gồm cả việc xác định hàm mục tiêu và các ràng buộc.",
430
- "correct_rank": 2,
431
- "reciprocal_rank": 0.5,
432
- "hierarchy_ok": false,
433
  "top5_types": [
434
- "related",
435
  "correct",
436
  "related",
 
437
  "irrelevant",
438
  "irrelevant"
439
  ]
@@ -461,20 +460,20 @@
461
  "related",
462
  "irrelevant",
463
  "irrelevant",
464
- "irrelevant"
465
  ]
466
  },
467
  {
468
  "query": "Cho hình chữ nhật có diện tích cố định. Chứng minh rằng hình chữ nhật có chu vi nhỏ nhất là hình vuông.",
469
  "correct_rank": 1,
470
  "reciprocal_rank": 1.0,
471
- "hierarchy_ok": false,
472
  "top5_types": [
473
  "correct",
474
- "irrelevant",
475
  "related",
476
  "irrelevant",
477
- "related"
478
  ]
479
  },
480
  {
@@ -486,7 +485,7 @@
486
  "correct",
487
  "related",
488
  "irrelevant",
489
- "irrelevant",
490
  "irrelevant"
491
  ]
492
  },
@@ -525,7 +524,7 @@
525
  "correct",
526
  "irrelevant",
527
  "irrelevant",
528
- "related",
529
  "related"
530
  ]
531
  },
@@ -539,7 +538,7 @@
539
  "related",
540
  "related",
541
  "related",
542
- "irrelevant"
543
  ]
544
  },
545
  {
@@ -551,7 +550,7 @@
551
  "related",
552
  "correct",
553
  "related",
554
- "irrelevant",
555
  "related"
556
  ]
557
  },
@@ -563,7 +562,7 @@
563
  "top5_types": [
564
  "correct",
565
  "related",
566
- "related",
567
  "related",
568
  "related"
569
  ]
@@ -576,7 +575,7 @@
576
  "top5_types": [
577
  "correct",
578
  "related",
579
- "irrelevant",
580
  "related",
581
  "related"
582
  ]
@@ -585,26 +584,26 @@
585
  "query": "Trong hình hộp \\(ABCD.EFGH\\), tìm vectơ tổng của \\(\\overrightarrow{AB}\\), \\(\\overrightarrow{AD}\\), và \\(\\overrightarrow{AA'}\\), biết A' là một điểm bất kỳ trên cạnh AE.",
586
  "correct_rank": 1,
587
  "reciprocal_rank": 1.0,
588
- "hierarchy_ok": true,
589
  "top5_types": [
590
  "correct",
 
591
  "related",
592
  "related",
593
- "related",
594
- "irrelevant"
595
  ]
596
  },
597
  {
598
  "query": "Áp dụng các tính chất của phép toán vectơ, chứng minh rằng trung điểm của một đoạn thẳng chia đoạn thẳng đó thành hai vectơ bằng nhau.",
599
- "correct_rank": 2,
600
- "reciprocal_rank": 0.5,
601
- "hierarchy_ok": false,
602
  "top5_types": [
603
- "related",
604
  "correct",
605
  "related",
606
  "related",
607
- "irrelevant"
 
608
  ]
609
  },
610
  {
@@ -616,7 +615,7 @@
616
  "correct",
617
  "related",
618
  "related",
619
- "related",
620
  "irrelevant"
621
  ]
622
  },
@@ -643,7 +642,7 @@
643
  "related",
644
  "related",
645
  "irrelevant",
646
- "irrelevant"
647
  ]
648
  },
649
  {
@@ -663,13 +662,13 @@
663
  "query": "Chứng minh rằng trọng tâm của tam giác chia mỗi đường trung tuyến của tam giác đó theo tỉ lệ 2:1.",
664
  "correct_rank": 1,
665
  "reciprocal_rank": 1.0,
666
- "hierarchy_ok": true,
667
  "top5_types": [
668
  "correct",
669
- "related",
670
  "irrelevant",
671
  "related",
672
- "related"
 
673
  ]
674
  },
675
  {
@@ -681,8 +680,8 @@
681
  "correct",
682
  "related",
683
  "related",
684
- "related",
685
- "irrelevant"
686
  ]
687
  },
688
  {
@@ -695,7 +694,7 @@
695
  "related",
696
  "related",
697
  "related",
698
- "irrelevant"
699
  ]
700
  },
701
  {
@@ -708,7 +707,7 @@
708
  "related",
709
  "related",
710
  "related",
711
- "related"
712
  ]
713
  },
714
  {
@@ -719,7 +718,7 @@
719
  "top5_types": [
720
  "correct",
721
  "related",
722
- "irrelevant",
723
  "related",
724
  "related"
725
  ]
@@ -746,7 +745,7 @@
746
  "correct",
747
  "related",
748
  "related",
749
- "related",
750
  "irrelevant"
751
  ]
752
  },
@@ -773,17 +772,17 @@
773
  "related",
774
  "related",
775
  "related",
776
- "irrelevant"
777
  ]
778
  },
779
  {
780
  "query": "Một công ty sử dụng IQR để phân tích doanh số hàng tháng. Nếu IQR tăng đột ngột, điều này có thể báo hiệu điều gì?",
781
- "correct_rank": 1,
782
- "reciprocal_rank": 1.0,
783
- "hierarchy_ok": true,
784
  "top5_types": [
785
- "correct",
786
  "related",
 
787
  "related",
788
  "irrelevant",
789
  "related"
@@ -838,7 +837,7 @@
838
  "related",
839
  "related",
840
  "irrelevant",
841
- "related"
842
  ]
843
  },
844
  {
@@ -850,7 +849,7 @@
850
  "related",
851
  "correct",
852
  "related",
853
- "irrelevant",
854
  "related"
855
  ]
856
  },
@@ -864,7 +863,7 @@
864
  "correct",
865
  "related",
866
  "related",
867
- "irrelevant"
868
  ]
869
  },
870
  {
@@ -877,7 +876,7 @@
877
  "correct",
878
  "related",
879
  "related",
880
- "related"
881
  ]
882
  },
883
  {
@@ -902,7 +901,7 @@
902
  "correct",
903
  "related",
904
  "related",
905
- "irrelevant",
906
  "related"
907
  ]
908
  },
@@ -940,9 +939,9 @@
940
  "top5_types": [
941
  "related",
942
  "correct",
 
943
  "related",
944
- "related",
945
- "irrelevant"
946
  ]
947
  },
948
  {
@@ -960,12 +959,12 @@
960
  },
961
  {
962
  "query": "Cho cấp số cộng có tổng 20 số hạng đầu là 500, và tổng 30 số hạng đầu là 1050. Tính số hạng đầu và công sai của cấp số cộng này.",
963
- "correct_rank": 1,
964
- "reciprocal_rank": 1.0,
965
- "hierarchy_ok": true,
966
  "top5_types": [
967
- "correct",
968
  "related",
 
969
  "related",
970
  "related",
971
  "irrelevant"
@@ -999,12 +998,12 @@
999
  },
1000
  {
1001
  "query": "Tìm công thức tổng quát cho tổng các số lẻ từ 1 đến 2n-1 sử dụng công thức cấp số cộng.",
1002
- "correct_rank": 1,
1003
- "reciprocal_rank": 1.0,
1004
- "hierarchy_ok": true,
1005
  "top5_types": [
1006
- "correct",
1007
  "related",
 
1008
  "related",
1009
  "related",
1010
  "irrelevant"
@@ -1018,9 +1017,9 @@
1018
  "top5_types": [
1019
  "correct",
1020
  "related",
1021
- "irrelevant",
1022
  "related",
1023
- "related"
 
1024
  ]
1025
  },
1026
  {
@@ -1045,34 +1044,34 @@
1045
  "related",
1046
  "correct",
1047
  "related",
1048
- "related",
1049
- "irrelevant"
1050
  ]
1051
  },
1052
  {
1053
  "query": "Một chất phóng xạ giảm đi một nửa sau mỗi chu kỳ bán rã. Nếu ban đầu có 100g chất này, sau 3 chu kỳ bán rã sẽ còn lại bao nhiêu gam?",
1054
- "correct_rank": 6,
1055
- "reciprocal_rank": 0.16666666666666666,
1056
  "hierarchy_ok": false,
1057
  "top5_types": [
1058
- "irrelevant",
1059
  "related",
 
 
1060
  "irrelevant",
1061
- "irrelevant",
1062
- "related"
1063
  ]
1064
  },
1065
  {
1066
  "query": "Một người đầu tư 100 triệu đồng vào một quỹ tăng trưởng với tỷ lệ 15% mỗi năm. Hỏi sau 5 năm, số tiền của người đó là bao nhiêu (làm tròn đến hàng triệu)?",
1067
- "correct_rank": 3,
1068
- "reciprocal_rank": 0.3333333333333333,
1069
  "hierarchy_ok": false,
1070
  "top5_types": [
1071
  "related",
 
1072
  "related",
1073
  "correct",
1074
- "related",
1075
- "irrelevant"
1076
  ]
1077
  },
1078
  {
@@ -1090,15 +1089,15 @@
1090
  },
1091
  {
1092
  "query": "Một quả bóng rơi từ độ cao 10 mét, mỗi lần chạm đất nảy lên 60% độ cao ban đầu. Tính tổng quãng đường mà quả bóng đi được cho đến khi dừng lại (coi như dừng hẳn khi độ cao nảy là rất nhỏ).",
1093
- "correct_rank": 6,
1094
- "reciprocal_rank": 0.16666666666666666,
1095
  "hierarchy_ok": false,
1096
  "top5_types": [
1097
  "related",
1098
- "irrelevant",
1099
  "irrelevant",
1100
  "related",
1101
- "related"
1102
  ]
1103
  },
1104
  {
@@ -1135,46 +1134,46 @@
1135
  "top5_types": [
1136
  "correct",
1137
  "related",
 
1138
  "irrelevant",
1139
- "irrelevant",
1140
- "related"
1141
  ]
1142
  },
1143
  {
1144
  "query": "Một hộp có 5 bi đỏ và 7 bi xanh. Lấy ngẫu nhiên 3 bi. Tính số cách lấy được ít nhất 2 bi đỏ.",
1145
- "correct_rank": 5,
1146
- "reciprocal_rank": 0.2,
1147
  "hierarchy_ok": false,
1148
  "top5_types": [
1149
  "related",
 
1150
  "irrelevant",
1151
- "related",
1152
  "irrelevant",
1153
- "correct"
1154
  ]
1155
  },
1156
  {
1157
  "query": "Trong khai triển (x - 1)^5, hệ số của x^3 là bao nhiêu?",
1158
  "correct_rank": 1,
1159
  "reciprocal_rank": 1.0,
1160
- "hierarchy_ok": false,
1161
  "top5_types": [
1162
  "correct",
1163
- "irrelevant",
1164
- "irrelevant",
1165
  "related",
1166
- "related"
 
 
1167
  ]
1168
  },
1169
  {
1170
  "query": "Cho 10 điểm phân biệt trên mặt phẳng, trong đó không có 3 điểm nào thẳng hàng. Có thể vẽ được bao nhiêu tam giác từ 10 điểm này?",
1171
- "correct_rank": 1,
1172
- "reciprocal_rank": 1.0,
1173
- "hierarchy_ok": true,
1174
  "top5_types": [
1175
- "correct",
1176
  "related",
1177
- "irrelevant",
 
1178
  "irrelevant",
1179
  "irrelevant"
1180
  ]
@@ -1194,71 +1193,71 @@
1194
  },
1195
  {
1196
  "query": "Có bao nhiêu cách xếp 5 người vào một hàng ghế sao cho hai người A và B luôn ngồi cạnh nhau?",
1197
- "correct_rank": 3,
1198
- "reciprocal_rank": 0.3333333333333333,
1199
  "hierarchy_ok": false,
1200
  "top5_types": [
1201
- "related",
1202
  "related",
1203
  "correct",
 
1204
  "irrelevant",
1205
  "irrelevant"
1206
  ]
1207
  },
1208
  {
1209
  "query": "Một hộp có 5 bi đỏ và 3 bi xanh. Chọn ngẫu nhiên 3 bi. Tính số cách chọn sao cho có ít nhất 2 bi đỏ.",
1210
- "correct_rank": 2,
1211
- "reciprocal_rank": 0.5,
1212
  "hierarchy_ok": false,
1213
  "top5_types": [
 
1214
  "related",
1215
  "correct",
1216
  "irrelevant",
1217
- "related",
1218
  "irrelevant"
1219
  ]
1220
  },
1221
  {
1222
  "query": "Một lớp có 30 học sinh. Cần chọn một ban cán sự lớp gồm 1 lớp trưởng, 1 lớp phó và 3 ủy viên. Hỏi có bao nhiêu cách chọn?",
1223
- "correct_rank": 5,
1224
- "reciprocal_rank": 0.2,
1225
  "hierarchy_ok": false,
1226
  "top5_types": [
1227
  "related",
1228
  "related",
 
1229
  "irrelevant",
1230
- "irrelevant",
1231
- "correct"
1232
  ]
1233
  }
1234
  ],
1235
- "mrr": 0.8443548387096775,
1236
- "avg_rank": 1.184336198662846,
1237
- "hierarchy_rate": 0.6666666666666666,
1238
- "recall_at_1": 0.7311827956989247,
1239
  "recall_at_2": 0.9247311827956989,
1240
- "recall_at_3": 0.946236559139785,
1241
- "recall_at_4": 0.946236559139785,
1242
- "recall_at_5": 0.967741935483871
1243
  },
1244
  "base_model": {
1245
  "model_name": "Base E5-Multilingual",
1246
- "total_reciprocal_rank": 70.28333333333335,
1247
  "recall_at_k": {
1248
- "1": 54,
1249
- "2": 78,
1250
  "3": 86,
1251
- "4": 91,
1252
  "5": 92
1253
  },
1254
  "total_queries": 93,
1255
- "hierarchy_maintained": 50,
1256
  "rank_distribution": {
1257
- "1": 54,
1258
- "5": 1,
1259
  "2": 24,
1260
- "3": 8,
1261
- "4": 5,
1262
  "6": 1
1263
  },
1264
  "query_details": [
@@ -1270,7 +1269,7 @@
1270
  "top5_types": [
1271
  "correct",
1272
  "related",
1273
- "irrelevant",
1274
  "related",
1275
  "related"
1276
  ]
@@ -1298,7 +1297,7 @@
1298
  "related",
1299
  "related",
1300
  "related",
1301
- "irrelevant"
1302
  ]
1303
  },
1304
  {
@@ -1311,7 +1310,7 @@
1311
  "related",
1312
  "related",
1313
  "related",
1314
- "irrelevant"
1315
  ]
1316
  },
1317
  {
@@ -1324,7 +1323,7 @@
1324
  "related",
1325
  "related",
1326
  "related",
1327
- "related"
1328
  ]
1329
  },
1330
  {
@@ -1337,7 +1336,7 @@
1337
  "related",
1338
  "related",
1339
  "related",
1340
- "related"
1341
  ]
1342
  },
1343
  {
@@ -1349,7 +1348,7 @@
1349
  "correct",
1350
  "related",
1351
  "related",
1352
- "related",
1353
  "related"
1354
  ]
1355
  },
@@ -1370,13 +1369,13 @@
1370
  "query": "Khi nào thì việc tìm cực trị trở nên phức tạp và cần đến các phương pháp khác?",
1371
  "correct_rank": 1,
1372
  "reciprocal_rank": 1.0,
1373
- "hierarchy_ok": false,
1374
  "top5_types": [
1375
  "correct",
1376
- "irrelevant",
1377
  "related",
1378
  "related",
1379
- "related"
 
1380
  ]
1381
  },
1382
  {
@@ -1402,19 +1401,19 @@
1402
  "related",
1403
  "related",
1404
  "related",
1405
- "related"
1406
  ]
1407
  },
1408
  {
1409
  "query": "Làm thế nào để áp dụng định lý Weierstrass để giải quyết các bài toán tối ưu hóa?",
1410
- "correct_rank": 2,
1411
- "reciprocal_rank": 0.5,
1412
- "hierarchy_ok": false,
1413
  "top5_types": [
1414
- "irrelevant",
1415
  "correct",
1416
  "related",
1417
  "related",
 
1418
  "related"
1419
  ]
1420
  },
@@ -1454,7 +1453,7 @@
1454
  "related",
1455
  "correct",
1456
  "related",
1457
- "irrelevant"
1458
  ]
1459
  },
1460
  {
@@ -1537,40 +1536,40 @@
1537
  },
1538
  {
1539
  "query": "Một hàm số không có điểm gián đoạn có thể có tiệm cận đứng không?",
1540
- "correct_rank": 2,
1541
- "reciprocal_rank": 0.5,
1542
  "hierarchy_ok": false,
1543
  "top5_types": [
 
1544
  "related",
1545
  "correct",
1546
- "related",
1547
  "irrelevant",
1548
- "irrelevant"
1549
  ]
1550
  },
1551
  {
1552
  "query": "Nếu một hàm số có giới hạn tiến tới vô cùng khi x tiến tới vô cùng, điều đó có ý nghĩa gì về tiệm cận?",
1553
  "correct_rank": 1,
1554
  "reciprocal_rank": 1.0,
1555
- "hierarchy_ok": true,
1556
  "top5_types": [
1557
  "correct",
 
1558
  "related",
1559
  "related",
1560
- "irrelevant",
1561
  "irrelevant"
1562
  ]
1563
  },
1564
  {
1565
  "query": "Nếu biết đồ thị hàm số đối xứng qua trục tung, ta có thể suy ra điều gì về hàm số đó?",
1566
- "correct_rank": 2,
1567
- "reciprocal_rank": 0.5,
1568
- "hierarchy_ok": false,
1569
  "top5_types": [
1570
- "irrelevant",
1571
  "correct",
1572
  "related",
1573
  "related",
 
1574
  "irrelevant"
1575
  ]
1576
  },
@@ -1578,12 +1577,12 @@
1578
  "query": "Cho hàm số f(x) = x^3 - 3x^2 + 2, tìm giá trị lớn nhất và nhỏ nhất của hàm số trên đoạn [0, 3].",
1579
  "correct_rank": 1,
1580
  "reciprocal_rank": 1.0,
1581
- "hierarchy_ok": true,
1582
  "top5_types": [
1583
  "correct",
 
1584
  "related",
1585
  "related",
1586
- "irrelevant",
1587
  "irrelevant"
1588
  ]
1589
  },
@@ -1595,8 +1594,8 @@
1595
  "top5_types": [
1596
  "correct",
1597
  "related",
1598
- "related",
1599
  "irrelevant",
 
1600
  "irrelevant"
1601
  ]
1602
  },
@@ -1617,25 +1616,25 @@
1617
  "query": "Cho hàm số f(x) = (x+1)/(x-2). Tìm tất cả các đường tiệm cận và tâm đối xứng của đồ thị hàm số.",
1618
  "correct_rank": 1,
1619
  "reciprocal_rank": 1.0,
1620
- "hierarchy_ok": false,
1621
  "top5_types": [
1622
  "correct",
1623
- "irrelevant",
1624
  "related",
1625
  "irrelevant",
1626
- "related"
1627
  ]
1628
  },
1629
  {
1630
  "query": "Ứng dụng của việc khảo sát hàm phân thức bậc nhất trên bậc nhất trong thực tế là gì?",
1631
  "correct_rank": 1,
1632
  "reciprocal_rank": 1.0,
1633
- "hierarchy_ok": true,
1634
  "top5_types": [
1635
  "correct",
 
1636
  "related",
1637
  "related",
1638
- "irrelevant",
1639
  "irrelevant"
1640
  ]
1641
  },
@@ -1661,7 +1660,7 @@
1661
  "related",
1662
  "correct",
1663
  "irrelevant",
1664
- "irrelevant",
1665
  "irrelevant"
1666
  ]
1667
  },
@@ -1673,8 +1672,8 @@
1673
  "top5_types": [
1674
  "correct",
1675
  "related",
1676
- "irrelevant",
1677
  "related",
 
1678
  "irrelevant"
1679
  ]
1680
  },
@@ -1686,8 +1685,8 @@
1686
  "top5_types": [
1687
  "correct",
1688
  "related",
1689
- "related",
1690
  "irrelevant",
 
1691
  "irrelevant"
1692
  ]
1693
  },
@@ -1695,13 +1694,13 @@
1695
  "query": "Một hình trụ có tổng diện tích bề mặt là S. Tìm bán kính đáy và chiều cao để thể tích hình trụ lớn nhất.",
1696
  "correct_rank": 1,
1697
  "reciprocal_rank": 1.0,
1698
- "hierarchy_ok": false,
1699
  "top5_types": [
1700
  "correct",
1701
- "irrelevant",
1702
  "related",
1703
  "irrelevant",
1704
- "related"
 
1705
  ]
1706
  },
1707
  {
@@ -1712,9 +1711,9 @@
1712
  "top5_types": [
1713
  "correct",
1714
  "irrelevant",
1715
- "irrelevant",
1716
  "related",
1717
- "irrelevant"
 
1718
  ]
1719
  },
1720
  {
@@ -1764,9 +1763,9 @@
1764
  "top5_types": [
1765
  "correct",
1766
  "related",
1767
- "related",
1768
  "irrelevant",
1769
- "irrelevant"
 
1770
  ]
1771
  },
1772
  {
@@ -1816,9 +1815,9 @@
1816
  "top5_types": [
1817
  "related",
1818
  "correct",
 
1819
  "related",
1820
- "related",
1821
- "irrelevant"
1822
  ]
1823
  },
1824
  {
@@ -1856,7 +1855,7 @@
1856
  "correct",
1857
  "related",
1858
  "related",
1859
- "irrelevant",
1860
  "related"
1861
  ]
1862
  },
@@ -1868,7 +1867,7 @@
1868
  "top5_types": [
1869
  "correct",
1870
  "related",
1871
- "related",
1872
  "related",
1873
  "related"
1874
  ]
@@ -1909,7 +1908,7 @@
1909
  "related",
1910
  "related",
1911
  "irrelevant",
1912
- "irrelevant"
1913
  ]
1914
  },
1915
  {
@@ -1921,7 +1920,7 @@
1921
  "correct",
1922
  "related",
1923
  "related",
1924
- "irrelevant",
1925
  "related"
1926
  ]
1927
  },
@@ -1935,7 +1934,7 @@
1935
  "related",
1936
  "related",
1937
  "correct",
1938
- "irrelevant"
1939
  ]
1940
  },
1941
  {
@@ -1974,7 +1973,7 @@
1974
  "correct",
1975
  "related",
1976
  "related",
1977
- "irrelevant"
1978
  ]
1979
  },
1980
  {
@@ -1992,14 +1991,14 @@
1992
  },
1993
  {
1994
  "query": "Nếu biết IQR, có thể suy ra khoảng biến thiên không? Tại sao?",
1995
- "correct_rank": 3,
1996
- "reciprocal_rank": 0.3333333333333333,
1997
  "hierarchy_ok": false,
1998
  "top5_types": [
1999
  "related",
2000
- "irrelevant",
2001
  "correct",
2002
  "related",
 
2003
  "related"
2004
  ]
2005
  },
@@ -2018,15 +2017,15 @@
2018
  },
2019
  {
2020
  "query": "Một công ty sử dụng IQR để phân tích doanh số hàng tháng. Nếu IQR tăng đột ngột, điều này có thể báo hiệu điều gì?",
2021
- "correct_rank": 3,
2022
- "reciprocal_rank": 0.3333333333333333,
2023
  "hierarchy_ok": false,
2024
  "top5_types": [
2025
  "related",
 
2026
  "related",
2027
- "correct",
2028
  "irrelevant",
2029
- "irrelevant"
2030
  ]
2031
  },
2032
  {
@@ -2090,8 +2089,8 @@
2090
  "related",
2091
  "correct",
2092
  "related",
2093
- "related",
2094
- "irrelevant"
2095
  ]
2096
  },
2097
  {
@@ -2297,7 +2296,7 @@
2297
  "top5_types": [
2298
  "related",
2299
  "correct",
2300
- "related",
2301
  "related",
2302
  "irrelevant"
2303
  ]
@@ -2311,8 +2310,8 @@
2311
  "related",
2312
  "related",
2313
  "correct",
2314
- "related",
2315
- "irrelevant"
2316
  ]
2317
  },
2318
  {
@@ -2338,19 +2337,19 @@
2338
  "correct",
2339
  "related",
2340
  "related",
2341
- "related"
2342
  ]
2343
  },
2344
  {
2345
  "query": "Có 10 người tham gia một cuộc họp. Có bao nhiêu cách xếp họ ngồi quanh một bàn tròn sao cho 2 người A và B luôn ngồi cạnh nhau?",
2346
- "correct_rank": 3,
2347
- "reciprocal_rank": 0.3333333333333333,
2348
  "hierarchy_ok": false,
2349
  "top5_types": [
2350
  "related",
2351
- "irrelevant",
2352
  "correct",
2353
  "related",
 
2354
  "irrelevant"
2355
  ]
2356
  },
@@ -2376,8 +2375,8 @@
2376
  "correct",
2377
  "related",
2378
  "irrelevant",
2379
- "irrelevant",
2380
- "related"
2381
  ]
2382
  },
2383
  {
@@ -2389,8 +2388,8 @@
2389
  "related",
2390
  "correct",
2391
  "irrelevant",
2392
- "related",
2393
- "irrelevant"
2394
  ]
2395
  },
2396
  {
@@ -2408,14 +2407,14 @@
2408
  },
2409
  {
2410
  "query": "Cho 10 điểm phân biệt trên mặt phẳng, trong đó không có 3 điểm nào thẳng hàng. Có thể vẽ được bao nhiêu tam giác từ 10 điểm này?",
2411
- "correct_rank": 4,
2412
- "reciprocal_rank": 0.25,
2413
  "hierarchy_ok": false,
2414
  "top5_types": [
2415
- "irrelevant",
2416
  "related",
2417
- "irrelevant",
2418
  "correct",
 
 
2419
  "related"
2420
  ]
2421
  },
@@ -2427,8 +2426,8 @@
2427
  "top5_types": [
2428
  "correct",
2429
  "related",
2430
- "related",
2431
  "irrelevant",
 
2432
  "irrelevant"
2433
  ]
2434
  },
@@ -2436,12 +2435,12 @@
2436
  "query": "Có bao nhiêu cách xếp 5 người vào một hàng ghế sao cho hai người A và B luôn ngồi cạnh nhau?",
2437
  "correct_rank": 1,
2438
  "reciprocal_rank": 1.0,
2439
- "hierarchy_ok": true,
2440
  "top5_types": [
2441
  "correct",
 
2442
  "related",
2443
  "related",
2444
- "irrelevant",
2445
  "irrelevant"
2446
  ]
2447
  },
@@ -2453,9 +2452,9 @@
2453
  "top5_types": [
2454
  "correct",
2455
  "related",
 
2456
  "irrelevant",
2457
- "irrelevant",
2458
- "related"
2459
  ]
2460
  },
2461
  {
@@ -2472,40 +2471,40 @@
2472
  ]
2473
  }
2474
  ],
2475
- "mrr": 0.7557347670250898,
2476
- "avg_rank": 1.3232155560825227,
2477
- "hierarchy_rate": 0.5376344086021505,
2478
- "recall_at_1": 0.5806451612903226,
2479
- "recall_at_2": 0.8387096774193549,
2480
  "recall_at_3": 0.9247311827956989,
2481
- "recall_at_4": 0.978494623655914,
2482
  "recall_at_5": 0.989247311827957
2483
  },
2484
  "improvements": {
2485
- "mrr_absolute": 0.08862007168458774,
2486
- "mrr_relative": 11.72634574341948,
2487
- "rank_improvement": 0.13887935741967672,
2488
- "hierarchy_improvement": 0.12903225806451613,
2489
  "recall_improvements": {
2490
  "recall_at_1": {
2491
- "absolute": 0.15053763440860213,
2492
- "relative": 25.92592592592592
2493
  },
2494
  "recall_at_2": {
2495
- "absolute": 0.08602150537634401,
2496
- "relative": 10.256410256410247
2497
  },
2498
  "recall_at_3": {
2499
- "absolute": 0.021505376344086113,
2500
- "relative": 2.325581395348847
2501
  },
2502
  "recall_at_4": {
2503
- "absolute": -0.032258064516129004,
2504
- "relative": -3.296703296703294
2505
  },
2506
  "recall_at_5": {
2507
- "absolute": -0.021505376344086002,
2508
- "relative": -2.173913043478259
2509
  }
2510
  }
2511
  }
 
1
  {
2
+ "evaluation_date": "2025-06-25T07:40:41.687878",
3
  "note": "Comparison between fine-tuned and base model on test data",
4
  "fine_tuned": {
5
  "model_name": "Fine-tuned E5-Math",
6
+ "total_reciprocal_rank": 78.48333333333332,
7
  "recall_at_k": {
8
+ "1": 67,
9
  "2": 86,
10
+ "3": 90,
11
+ "4": 91,
12
+ "5": 93
13
  },
14
  "total_queries": 93,
15
+ "hierarchy_maintained": 61,
16
  "rank_distribution": {
17
+ "1": 67,
18
+ "5": 2,
19
+ "2": 19,
20
+ "3": 4,
21
+ "4": 1
 
22
  },
23
  "query_details": [
24
  {
 
30
  "correct",
31
  "related",
32
  "related",
33
+ "related",
34
  "irrelevant"
35
  ]
36
  },
37
  {
38
  "query": "Nếu f'(x) = 0 tại một điểm trong khoảng (a, b), điểm đó có phải luôn là điểm cực trị không? Tại sao?",
39
+ "correct_rank": 5,
40
+ "reciprocal_rank": 0.2,
41
  "hierarchy_ok": false,
42
  "top5_types": [
43
  "related",
44
  "related",
45
  "related",
46
  "related",
47
+ "correct"
48
  ]
49
  },
50
  {
 
55
  "top5_types": [
56
  "correct",
57
  "related",
58
+ "related",
59
  "related",
60
  "irrelevant"
61
  ]
 
69
  "correct",
70
  "related",
71
  "related",
72
+ "irrelevant",
73
  "related"
74
  ]
75
  },
76
  {
77
  "query": "Bạn có một hàm số có đạo hàm tại x = 0 bằng 0. Làm thế nào bạn có thể xác định chắc chắn rằng x = 0 là một điểm cực trị?",
78
+ "correct_rank": 2,
79
+ "reciprocal_rank": 0.5,
80
+ "hierarchy_ok": false,
81
  "top5_types": [
 
82
  "related",
83
+ "correct",
84
  "related",
85
  "related",
86
  "related"
 
101
  },
102
  {
103
  "query": "Cho hàm số f(x) = x^2 - 4x + 3. Tìm các điểm cực trị của hàm số này.",
104
+ "correct_rank": 1,
105
+ "reciprocal_rank": 1.0,
106
+ "hierarchy_ok": true,
107
  "top5_types": [
 
108
  "correct",
109
  "related",
110
  "related",
111
+ "irrelevant",
112
  "related"
113
  ]
114
  },
 
148
  "related",
149
  "related",
150
  "related",
151
+ "related"
152
  ]
153
  },
154
  {
 
168
  "query": "Làm thế nào để áp dụng định lý Weierstrass để giải quyết các bài toán tối ưu hóa?",
169
  "correct_rank": 1,
170
  "reciprocal_rank": 1.0,
171
+ "hierarchy_ok": true,
172
  "top5_types": [
173
  "correct",
 
174
  "related",
175
  "related",
176
+ "irrelevant",
177
  "irrelevant"
178
  ]
179
  },
180
  {
181
  "query": "Hãy mô tả tình huống một bài toán thực tế có thể được giải quyết bằng cách tìm giá trị lớn nhất hoặc nhỏ nhất của một hàm số.",
182
+ "correct_rank": 1,
183
+ "reciprocal_rank": 1.0,
184
+ "hierarchy_ok": true,
185
  "top5_types": [
 
186
  "correct",
187
  "related",
188
  "related",
189
+ "related",
190
  "related"
191
  ]
192
  },
 
200
  "related",
201
  "related",
202
  "related",
203
+ "irrelevant"
204
  ]
205
  },
206
  {
207
  "query": "Nếu bạn chỉ tính giá trị của hàm số tại các đầu mút của đoạn [a,b], bạn có thể bỏ sót giá trị lớn nhất hoặc nhỏ nhất thực sự của hàm số không? Tại sao?",
208
+ "correct_rank": 1,
209
+ "reciprocal_rank": 1.0,
210
+ "hierarchy_ok": true,
211
  "top5_types": [
 
212
  "correct",
213
  "related",
214
  "related",
215
+ "related",
216
+ "irrelevant"
217
  ]
218
  },
219
  {
 
272
  "query": "Có những trường hợp đặc biệt nào khi tìm tiệm cận mà ta cần lưu ý?",
273
  "correct_rank": 1,
274
  "reciprocal_rank": 1.0,
275
+ "hierarchy_ok": false,
276
  "top5_types": [
277
  "correct",
 
278
  "irrelevant",
279
+ "related",
280
  "irrelevant",
281
  "irrelevant"
282
  ]
 
302
  "top5_types": [
303
  "correct",
304
  "irrelevant",
 
305
  "irrelevant",
306
+ "related",
307
  "related"
308
  ]
309
  },
 
335
  },
336
  {
337
  "query": "Cho hàm số f(x) = x^3 - 3x^2 + 2, tìm giá trị lớn nhất và nhỏ nhất của hàm số trên đoạn [0, 3].",
338
+ "correct_rank": 2,
339
+ "reciprocal_rank": 0.5,
340
+ "hierarchy_ok": false,
341
  "top5_types": [
342
+ "irrelevant",
343
  "correct",
344
  "related",
345
  "irrelevant",
 
346
  "related"
347
  ]
348
  },
 
354
  "top5_types": [
355
  "correct",
356
  "related",
357
+ "related",
358
  "irrelevant",
359
+ "irrelevant"
 
360
  ]
361
  },
362
  {
 
393
  "top5_types": [
394
  "correct",
395
  "related",
 
396
  "related",
397
+ "irrelevant",
398
  "irrelevant"
399
  ]
400
  },
 
426
  },
427
  {
428
  "query": "Một công ty muốn tối đa hóa lợi nhuận. Hãy mô tả cách họ có thể sử dụng phương pháp đạo hàm để giải quyết bài toán này, bao gồm cả việc xác định hàm mục tiêu và các ràng buộc.",
429
+ "correct_rank": 1,
430
+ "reciprocal_rank": 1.0,
431
+ "hierarchy_ok": true,
432
  "top5_types": [
 
433
  "correct",
434
  "related",
435
+ "related",
436
  "irrelevant",
437
  "irrelevant"
438
  ]
 
460
  "related",
461
  "irrelevant",
462
  "irrelevant",
463
+ "related"
464
  ]
465
  },
466
  {
467
  "query": "Cho hình chữ nhật có diện tích cố định. Chứng minh rằng hình chữ nhật có chu vi nhỏ nhất là hình vuông.",
468
  "correct_rank": 1,
469
  "reciprocal_rank": 1.0,
470
+ "hierarchy_ok": true,
471
  "top5_types": [
472
  "correct",
473
+ "related",
474
  "related",
475
  "irrelevant",
476
+ "irrelevant"
477
  ]
478
  },
479
  {
 
485
  "correct",
486
  "related",
487
  "irrelevant",
488
+ "related",
489
  "irrelevant"
490
  ]
491
  },
 
524
  "correct",
525
  "irrelevant",
526
  "irrelevant",
527
+ "irrelevant",
528
  "related"
529
  ]
530
  },
 
538
  "related",
539
  "related",
540
  "related",
541
+ "related"
542
  ]
543
  },
544
  {
 
550
  "related",
551
  "correct",
552
  "related",
553
+ "related",
554
  "related"
555
  ]
556
  },
 
562
  "top5_types": [
563
  "correct",
564
  "related",
565
+ "irrelevant",
566
  "related",
567
  "related"
568
  ]
 
575
  "top5_types": [
576
  "correct",
577
  "related",
578
+ "related",
579
  "related",
580
  "related"
581
  ]
 
584
  "query": "Trong hình hộp \\(ABCD.EFGH\\), tìm vectơ tổng của \\(\\overrightarrow{AB}\\), \\(\\overrightarrow{AD}\\), và \\(\\overrightarrow{AA'}\\), biết A' là một điểm bất kỳ trên cạnh AE.",
585
  "correct_rank": 1,
586
  "reciprocal_rank": 1.0,
587
+ "hierarchy_ok": false,
588
  "top5_types": [
589
  "correct",
590
+ "irrelevant",
591
  "related",
592
  "related",
593
+ "related"
 
594
  ]
595
  },
596
  {
597
  "query": "Áp dụng các tính chất của phép toán vectơ, chứng minh rằng trung điểm của một đoạn thẳng chia đoạn thẳng đó thành hai vectơ bằng nhau.",
598
+ "correct_rank": 1,
599
+ "reciprocal_rank": 1.0,
600
+ "hierarchy_ok": true,
601
  "top5_types": [
 
602
  "correct",
603
  "related",
604
  "related",
605
+ "related",
606
+ "related"
607
  ]
608
  },
609
  {
 
615
  "correct",
616
  "related",
617
  "related",
618
+ "irrelevant",
619
  "irrelevant"
620
  ]
621
  },
 
642
  "related",
643
  "related",
644
  "irrelevant",
645
+ "related"
646
  ]
647
  },
648
  {
 
662
  "query": "Chứng minh rằng trọng tâm của tam giác chia mỗi đường trung tuyến của tam giác đó theo tỉ lệ 2:1.",
663
  "correct_rank": 1,
664
  "reciprocal_rank": 1.0,
665
+ "hierarchy_ok": false,
666
  "top5_types": [
667
  "correct",
 
668
  "irrelevant",
669
  "related",
670
+ "irrelevant",
671
+ "irrelevant"
672
  ]
673
  },
674
  {
 
680
  "correct",
681
  "related",
682
  "related",
683
+ "irrelevant",
684
+ "related"
685
  ]
686
  },
687
  {
 
694
  "related",
695
  "related",
696
  "related",
697
+ "related"
698
  ]
699
  },
700
  {
 
707
  "related",
708
  "related",
709
  "related",
710
+ "irrelevant"
711
  ]
712
  },
713
  {
 
718
  "top5_types": [
719
  "correct",
720
  "related",
721
+ "related",
722
  "related",
723
  "related"
724
  ]
 
745
  "correct",
746
  "related",
747
  "related",
748
+ "irrelevant",
749
  "irrelevant"
750
  ]
751
  },
 
772
  "related",
773
  "related",
774
  "related",
775
+ "related"
776
  ]
777
  },
778
  {
779
  "query": "Một công ty sử dụng IQR để phân tích doanh số hàng tháng. Nếu IQR tăng đột ngột, điều này có thể báo hiệu điều gì?",
780
+ "correct_rank": 2,
781
+ "reciprocal_rank": 0.5,
782
+ "hierarchy_ok": false,
783
  "top5_types": [
 
784
  "related",
785
+ "correct",
786
  "related",
787
  "irrelevant",
788
  "related"
 
837
  "related",
838
  "related",
839
  "irrelevant",
840
+ "irrelevant"
841
  ]
842
  },
843
  {
 
849
  "related",
850
  "correct",
851
  "related",
852
+ "related",
853
  "related"
854
  ]
855
  },
 
863
  "correct",
864
  "related",
865
  "related",
866
+ "related"
867
  ]
868
  },
869
  {
 
876
  "correct",
877
  "related",
878
  "related",
879
+ "irrelevant"
880
  ]
881
  },
882
  {
 
901
  "correct",
902
  "related",
903
  "related",
904
+ "related",
905
  "related"
906
  ]
907
  },
 
939
  "top5_types": [
940
  "related",
941
  "correct",
942
+ "irrelevant",
943
  "related",
944
+ "related"
 
945
  ]
946
  },
947
  {
 
959
  },
960
  {
961
  "query": "Cho cấp số cộng có tổng 20 số hạng đầu là 500, và tổng 30 số hạng đầu là 1050. Tính số hạng đầu và công sai của cấp số cộng này.",
962
+ "correct_rank": 2,
963
+ "reciprocal_rank": 0.5,
964
+ "hierarchy_ok": false,
965
  "top5_types": [
 
966
  "related",
967
+ "correct",
968
  "related",
969
  "related",
970
  "irrelevant"
 
998
  },
999
  {
1000
  "query": "Tìm công thức tổng quát cho tổng các số lẻ từ 1 đến 2n-1 sử dụng công thức cấp số cộng.",
1001
+ "correct_rank": 2,
1002
+ "reciprocal_rank": 0.5,
1003
+ "hierarchy_ok": false,
1004
  "top5_types": [
 
1005
  "related",
1006
+ "correct",
1007
  "related",
1008
  "related",
1009
  "irrelevant"
 
1017
  "top5_types": [
1018
  "correct",
1019
  "related",
 
1020
  "related",
1021
+ "related",
1022
+ "irrelevant"
1023
  ]
1024
  },
1025
  {
 
1044
  "related",
1045
  "correct",
1046
  "related",
1047
+ "irrelevant",
1048
+ "related"
1049
  ]
1050
  },
1051
  {
1052
  "query": "Một chất phóng xạ giảm đi một nửa sau mỗi chu kỳ bán rã. Nếu ban đầu có 100g chất này, sau 3 chu kỳ bán rã sẽ còn lại bao nhiêu gam?",
1053
+ "correct_rank": 3,
1054
+ "reciprocal_rank": 0.3333333333333333,
1055
  "hierarchy_ok": false,
1056
  "top5_types": [
 
1057
  "related",
1058
+ "related",
1059
+ "correct",
1060
  "irrelevant",
1061
+ "irrelevant"
 
1062
  ]
1063
  },
1064
  {
1065
  "query": "Một người đầu tư 100 triệu đồng vào một quỹ tăng trưởng với tỷ lệ 15% mỗi năm. Hỏi sau 5 năm, số tiền của người đó là bao nhiêu (làm tròn đến hàng triệu)?",
1066
+ "correct_rank": 4,
1067
+ "reciprocal_rank": 0.25,
1068
  "hierarchy_ok": false,
1069
  "top5_types": [
1070
  "related",
1071
+ "irrelevant",
1072
  "related",
1073
  "correct",
1074
+ "related"
 
1075
  ]
1076
  },
1077
  {
 
1089
  },
1090
  {
1091
  "query": "Một quả bóng rơi từ độ cao 10 mét, mỗi lần chạm đất nảy lên 60% độ cao ban đầu. Tính tổng quãng đường mà quả bóng đi được cho đến khi dừng lại (coi như dừng hẳn khi độ cao nảy là rất nhỏ).",
1092
+ "correct_rank": 5,
1093
+ "reciprocal_rank": 0.2,
1094
  "hierarchy_ok": false,
1095
  "top5_types": [
1096
  "related",
1097
+ "related",
1098
  "irrelevant",
1099
  "related",
1100
+ "correct"
1101
  ]
1102
  },
1103
  {
 
1134
  "top5_types": [
1135
  "correct",
1136
  "related",
1137
+ "related",
1138
  "irrelevant",
1139
+ "irrelevant"
 
1140
  ]
1141
  },
1142
  {
1143
  "query": "Một hộp có 5 bi đỏ và 7 bi xanh. Lấy ngẫu nhiên 3 bi. Tính số cách lấy được ít nhất 2 bi đỏ.",
1144
+ "correct_rank": 2,
1145
+ "reciprocal_rank": 0.5,
1146
  "hierarchy_ok": false,
1147
  "top5_types": [
1148
  "related",
1149
+ "correct",
1150
  "irrelevant",
 
1151
  "irrelevant",
1152
+ "related"
1153
  ]
1154
  },
1155
  {
1156
  "query": "Trong khai triển (x - 1)^5, hệ số của x^3 là bao nhiêu?",
1157
  "correct_rank": 1,
1158
  "reciprocal_rank": 1.0,
1159
+ "hierarchy_ok": true,
1160
  "top5_types": [
1161
  "correct",
 
 
1162
  "related",
1163
+ "related",
1164
+ "irrelevant",
1165
+ "irrelevant"
1166
  ]
1167
  },
1168
  {
1169
  "query": "Cho 10 điểm phân biệt trên mặt phẳng, trong đó không có 3 điểm nào thẳng hàng. Có thể vẽ được bao nhiêu tam giác từ 10 điểm này?",
1170
+ "correct_rank": 3,
1171
+ "reciprocal_rank": 0.3333333333333333,
1172
+ "hierarchy_ok": false,
1173
  "top5_types": [
 
1174
  "related",
1175
+ "related",
1176
+ "correct",
1177
  "irrelevant",
1178
  "irrelevant"
1179
  ]
 
1193
  },
1194
  {
1195
  "query": "Có bao nhiêu cách xếp 5 người vào một hàng ghế sao cho hai người A và B luôn ngồi cạnh nhau?",
1196
+ "correct_rank": 2,
1197
+ "reciprocal_rank": 0.5,
1198
  "hierarchy_ok": false,
1199
  "top5_types": [
 
1200
  "related",
1201
  "correct",
1202
+ "related",
1203
  "irrelevant",
1204
  "irrelevant"
1205
  ]
1206
  },
1207
  {
1208
  "query": "Một hộp có 5 bi đỏ và 3 bi xanh. Chọn ngẫu nhiên 3 bi. Tính số cách chọn sao cho có ít nhất 2 bi đỏ.",
1209
+ "correct_rank": 3,
1210
+ "reciprocal_rank": 0.3333333333333333,
1211
  "hierarchy_ok": false,
1212
  "top5_types": [
1213
+ "related",
1214
  "related",
1215
  "correct",
1216
  "irrelevant",
 
1217
  "irrelevant"
1218
  ]
1219
  },
1220
  {
1221
  "query": "Một lớp có 30 học sinh. Cần chọn một ban cán sự lớp gồm 1 lớp trưởng, 1 lớp phó và 3 ủy viên. Hỏi có bao nhiêu cách chọn?",
1222
+ "correct_rank": 3,
1223
+ "reciprocal_rank": 0.3333333333333333,
1224
  "hierarchy_ok": false,
1225
  "top5_types": [
1226
  "related",
1227
  "related",
1228
+ "correct",
1229
  "irrelevant",
1230
+ "irrelevant"
 
1231
  ]
1232
  }
1233
  ],
1234
+ "mrr": 0.8439068100358421,
1235
+ "avg_rank": 1.1849649607135275,
1236
+ "hierarchy_rate": 0.6559139784946236,
1237
+ "recall_at_1": 0.7204301075268817,
1238
  "recall_at_2": 0.9247311827956989,
1239
+ "recall_at_3": 0.967741935483871,
1240
+ "recall_at_4": 0.978494623655914,
1241
+ "recall_at_5": 1.0
1242
  },
1243
  "base_model": {
1244
  "model_name": "Base E5-Multilingual",
1245
+ "total_reciprocal_rank": 71.56666666666668,
1246
  "recall_at_k": {
1247
+ "1": 56,
1248
+ "2": 80,
1249
  "3": 86,
1250
+ "4": 90,
1251
  "5": 92
1252
  },
1253
  "total_queries": 93,
1254
+ "hierarchy_maintained": 51,
1255
  "rank_distribution": {
1256
+ "1": 56,
1257
+ "5": 2,
1258
  "2": 24,
1259
+ "3": 6,
1260
+ "4": 4,
1261
  "6": 1
1262
  },
1263
  "query_details": [
 
1269
  "top5_types": [
1270
  "correct",
1271
  "related",
1272
+ "related",
1273
  "related",
1274
  "related"
1275
  ]
 
1297
  "related",
1298
  "related",
1299
  "related",
1300
+ "related"
1301
  ]
1302
  },
1303
  {
 
1310
  "related",
1311
  "related",
1312
  "related",
1313
+ "related"
1314
  ]
1315
  },
1316
  {
 
1323
  "related",
1324
  "related",
1325
  "related",
1326
+ "irrelevant"
1327
  ]
1328
  },
1329
  {
 
1336
  "related",
1337
  "related",
1338
  "related",
1339
+ "irrelevant"
1340
  ]
1341
  },
1342
  {
 
1348
  "correct",
1349
  "related",
1350
  "related",
1351
+ "irrelevant",
1352
  "related"
1353
  ]
1354
  },
 
1369
  "query": "Khi nào thì việc tìm cực trị trở nên phức tạp và cần đến các phương pháp khác?",
1370
  "correct_rank": 1,
1371
  "reciprocal_rank": 1.0,
1372
+ "hierarchy_ok": true,
1373
  "top5_types": [
1374
  "correct",
 
1375
  "related",
1376
  "related",
1377
+ "related",
1378
+ "irrelevant"
1379
  ]
1380
  },
1381
  {
 
1401
  "related",
1402
  "related",
1403
  "related",
1404
+ "irrelevant"
1405
  ]
1406
  },
1407
  {
1408
  "query": "Làm thế nào để áp dụng định lý Weierstrass để giải quyết các bài toán tối ưu hóa?",
1409
+ "correct_rank": 1,
1410
+ "reciprocal_rank": 1.0,
1411
+ "hierarchy_ok": true,
1412
  "top5_types": [
 
1413
  "correct",
1414
  "related",
1415
  "related",
1416
+ "irrelevant",
1417
  "related"
1418
  ]
1419
  },
 
1453
  "related",
1454
  "correct",
1455
  "related",
1456
+ "related"
1457
  ]
1458
  },
1459
  {
 
1536
  },
1537
  {
1538
  "query": "Một hàm số không có điểm gián đoạn có thể có tiệm cận đứng không?",
1539
+ "correct_rank": 3,
1540
+ "reciprocal_rank": 0.3333333333333333,
1541
  "hierarchy_ok": false,
1542
  "top5_types": [
1543
+ "irrelevant",
1544
  "related",
1545
  "correct",
 
1546
  "irrelevant",
1547
+ "related"
1548
  ]
1549
  },
1550
  {
1551
  "query": "Nếu một hàm số có giới hạn tiến tới vô cùng khi x tiến tới vô cùng, điều đó có ý nghĩa gì về tiệm cận?",
1552
  "correct_rank": 1,
1553
  "reciprocal_rank": 1.0,
1554
+ "hierarchy_ok": false,
1555
  "top5_types": [
1556
  "correct",
1557
+ "irrelevant",
1558
  "related",
1559
  "related",
 
1560
  "irrelevant"
1561
  ]
1562
  },
1563
  {
1564
  "query": "Nếu biết đồ thị hàm số đối xứng qua trục tung, ta có thể suy ra điều gì về hàm số đó?",
1565
+ "correct_rank": 1,
1566
+ "reciprocal_rank": 1.0,
1567
+ "hierarchy_ok": true,
1568
  "top5_types": [
 
1569
  "correct",
1570
  "related",
1571
  "related",
1572
+ "irrelevant",
1573
  "irrelevant"
1574
  ]
1575
  },
 
1577
  "query": "Cho hàm số f(x) = x^3 - 3x^2 + 2, tìm giá trị lớn nhất và nhỏ nhất của hàm số trên đoạn [0, 3].",
1578
  "correct_rank": 1,
1579
  "reciprocal_rank": 1.0,
1580
+ "hierarchy_ok": false,
1581
  "top5_types": [
1582
  "correct",
1583
+ "irrelevant",
1584
  "related",
1585
  "related",
 
1586
  "irrelevant"
1587
  ]
1588
  },
 
1594
  "top5_types": [
1595
  "correct",
1596
  "related",
 
1597
  "irrelevant",
1598
+ "related",
1599
  "irrelevant"
1600
  ]
1601
  },
 
1616
  "query": "Cho hàm số f(x) = (x+1)/(x-2). Tìm tất cả các đường tiệm cận và tâm đối xứng của đồ thị hàm số.",
1617
  "correct_rank": 1,
1618
  "reciprocal_rank": 1.0,
1619
+ "hierarchy_ok": true,
1620
  "top5_types": [
1621
  "correct",
1622
+ "related",
1623
  "related",
1624
  "irrelevant",
1625
+ "irrelevant"
1626
  ]
1627
  },
1628
  {
1629
  "query": "Ứng dụng của việc khảo sát hàm phân thức bậc nhất trên bậc nhất trong thực tế là gì?",
1630
  "correct_rank": 1,
1631
  "reciprocal_rank": 1.0,
1632
+ "hierarchy_ok": false,
1633
  "top5_types": [
1634
  "correct",
1635
+ "irrelevant",
1636
  "related",
1637
  "related",
 
1638
  "irrelevant"
1639
  ]
1640
  },
 
1660
  "related",
1661
  "correct",
1662
  "irrelevant",
1663
+ "related",
1664
  "irrelevant"
1665
  ]
1666
  },
 
1672
  "top5_types": [
1673
  "correct",
1674
  "related",
 
1675
  "related",
1676
+ "irrelevant",
1677
  "irrelevant"
1678
  ]
1679
  },
 
1685
  "top5_types": [
1686
  "correct",
1687
  "related",
 
1688
  "irrelevant",
1689
+ "related",
1690
  "irrelevant"
1691
  ]
1692
  },
 
1694
  "query": "Một hình trụ có tổng diện tích bề mặt là S. Tìm bán kính đáy và chiều cao để thể tích hình trụ lớn nhất.",
1695
  "correct_rank": 1,
1696
  "reciprocal_rank": 1.0,
1697
+ "hierarchy_ok": true,
1698
  "top5_types": [
1699
  "correct",
 
1700
  "related",
1701
  "irrelevant",
1702
+ "irrelevant",
1703
+ "irrelevant"
1704
  ]
1705
  },
1706
  {
 
1711
  "top5_types": [
1712
  "correct",
1713
  "irrelevant",
 
1714
  "related",
1715
+ "irrelevant",
1716
+ "related"
1717
  ]
1718
  },
1719
  {
 
1763
  "top5_types": [
1764
  "correct",
1765
  "related",
 
1766
  "irrelevant",
1767
+ "irrelevant",
1768
+ "related"
1769
  ]
1770
  },
1771
  {
 
1815
  "top5_types": [
1816
  "related",
1817
  "correct",
1818
+ "irrelevant",
1819
  "related",
1820
+ "related"
 
1821
  ]
1822
  },
1823
  {
 
1855
  "correct",
1856
  "related",
1857
  "related",
1858
+ "related",
1859
  "related"
1860
  ]
1861
  },
 
1867
  "top5_types": [
1868
  "correct",
1869
  "related",
1870
+ "irrelevant",
1871
  "related",
1872
  "related"
1873
  ]
 
1908
  "related",
1909
  "related",
1910
  "irrelevant",
1911
+ "related"
1912
  ]
1913
  },
1914
  {
 
1920
  "correct",
1921
  "related",
1922
  "related",
1923
+ "related",
1924
  "related"
1925
  ]
1926
  },
 
1934
  "related",
1935
  "related",
1936
  "correct",
1937
+ "related"
1938
  ]
1939
  },
1940
  {
 
1973
  "correct",
1974
  "related",
1975
  "related",
1976
+ "related"
1977
  ]
1978
  },
1979
  {
 
1991
  },
1992
  {
1993
  "query": "Nếu biết IQR, có thể suy ra khoảng biến thiên không? Tại sao?",
1994
+ "correct_rank": 2,
1995
+ "reciprocal_rank": 0.5,
1996
  "hierarchy_ok": false,
1997
  "top5_types": [
1998
  "related",
 
1999
  "correct",
2000
  "related",
2001
+ "related",
2002
  "related"
2003
  ]
2004
  },
 
2017
  },
2018
  {
2019
  "query": "Một công ty sử dụng IQR để phân tích doanh số hàng tháng. Nếu IQR tăng đột ngột, điều này có thể báo hiệu điều gì?",
2020
+ "correct_rank": 5,
2021
+ "reciprocal_rank": 0.2,
2022
  "hierarchy_ok": false,
2023
  "top5_types": [
2024
  "related",
2025
+ "irrelevant",
2026
  "related",
 
2027
  "irrelevant",
2028
+ "correct"
2029
  ]
2030
  },
2031
  {
 
2089
  "related",
2090
  "correct",
2091
  "related",
2092
+ "irrelevant",
2093
+ "related"
2094
  ]
2095
  },
2096
  {
 
2296
  "top5_types": [
2297
  "related",
2298
  "correct",
2299
+ "irrelevant",
2300
  "related",
2301
  "irrelevant"
2302
  ]
 
2310
  "related",
2311
  "related",
2312
  "correct",
2313
+ "irrelevant",
2314
+ "related"
2315
  ]
2316
  },
2317
  {
 
2337
  "correct",
2338
  "related",
2339
  "related",
2340
+ "irrelevant"
2341
  ]
2342
  },
2343
  {
2344
  "query": "Có 10 người tham gia một cuộc họp. Có bao nhiêu cách xếp họ ngồi quanh một bàn tròn sao cho 2 người A và B luôn ngồi cạnh nhau?",
2345
+ "correct_rank": 2,
2346
+ "reciprocal_rank": 0.5,
2347
  "hierarchy_ok": false,
2348
  "top5_types": [
2349
  "related",
 
2350
  "correct",
2351
  "related",
2352
+ "irrelevant",
2353
  "irrelevant"
2354
  ]
2355
  },
 
2375
  "correct",
2376
  "related",
2377
  "irrelevant",
2378
+ "related",
2379
+ "irrelevant"
2380
  ]
2381
  },
2382
  {
 
2388
  "related",
2389
  "correct",
2390
  "irrelevant",
2391
+ "irrelevant",
2392
+ "related"
2393
  ]
2394
  },
2395
  {
 
2407
  },
2408
  {
2409
  "query": "Cho 10 điểm phân biệt trên mặt phẳng, trong đó không có 3 điểm nào thẳng hàng. Có thể vẽ được bao nhiêu tam giác từ 10 điểm này?",
2410
+ "correct_rank": 2,
2411
+ "reciprocal_rank": 0.5,
2412
  "hierarchy_ok": false,
2413
  "top5_types": [
 
2414
  "related",
 
2415
  "correct",
2416
+ "irrelevant",
2417
+ "irrelevant",
2418
  "related"
2419
  ]
2420
  },
 
2426
  "top5_types": [
2427
  "correct",
2428
  "related",
 
2429
  "irrelevant",
2430
+ "related",
2431
  "irrelevant"
2432
  ]
2433
  },
 
2435
  "query": "Có bao nhiêu cách xếp 5 người vào một hàng ghế sao cho hai người A và B luôn ngồi cạnh nhau?",
2436
  "correct_rank": 1,
2437
  "reciprocal_rank": 1.0,
2438
+ "hierarchy_ok": false,
2439
  "top5_types": [
2440
  "correct",
2441
+ "irrelevant",
2442
  "related",
2443
  "related",
 
2444
  "irrelevant"
2445
  ]
2446
  },
 
2452
  "top5_types": [
2453
  "correct",
2454
  "related",
2455
+ "related",
2456
  "irrelevant",
2457
+ "irrelevant"
 
2458
  ]
2459
  },
2460
  {
 
2471
  ]
2472
  }
2473
  ],
2474
+ "mrr": 0.7695340501792116,
2475
+ "avg_rank": 1.2994876571960874,
2476
+ "hierarchy_rate": 0.5483870967741935,
2477
+ "recall_at_1": 0.6021505376344086,
2478
+ "recall_at_2": 0.8602150537634409,
2479
  "recall_at_3": 0.9247311827956989,
2480
+ "recall_at_4": 0.967741935483871,
2481
  "recall_at_5": 0.989247311827957
2482
  },
2483
  "improvements": {
2484
+ "mrr_absolute": 0.0743727598566305,
2485
+ "mrr_relative": 9.664648346529999,
2486
+ "rank_improvement": 0.11452269648255986,
2487
+ "hierarchy_improvement": 0.10752688172043012,
2488
  "recall_improvements": {
2489
  "recall_at_1": {
2490
+ "absolute": 0.11827956989247312,
2491
+ "relative": 19.642857142857142
2492
  },
2493
  "recall_at_2": {
2494
+ "absolute": 0.06451612903225801,
2495
+ "relative": 7.499999999999993
2496
  },
2497
  "recall_at_3": {
2498
+ "absolute": 0.043010752688172116,
2499
+ "relative": 4.651162790697683
2500
  },
2501
  "recall_at_4": {
2502
+ "absolute": 0.010752688172043001,
2503
+ "relative": 1.11111111111111
2504
  },
2505
  "recall_at_5": {
2506
+ "absolute": 0.010752688172043001,
2507
+ "relative": 1.0869565217391295
2508
  }
2509
  }
2510
  }
usage_example.py CHANGED
@@ -3,10 +3,13 @@ from sentence_transformers import SentenceTransformer
3
  from sklearn.metrics.pairwise import cosine_similarity
4
  import numpy as np
5
 
6
- # Load MRR-optimized model
7
  model = SentenceTransformer('ThanhLe0125/e5-math')
8
 
9
- # Example: Find exact chunk with MRR optimization
 
 
 
10
  query = "query: Định nghĩa hàm số đồng biến"
11
  chunks = [
12
  "passage: Hàm số đồng biến trên khoảng (a;b) là hàm số mà với mọi x1 < x2 thì f(x1) < f(x2)",
@@ -16,22 +19,21 @@ chunks = [
16
  "passage: Giới hạn của dãy số"
17
  ]
18
 
19
- # Encode and calculate similarities
20
  query_emb = model.encode([query])
21
  chunk_embs = model.encode(chunks)
22
  similarities = cosine_similarity(query_emb, chunk_embs)[0]
23
-
24
- # MRR-optimized ranking
25
  ranked_indices = similarities.argsort()[::-1]
26
 
27
- print("MRR-Optimized Rankings:")
 
 
28
  for rank, idx in enumerate(ranked_indices, 1):
29
- chunk_type = "CORRECT" if idx == 0 else ("RELATED" if idx == 1 else "IRRELEVANT")
30
- print(f"Rank {rank}: {chunk_type} (Score: {similarities[idx]:.4f})")
31
- print(f" {chunks[idx][:80]}...")
32
  print()
33
 
34
- # Calculate MRR for this query
35
  correct_rank = None
36
  for rank, idx in enumerate(ranked_indices, 1):
37
  if idx == 0: # First chunk is correct
@@ -39,16 +41,28 @@ for rank, idx in enumerate(ranked_indices, 1):
39
  break
40
 
41
  if correct_rank:
42
- mrr_score = 1.0 / correct_rank
43
- print(f"This query MRR: {mrr_score:.4f} (correct chunk at rank #{correct_rank})")
 
 
 
 
 
 
 
44
 
45
- if mrr_score >= 0.5:
46
- print(" Good! Correct chunk in top 2 positions")
 
 
 
 
47
  else:
48
- print("⚠️ Could be better - correct chunk should be higher")
49
 
50
- # Efficient inference (common use case)
51
- print("\nEfficient Inference (top 3 only):")
52
- top_3_indices = ranked_indices[:3]
53
- for i, idx in enumerate(top_3_indices, 1):
54
- print(f"{i}. Score: {similarities[idx]:.4f} - {chunks[idx][:60]}...")
 
 
3
  from sklearn.metrics.pairwise import cosine_similarity
4
  import numpy as np
5
 
6
+ # Load fine-tuned model
7
  model = SentenceTransformer('ThanhLe0125/e5-math')
8
 
9
+ print("🧪 Testing MRR-optimized fine-tuned model:")
10
+ print("="*50)
11
+
12
+ # Example: Vietnamese math question
13
  query = "query: Định nghĩa hàm số đồng biến"
14
  chunks = [
15
  "passage: Hàm số đồng biến trên khoảng (a;b) là hàm số mà với mọi x1 < x2 thì f(x1) < f(x2)",
 
19
  "passage: Giới hạn của dãy số"
20
  ]
21
 
22
+ # Encode and rank
23
  query_emb = model.encode([query])
24
  chunk_embs = model.encode(chunks)
25
  similarities = cosine_similarity(query_emb, chunk_embs)[0]
 
 
26
  ranked_indices = similarities.argsort()[::-1]
27
 
28
+ # Display results
29
+ print("🎯 MRR-Optimized Rankings:")
30
+ chunk_types = ["CORRECT", "RELATED", "IRRELEVANT", "IRRELEVANT", "IRRELEVANT"]
31
  for rank, idx in enumerate(ranked_indices, 1):
32
+ print(f"Rank {rank}: {chunk_types[idx]:>10} (Score: {similarities[idx]:.4f})")
33
+ print(f" {chunks[idx][:70]}...")
 
34
  print()
35
 
36
+ # Calculate metrics for this query
37
  correct_rank = None
38
  for rank, idx in enumerate(ranked_indices, 1):
39
  if idx == 0: # First chunk is correct
 
41
  break
42
 
43
  if correct_rank:
44
+ mrr = 1.0 / correct_rank
45
+ recall_at_k = {}
46
+ for k in [1, 2, 3, 4, 5]:
47
+ recall_at_k[k] = 1 if correct_rank <= k else 0
48
+
49
+ print(f"📊 Query Metrics:")
50
+ print(f" MRR: {mrr:.4f} (correct chunk at rank #{correct_rank})")
51
+ print(f" Recall@1: {recall_at_k[1]} | Recall@2: {recall_at_k[2]} | Recall@3: {recall_at_k[3]}")
52
+ print(f" Recall@4: {recall_at_k[4]} | Recall@5: {recall_at_k[5]}")
53
 
54
+ if correct_rank == 1:
55
+ print(" 🌟 PERFECT! Correct chunk at rank #1!")
56
+ elif correct_rank <= 2:
57
+ print(" 🎯 EXCELLENT! Correct chunk in top 2!")
58
+ elif correct_rank <= 3:
59
+ print(" 👍 GOOD! Correct chunk in top 3!")
60
  else:
61
+ print(" 📈 Could be better - but still found the answer!")
62
 
63
+ print("\n" + "="*50)
64
+ print("💡 Fine-tuning Benefits:")
65
+ print(" ✅ Pushes correct chunks to rank #1")
66
+ print(" ✅ Reduces inference cost (need fewer chunks)")
67
+ print(" Improves user experience (instant answers)")
68
+ print(" ✅ Specialized for Vietnamese mathematics")