数据准备是模型训练的基础,本教程将详细介绍Transformer在自然语言处理任务中的数据准备过程。我们将以文本分类任务为例,手把手教你如何获取质量好的语料,进行数据清洗与预处理,制作符合Transformer输入要求的训练集、验证集和测试集。
一、语料获取
Transformer模型对训练数据的质量和规模要求非常高。为了达到最佳效果,我们需要数GB甚至数十GB规模的文本数据。以下是一些可获得大规模语料的途径:
- 网络爬虫技术可以聚合新闻、论坛、博客网站的数据
- 开源数据集如BookCorpus、Wikipedia等都可以提供GB级的文本
- 付费数据平台也出售质量较好的手标注数据集
- 自有业务系统中的日志、文档类数据也可筛选使用
需要注意版权、知识产权等问题,避免使用存在法律风险的数据源。此外,语料数据应涵盖各个领域,保证主题和样式的多样性。
二、数据清洗与筛选
原始语料获得后,还需要进行严格的数据清洗,常见的步骤包括:
- 去除过多错词语句
- 过滤不合规定语言的内容
- 剔除过于敏感的文本
- 移除重复内容
- 纠正部分语法错误
- 标准化英文的大小写、拼写格式
- 移除各类元数据、代码、非自然语言符号
- 等等
清洗后的语料,还需要按照具体任务进行筛选。比如文本分类任务可以筛选出类属明确的样本。这通常需要专业数据标注团队协助,或借助自动化规则实现。
三、数据集划分
对于监督学习的Transformer模型,通常需要将数据分为训练集、验证集和测试集。
训练集用于模型迭代训练,验证集用于调整超参数,测试集最终评估模型效果。一般按照7:2:1的比例进行划分训练数据。
需要保证各个数据集同分布,类目平衡。否则会导致模型过拟合现象。分布不均匀的数据集也会使结果评估不准确。
四、文本序列处理
Transformer的输入为文本序列,因此还需要进行序列化的预处理。具体来说:
- 切分语句为单词/词组(Subword)
- 建立词表,为每个词汇分配索引
- 限制序列最大长度,短文本后补PAD
- 对超长文本采用截断或滑窗分割
- 序列前添加特殊分隔符(SEP)标记
对句子长度、词表大小等都需要经过多次尝试,找到最优方案。句子不宜过长也过短,词表大小过小会限制语义表示。
五、生成训练批次
经过上述处理后,我们得到了编码为数字索引序列的文本数据。最后一步是生成训练所需的批次:
- 每条训练样本包含输入序列和目标序列
- 对输入序列进行MASK或其他增强操作
- 批次大小一般为32、64或128条样本
- 批次序列长度统一 padding 到最大长度
- Shuffle batch 同时读取数据和标签
至此我们就完成了Transformer模型训练数据的全流程准备工作。充足的质量训练数据是获得最佳效果的基石。希望本教程可以提供一些参考,指导大家准备用于Transformer等模型的训练数据。六、验证集制作验证集用于训练过程中的模型评估,其制作原则与训练集基本一致,只是比例较少,一般在1万句左右。
需要确保验证集同训练集来源一致,具有代表性,涵盖各类别情况。同时要独立于训练集,避免出现数据泄露。
评估验证集时禁用dropout、数据增强等,关闭 shuffle,使用teacher forcing,以获得一个较为准确的模型效果指标。
验证集的损失和评测指标通常作为early stop和超参调优的监控信号。七、测试集制作测试集只在模型训练结束后使用一次,来评估最终性能。
测试集的样本应当只出现在此,不可复用其他数据集的内容。同时样本数量要足够大,至少超过1万,以使指标评估更稳定可信。
测试前不要继续优化模型,直接加载最好的检查点进行 inference。测试结果将在论文、报告中发布。
总结
本教程详尽介绍了从语料获取到制作批次数据集的整个流程,让大家对Transformer的训练数据有全面系统的了解。优质的数据决定上限,希望本指南能帮助大家制作出高质量的数据集,训练出更出色的Transformer模型。