训练语料怎么扩充?用受控文本变体保留标签与原文关系

扩充 AI 训练文本不必先让模型生成大量新句子。对确实不改变任务标签的格式变化,可以先做少量受控变体,并保存 parent_id。下面把“机器学习”替换为“机器 学习”,验证数量、标签和原文关系;它只是格式鲁棒性练习。

扩充 AI 训练文本不必先让模型生成大量新句子。对确实不改变任务标签的格式变化,可以先做少量受控变体,并保存 parent_id。下面把“机器学习”替换为“机器 学习”,验证数量、标签和原文关系;它只是格式鲁棒性练习。

环境与运行方法

本文代码在 Windows、Python 3.11 的本地独立环境执行通过。以下数据全部为人为构造的教学样本,不是客户数据,也不是业务效果测试。

训练语料怎么扩充?用受控文本变体保留标签与原文关系

新建一个空目录,在终端执行安装命令,把后面的完整代码保存为 demo.py,再执行 python demo.py。文件输出均保存在运行目录,请先在空目录练习。

python -m pip install numpy==2.4.6 scikit-learn==1.9.1

只扩充有明确语义边界的变化

教学任务是区分课程主题,两个原文分别为机器学习课程与烹饪课程,标签不是情感或法律判断。插入一个词内空格只为检验分词和预处理的鲁棒性;真实任务中这类变化是否保留标签仍需抽样确认。

不要自动对含“不”“未”“禁止”等否定词的文本替换或删除,也不要擅自改变数字、对象或实体。原文太短、变体相同或者信息可能改变时,跳过比强行扩充更可靠。

让变体跟随原文划分集合

每个变体记录自己的编号、parent_id、text、label 和 method。新增数量只统计真正变化的文本,原文也保留在输出里。

如果先把所有变体混在一起随机切分,同一原文的两个版本可能分散到训练和测试,夸大泛化效果。应该先按原文组划分,或先切原文再只增强训练集。代码用 GroupShuffleSplit 验证 parent_id 没有跨集合重叠。

可复制的完整代码

import re
import numpy as np
from sklearn.model_selection import GroupShuffleSplit
originals = [{"id": "a", "text": "机器学习课程入门", "label": "ml"},
             {"id": "b", "text": "烹饪课程入门", "label": "cook"}]
rows = []
for row in originals:
    rows.append({"id": row["id"], "parent_id": row["id"], "text": row["text"], "label": row["label"], "method": "original"})
    variant = re.sub("机器学习", "机器 学习", row["text"])
    if variant != row["text"]:
        rows.append({"id": row["id"] + "-space", "parent_id": row["id"], "text": variant, "label": row["label"], "method": "insert_space"})
groups = np.array([r["parent_id"] for r in rows])
train, test = next(GroupShuffleSplit(n_splits=1, test_size=0.5, random_state=0).split(rows, groups=groups))
assert set(groups[train]).isdisjoint(groups[test])
for row in rows:
    assert row["label"] == next(r["label"] for r in originals if r["id"] == row["parent_id"])
print("rows", len(rows), "variants", sum(r["method"] != "original" for r in rows))
print("cross_split_parent_overlap", sorted(set(groups[train]) & set(groups[test])))
print("variant", rows[1]["text"], rows[1]["label"], rows[1]["parent_id"])

运行结果与核对方法

下面是本文教学代码在上述本地环境中的实际输出。浮点数末位可能随依赖版本变化。

rows 3 variants 1
cross_split_parent_overlap []
variant 机器 学习课程入门 ml a

确认输出 rows=3、variants=1,唯一变体保留 ml 标签和 parent_id=a,cross_split_parent_overlap 是空列表。随后人工检查每个变体的标签是否仍然成立,再考虑加入训练集;不要把这三个样本的分组检查视为正式效果评测。

使用边界与常见问题

本例只有两条教学原文,仅验证变体记录及组隔离,没有证明任何训练收益。格式增强不能替代新的真实场景样本,也不适用于需要精确保留空格的代码、数值或法条文本。

可以对验证集也做增强吗?

评估数据应反映你希望检验的真实输入分布。若专门测格式鲁棒性,可以另建标注清楚的扰动测试集,并单独报告,不能混进原验证集后只报告一个分数。

官方资料

接口与参数依据以下官方资料核对(2026年10月1日)。示例验证只覆盖本文输入和步骤。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30737.html

赞 (0)
AI小管家的头像AI小管家
OCR 批量识别怎么避免漏文件?逐张保存文本、状态和异常清单
上一篇 5小时前
英文手写 OCR 怎么做?用 TrOCR 识别单行文字并逐字回查
下一篇 5小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部