# 文本分类

URL: https://caijiao.org/nlp/tasks/classification
Source: docs/nlp/tasks/classification.md
Description: 本章详细介绍文本分类任务，包括二分类、多分类、层次分类，常用模型及训练方法。

文本分类（**Text Classification**）是 NLP 中最基础且常用的任务之一，目的是将一段文本划分到一个或多个预定义类别中。

应用场景包括：

- 情感分析（正面 / 负面）  
- 新闻分类（科技 / 体育 / 财经 / 娱乐）  
- 垃圾邮件识别（垃圾 / 正常）  
- 用户评论标签分类  

## 一、分类类型

1. **二分类（Binary Classification）**  
   每条文本只有两个可能类别，如情感分析：正面或负面。

2. **多分类（Multi-class Classification）**  
   每条文本属于一个类别，但类别数大于 2，如新闻主题分类。

3. **多标签分类（Multi-label Classification）**  
   文本可以同时属于多个类别，如文章可能同时涉及科技与财经。

4. **层次分类（Hierarchical Classification）**  
   类别呈层级结构，例如：

```txt
新闻
├─ 体育
│  ├─ 足球
│  └─ 篮球
└─ 科技
├─ AI
└─ 通信
````

## 二、特征表示

### 1. 传统方法

- **词袋模型（Bag-of-Words, BoW）**  
- **TF-IDF 向量**  
适合使用逻辑回归、SVM、朴素贝叶斯等模型。

### 2. 深度学习方法

- **词向量（Word Embedding）**：Word2Vec、GloVe  
- **上下文向量**：BERT、RoBERTa 等 Transformer 模型

## 三、常用模型示例

### 1. 使用 scikit-learn（传统方法）

```python
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression

texts = ["我喜欢这部电影", "这部电影很差"]
labels = [1, 0]

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(texts)

clf = LogisticRegression()
clf.fit(X, labels)
print(clf.predict(vectorizer.transform(["电影非常好看"])))
````

### 2. 使用 Hugging Face Transformers（深度学习）

```python
from transformers import pipeline

classifier = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english")
result = classifier("I love this movie!")
print(result)
```

输出示例：

```txt
[{'label': 'POSITIVE', 'score': 0.999}]
```

## 四、评价指标

- **准确率（Accuracy）**
- **精确率（Precision）**
- **召回率（Recall）**
- **F1-score**
- **混淆矩阵（Confusion Matrix）**

```python
from sklearn.metrics import classification_report
print(classification_report(y_true, y_pred))
```

## 五、小结

- 文本分类是 NLP 中入门级任务，应用广泛；
- 可以使用传统 ML 方法或深度学习方法；
- 评价指标选择需根据任务类型与业务需求而定。
