ARTICLE DETAIL

资讯详情

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

Data-Juicer 数据分析指南:基于 dj-analyze 的统计分布、相关性分析与阈值决策实战

Data-Juicer 数据分析指南:基于 dj-analyze 的统计分布、相关性分析与阈值决策实战 人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载在为大模型语料设置过滤阈值之前先看清数据集的统计画像往往能事半功倍。Data-Juicer 提供的dj-analyze分析器会对所有算子产生的统计量stats计算分布与相关性让你基于数据事实而非直觉来设定过滤阈值。本文将围绕 docs/AnalyzeData.md 的完整脉络结合仓库源码深入讲解 CLI 用法、Python API、分析输出产物、参与分析的算子类型、Ray 分布式分析以及中文字体配置帮助你快速上手并理解其底层原理。完整参数列表请参阅 全局配置参考。一、CLI 快速入门1.1 基本用法基于已有 recipe 运行分析dj-analyze是 Data-Juicer 提供的分析入口命令在 pyproject.toml 中注册为data_juicer.tools.analyze_data:main。其核心逻辑位于 tools/analyze_data.py通过init_configs(allow_autoTrue)读取配置根据executor_type选择RayAnalyzer或标准Analyzer随后调用analyzer.run()执行完整分析流程。dj-analyze --config path/to/your-recipe.yaml该命令会加载 recipe 中声明的所有算子对数据集执行统计计算并生成分析报告。一份可运行的示例配置见 demos/analyze_simple/analyzer.yaml# 全局参数 project_name: demo-analyzer dataset_path: ./demos/data/demo-dataset.jsonl # 数据集文件或目录路径 np: 4 # 处理数据集的子进程数 export_path: ./outputs/demo-analyzer/demo-analyzer-result.jsonl # 处理流程一组带参数的算子 process: - language_id_score_filter: lang: en - perplexity_filter: lang: en max_ppl: 15001.2 自动模式--auto无需专门的分析 recipe如果不想为分析单独编写 recipe可以使用自动模式——它会自动选用所有能产出统计量的 Filter 算子在数据子集上进行分析dj-analyze --auto --dataset_path your-dataset.jsonl --auto_num 1000参数说明--auto_num参与分析的样本数量默认 1000适合快速查看分布概览。该参数在 config_all.yaml 中定义为 sample limit for --auto analysis。从源码看--auto仅允许在分析器入口使用config.py 会校验--auto argument can only be used for analyzer!。在 Analyzer.run() 中自动模式会执行dataset.take(min(len(dataset), self.cfg.auto_num))只截取数据子集以节省时间与计算资源。二、Python API 使用详解2.1 基础用法加载配置并运行from data_juicer.config import init_configs from data_juicer.core import Analyzer cfg init_configs(args[--config, my-recipe.yaml]) analyzer Analyzer(cfg) dataset analyzer.run() # 访问分析结果 print(analyzer.overall_result)Analyzer.__init__见 data_juicer/core/analyzer.py会完成以下初始化解析配置init_configs(allow_autoTrue)若启用use_cache按cache_compress设置缓存压缩方式支持gzip、zstd、lz4参见 config_all.yaml构建数据集加载器DatasetBuilder准备导出器Exporter——分析场景下export_dsFalse不导出数据集原文仅导出统计量export_statsTrue设置analysis_path cfg.work_dir/analysis作为分析结果输出目录。2.2 分析已有数据集用 NestedDataset 包装from data_juicer.core import Analyzer, NestedDataset from data_juicer.config import init_configs cfg init_configs(args[ --config, my-recipe.yaml, --export_path, ./analysis-output/stats.jsonl, ]) analyzer Analyzer(cfg) dataset NestedDataset(NestedDataset.from_json(my-data.jsonl)) analyzed analyzer.run(datasetdataset)将 Hugging Face Dataset 包装进NestedDataset后即可直接交给Analyzer.run()处理传入dataset参数时analyzer.py 会跳过数据集加载步骤直接使用现有数据集。2.3 在内存中使用统计量reduceFalse 计算逐行统计当只需要逐行统计值、希望保留全部输入行时可直接调用 Filter 并设置reduceFalse——此时算子只计算统计量、不做过滤返回的数据集可继续用于后续脚本处理。数据集的导出由调用方控制启用数据集缓存时会使用磁盘存储。from data_juicer.core import NestedDataset from data_juicer.ops.filter import TextLengthFilter from data_juicer.utils.constant import Fields, StatsKeys dataset NestedDataset(NestedDataset.from_json(my-data.jsonl)) analyzed TextLengthFilter().run(datasetdataset, reduceFalse) stats analyzed[Fields.stats] avg_len sum(s[StatsKeys.text_len] for s in stats) / len(stats) if len(stats) else 0 print(fAverage text length: {avg_len:.2f})这里涉及的常量定义在 data_juicer/utils/constant.pyFields.stats__dj__stats__Filter 算子生成的统计量字段Fields.meta__dj__meta__打标tagging类算子生成的标签字段StatsKeys则是算子与统计量键名的映射管理类constant.py例如StatsKeys.text_len对应文本长度统计。2.4 手动分析管线完全掌控分析逻辑如果希望对分析流程进行精细控制可以直接使用底层组件from data_juicer.ops.filter import LanguageIDScoreFilter, TextLengthFilter from data_juicer.analysis import OverallAnalysis, ColumnWiseAnalysis from data_juicer.core import NestedDataset dataset NestedDataset(NestedDataset.from_json(my-data.jsonl)) # 只计算统计量reduceFalse 关闭过滤 filters [ TextLengthFilter(min_len0, max_len999999), LanguageIDScoreFilter(langen, min_score0.0), ] for f in filters: dataset f.run(datasetdataset, reduceFalse) # 仅计算统计不执行过滤 # 运行分析 output_dir ./my-analysis overall OverallAnalysis(dataset, output_dir) result overall.analyze() print(result) column_wise ColumnWiseAnalysis(dataset, output_dir, overall_resultresult) column_wise.analyze()该模式对应Analyzer.run()内部的三段式分析流程见 analyzer.pyOverallAnalysis调用 pandasdescribe计算各统计量的 count、mean、std、min、max 与分位数结果导出为overall.csv和overall.mdoverall_analysis.pyColumnWiseAnalysis逐列绘制直方图、箱线图与词云CorrelationAnalysis计算统计量之间的相关系数并绘制热力图。2.5 动态分析维度按数据模态选择分析算子在自动化管线中可以根据样本模态文本/图像等动态决定使用哪些分析算子from data_juicer.core import Analyzer, NestedDataset from data_juicer.config import init_configs dataset NestedDataset(NestedDataset.from_json(input.jsonl)) sample dataset[0] # 依据数据模态构建分析配置 process_config [] # 文本统计 if text in sample: process_config.extend([ {text_length_filter: {min_len: 0, max_len: 999999}}, {language_id_score_filter: {lang: en, min_score: 0.0}}, {alphanumeric_filter: {min_ratio: 0.0}}, ]) # 图像统计 if images in sample and sample[images]: process_config.extend([ {image_shape_filter: {min_width: 0, min_height: 0}}, {image_aspect_ratio_filter: {min_ratio: 0.0, max_ratio: 999}}, ]) cfg init_configs(args[ --auto, --dataset_path, input.jsonl, --export_path, ./analysis/stats.jsonl, ], allow_autoTrue) cfg.process process_config # 自动模式最多分析 auto_num 行默认 1000 analyzer Analyzer(cfg) analyzed analyzer.run(datasetdataset)注意当使用allow_autoTrue构建配置后可以直接覆写cfg.process为动态生成的算子列表Analyzer.run()会通过load_opsanalyzer.py加载这些算子并执行统计计算。三、分析输出产物分析器会生成三类核心产物产物说明输出形式总体统计表每个统计量的 count、mean、std、min、maxoverall.csv/overall.md分布图每个统计量的直方图histogramstat-hist.png、all-stats.png相关性分析统计量两两之间的相关系数热力图stats-corr-method.png3.1 输出位置与路径解析图表与总体统计表保存在analyzer.analysis_path即cfg.work_dir/analysis解析后的work_dir包含job_idwork_dir与job_id的定义见 config_all.yaml。统计量数据集按照export_path导出。3.2 skip_export 与初始化行为Analyzer.run(..., skip_exportTrue)保存统计量数据集但跳过总体统计表和分布图的导出对应 analyzer.py 中各analyze(skip_export...)调用。Analyzer在初始化时会创建工作目录并备份配置。3.3 各分析的实现细节总体分析overall_analysis.py默认分位数为[0.25, 0.5, 0.75]可通过配置percentiles扩展config_all.yaml分析支持str与list两种 object 类型列list 列会被explode展开后推断类型。列分析column_wise_analysis.py数值列绘制直方图与箱线图字符串列绘制直方图与词云当save_stats_in_one_file: trueconfig_all.yaml时所有图合并为all-stats.png并可通过show_percentilesTrue在图上叠加红色分位数参考线。相关性分析correlation_analysis.py仅针对数值型统计量支持pearson、kendall、spearman三种方法默认 pearson数值列表列会被均值化后纳入计算结果热力图保存为stats-corr-method.png。四、哪些算子参与分析Analyzer.run()只处理两类算子见 analyzer.pyFilter 算子能产生__dj__stats__统计量的过滤器绝大多数 Filter 都属于此类。执行时会将算子的process方法临时置为None只保留统计计算逻辑。打标算子Tagging Operators能产生__dj__meta__标签的算子通常为部分 Mapper。注册表标记定义在 data_juicer/ops/base_op.pyNON_STATS_FILTERS不产生统计量的 Filter 注册表如 suffix_filter.py 注册的 SuffixFilterTAGGING_OPS产生标签的算子注册表如 video_tagging_from_frames_filter.py 同时注册了两个表。如果process列表中没有任何 Filter 或 Tagging 算子analyzer.py 会输出警告No stats/meta collected. Please add some Filter OPs or Tagging OPs to the process list in configs.。此外当启用op_fusion时Analyzer 会对算子做融合与重排fuse_operators但会显式设置mapper_fusionFalse因为分析器只需要执行统计/打标算子不应混入普通 Mapper。五、分布式分析Ray将executor_type设置为ray即可使用RayAnalyzer它借助 Ray 原生的聚合能力处理大规模数据dj-analyze --config demos/analyze_simple/ray_analyzer.yaml一份可运行的 Ray 分析配置见 demos/analyze_simple/ray_analyzer.yamlproject_name: demo-ray-analyzer dataset_path: ./demos/data/demo-dataset.jsonl executor_type: ray # 将执行器类型设为 ray ray_address: auto # 自动获取 Ray 地址 export_path: ./outputs/demo-ray-analyzer process: - text_length_filter: min_len: 10 max_len: 10000 - words_num_filter: lang: en min_num: 10 max_num: 10000 - alphanumeric_filter: min_ratio: 0.25 max_ratio: 0.9注意限制RayAnalyzer 不产生逐列分布图与相关性分析。更多细节参见 分布式处理。六、字体配置解决Glyph missing警告如果生成的分布图出现 Glyph missing字形缺失警告说明 matplotlib 缺少合适的字体渲染 CJK 等字符。可通过环境变量指定字体export ANALYZER_FONTHeiti SC # 默认值支持 CJK 字符该环境变量在 column_wise_analysis.py 中被读取并设置为 matplotlib 的font.sans-serif同时设置axes.unicode_minus False以正确显示负号词云绘制也会通过font_manager.findfont(self.font)定位该字体column_wise_analysis.py。可按需替换为系统中已安装的其他中文字体如SimHei、Noto Sans CJK SC等。七、进阶结合多样性分析理解数据除分布与相关性外Data-Juicer 的analysis模块还提供文本多样性分析。DiversityAnalysisdiversity_analysis.py默认针对text列、语言默认为en支持通过lang_or_model选择语言/模型并通过postproc_func自定义多样性后处理函数。它可以与其他分析组合使用从更多维度刻画数据集质量。八、下一步行动想交互式调整阈值参见 Web Playground分析完成后开始处理数据参见 Processing Data需要大规模分析参见 Distributed Processing。本文围绕 docs/AnalyzeData.md 展开所有源码引用均可在当前仓库中直接查阅分析入口 tools/analyze_data.py、核心实现 data_juicer/core/analyzer.py、三种分析组件位于 data_juicer/analysis/示例配置位于 demos/analyze_simple/。掌握这些能力后你就能在设置过滤阈值前用数据驱动的方式全面理解自己的数据集。赞分享人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载相关推荐Data-Juicer 数据分析完全指南用 dj-analyze 与 Analyzer 为过滤阈值提供数据支撑Data Juicer 数据分析完全指南用 dj analyze 与 Analyzer 为过滤阈值提供数据支撑 在确定过滤阈值之前通常需要先了解数据集的统计人工智能大模型数据工程数据清洗数据增强数据质检Data Science for Beginners 概率统计实战基于糖尿病数据集的描述统计、相关性分析与假设检验完整指南Data Science for Beginners 概率统计实战基于糖尿病数据集的描述统计、相关性分析与假设检验完整指南 本篇技术指南以 Data Scie数据科学教程Data Science for Beginners 第 04 课实战指南基于糖尿病数据集的描述性统计、相关性分析与假设检验Data Science for Beginners 第 04 课实战指南基于糖尿病数据集的描述性统计、相关性分析与假设检验 本篇实战指南围绕 Data Sc数据科学教程上一篇DaoCloud镜像加速实战一键配置Kubernetes镜像加速下一篇CANN/ops-tensor Tile层组件概述创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表