M8-021M8: ML Systems, Engineering & ResearchData Pipelines & StreamingMedium
Mastery:
Data Pipelines & Streaming: 解释大规模去重的工程实现。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: 精确去重(哈希/子串)与近似去重(MinHash+LSH/SimHash);工程上需分布式、亚线性、可增量。
📌 Key Takeaways
- •精确:文档哈希(完全相同)+ 子串级(后缀数组,找长重复片段)
- •近似:MinHash+LSH(估计 Jaccard)、SimHash(汉明距离)
- •工程:分布式(Spark/MapReduce)、亚线性(LSH 分桶)、可增量
📐 Mathematical Derivations
数学机理:<strong>大规模去重的工程实现</strong>(详见 M5 的数据去重题)——(1) <strong>两级去重</strong>——(a) <strong>精确去重</strong>——(i) <strong>文档级</strong>(SHA-256 哈希——完全相同则去);(ii) <strong>子串级</strong>(<strong>后缀数组/后缀自动机</strong>——找'出现超过 k 次的长子串'并删除);<strong>为什么需要子串级</strong>——网页数据常含大量'模板段落'(版权声明/导航栏),文档整体不同但段落重复;(b) <strong>近似去重</strong>——(i) <strong>MinHash + LSH</strong>(估计 Jaccard 相似度);(ii) <strong>SimHash</strong>(指纹的汉明距离);(iii) <strong>SimHash 的变体</strong>(Google 的 SimHash)。(2) <strong>MinHash 的原理</strong>——对随机哈希函数 h,P(h_min(A)=h_min(B))=Jaccard(A,B);故用 k 个哈希函数得到 k 维签名,两文档签名相同的比例即 Jaccard 估计。(3) <strong>LSH 的加速原理</strong>——(a) <strong>问题</strong>——精确比较所有文档对是 O(N²)(不可行);(b) <strong>做法</strong>——<strong>局部敏感哈希</strong>:把签名分成 b 个 band、每个 band r 行;若某 band 完全相同则两文档'候选相似';<strong>效果</strong>——相似文档大概率落入同一桶(只需比较桶内);<strong>亚线性</strong>;(c) <strong>参数</strong>(b、r)控制'召回 vs 精度'。(4) <strong>工程要点</strong>——(a) <strong>分布式</strong>(Spark/MapReduce——分片处理);(b) <strong>亚线性</strong>(LSH 分桶);(c) <strong>可增量</strong>(新数据与已有数据比对——需索引支持);(d) <strong>阈值</strong>(相似度阈值决定'算重复');(e) <strong>粒度</strong>(文档级/段落级/句子级);(f) <strong>去重的顺序</strong>(先粗后细——先哈希去完全相同,再近似去);(g) <strong>成本</strong>(签名计算 + 桶比较)。(5) <strong>去重的效果评估</strong>——(a) <strong>去重率</strong>(删除了多少);(b) <strong>误删率</strong>(是否删了不同的内容);(c) <strong>下游影响</strong>(模型训练效果);(d) <strong>成本</strong>。<strong>为什么去重重要</strong>——(a) <strong>防记忆</strong>(模型'背诵'重复数据);(b) <strong>防污染</strong>(测试集内容);(c) <strong>提效率</strong>(不浪费算力);(d) <strong>稳训练</strong>(重复样本主导梯度)。<strong>与其他问题的关系</strong>——(a) 与 M5 的'数据去重'(动机与效果);(b) 与'数据质量'(去重是质量的一部分);(c) 与'污染检测'。<strong>实践建议</strong>——(a) <strong>先精确(哈希)再去近似(MinHash/LSH)</strong>;(b) <strong>子串级去重</strong>(处理模板段落);(c) <strong>分布式 + LSH</strong>(可扩展);(d) <strong>调 b/r 平衡召回与精度</strong>;(e) <strong>评估去重率与误删率</strong>;(f) <strong>可增量</strong>(新数据比对)。<strong>度量</strong>——(a) 去重率;(b) 误删率;(c) 计算成本;(d) 下游模型指标。
🏭 Production Trade-offs
深度剖析与工程权衡:① <strong>'子串级去重'处理模板段落</strong>——文档级去重无法解决;面试中能指出是深度理解的标志。② <strong>'LSH 把 O(N²) 降到亚线性'</strong>——这是大规模去重的关键。③ <strong>'先精确后近似'的顺序</strong>——省算力。④ <strong>'误删率需评估'</strong>——过度去重会丢失多样性。⑤ <strong>'可增量'</strong>——新数据需与已有数据比对(索引支持)。⑥ <strong>面试要点</strong>——被问'大规模去重怎么做',应给出'<strong>精确(哈希/子串)+ 近似(MinHash+LSH/SimHash)+ 分布式 + 参数调优 + 评估(去重率/误删率)</strong>';能指出'子串级去重'是深度理解的标志。
⚠️ Common Interview Pitfalls
- ✕只做文档级去重(模板段落漏掉)
- ✕精确比较所有对(O(N²) 不可行)
🎯 Interviewer Follow-ups
- ?为什么需要'子串级'去重?
- ?LSH 为什么能加速?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.