数据增强与输入处理

数据增强与输入处理


一、文本数据增强方法

1.1 词级别增强

方法 原理 实现难度 效果
同义词替换 用同义词替换原文中的词汇 稳定提升
随机插入 在随机位置插入同义词 轻微提升
随机删除 以概率p删除每个词 轻微提升
随机交换 随机交换两个词的位置 轻微提升
实体替换 将实体替换为同类型其他实体 NER任务显著提升

1.2 句级别增强

方法 原理 实现难度 效果
回译增强 中文→英文→日文→中文 显著提升
上下文增强 用语言模型预测替换词 显著提升
文本片段交换 交换两个句子的片段 轻微提升

1.3 特征空间增强

方法 原理 实现难度 效果
Mixup 在Embedding空间做线性插值 正则化效果
CutMix 随机遮蔽部分Token 正则化效果
对抗增强 FGM/PGD在Embedding上添加扰动 显著提升

1.4 增强策略选择

任务类型 推荐增强方法 不推荐方法
文本分类 同义词替换 + Mixup + 对抗增强 实体替换
NER 实体替换 + 同义词替换 + 回译 Mixup(标签对齐困难)
关系抽取 实体替换 + 上下文增强 随机交换(破坏关系)

二、半监督学习与伪标签

2.1 K折伪标签(降噪)

维度 说明
问题背景 医疗数据人工标注主观性强,存在大量漏标和错标
核心原则 严禁在全量训练集上直接生成伪标签以防过拟合
实现方式 利用K折交叉验证,让模型仅在它未见过的验证集上生成预测结果
融合策略 融合多个模型生成的高质量伪标签来替代人工标签重新训练
本质作用 利用AI群体完成自动纠错和降噪

2.2 测试集伪标签(冲刺)

维度 说明
适用时机 模型开发到瓶颈时
实现方式 用高分模型对测试集预测,打上伪标签
置信度阈值 通常取0.9+,过低引入噪声
混合训练 高置信度伪标签样本与原训练集混合重新训练
核心优势 压榨最后一点分数

2.3 FixMatch半监督框架

维度 说明
核心思想 对同一无标签样本生成弱增强和强增强两个版本
一致性正则 若弱增强预测置信度超过阈值,则用弱增强伪标签监督强增强预测
优势 充分利用无标签数据,无需手动设置伪标签阈值
适用场景 有大量无标签数据时

三、基础文本预处理

3.1 清洗与标准化

步骤 说明 代码示例
去除HTML标签 清除爬虫数据中的HTML残留 re.sub(r'<[^>]+>', '', text)
统一编码 全角→半角、繁体→简体 unicodedata.normalize
去除特殊字符 保留字母、数字、中文 re.sub(r'[^\w\s]', '', text)
空格规范化 多空格合并为单空格 re.sub(r'\s+', ' ', text)
URL替换 将URL替换为特殊标记 re.sub(r'http\S+', '[URL]', text)

3.2 TF-IDF特征工程

维度 说明
核心思想 词频-逆文档频率,衡量词对文档的区分度
TF(词频) 词在文档中出现的频率
IDF(逆文档频率) log(总文档数 / 包含该词的文档数)
适用场景 传统ML模型(SVM、Logistic Regression)的特征输入
与深度学习互补 TF-IDF特征可与BERT向量拼接,提供词频先验信息

四、长文本截断策略

策略 说明 适用场景
Head截断 保留前512个Token 文本开头信息最关键
Tail截断 保留后512个Token 文本结尾信息最关键
Head+Tail截断 前128 + 后384个Token 兼顾首尾信息
滑动窗口 多次截取,结果融合 长文本信息均匀分布
动态截断 按实体位置截取 NER任务
Longformer 使用支持长文本的模型 超长文本

滑动窗口实现

1. 将长文本按步长切分为多个512 Token的窗口
2. 每个窗口独立预测
3. 重叠区域取平均或取最大值
4. 合并所有窗口的预测结果

五、多语言混合文本处理

维度 说明
问题背景 推文等社交媒体文本常混合多种语言和字符集
语言检测 使用langdetect或fasttext识别文本语言
多语言模型 使用XLM-RoBERTa等多语言预训练模型
翻译统一 将非目标语言翻译为目标语言后统一处理
字符集归一 统一全角/半角、繁体/简体

六、训练稳定性技巧(NLP专项)

6.1 梯度累加

维度 说明
问题背景 大型模型极大,普通显卡往往只能把Batch Size设为1
导致后果 Batch Size为1导致梯度更新方向剧烈震荡
解决方案 开启梯度累加模拟大Batch Size训练效果
配套措施 配合梯度截断防止累加梯度爆炸

