Skip to content

Commit

Permalink
1
Browse files Browse the repository at this point in the history
  • Loading branch information
vimpas committed Oct 10, 2024
1 parent 4b159fd commit b0a3ced
Show file tree
Hide file tree
Showing 2 changed files with 181 additions and 0 deletions.
46 changes: 46 additions & 0 deletions data/blog/LLM/提示词工程: 推理技术.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
title: '提示词工程: 推理技术'
date: '2024-10-05'
tags: []
draft: true
summary:
---

在Prompt Engineering中,推理技术是引导AI模型进行复杂问题解决的重要方法。以下是关于**思维链(Chain-of-Thought)****思维树(Tree of Thoughts)**推理技术的详细解释。

## 思维链(Chain-of-Thought)

**思维链**是一种通过将复杂问题分解为一系列中间步骤来帮助AI模型进行推理的方法。该技术的核心在于逐步引导模型,通过每一步的推理来接近最终答案。这种方法通常用于需要多步骤推理的问题,比如数学计算或逻辑推理任务。思维链提示通过明确列出每个中间步骤,帮助模型在生成过程中保持一致性和逻辑性。

## 思维树(Tree of Thoughts)

**思维树**是对思维链的扩展,它允许模型探索多个推理路径,并自我评估选择。这一技术通过将问题分解为多个中间步骤,形成一个“思维树”,在树中每个节点代表一个潜在的解决方案路径[1][2][4]

### 工作原理

1. **问题分解**:将复杂问题分解为多个可管理的步骤,每个步骤代表一个“思考”。
2. **路径探索**:在每个步骤中,模型生成多个可能的解决方案路径,并通过回溯和前瞻策略进行评估[1][6]
3. **自我评估**:模型通过自我评估机制判断每条路径的有效性,选择最优路径继续深入探索[2][5]
4. **搜索算法应用**:使用搜索算法如广度优先搜索(BFS)或深度优先搜索(DFS)来系统地探索可能的解决方案路径[2][5]

### 优势

- **增强问题解决能力**:通过探索多个解决方案,思维树能够找到最优或最接近正确的答案。
- **改善用户体验**:提供更全面和经过深思熟虑的解决方案,提高AI系统的响应质量[1][4]
- **更好的上下文理解**:模拟人类多角度思考问题的能力,使得AI能够在复杂情境下做出更合理的判断[6].

### 应用场景

思维树技术适用于需要复杂规划或多步骤推理的问题,如数学题解、战略游戏决策、创意写作等。在这些场景中,思维树能够显著提升AI模型的表现[5][6]

综上所述,思维链和思维树是Prompt Engineering中的关键推理技术,通过分解问题和多路径探索,提高了AI模型在复杂任务中的表现能力。

Citations:
[1] https://emeritus.org/blog/tree-of-thoughts-prompting/
[2] https://www.promptingguide.ai/techniques/tot
[3] https://www.youtube.com/watch?v=ut5kp56wW_4
[4] https://cameronrwolfe.substack.com/p/tree-of-thoughts-prompting
[5] https://arxiv.org/abs/2305.10601
[6] https://www.ibm.com/topics/tree-of-thoughts
[7] https://www.53ai.com/news/qianyanjishu/1536.html
[8] https://wuxinhua.com/posts/prompt-engineering/
135 changes: 135 additions & 0 deletions data/blog/分类模型评价指标.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
---
title: '分类模型评价指标'
date: '2024-10-05'
tags: []
draft: false
summary:
---

在机器学习和统计学中,**精准率(Precision)****召回率(Recall)****F1-score**是评估分类模型性能的重要指标。理解它们之间的关系以及如何根据这些指标优化模型,对于提升模型的准确性和实用性至关重要。下面将详细介绍这三个指标及其相互关系,并探讨如何利用这些评估参数优化模型。

## 一、基本概念

### 1. 精准率(Precision)

**定义**:在所有被模型预测为正类的样本中,实际为正类的比例。

\[ \text{Precision} = \frac{TP}{TP + FP} \]

- **TP(True Positives)**:真正例,模型正确预测为正类的样本数。
- **FP(False Positives)**:假正例,模型错误预测为正类的样本数。

**含义**:精准率反映了模型在预测为正类时的准确性,高精准率意味着模型在预测为正类时较少错误。

### 2. 召回率(Recall)

**定义**:在所有实际为正类的样本中,被模型正确预测为正类的比例。

\[ \text{Recall} = \frac{TP}{TP + FN} \]

- **FN(False Negatives)**:假负例,模型错误预测为负类的样本数。

