本节摘要:SOURCE 2.1 列举内部数据库、Kaggle/UCI 公开集、合规爬虫与 API 等来源,并强调清洗 HTML、URL、重复样本与缺失字段。本节给出可验收的清洗清单。
| 来源 | 优点 | 风险 |
|---|---|---|
| 内部客服/评论库 | 领域匹配 | 隐私与脱敏 |
| 公开数据集 IMDB/SST | 快速 baseline | 领域不一致 |
| 爬虫 | 规模大 | robots.txt、个保法 |
| 社交 API | 实时舆情 | 平台 ToS 变更 |
SOURCE 2.1 典型步骤:
<div>、<script> 标签「相关地址请参见官方文档」 或替换为 ` 占位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
有监督任务需标签体系 + 标注规范:
⚠️ 常见坑:清洗过度——情感任务删掉所有 emoji 会丢失极性信号。
💡 关键直觉:清洗规则应写入 README 并版本化;模型复现从数据快照开始。
下一节讲分词、停用词与标准化。
清洗章节给了步骤清单,这里补可落地的细节。第一,清洗顺序很重要:先解压缩与转码,再抽 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 与否定词没有被误删,这两类信息对极性判断至关重要。