迁移学习 - 中文分类案例 - 数据加载
1 课程概览
本课讲解迁移学习的中文分类案例的数据加载。这是 NLP 阶段最后三个案例之一(中文分类、中文填空、中文句子关系)。使用全国酒店评论数据(好评/差评二分类)。使用 HuggingFace 的 dataset 工具加载数据。流程:NumPy → Tensor → TensorDataset → DataLoader。
2 核心概念与定义
- 迁移学习:使用预训练的 BERT 模型提取文本特征,后接全连接和 softmax 进行分类。
- 二分类:1 代表好评,0 代表差评。
- dataset 工具:HuggingFace 的数据集加载工具。
- TensorDataset:张量数据集。
- DataLoader:数据加载器。
3 模型与算法详解
任务介绍
中文语料的评论分类。
- 使用全国酒店评论数据
- 二分类:1 代表好评,0 代表差评
- 使用预训练的 BERT 模型提取文本特征
- 后接全连接和 softmax 进行分类
数据介绍
三个文件:train、test、validation。
| 文件 | 说明 |
|---|---|
| train | 训练集 |
| test | 测试集 |
| validation | 验证集 |
数据格式
第一列是 label,第二列是 text。
| 字段 | 说明 |
|---|---|
| label | 标签(1=好评,0=差评) |
| text | 文本内容 |
数据加载流程
1. 使用 HuggingFace 的 dataset 工具加载数据
2. 加载训练集、测试集、验证集
3. 查看数据分布情况
4. NumPy → Tensor → TensorDataset → DataLoader
模型选择
使用 BERT base chinese 模型。
| 任务 | 模型 |
|---|---|
| 中文分类 | bert-base-chinese |
数据处理流程
NumPy → Tensor → TensorDataset → DataLoader
| 步骤 | 说明 |
|---|---|
| 1. NumPy | 原始数据 |
| 2. Tensor | 转成张量 |
| 3. TensorDataset | 转成数据集对象 |
| 4. DataLoader | 转成数据加载器 |
4 数学原理与推导
迁移学习分类
$$\text{features} = \text{BERT}(\text{text})$$
$$\text{output} = \text{softmax}(\text{FC}(\text{features}))$$
其中:
- $\text{BERT}$ 是预训练模型
- $\text{FC}$ 是全连接层
- $\text{output}$ 是分类结果
数据加载
$$\text{DataLoader} = \text{DataLoader}(\text{TensorDataset}(\text{Tensor}(\text{NumPy})))$$
5 代码示例
import torch
from torch.utils.data import DataLoader, TensorDataset
from datasets import load_dataset
def dm01_load_data():
"""数据加载"""
# 1. 使用 HuggingFace 的 dataset 工具加载数据
# 数据路径
data_path = "data/"
# 加载训练集、测试集、验证集
train_dataset = load_dataset('csv', data_files=f'{data_path}train.tsv')
test_dataset = load_dataset('csv', data_files=f'{data_path}test.tsv')
valid_dataset = load_dataset('csv', data_files=f'{data_path}validation.tsv')
# 2. 查看数据分布情况
print(f"训练集大小: {len(train_dataset['train'])}")
print(f"测试集大小: {len(test_dataset['train'])}")
print(f"验证集大小: {len(valid_dataset['train'])}")
# 3. 查看数据格式
print(f"\n训练集第一行: {train_dataset['train'][0]}")
print(f"训练集字段: {train_dataset['train'].column_names}")
return train_dataset, test_dataset, valid_dataset
def dm02_to_dataloader(dataset, batch_size=8):
"""将数据集转成 DataLoader"""
# 1. NumPy → Tensor
# 提取文本和标签
texts = [item['text'] for item in dataset['train']]
labels = [item['label'] for item in dataset['train']]
# 转成张量
labels_tensor = torch.tensor(labels)
# 2. Tensor → TensorDataset
# 这里需要先用 BERT 分词器处理文本
# 然后转成 TensorDataset
# 详见数据预处理部分
# 3. TensorDataset → DataLoader
# dataloader = DataLoader(tensor_dataset, batch_size=batch_size, shuffle=True)
return labels_tensor
# 测试
if __name__ == "__main__":
print("=== 迁移学习:中文分类案例 - 数据加载 ===")
train_dataset, test_dataset, valid_dataset = dm01_load_data()
代码说明
| 代码 | 说明 |
|---|---|
load_dataset('csv', data_files=...) | 加载 CSV 数据集 |
torch.tensor(labels) | 转成张量 |
TensorDataset(...) | 转成数据集对象 |
DataLoader(..., batch_size=8, shuffle=True) | 转成数据加载器 |
6 重难点与易错提醒
- ❗重点:使用预训练的 BERT 模型提取文本特征。
- ❗重点:数据格式:第一列 label,第二列 text。
- ❗重点:数据处理流程:NumPy → Tensor → TensorDataset → DataLoader。
- ⚠️易错:使用 GPU 环境时要注意沙箱切换。
- 💡技巧:之前深度学习时玩过这个数据,可以参考。
7 课堂问答精选
Q1:迁移学习的中文分类案例使用什么数据?
A:使用全国酒店评论数据,二分类:1 代表好评,0 代表差评。
Q2:数据加载的流程是什么?
A:使用 HuggingFace 的 dataset 工具加载数据,然后 NumPy → Tensor → TensorDataset → DataLoader。
Q3:数据格式是什么样的?
A:第一列是 label(1=好评,0=差评),第二列是 text(文本内容)。
Q4:使用什么模型?
A:使用 BERT base chinese 模型提取文本特征,后接全连接和 softmax 进行分类。
8 本课小结
- 迁移学习中文分类:使用预训练 BERT 模型。
- 数据:全国酒店评论,二分类(好评/差评)。
- 三个文件:train、test、validation。
- 数据格式:label + text。
- 数据加载流程:NumPy → Tensor → TensorDataset → DataLoader。
9 延伸思考
- 数据预处理如何进行?
- 如何使用 BERT 分词器处理文本?