**含义**:召回率反映了模型对正类样本的识别能力,高召回率意味着模型能够捕捉到更多的正类样本,但可能会带来更多的假正例。

### 3. F1-score

**定义**:精准率和召回率的调和平均数,综合考虑了两者的平衡。

\[ F1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} \]

**含义**:F1-score在精准率和召回率之间寻找一个平衡点,适用于需要同时关注这两者的场景。

## 二、精准率、召回率与F1-score的关系

精准率和召回率通常是相互制约的两个指标。在模型的实际应用中,提高一个指标往往会导致另一个指标的下降。这种权衡关系可以通过调整模型的决策阈值来实现:

- **提高精准率**:增加决策阈值,使得模型更保守地预测正类。这样可以减少假正例(FP),提高精准率,但可能会漏掉一些正类样本,导致召回率下降。

- **提高召回率**:降低决策阈值,使得模型更积极地预测正类。这样可以捕捉更多的正类样本,提升召回率,但可能会增加假正例(FP),降低精准率。

F1-score作为两者的综合指标,提供了一种平衡精准率和召回率的方法。当需要在精准率和召回率之间找到一个折中时,F1-score是一个有效的参考。

## 三、如何根据这些评估参数优化模型

优化模型的目标通常是根据具体的应用场景,平衡精准率和召回率,或者优化其中一个指标。以下是几种常用的方法:

### 1. 调整决策阈值

大多数分类模型(如逻辑回归、支持向量机等)会输出一个概率分数,通过设定一个阈值将概率转换为具体的类别。调整这个阈值可以控制精准率和召回率之间的平衡。

- **提高阈值**:提升精准率,降低召回率。
- **降低阈值**:提升召回率,降低精准率。

**示例**
```python
# 假设你使用的是一个二分类模型,例如逻辑回归
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_recall_fscore_support

model = LogisticRegression()
model.fit(X_train, y_train)
probs = model.predict_proba(X_test)[:,1]

# 设置不同的阈值
threshold = 0.6
preds = (probs >= threshold).astype(int)

precision, recall, f1, _ = precision_recall_fscore_support(y_test, preds, average='binary')
print(f'Precision: {precision}, Recall: {recall}, F1-score: {f1}')
```

### 2. 处理类不平衡

在数据集中,如果正类和负类分布极不平衡,模型可能倾向于预测为多数类,导致召回率低或精准率低。以下方法可以缓解这一问题:

- **重新采样**
- **上采样**少数类(如SMOTE)
- **下采样**多数类
- **使用加权损失函数**:给予少数类更高的权重,以提升模型对少数类的关注。

**示例**
```python
from imblearn.over_sampling import SMOTE
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

model = LogisticRegression()
model.fit(X_resampled, y_resampled)
preds = model.predict(X_test)

print(classification_report(y_test, preds))
```

### 3. 使用集成方法

集成方法(如随机森林、梯度提升)通过组合多个弱学习器,可以提升模型的综合性能,通常能够在精准率和召回率之间取得更好的平衡。

### 4. 特征工程

- **添加相关特征**:提升模型对特定类别的识别能力。
- **特征选择**:去除噪声或不相关的特征,减少过拟合,提高模型的泛化能力。

### 5. 模型选择与调参

不同的模型对精准率和召回率的权衡能力不同,可以尝试多种模型,并通过网格搜索等方法调优超参数,以找到最适合特定需求的模型。

### 6. 多指标优化

除了精准率、召回率和F1-score,还可以结合其他指标(如ROC-AUC、PR-AUC等)全面评估模型性能,从多个维度优化模型。

## 四、实际应用中的选择

根据具体的应用场景,可能需要更侧重于某一个指标:

- **医疗诊断**:通常更重视召回率(减少漏诊),即使牺牲一些精准率也可以接受。
- **垃圾邮件过滤**:可能更重视精准率(避免误拦正常邮件),同时还需要维持较高的召回率。
- **搜索引擎**:需要平衡精准率和召回率,通常使用F1-score作为优化目标。

通过明确业务需求,确定优化目标后,可以针对性地调整模型,以满足实际应用中的性能要求。

## 五、总结

精准率、召回率和F1-score是评估分类模型不可或缺的指标。理解它们之间的关系及其在不同场景下的重要性,有助于更有效地优化模型。通过调整决策阈值、处理类不平衡、进行特征工程和选择合适的模型等方法,可以在精准率和召回率之间找到最佳的平衡点,提升模型的整体性能。

0 comments on commit b0a3ced

Please sign in to comment.