소스 검색

feat: 添加 F1 Score 算法原理及应用说明文档

zhch158_admin 2 달 전
부모
커밋
09c7605d5f
1개의 변경된 파일123개의 추가작업 그리고 0개의 파일을 삭제
  1. 123 0
      zhch/评估算法说明/F1.md

+ 123 - 0
zhch/评估算法说明/F1.md

@@ -0,0 +1,123 @@
+# F1 Score 算法原理、作用和意义
+
+## 1. 算法原理
+
+从代码中可以看到,F1 Score的计算公式非常简洁:
+
+```python
+def f1_score(precision, recall):
+    precision, recall = max(0.0, min(1.0, precision)), max(0.0, min(1.0, recall))
+    return 0.0 if precision + recall == 0 else 2 * (precision * recall) / (precision + recall)
+```
+
+数学公式:
+F1 = 2 × (Precision × Recall) / (Precision + Recall)
+
+这实际上是 Precision 和 Recall 的**调和平均数**(Harmonic Mean)。
+
+## 2. 核心概念
+
+Precision(精确率/查准率)
+- 定义:在所有系统预测为正例的样本中,真正为正例的比例
+- 公式:Precision = TP / (TP + FP)
+- 含义:系统回答的内容中有多少是正确的
+  
+Recall(召回率/查全率)
+- 定义:在所有真正为正例的样本中,被系统正确预测为正例的比例
+- 公式:Recall = TP / (TP + FN)
+- 含义:真实答案中有多少被系统正确回答了
+  
+## 3. 在DSPy RAG系统中的应用
+
+在您的代码中,SemanticF1 用于评估RAG系统的回答质量:
+```python
+class SemanticRecallPrecision(Signature):
+    recall: float = OutputField(desc="fraction (out of 1.0) of ground truth covered by the system response")
+    precision: float = OutputField(desc="fraction (out of 1.0) of system response covered by the ground truth")
+```
+语义层面的理解:
+- Precision(语义精确率):系统回答中有多少内容是基于真实答案的(避免幻觉)
+- Recall(语义召回率):真实答案中的关键信息有多少被系统回答覆盖到了(避免遗漏)
+  
+## 4. F1 Score的作用和意义
+
+### 4.1 平衡性指标
+F1 Score 解决了单独使用 Precision 或 Recall 的问题:
+```python
+# 极端情况1:高Precision,低Recall
+precision = 1.0, recall = 0.1  # 系统很谨慎,但遗漏很多
+f1 = 2 * (1.0 * 0.1) / (1.0 + 0.1) = 0.18
+
+# 极端情况2:低Precision,高Recall  
+precision = 0.1, recall = 1.0  # 系统回答很全,但有很多错误
+f1 = 2 * (0.1 * 1.0) / (0.1 + 1.0) = 0.18
+
+# 平衡情况:
+precision = 0.8, recall = 0.8
+f1 = 2 * (0.8 * 0.8) / (0.8 + 0.8) = 0.8
+```
+### 4.2 调和平均数的特性
+- 对低值敏感:如果 Precision 或 Recall 中任一项很低,F1 Score 就会很低
+- 鼓励平衡:只有当两个指标都比较高时,F1 才会高
+  
+## 5. 在RAG评估中的实际意义
+
+### 5.1 质量评估维度
+```python
+# 在DSPy中的实际使用
+scores = self.module(
+    question=example.question, 
+    ground_truth=example.response, 
+    system_response=pred.response
+)
+score = f1_score(scores.precision, scores.recall)
+```
+
+### 5.2 不同场景的含义
+
+高F1分数(0.8+):
+- 系统回答既准确又完整
+- 很少有错误信息(高Precision)
+- 很少遗漏重要信息(高Recall)
+  
+中等F1分数(0.5-0.8):
+- 系统基本可用,但有改进空间
+- 可能存在一定程度的遗漏或错误
+  
+低F1分数(<0.5):
+- 系统回答质量较差
+- 要么遗漏太多,要么错误太多
+  
+## 6. 代码中的实现细节
+```python
+def f1_score(precision, recall):
+    # 确保值在[0,1]范围内
+    precision, recall = max(0.0, min(1.0, precision)), max(0.0, min(1.0, recall))
+    # 避免除零错误
+    return 0.0 if precision + recall == 0 else 2 * (precision * recall) / (precision + recall)
+```
+关键特点:
+1. 边界处理:确保输入值在 [0,1] 范围内
+2. 零值处理:当两个指标都为0时,返回0(避免除零)
+3. 数值稳定性:处理了各种边界情况
+  
+## 7. 在MLflow实验中的应用
+
+从您的notebook可以看到:
+```python
+# 记录F1分数作为主要评估指标
+mlflow.log_metric("semantic_f1_score", result.score)
+```
+这使得您可以:
+- 跟踪模型改进:比较不同优化策略的效果
+- A/B测试:比较不同模型版本的性能
+- 调参指导:F1分数可以指导超参数调优
+  
+## 8. 总结
+
+F1 Score 在RAG系统评估中是一个**综合性的质量指标**:
+
+- 平衡考虑了回答的准确性和完整性
+- 避免了单一指标的局限性
+- 提供了系统整体性能的量化评估
+- 支持了模型的迭代改进和比较