万亿 Token 预训练语料如何做精确与近似去重?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
不要一上来只报 MinHash。先把去重分为完全重复、文档近重复和局部片段重复三层,再对应内容哈希、Shingle 加 MinHash/LSH、Span 检测。这样既有全局框架,也交代了算法为什么出现。
容易被追问的是阈值与误删。回答时承认代码模板、引用文本和小语种材料容易被误判,并说明要分域抽检阈值附近的样本,而不是追求最低重复率。
可以这样答:
万亿 Token 语料通常分层去重:规范化后用内容哈希删除完全重复;把文档切成 Shingle,用 MinHash 和 LSH 召回近重复候选;再补局部 Span 级重复检测。阈值越严不一定越好,可能误删代码模板、合法引用和稀缺语言。验收应同时看各领域保留率、抽检误删率、重复曝光率,以及小模型验证损失和记忆化风险。
核心回答
大规模语料去重通常分层进行:先规范化文本并用内容哈希去掉完全重复,再把文档表示为 n-gram 或 shingles 集合,用 MinHash 近似 Jaccard 相似度、用 LSH 召回候选对,最后按阈值聚类并为每簇保留代表文档。还可做段落或固定长度 token span 去重,以发现“整篇不同但大段复制”的样本。
精确哈希速度快但漏掉格式、模板或少量改写后的副本;近似去重召回更强但有误删风险。阈值、规范化、粒度和代表样本策略必须结合语言、代码与网页模板单独验证,不能追求一个全局重复率数字。
展开说明
| 两个 shingle 集合 \(A,B\) 的 Jaccard 相似度为 $$J(A,B) = \frac{ | A \cap B | }{ | A \cup B | }\(。MinHash 利用哈希最小值相等的概率近似\)J\(,多个哈希签名再经 LSH 分桶,避免对海量文档做\)\mathcal{O}(M^2)$$ 两两比较。LSH 只是候选生成,最终可对候选计算更精确的相似度。 |
Document-level 去重适合网页镜像,Span-level 去重更能处理公共模板和跨文档复制,但也可能删除合法引用、法律条文或代码惯用片段。去重可降低训练集记忆、评测污染和隐私重复暴露,也可能减少高质量内容的自然频次;因此“每簇保留谁”与“是否保留重复次数特征”都是数据设计决策。
工程实践
流水线应记录每一阶段的删除原因、簇大小、语言和域分布,抽样审核高相似与阈值附近样本。对代码、公式、短文本和非空格语言设置不同的分词与最小长度。去重索引与语料版本一起固化,并在划分验证集之前完成跨 Split 检查,防止同簇文档落入训练和评测两侧。
常见追问
- MinHash 为什么能近似 Jaccard? 对随机排列,两个集合最小元素相同的概率恰好等于它们的 Jaccard 相似度;多次哈希可降低估计方差。
- 为什么不能只做文档哈希? 哈希只识别字节或规范化后完全相同的文本,无法发现插入广告、改标题或复制大段内容的近重复。
- 去重越严格越好吗? 不是。过严会误删合法重复与少数领域样本,改变真实分布;应以记忆风险、质量和覆盖率共同选阈值。
一句话复习
Web-scale 去重用哈希清精确副本、MinHash/LSH 找近重复、Span 检测抓局部复制,并靠分域抽检控制误删。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。