
人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载本文围绕 Data-Juicer 的suffix_filter过滤算子展开系统讲解它如何依据样本的__dj__suffix__后缀字段精准保留或剔除数据样本覆盖参数配置、匹配逻辑、与加载/格式化模块的协作方式以及单元测试验证。读完本文你将掌握 SuffixFilter 在文本尤其是多来源混合语料清洗流水线中的配置方法并能通过源码理解其无统计量过滤NON_STATS的实现机制与反向过滤的扩展能力。算子定位按后缀字段做白名单过滤suffix_filter是 Data-Juicer 提供的一种filter过滤类型算子标签为cpu运行在 CPU 上即可完成。它的职责非常聚焦保留后缀与指定列表匹配的样本其余样本一律过滤掉。从 源码注册信息 可以看到该算子同时注册进了两个注册表OP_NAME suffix_filter NON_STATS_FILTERS.register_module(OP_NAME) OPERATORS.register_module(OP_NAME) class SuffixFilter(Filter):其中NON_STATS_FILTERS注册表定义于 data_juicer/ops/base_op.py含义是无统计量过滤算子——这类算子不需要在统计阶段预先计算数值型指标如词数、长度、困惑度而是直接基于样本已有字段做布尔判断因此计算开销极小、执行路径更短。判断依据__dj__suffix__字段SuffixFilter 并不读取文本内容本身而是检查每个样本的suffix 字段该字段在 data_juicer/utils/constant.py 中统一定义suffix DEFAULT_PREFIX suffix__ # 即 __dj__suffix__这个字段一般记录样本来源文件的扩展名如.txt、.pdf、.docx、.py、.html等由加载/格式化阶段自动填充详见后文字段从哪来一节。SuffixFilter 的做法就是对sample[Fields.suffix]做一次集合成员判断res_bool sample[Fields.suffix] in self.suffixes匹配则保留不匹配则过滤若未配置任何后缀则全部保留。参数配置详解官方文档给出的参数表如下name 参数名type 类型default 默认值desc 说明suffixestyping.Union[str, typing.List[str]][]the suffix of text that will be keep. For example: .txt, txt or [txt, .pdf, docx]argsextra argskwargsextra args结合 初始化实现各参数的实际行为如下suffixes允许的后缀白名单。三种取值形态都会被归一化处理传入None归一化为空列表[]等价于不过滤全部样本保留传入单个字符串如.txt、txt自动包装成单元素列表[.txt]传入字符串列表如[txt, .pdf, docx]直接使用。注意匹配是精确的字符串相等判断不是子串/通配符匹配因此.txt与txt属于两个不同的值配置时需与样本__dj__suffix__字段的实际取值保持一致。args/kwargs透传给父类Filter的额外参数用于承载 Data-Juicer 过滤算子的公共参数。继承自基类 Filter 的公共参数SuffixFilter 继承自 data_juicer/ops/base_op.py 中的Filter基类因此还隐式支持以下公共参数通过kwargs传入其中reversed_range对 SuffixFilter 有直接影响参数名类型默认值说明reversed_rangeboolFalse是否反转过滤区间/逻辑。为True时SuffixFilter 会反向过滤保留后缀不匹配白名单的样本剔除匹配的样本min_closed_intervalboolTrue区间下界是否闭区间对数值型过滤算子生效SuffixFilter 不使用max_closed_intervalboolTrue区间上界是否闭区间同上stats_export_pathstr/NoneNone统计量导出路径SuffixFilter 不产出统计量一般不配置text_key/image_key等str见具体算子指定待处理字段的 key文本类算子常用其中reversed_range在process_single中生效的逻辑为源码 L41-L48def process_single(self, sample): if self.suffixes: res_bool sample[Fields.suffix] in self.suffixes if self.reversed_range: res_bool not res_bool return res_bool else: return True底层实现原理无统计量的两阶段框架Data-Juicer 的过滤算子统一遵循统计compute_stats→ 过滤process两阶段执行框架基类 Filter.process 会对数据集整体执行map(compute_stats)filter(process)。SuffixFilter 对这一框架做了最简化的实现统计阶段为空操作compute_stats_single直接原样返回sample源码 L38-L39。因为判断所需的__dj__suffix__字段在样本中已存在无需额外计算中间统计量这正是它被注册为NON_STATS_FILTERS的原因——不占用统计缓存、不需要stats字段运行更轻量。过滤阶段做布尔判断process_single返回一个布尔值True保留、False剔除并在reversed_rangeTrue时取反见上节代码。由于process与compute_stats在基类中被标记为不可被子类覆盖base_op.py L851-L861子类只能实现process_single/compute_stats_single或对应的_batched版本这保证了框架执行路径的一致性SuffixFilter 本身也未声明 batched 版本默认走单样本逐条处理路径。效果演示两种典型场景以下效果演示直接取自官方文档 docs/operators/filter/suffix_filter.md并补充了对应单元测试的验证结果。场景一指定后缀白名单算子配置SuffixFilter(suffixes[.txt, .pdf])输入数据5 条样本#text 文本__dj__suffix__Sample 1Today is Sun.pdfSample 2a v s e c s f e f g a a a.docxSample 3中文也是一个字算一个长度.txtSample 4。、„”“«»」「《》´∶.htmlSample 5dasdasdasdasdasdasdasd.py输出数据仅 2 条样本被保留#text 文本__dj__suffix__Sample 1Today is Sun.pdfSample 3中文也是一个字算一个长度.txt解释白名单为[.txt, .pdf]因此后缀为.pdf与.txt的样本被保留后缀为.docx、.html、.py的样本被过滤。该用例与单元测试 tests/ops/filter/test_suffix_filter.py 中的test_case完全一致测试通过dataset.map(op.compute_stats)与dataset.filter(op.process)两段调用复现了与文档完全相同的输入输出。场景二不指定后缀默认行为算子配置SuffixFilter()输入数据与场景一相同的 5 条样本.pdf、.docx、.txt、.html、.py。输出数据与输入数据完全相同——由于没有提供任何后缀所有样本都被保留不发生过滤。解释这是理解算子默认行为的典型边缘情况。当suffixes为空默认[]或显式传None时process_single直接返回True等价于一个恒真的旁路过滤器不会误伤任何样本。单元测试中的test_none_casetest_suffix_filter.py L47-L83与test_none_suffixesL97-L105分别验证了不传参数与显式传None两种情形下全部样本保留的行为。扩展用法字符串形态与反向过滤除官方文档演示的两类场景外单元测试 还覆盖了以下两种值得注意的用法1. 传入单个字符串test_string_suffixL86-L95SuffixFilter(suffixes.txt)构造器会把字符串自动包装为[.txt]效果与传入单元素列表一致只保留后缀为.txt的样本。适合在 YAML 配置中直接写suffixes: .txt的简洁用法。2. 反向过滤test_reversed_rangeL107-L116SuffixFilter(suffixes[.txt], reversed_rangeTrue)reversed_rangeTrue会取反判断结果即保留后缀不在白名单中的样本。在上面的例子中输入为[.txt, .py]两条样本输出仅保留.py样本。这为排除某类来源文件的清洗需求提供了便捷手段例如剔除所有.html来源样本可以写作SuffixFilter(suffixes[.html], reversed_rangeTrue)。实战在 Data-Juicer 配置中使用 SuffixFilter按 Data-Juicer 的通用配置约定过滤算子在 YAML 的process或filter列表中按算子名: {参数}的格式声明。一个混合语料只保留 txt/pdf/docx 来源文本的配置片段示例process: - suffix_filter: suffixes: [.txt, .pdf, docx] # 也可写作单个字符串如 .txt若希望做排除式过滤如丢弃所有来自 html 网页抓取的样本可加上reversed_rangeprocess: - suffix_filter: suffixes: [.html] reversed_range: true需要注意的前提是数据集中必须存在__dj__suffix__字段否则process_single中的sample[Fields.suffix]会因 KeyError 报错。完整算子列表与配置入口可参考 docs/Operators.md。溯源__dj__suffix__字段从哪来SuffixFilter 的正确运行依赖后缀字段被正确填充仓库中有两条主要来源路径格式化阶段自动补充在 data_juicer/format/formatter.py 的add_suffixes函数中Data-Juicer 会遍历数据集为缺少Fields.suffix特征的数据集补上一列初始值取数据集来源 key 对应的扩展名. key。这意味着按来源文件分别加载如text/txt、text/pdf等不同 key 的语料时每个样本会自动带上与来源匹配的后缀为后续按来源过滤提供基础。宽松 jsonl 加载器在 data_juicer/utils/jsonl_lenient_loader.py 中开启add_suffix_column选项后每行解析出的样本会被写入row[Fields.suffix]后缀值取自文件路径。因此一个典型的落地链路是加载时自动生成后缀字段 → SuffixFilter 按白名单过滤 → 输出纯净的指定来源语料。这种来源感知的过滤能力特别适合多来源混合语料如网页抓取、PDF 扫描件、代码仓库、论文语料混排的定向清洗场景。小结suffix_filter是无统计量的 CPU 过滤算子依据__dj__suffix__字段做精确后缀白名单匹配suffixes支持字符串、字符串列表与None三种形态空列表/None表示不过滤借助基类参数reversed_range可实现反向过滤剔除指定后缀源码实现位于 data_juicer/ops/filter/suffix_filter.py官方文档位于 docs/operators/filter/suffix_filter.md单元测试位于 tests/ops/filter/test_suffix_filter.py可直接作为行为契约与使用范例参考。赞分享人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载相关推荐Data-Juicer 视频时长过滤算子video_duration_filter深度解析参数配置、实现原理与实战用法Data Juicer 视频时长过滤算子video_duration_filter深度解析参数配置、实现原理与实战用法 视频时长是视频数据质量清洗中最基础人工智能大模型数据工程数据清洗数据增强数据质检Data-Juicer 视频分辨率过滤算子 video_resolution_filter 完全指南参数、原理与实战Data Juicer 视频分辨率过滤算子 video_resolution_filter 完全指南参数、原理与实战 导读 video_resolution_人工智能大模型数据工程数据清洗数据增强数据质检data-juicer 文档级 MinHash LSH 去重算子实战document_minhash_deduplicator 原理、参数与效果详解data juicer 文档级 MinHash LSH 去重算子实战document_minhash_deduplicator 原理、参数与效果详解 大模型训人工智能大模型数据工程数据清洗数据增强数据质检上一篇解锁DataHub元数据搜索从基础到高级的查询优化指南下一篇RabbitMQ批量处理高性能消息批处理技术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考