尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Soup数据去重实战:MinHash与语义嵌入双引擎,揪出改写型重复样本的完整指南

Soup数据去重实战:MinHash与语义嵌入双引擎,揪出改写型重复样本的完整指南 Soup数据去重实战MinHash与语义嵌入双引擎揪出改写型重复样本的完整指南【免费下载链接】SoupFine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU.项目地址: https://gitcode.com/GitHub_Trending/soup12/Soup在 LLM 微调中Soup一个从一份 YAML 开始微调大模型的开源工具内置了soup data dedup数据去重命令用MinHash近似去重 语义嵌入SemDeDup双引擎帮你揪出训练集里的重复样本——尤其是换了个说法、表面完全不同的改写型重复。这篇文章带你从零看懂两种去重原理、它们的实测差异以及新手最容易踩的阈值坑5 分钟跑通一条完整的去重流水线。为什么微调前必须做数据去重重复样本会让模型过度记忆某些表达训练 loss 好看泛化却变差。更隐蔽的是重复不一定是复制粘贴。样本AWrite a function that sorts a list of integers 样本BWrite a function that sorts an array of integersA 和 B 意思完全一样但用词不同——这就是改写型重复rewording。普通的哈希去重对它无能为力这正是 Soup 提供两套去重后端的原因。MinHash 去重快、轻、默认后端soup data dedup默认使用MinHash LSH局部敏感哈希把每条样本拆成连续 3 个词的shingle如sorts a list为每个 shingle 集合生成 128 维 MinHash 签名用 LSH 索引加速相似度查找两行样本的Jaccard 相似度超过阈值默认0.8判定为重复只保留先出现的那条。它的优点是快且零模型依赖——不加载 torch、不下载模型属于 Soup 的轻量核心功能。但它比较的是词面重叠换个词就认不出来了。相关实现MinHash 去重主逻辑src/soup_cli/commands/data.py语义嵌入去重专治改写型重复加上--semantic参数后Soup 改用SemDeDup思路先把每行文本用嵌入模型默认all-MiniLM-L6-v2编码成向量再按余弦相似度做贪心去重——新行与任何已保留行的余弦值 ≥ 阈值默认0.8就丢弃。soup data dedup train.jsonl --semantic -o clean.jsonl soup data dedup train.jsonl --semantic --threshold 0.85 --field text -o clean.jsonl官方文档里有一组很直观的实测对比同批数据、同一嵌入模型样本对余弦值MinHash--semantic完全相同的重复行1.000抓到抓到sorts a list / sorts an array0.908漏掉抓到改写句 sorts a list of ints0.880漏掉抓到Add two numbers / Multiply two numbers0.759保留正确保留正确可以看到改写型重复的余弦普遍在 0.88 上下MinHash 一律漏检而语义去重能稳定抓住同时不会误伤真正不同的样本。语义去重的核心算法贪心余弦、可审计的pairs报告在 src/soup_cli/utils/semdedup.py官方说明见 docs/data.md。阈值怎么调3 个新手必知要点两个后端的--threshold不通用。MinHash 分支的阈值是 Jaccard 相似度--semantic分支是余弦相似度两套标尺一个数值在 A 后端调好搬到 B 后端毫无意义。语义去重不是改写检测器。实测中真改写的余弦0.49–0.76与必须保留的不同样本0.54–0.76区间重叠——把阈值降到 0.7 去追改写召回率删掉的是真实训练行这种静默数据损失比留一条重复更糟。所以默认 0.8 是刻意保守的只建议在自有数据上验证后微调并且检查被删的样本。语义去重单次上限 5 万行。它是 O(n²) 的贪心匹配超过上限会直接报错而不是偷偷抽样此时先用soup data sample采样再按 tests/test_issue349_measured_fit.py 这类测试的思路在自己的机器上验证性能。快速上手3 步跑通去重流水线# 第 1 步安装依赖二选一 pip install soup-cli[data] # 只跑 MinHash 去重 pip install soup-cli[train] # 需要 --semantic 语义去重 # 第 2 步MinHash 去重轻量快速默认 soup data dedup ./data/train.jsonl --threshold 0.8 # 第 3 步语义去重改写型重复一网打尽 soup data dedup ./data/train.jsonl --semantic -o clean.jsonl不指定-o时输出文件默认为输入文件名_deduped.jsonl且必须位于当前工作目录之下。--field text可以指定只用某个字段参与比较不指定则拼接行内所有文本字段。去重不止一条命令Soup 里的其他防线去重能力还散落在其他命令里构成完整的数据质量防线生成时去重soup data generate --prompt ... --count 200 --dedup-with existing.jsonl合成数据前先和已有数据集比对避免新数据与旧数据重复偏好数据体检soup data lint的near_duplicates检查直接复用了soup data dedup的 MinHash 内核能揪出 DPO 偏好对里的近似重复见 docs/data.md构建期精确去重soup build内建 5 个变换其中dedup_exact负责逐字去重且支持 SQLite 追踪的增量重变换。更多命令速查见 docs/commands.md 与 docs/data.md。总结维度MinHash默认--semantic语义去重比较对象词面 shingleJaccard嵌入向量余弦改写型重复❌ 漏检✅ 能抓住依赖soup-cli[data]soup-cli[train] 小嵌入模型速度快LSH 加速O(n²)上限 5 万行阈值含义Jaccard 相似度余弦相似度一句话选型先用默认 MinHash 扫一遍精确近似重复再用--semantic补刀改写型重复阈值保持默认 0.8想动它之前先看看它准备删掉什么。去重做对了你的微调数据才算真正干净。【免费下载链接】SoupFine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU.项目地址: https://gitcode.com/GitHub_Trending/soup12/Soup创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表