Skip to content

Commit b0a3ced

Browse files
author
vimpas
committed
1
1 parent 4b159fd commit b0a3ced

File tree

2 files changed

+181
-0
lines changed

2 files changed

+181
-0
lines changed

Diff for: data/blog/LLM/提示词工程: 推理技术.mdx

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
title: '提示词工程: 推理技术'
3+
date: '2024-10-05'
4+
tags: []
5+
draft: true
6+
summary:
7+
---
8+
9+
在Prompt Engineering中,推理技术是引导AI模型进行复杂问题解决的重要方法。以下是关于**思维链(Chain-of-Thought)****思维树(Tree of Thoughts)**推理技术的详细解释。
10+
11+
## 思维链(Chain-of-Thought)
12+
13+
**思维链**是一种通过将复杂问题分解为一系列中间步骤来帮助AI模型进行推理的方法。该技术的核心在于逐步引导模型,通过每一步的推理来接近最终答案。这种方法通常用于需要多步骤推理的问题,比如数学计算或逻辑推理任务。思维链提示通过明确列出每个中间步骤,帮助模型在生成过程中保持一致性和逻辑性。
14+
15+
## 思维树(Tree of Thoughts)
16+
17+
**思维树**是对思维链的扩展,它允许模型探索多个推理路径,并自我评估选择。这一技术通过将问题分解为多个中间步骤,形成一个“思维树”,在树中每个节点代表一个潜在的解决方案路径[1][2][4]
18+
19+
### 工作原理
20+
21+
1. **问题分解**:将复杂问题分解为多个可管理的步骤,每个步骤代表一个“思考”。
22+
2. **路径探索**:在每个步骤中,模型生成多个可能的解决方案路径,并通过回溯和前瞻策略进行评估[1][6]
23+
3. **自我评估**:模型通过自我评估机制判断每条路径的有效性,选择最优路径继续深入探索[2][5]
24+
4. **搜索算法应用**:使用搜索算法如广度优先搜索(BFS)或深度优先搜索(DFS)来系统地探索可能的解决方案路径[2][5]
25+
26+
### 优势
27+
28+
- **增强问题解决能力**:通过探索多个解决方案,思维树能够找到最优或最接近正确的答案。
29+
- **改善用户体验**:提供更全面和经过深思熟虑的解决方案,提高AI系统的响应质量[1][4]
30+
- **更好的上下文理解**:模拟人类多角度思考问题的能力,使得AI能够在复杂情境下做出更合理的判断[6].
31+
32+
### 应用场景
33+
34+
思维树技术适用于需要复杂规划或多步骤推理的问题,如数学题解、战略游戏决策、创意写作等。在这些场景中,思维树能够显著提升AI模型的表现[5][6]
35+
36+
综上所述,思维链和思维树是Prompt Engineering中的关键推理技术,通过分解问题和多路径探索,提高了AI模型在复杂任务中的表现能力。
37+
38+
Citations:
39+
[1] https://emeritus.org/blog/tree-of-thoughts-prompting/
40+
[2] https://www.promptingguide.ai/techniques/tot
41+
[3] https://www.youtube.com/watch?v=ut5kp56wW_4
42+
[4] https://cameronrwolfe.substack.com/p/tree-of-thoughts-prompting
43+
[5] https://arxiv.org/abs/2305.10601
44+
[6] https://www.ibm.com/topics/tree-of-thoughts
45+
[7] https://www.53ai.com/news/qianyanjishu/1536.html
46+
[8] https://wuxinhua.com/posts/prompt-engineering/

Diff for: data/blog/分类模型评价指标.mdx

