数据增强与输入处理
一、文本数据增强方法
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在冲刺阶段使用 |