深度学习(七)
一、分类数据数据读取使用pandas读取simplifyweibo_4_moods.csv微博四分类情感数据集标签映射定义字典将数字 0/1/2/3 对应喜悦、愤怒、厌恶、低落四种情绪总量统计通过shape[0]获取数据集总行数输出全部微博样本总数分类别统计循环筛选每种情绪对应的数据输出单类样本数量用于查看数据集是否均衡抽样查看sample(10)随机抽取 10 条数据直观观察文本、标签存储格式方便校验数据预处理逻辑。二、分配独热编码UNK未知字测试集出现、词表未收录的生僻字统一映射该 IDPAD填充符用于补齐短文本统一所有输入序列长度。建立独热编码函数tokenizer lambda x: [y for y in x] 采用匿名函数实现中文按字切割输入一句文本输出由单个汉字组成的列表。tqdm 为遍历添加进度条直观显示文件读取进度i0 跳过 CSV 第一行表头不参与字频统计。原始 CSV 每行格式为数字标签,文本line[2:] 截取逗号后的全部文本strip() 去除首尾换行、空格空文本直接跳过避免无效统计。遍历单字分词结果dict.get(word,0) 查询当前字已有频次不存在则默认 0每次遍历频次 1完成全文字频统计。过滤低频汉字按词频降序排序并截断至最大词表容量 构建「汉字 - 数字 ID」映射字典 追加UNK未知字符、PAD填充字符 打印词表信息使用 pickle 持久化保存词表文件 返回完整词表字典供外部调用。三、打包数据集调用打包函数传入微博情感数据集 CSV 文件路径函数一次性返回 4 组结果vocab预构建好的字 - 数字 ID 映射词表train_data划分完成的训练集数据dev_data划分完成的验证集数据test_data划分完成的测试集数据。1. 函数入参与初始化数据集 csv 文件路径pad_size70统一文本固定长度默认填充 / 截断至 70 个字contents []存储处理完成后的全部样本每条样本格式(编码文本, 标签, 有效长度)vocab pkl.load(...)读取之前构建并保存的词表文件获取汉字与数字 ID 映射tokenizer匿名单字分词器将中文文本切分为单个汉字列表2. 遍历数据集文件tqdm(f)读取文件时显示进度条直观查看数据处理进度if i 0跳过 CSV 第一行表头不参与数据处理if not line过滤空行脏数据避免后续逻辑报错3. 拆分标签与文本label int(line[0])每行第一个字符为情感数字标签0/1/2/3content line[2:].strip(\n)跳过逗号截取纯文本内容并去除换行符4. 文本长度统一截断 / 填充 PAD先分词得到token列表记录原始有效长度seq_len短文本字数小于 70末尾补充PAD占位符补齐至固定长度 70长文本字数大于等于 70直接截取前 70 个字同步更新有效长度为 705. 文字转数字 ID 编码循环遍历处理后的字列表通过词表映射为数字词表存在该字取对应 ID词表不存在的生僻字统一映射为UNK未知字符 ID 编码完成后将(编码列表, 标签, 有效长度)存入总样本列表contents供后续划分训练 / 验证 / 测试集使用。1. random.shuffle(contents)对全部预处理完成的样本列表进行随机打乱。 作用消除原始数据集的顺序偏置保证训练、验证、测试集内各类样本分布均匀避免模型学习到文本顺序带来的虚假特征。 前提代码顶部需要提前import random导入随机库。2. 训练集划分 train_data contents[: int(len(contents)*0.8)]取全部数据前 80% 作为训练集用于模型参数迭代更新。 len(contents)获取总样本数量 int()将浮点比例转为整数切片下标 切片[:0.8总长度]截取前 80% 样本。3. 验证集划分 dev_data contents[int(len(contents)*0.8) : int(len(contents)*0.9)]取中间 10% 数据作为验证集。 用途训练过程中实时监控模型精度用于调整超参数、早停防止过拟合。4. 测试集划分 test_data contents[int(len(contents)*0.9):]取最后 10% 数据作为测试集。 用途模型训练完全结束后用于评估模型泛化能力全程不参与训练与调参。四、主函数1. Numpy 随机种子固定 np.random.se(1)为 numpy 库全局随机数生成器设置固定种子 1。 数据打乱、随机采样等依赖 numpy 的操作每次运行都会生成完全相同的随机序列保证数据集划分、数据增强结果可复现。2. CPU 侧 Torch 种子 torch.manual_seed(1)设置 PyTorch CPU 运算的随机种子网络权重初始化、CPU 上随机 dropout 等操作结果固定。3. 多 GPU 统一 CUDA 种子 torch.cuda.manual_seed_all(1)为所有 CUDA 显卡设置相同随机种子多卡训练场景下保证每张 GPU 随机操作一致避免多卡带来结果波动。4. CuDNN 确定性模式 torch.backends.cudnn.deterministic True强制 CuDNN 卷积算法使用固定确定性实现关闭自动择优算法。 代价训练速度小幅下降收益卷积层前向 / 反向传播计算结果完全固定彻底消除 GPU 硬件层面带来的结果随机性。整体作用整套代码是深度学习实验可复现性标准配置固定所有随机源保证同一套代码、同一套数据集多次运行得到完全相同的模型训练结果方便论文对比、模型调参、实验复现。第一参数对应划分好的数据集train_data/dev_data/test_data 第二参数128批次大小 batch_size每一轮迭代取出 128 条样本输入模型 第三参数device训练硬件设备cuda/mps/cpu迭代器内部会自动将张量迁移至指定设备省去训练时重复.to(device)操作。启用预训练向量时取词向量第二维长度作为嵌入维度若注释预训练向量置为 None则默认使用 200 维随机初始化词向量实现两种嵌入方案无缝切换方便对比有无预训练向量的模型效果。定义 4 类微博情感文本对应的标签名称 num_classes自动计算分类类别总数作为模型输出层神经元数量。