+135
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
---
2+
title: '分类模型评价指标'
3+
date: '2024-10-05'
4+
tags: []
5+
draft: false
6+
summary:
7+
---
8+
9+
在机器学习和统计学中,**精准率(Precision)****召回率(Recall)****F1-score**是评估分类模型性能的重要指标。理解它们之间的关系以及如何根据这些指标优化模型,对于提升模型的准确性和实用性至关重要。下面将详细介绍这三个指标及其相互关系,并探讨如何利用这些评估参数优化模型。
10+
11+
## 一、基本概念
12+
13+
### 1. 精准率(Precision)
14+
15+
**定义**:在所有被模型预测为正类的样本中,实际为正类的比例。
16+
17+
\[ \text{Precision} = \frac{TP}{TP + FP} \]
18+
19+
- **TP(True Positives)**:真正例,模型正确预测为正类的样本数。
20+
- **FP(False Positives)**:假正例,模型错误预测为正类的样本数。
21+
22+
**含义**:精准率反映了模型在预测为正类时的准确性,高精准率意味着模型在预测为正类时较少错误。
23+
24+
### 2. 召回率(Recall)
25+
26+
**定义**:在所有实际为正类的样本中,被模型正确预测为正类的比例。
27+
28+
\[ \text{Recall} = \frac{TP}{TP + FN} \]
29+
30+
- **FN(False Negatives)**:假负例,模型错误预测为负类的样本数。
31+
32+
**含义**:召回率反映了模型对正类样本的识别能力,高召回率意味着模型能够捕捉到更多的正类样本,但可能会带来更多的假正例。
33+
34+
### 3. F1-score
35+
36+
**定义**:精准率和召回率的调和平均数,综合考虑了两者的平衡。
37+
38+
\[ F1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} \]
39+
40+
**含义**:F1-score在精准率和召回率之间寻找一个平衡点,适用于需要同时关注这两者的场景。
41+
42+
## 二、精准率、召回率与F1-score的关系
43+
44+
精准率和召回率通常是相互制约的两个指标。在模型的实际应用中,提高一个指标往往会导致另一个指标的下降。这种权衡关系可以通过调整模型的决策阈值来实现:
45+
46+
- **提高精准率**:增加决策阈值,使得模型更保守地预测正类。这样可以减少假正例(FP),提高精准率,但可能会漏掉一些正类样本,导致召回率下降。
47+
48+
- **提高召回率**:降低决策阈值,使得模型更积极地预测正类。这样可以捕捉更多的正类样本,提升召回率,但可能会增加假正例(FP),降低精准率。
49+
50+
F1-score作为两者的综合指标,提供了一种平衡精准率和召回率的方法。当需要在精准率和召回率之间找到一个折中时,F1-score是一个有效的参考。
51+
52+
## 三、如何根据这些评估参数优化模型
53+
54+
优化模型的目标通常是根据具体的应用场景,平衡精准率和召回率,或者优化其中一个指标。以下是几种常用的方法:
55+
56+
### 1. 调整决策阈值
57+
58+
大多数分类模型(如逻辑回归、支持向量机等)会输出一个概率分数,通过设定一个阈值将概率转换为具体的类别。调整这个阈值可以控制精准率和召回率之间的平衡。
59+
60+
- **提高阈值**:提升精准率,降低召回率。
61+
- **降低阈值**:提升召回率,降低精准率。
62+
63+
**示例**
64+
```python
65+
# 假设你使用的是一个二分类模型,例如逻辑回归
66+
from sklearn.linear_model import LogisticRegression
67+
from sklearn.metrics import precision_recall_fscore_support
68+
69+
model = LogisticRegression()
70+
model.fit(X_train, y_train)
71+
probs = model.predict_proba(X_test)[:,1]
72+
73+
# 设置不同的阈值
74+
threshold = 0.6
75+
preds = (probs >= threshold).astype(int)
76+
77+
precision, recall, f1, _ = precision_recall_fscore_support(y_test, preds, average='binary')
78+
print(f'Precision: {precision}, Recall: {recall}, F1-score: {f1}')
79+
```
80+
81+
### 2. 处理类不平衡
82+
83+
在数据集中,如果正类和负类分布极不平衡,模型可能倾向于预测为多数类,导致召回率低或精准率低。以下方法可以缓解这一问题:
84+
85+
- **重新采样**
86+
- **上采样**少数类(如SMOTE)
87+
- **下采样**多数类
88+
- **使用加权损失函数**:给予少数类更高的权重,以提升模型对少数类的关注。
89+
90+
**示例**
91+
```python
92+
from imblearn.over_sampling import SMOTE
93+
from sklearn.linear_model import LogisticRegression
94+
from sklearn.metrics import classification_report
95+
96+
smote = SMOTE()
97+
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
98+
99+
model = LogisticRegression()
100+
model.fit(X_resampled, y_resampled)
101+
preds = model.predict(X_test)
102+
103+
print(classification_report(y_test, preds))
104+
```
105+
106+
### 3. 使用集成方法
107+
108+
集成方法(如随机森林、梯度提升)通过组合多个弱学习器,可以提升模型的综合性能,通常能够在精准率和召回率之间取得更好的平衡。
109+
110+
### 4. 特征工程
111+
112+
- **添加相关特征**:提升模型对特定类别的识别能力。
113+
- **特征选择**:去除噪声或不相关的特征,减少过拟合,提高模型的泛化能力。
114+
115+
### 5. 模型选择与调参
116+
117+
不同的模型对精准率和召回率的权衡能力不同,可以尝试多种模型,并通过网格搜索等方法调优超参数,以找到最适合特定需求的模型。
118+
119+
### 6. 多指标优化
120+
121+
除了精准率、召回率和F1-score,还可以结合其他指标(如ROC-AUC、PR-AUC等)全面评估模型性能,从多个维度优化模型。
122+
123+
## 四、实际应用中的选择
124+
125+
根据具体的应用场景,可能需要更侧重于某一个指标:
126+
127+
- **医疗诊断**:通常更重视召回率(减少漏诊),即使牺牲一些精准率也可以接受。
128+
- **垃圾邮件过滤**:可能更重视精准率(避免误拦正常邮件),同时还需要维持较高的召回率。
129+
- **搜索引擎**:需要平衡精准率和召回率,通常使用F1-score作为优化目标。
130+
131+
通过明确业务需求,确定优化目标后,可以针对性地调整模型,以满足实际应用中的性能要求。
132+
133+
## 五、总结
134+
135+
精准率、召回率和F1-score是评估分类模型不可或缺的指标。理解它们之间的关系及其在不同场景下的重要性,有助于更有效地优化模型。通过调整决策阈值、处理类不平衡、进行特征工程和选择合适的模型等方法,可以在精准率和召回率之间找到最佳的平衡点,提升模型的整体性能。

0 commit comments

Comments
 (0)