6.2 动态填充

维度 说明
问题背景 固定长度填充(如统一填充到512)对短文本浪费计算
解决方案 使用DataCollatorWithPadding按batch内最长序列填充
效果 短文本训练加速约75%

6.3 FP16混合精度

维度 说明
显存节省 显存占用减半
速度提升 训练速度提升约30%-50%
必须配合 梯度截断防止梯度爆炸
实现 PyTorch的torch.cuda.amp自动混合精度

七、数据增强实战流程

1. 基线训练 → 确定数据管线无误
2. 简单增强 → 同义词替换(10%替换率)
3. 任务特定增强 → NER: 实体替换; 分类: Mixup
4. 半监督 → K折伪标签降噪
5. 对抗增强 → FGM/PGD
6. 测试集伪标签 → 高置信度样本混合训练
7. 后处理 → 规则修正

增强效果预期

增强方法 单模型提升 融合后提升
同义词替换 +0.2~0.5% +0.1~0.3%
实体替换(NER) +0.5~1.0% +0.3~0.5%
对抗训练 +0.3~0.8% +0.2~0.5%
伪标签 +0.5~1.5% +0.3~1.0%
Mixup +0.1~0.3% +0.1~0.2%

八、EDA(Easy Data Augmentation)

维度 说明
核心方法 四种简单操作的组合:同义词替换、随机插入、随机交换、随机删除
同义词替换(SR) 从句子中随机选n个非停用词,用同义词替换
随机插入(RI) 随机选一个词的同义词,插入句子中随机位置
随机交换(RS) 随机交换句子中两个词的位置
随机删除(RD) 以概率p删除句子中的每个词
alpha参数 控制增强强度,alpha=0.05表示每句改动约5%的词
优势 实现极简,无需外部模型,适合快速baseline

九、UDA(Unsupervised Data Augmentation)

维度 说明
核心思想 对无标签数据做增强,要求模型对原始样本和增强样本的预测一致
与FixMatch区别 UDA使用更强的增强策略(TF操作+回译),FixMatch使用标准增强
增强策略 回译 + 基于TF的词替换(BERT预测替换)
一致性损失 KL散度衡量原始预测与增强预测的差异
置信度阈值 仅对高置信度(>0.9)无标签样本计算一致性损失
适用场景 有大量无标签数据时,半监督学习效果显著

十、条件生成式增强

维度 说明
核心思想 用预训练语言模型(如GPT/T5)生成与原始样本语义相似但表述不同的新样本
实现方式 将原始文本作为Prompt输入生成模型,控制生成文本与原文的相似度
T5改写 输入"paraphrase: {原始文本}",T5生成改写后的文本
GPT生成 输入原始文本的前半段,GPT生成后半段
质量控制 用分类模型过滤生成质量差的样本,或用BLEU/语义相似度筛选
优势 生成多样性高,语义保持好
劣势 需要额外模型,生成速度慢,可能引入噪声

十一、对抗验证(Adversarial Validation)

维度 说明
核心思想 训练二分类器区分训练集和测试集,找出分布不一致的特征
实现方式 给训练集打标签0、测试集打标签1,训练LightGBM分类器
AUC解读 AUC接近0.5说明分布一致;AUC>0.7说明分布差异大
特征重要性 分类器给出的特征重要性即为训练/测试分布差异最大的特征
应用一 删除分布差异大的特征,减少协变量偏移
应用二 用分类器预测的概率作为采样权重,让训练集中与测试集相似的样本权重更高
竞赛价值 解决线下CV与线上LB不一致的核心方法

十二、对抗训练在NLP中的应用

FGM(Fast Gradient Method)

维度 说明
核心思想 在Embedding层添加对抗扰动,提高模型鲁棒性
实现步骤 正常前向→计算Loss→反向传播→在Embedding上添加扰动→再次前向→计算对抗Loss→反向传播更新参数
扰动计算 r = epsilon * grad /
Attack Ratio 每个batch中参与对抗训练的样本比例,0.5兼顾速度和效果
效果 NLP任务中通常提升0.3~0.8个百分点

PGD(Projected Gradient Descent)

维度 说明
与FGM区别 FGM单步攻击,PGD多步攻击(K步)
实现 每步在FGM基础上迭代,K通常3~5步
效果 比FGM更强但训练速度更慢(约K倍)
竞赛建议 FGM性价比最高,PGD在冲刺阶段使用