2.1 数据采集与清洗


2.1 数据采集与清洗

本节摘要:SOURCE 2.1 列举内部数据库、Kaggle/UCI 公开集、合规爬虫与 API 等来源,并强调清洗 HTML、URL、重复样本与缺失字段。本节给出可验收的清洗清单。

先说结论

  1. 为项目选择合法合规的数据来源
  2. 编写清洗规则处理 HTML、URL、重复与空文本
  3. 设计带版本号的原始数据快照

一、数据来源(SOURCE 2.1)

来源 优点 风险
内部客服/评论库 领域匹配 隐私与脱敏
公开数据集 IMDB/SST 快速 baseline 领域不一致
爬虫 规模大 robots.txt、个保法
社交 API 实时舆情 平台 ToS 变更

二、清洗规则

SOURCE 2.1 典型步骤:

  1. 去 HTML/脚本<div><script> 标签
  2. 去 URL「相关地址请参见官方文档」 或替换为 ` 占位
  3. 去特殊符号 — 控制字符、乱码;emoji 在情感任务可保留
  4. 去重 — 完全重复文档;近似重复可用 SimHash
  5. 空文本 — 删除或单独统计,避免训练噪声
import re def clean_text(raw: str) -> str: t = re.sub(r'<[^>]+>', ' ', raw) t = re.sub(r'https?://\S+', ' <URL> ', t) t = re.sub(r'\s+', ' ', t).strip() return t

三、标注数据组织

有监督任务需标签体系 + 标注规范

  • 类别互斥还是多标签?
  • 边界案例:短文本「。」算无效吗?
  • 工具:Label Studio、Doccano 支持多人协作与导出 JSONL

⚠️ 常见坑:清洗过度——情感任务删掉所有 emoji 会丢失极性信号。

💡 关键直觉:清洗规则应写入 README 并版本化;模型复现从数据快照开始。

重点提炼

  • 来源:内部、公开集、爬虫、API——合规第一
  • 清洗:HTML、URL、重复、空值、编码统一
  • 标注前定标签体系与工具链
  • 情感任务谨慎处理 emoji 与网络用语

下一节讲分词、停用词与标准化。

纵深:把清洗做成可复现的工程

清洗章节给了步骤清单,这里补可落地的细节。第一,清洗顺序很重要:先解压缩与转码,再抽 HTML 文本,接着去 URL、去特殊符号,然后去重,最后处理空样本。顺序颠倒会导致正则匹配错位。第二,去重不能只看字符串相等——同一新闻稿在不同渠道加了不同的推荐语,字符串并不相同,需要 SimHash 或 MinHash 做近似去重;在情感任务里,重复样本会放大标注偏见,务必在划分训练测试集之前去重,否则同一条文本可能同时出现在两边,造成数据泄漏。

第三,清洗与标注的关系要先想清楚。清洗规则写进 README 并版本化,每条规则要有「删了什么、为什么删」的记录;标注数据本身要保留原始文本,只把清洗后的版本用于训练,方便以后回溯。第四,合规红线不能碰:爬虫要遵守 robots 协议与站点条款,公开数据集要确认授权,涉及个人信息必须脱敏,社交平台 API 要遵守其开发者协议。这些不是可选项,是上线前必须过的关卡。

一个实用的检查技巧是「清洗前后对比抽样」:随机抽 20 条原始文本,打印清洗前后的样子,人工确认每条规则没有误伤有效内容。情感任务特别要注意 emoji、颜文字与网络用语,它们是极性信号,不该被当成噪声删掉;如果确需删除,也要先把 emoji 单独抽出来统计分布,确认它们对标签没有系统性影响后再处理。这样清洗就从一个「凭感觉写的正则」变成了「可审计、可回滚」的工程模块。

最后提一句数据版本:每个版本的数据快照要记录来源、清洗规则版本、抽取时间与样本数,训练脚本固定引用某个快照版本。这样当模型指标异常时,可以快速定位是「数据变了」还是「模型变了」。这一步投入小,收益却是灾难时的救命稻草。

# 概念:带版本号的清洗流水线(示意) import re CLEAN_RULES = [ ("去HTML", r"<[^>]+>"), ("去URL", r"https?://\S+"), ("去控制字符", r"[\x00-\x08\x0b-\x1f]"), ("空白归一", r"\s+"), ] def clean_with_log(raw: str) -> dict: text = raw applied = [] for name, pattern in CLEAN_RULES: before = len(text) text = re.sub(pattern, " ", text) applied.append((name, before - len(text))) return {"text": text, "changes": applied}
清洗步骤 处理对象 常见坑
转码 乱码编码 先探测编码
抽文本 HTML/脚本 保留 emoji
去重 近似重复 切分前完成
空样本 空白文本 单独统计
脱敏 个人信息 上线前必做

清洗验收清单与失败样例

清洗函数写完后,用一张验收清单逐项核对,并把历史失败样例存档为回归用例。

验收项 通过标准
无 HTML 残留 随机抽 20 条不含标签
无长 URL 替换为占位符且计数一致
编码统一 全部为 UTF-8
空文本已处理 单独统计并记录数量
重复已去除 训练与测试无同文

回归用例的意义在于:改动清洗规则后,直接重跑用例集,能立刻发现「修复 A 却破坏了 B」的连锁问题。情感任务额外加一条——抽样确认 emoji 与否定词没有被误删,这两类信息对极性判断至关重要。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U