ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Data-Juicer 指定数值字段过滤算子(specified_numeric_field_filter)完全指南:参数、多级字段与运行原理

Data-Juicer 指定数值字段过滤算子(specified_numeric_field_filter)完全指南:参数、多级字段与运行原理 人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载本指南深入讲解 Data-Juicer 中的specified_numeric_field_filter过滤算子如何根据样本中指定字段支持点分隔的多级字段的数值是否落在[min_value, max_value]区间内来决定样本去留并完整还原官方文档中的参数表格与效果演示结合仓库源码算子实现、单元测试剖析其两阶段执行原理、字符串数字兼容逻辑与边界行为帮助读者在真实数据清洗流水线中正确配置和使用该算子。算子概述与适用场景specified_numeric_field_filter是 Data-Juicer 的filter过滤类算子标签为cpu无需 GPU纯 CPU 逻辑执行。它的核心能力是以样本中某个字段的数值为判据仅保留数值落在给定闭区间[min_value, max_value]内的样本字段支持多级嵌套结构各级键之间用点号.分隔例如meta.star、meta.key1.key2.count若未提供field_key则保留所有样本算子在进行比较前会先确保字段存在于样本中且其值可被解析为数值。典型应用场景包括按元数据如文档评分meta.star、下载量、统计计数等筛选语料、剔除数值异常或超出业务阈值的样本、对多级 JSON 结构中的深层数值字段做质量门槛控制等。参数配置说明官方文档给出的参数表如下实际取值与源码签名见 specified_numeric_field_filter.py一致参数名类型默认值说明field_keystr参与过滤的目标键对应的数值字段多级字段信息对应的目标键需要用.分隔min_valuefloat-9223372036854775807即-sys.maxsizeSpecifiedNumericField 算子的最小过滤值指定数值字段低于该参数时样本将被过滤max_valuefloat9223372036854775807即sys.maxsizeSpecifiedNumericField 算子的最大过滤值指定数值字段超过该参数时样本将被过滤args—额外参数kwargs—额外参数几点补充说明默认值取自 Python 的sys.maxsize约9.22e18因此只设置min_value或只设置max_value的单侧过滤是常见用法例如min_value10表示只过滤掉数值小于 10 的样本上界保持默认极大值区间为闭区间数值等于min_value或max_value的样本会被保留在完整配置模板 config_all.yaml 中该算子给出的参考示例为field_key: 、min_value: 0、max_value: 10000实际使用时应按业务数据替换除上表参数外算子还继承自Filter基类可透传诸如min_closed_interval、max_closed_interval、reversed_range等通用过滤参数详见下文“底层实现原理”它们通过kwargs接收。底层实现原理从源码结构看该算子遵循 Data-Juicer 过滤算子的两阶段模式先compute_stats计算统计量再process依据统计量决定去留。阶段一compute_stats_single 提取字段值def compute_stats_single(self, sample): # get the value from the original field field_value sample for key in self.field_key.split(.): assert key in field_value.keys(), {} not in {}.format(key, field_value.keys()) field_value field_value[key] # copy it into the stats field if self.field_key not in sample[Fields.stats]: sample[Fields.stats][self.field_key] field_value return sample关键点按点号切分field_key后逐层下钻取值因此天然支持任意深度的嵌套字典若某层键不存在会触发断言{} not in {}报错说明配置的field_key必须与样本实际结构严格对应提取出的原始值被拷贝到样本的 stats 字段Fields.stats定义于 constant.py值为__dj__stats__中供下一阶段读取实现统计与决策解耦。阶段二process_single 区间判定def process_single(self, sample): if not self.field_key: return True field_value sample[Fields.stats][self.field_key] if is_number(field_value): field_value float(field_value) return self.get_keep_boolean(field_value, self.min_value, self.max_value) else: return False关键点field_key为空时直接返回True即所有样本都被保留与文档描述一致取值后先经过模块级辅助函数is_number校验它尝试float(s)转换成功返回True否则返回False非数值一律返回False被过滤包括None、无法解析为数字的字符串如asdkc等可解析为数字的值统一转为float后交给基类方法get_keep_boolean判定。基类区间判定get_keep_boolean最终比较逻辑位于 base_op.pydef get_keep_boolean(self, val, min_valNone, max_valNone): res_bool True if min_val is not None: res_bool res_bool and (val min_val if self.min_closed_interval else val min_val) if max_val is not None: res_bool res_bool and (val max_val if self.max_closed_interval else val max_val) if self.reversed_range: res_bool not res_bool return res_bool基类还通过kwargs提供了三个通用调节项base_op.pymin_closed_interval默认True下界是否闭区间为False时改为严格大于max_closed_interval默认True上界是否闭区间为False时改为严格小于reversed_range默认False为True时整体取反将保留区间翻转为(-∞, min_val) ∪ (max_val, ∞)即保留区间之外的样本。也就是说specified_numeric_field_filter默认是闭区间过滤但可以通过继承自基类的这些通用参数扩展出开区间、反向过滤等变体行为。效果演示官方 test_case官方文档给出的第一个示例构造如下源码对应 test_caseSpecifiedNumericFieldFilter(field_keymeta.star, min_value10, max_value70)输入数据Sampletextmeta.suffixmeta.star1Today is Sun.pdf502a v s e c s f e f g a a a.docx63中文也是一个字算一个长度.txt1004。、„”“«»」「《》´∶.html12.515dasdasdasdasdasdasdasdNone无该字段输出数据Sampletextmeta.suffixmeta.star1Today is Sun.pdf504。、„”“«»」「《》´∶.html12.51解释算子根据meta.star字段过滤样本仅保留该字段值在 10 到 70含端点之间的样本。Sample 26与 Sample 3100超出范围被移除Sample 5 缺少meta.star字段、无数值可判同样被过滤。范围外的样本被移除。注意 Sample 4 的12.51是浮点数同样正常参与比较。效果演示官方 test_str_case字符串数字官方文档给出的第二个示例验证了字段值为数字字符串时的行为源码对应 test_str_caseSpecifiedNumericFieldFilter(field_keymeta.star, min_value10, max_value70)输入数据Sampletextmeta.suffixmeta.star1Today is Sun.pdf362a v s e c s f e f g a a a.docx13.53中文也是一个字算一个长度.txtasdkc4。、„”“«»」「《》´∶.html4415dasdasdasdasdasdasdasdNone无该字段输出数据Sampletextmeta.suffixmeta.star1Today is Sun.pdf362a v s e c s f e f g a a a.docx13.5解释此案例说明当指定数值字段是数字的字符串表示时算子同样能工作。36、13.5可被float解析并落入[10, 70]而被保留asdkc无法解析为非数值字符串被过滤441虽可解析但超出上界 70 被过滤缺少字段的 Sample 5 被过滤。整个流程由is_number完成字符串校验、再由float()统一转数值后比较。多级嵌套字段实战test_multi_case官方文档未单独展示、但单元测试中专门覆盖的多层字段场景test_multi_case是理解点分隔键的关键SpecifiedNumericFieldFilter(field_keymeta.key1.key2.count, min_value10, max_value70)输入样本中meta.key1.key2.count分别取值34、243、None、18输出仅保留34与18两条。该用例验证了三件事点号分隔键可穿透任意层级的嵌套字典compute_stats_single中逐层split(.)下钻None作为深层字段值会被判为非数值而过滤同一样本中即使存在同名的其他字段如顶层count为101或None也只以field_key指向的那条路径为准各字段互不干扰。在数据流水线中配置使用YAML 配置方式在 Data-Juicer 的 processing 配置文件中将该算子加入process列表即可process: - specified_numeric_field_filter: field_key: meta.star # 目标数值字段多级用 . 分隔 min_value: 10 # 下界含低于该值的样本被过滤 max_value: 70 # 上界含高于该值的样本被过滤更完整的模板可参考 config_all.yaml 中给出的示例参数。命令行运行配置好 YAML 后通过 Data-Juicer 的process_data.py工具执行python tools/process_data.py --config your_config.yaml代码直接调用也可以在 Python 脚本中直接构造算子并作用于数据集与单元测试 test_specified_numeric_field_filter.py 的执行模式一致from data_juicer.core.data import NestedDataset as Dataset from data_juicer.ops.filter.specified_numeric_field_filter import \ SpecifiedNumericFieldFilter from data_juicer.utils.constant import Fields ds_list [{text: Today is Sun, meta: {star: 50}}, {text: bad sample, meta: {star: 6}}] dataset Dataset.from_list(ds_list) # 补充 stats 列过滤算子依赖该列存放中间统计量 if Fields.stats not in dataset.features: dataset dataset.add_column(nameFields.stats, column[{}] * dataset.num_rows) op SpecifiedNumericFieldFilter(field_keymeta.star, min_value10, max_value70) dataset dataset.map(op.compute_stats) # 阶段一提取并缓存字段值 dataset dataset.filter(op.process) # 阶段二按区间过滤 dataset dataset.remove_columns(Fields.stats) # 清理中间统计列需要说明的是常规流水线中上述map/filter调用由 Data-Juicer 的 executor 自动编排用户只需在配置中声明算子此处仅用于展示算子的两阶段调用契约。边界情况与注意事项字段缺失compute_stats_single会因断言失败而报错因此field_key必须存在于所有样本中若某些样本缺少该字段但希望保留应先用其他算子补全或使用空field_key保留全部样本非数值值None、不可解析字符串等一律被过滤这保证了区间比较永远发生在合法的float上浮点精度比较前统一float()转换整数、浮点数、数字字符串均可处理但超大整数在转为float后可能引入精度损失对精度敏感的字段需自行评估闭区间语义默认min_value/max_value端点均含需要开区间或反向保留时可利用基类透传的min_closed_interval、max_closed_interval、reversed_range参数见 base_op.py与specified_field_filter的区分仓库中还提供了按字段值精确匹配/多值集合保留的 specified_field_filter参数为field_keytarget_value列表而本算子专用于数值区间过滤二者配置方式不同可按需选用。相关资源算子源代码包含is_number校验、两阶段实现与参数签名单元测试覆盖基础区间、多级嵌套、字符串数字三类场景基类区间判定逻辑get_keep_boolean与区间开关参数完整配置模板流水线 YAML 中的参考写法返回算子列表查看全部 filter 类算子赞分享人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载相关推荐data-juicer 指定字段过滤算子 SpecifiedFieldFilter 详解按元数据字段值精准筛选样本data juicer 指定字段过滤算子 SpecifiedFieldFilter 详解按元数据字段值精准筛选样本 data juicer 是面向大模型的数据人工智能大模型数据工程数据清洗数据增强数据质检data-juicer 停用词过滤算子 stopwords_filter 完全指南原理、参数与实战data juicer 停用词过滤算子 stopwords_filter 完全指南原理、参数与实战 本文围绕 data juicer 的文本过滤算子 stop人工智能大模型数据工程数据清洗数据增强数据质检Data-Juicer general_field_filter 通用字段过滤算子表达式语法、AST 求值原理与实战配置Data Juicer general_field_filter 通用字段过滤算子表达式语法、AST 求值原理与实战配置 导读 general_field_f人工智能大模型数据工程数据清洗数据增强数据质检上一篇Touhou Community Reliant Automatic Patcher高级技巧断点调试与内存补丁实战指南下一篇Epitran错误处理与调试技巧常见问题与解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表