数据去重与清洗:15TB训练数据中,我们删除了60%的'垃圾'
60%的训练数据是垃圾 2026年Q1,我们从Common Crawl(互联网公开数据集)中提取了15TB的训练数据,准备用于训练一个中文大模型。 经过去重和清洗后,只剩下6TB——60%的数据被删除了。 删除的数据包括:重复内容(30%)、低质量内容(15%)、有毒内容(5%)、非目标语言(5%)、格式错误(5%)。 数据去重和清洗,是AI训练中最"无聊"但最"重要"的工作。 以下是完整的去重和清洗流程。 第一步:语言检测与过滤 目标: 只保留中文数据,删除其他语言。 方法: 使用fastText语言检测模型(预训练,支持176种语言),对每条数据进行语言检测。置信度>0.9的数据保留,置信度<0.9的数据删除。 效果: 15TB → 12TB(删除20%的非中文数据)。 坑: fastText对"中英混合"文本的检测不准确。我们额外用规则(中文字符占比>50%)过滤中英混合文本。 第二步:数据去重(Deduplication) 目标: 删除重复的、高度相似的数据。 方法: 精确去重(Exact Dedup): 删除完全相同的文本(MD5哈希匹配)。快速但粗糙。 模糊去重(Fuzzy Dedup): 删除高度相似的文本(MinHash + LSH)。慢但精确。 MinHash + LSH的工作原理: MinHash:将文本压缩成"指纹"(128维的哈希向量) LSH(Locality-Sensitive Hashing):将相似的"指纹"分到同一个桶里 同一个桶里的文本,被视为"相似文本",只保留一条 效果: 12TB → 8TB(删除33%的重复数据)。 参数: MinHash的相似度阈值设为0.8。阈值太低(0.5),会删除大量"不重复但相似"的数据;阈值太高(0.95),会保留大量"重复但轻微不同"的数据。 第三步:低质量数据过滤 目标: 删除"垃圾"数据——太短、太长、无意义、低信息量的数据。 方法: 长度过滤:删除<50字符或>100000字符的数据 困惑度过滤:用KenLM语言模型计算文本的困惑度(Perplexity),删除困惑度>1000的数据(无意义文本) 重复度过滤:删除词重复率>80%的数据(如"啊啊啊啊啊啊啊") 特殊字符过滤:删除特殊字符占比>50%的数据(如代码、乱码、HTML标签) 效果: 8TB → 6TB(删除25%的低质量数据)。 困惑度过滤是"神器"——它能识别出"看起来像人话,但实际上是乱码"的文本。 例如:“今天天气很好,我去超市买了苹果。但是,但是,但是,但是,但是…"——这种重复的文本,困惑度会很高。 第四步:PII(个人身份信息)脱敏 目标: 删除或脱敏个人身份信息。 方法: 用正则表达式 + Presidio(微软开源的PII检测工具)检测和脱敏: 手机号:\d{11} → 替换为[PHONE] 身份证号:正则匹配 → 替换为[ID] 邮箱地址:\S+@\S+ → 替换为[EMAIL] IP地址:正则匹配 → 替换为[IP] 效果: 检测到约0.5%的数据包含PII,全部脱敏处理。 ...