## Data-Juicer 问答 Copilot 示例(中文) 本文按案例展示 **输入问题(Input)** 与 **助手回答(Output)**,便于理解 QA Copilot 的实际效果。 你可以在官方[文档页](https://datajuicer.github.io/data-juicer/zh_CN/main/index_ZH.html)和我们的 [问答 Copilot](./README.md) ***Juicer*** 聊天! 欢迎向 ***Juicer*** 提出任何与 Data-Juicer 生态相关的问题。
--- ### 案例 1 · 算子介绍(alphanumeric_filter,ZH) - **类型**: `operator_qa` - **语言**: `zh` **输入(用户提问)** > 介绍alphanumeric_filter
输出(助手回答) `alphanumeric_filter` 是 Data-Juicer 中的一个**过滤算子(Filter Operator)**,用于根据样本中**字母数字字符(或词元)的比例**筛选数据。它保留那些字母数字比例落在指定区间内的样本,常用于清洗低质量或非自然语言文本(如代码、乱码、广告等)。 --- ## 📌 核心功能 - **字符级或词元级计算**: 通过 `tokenization` 参数控制: - 若为 `False`(默认),按**字符数**计算字母数字占比 → 使用字段 `'alnum_ratio'` - 若为 `True`,使用 Hugging Face tokenizer 按**词元(token)**计算 → 使用字段 `'alpha_token_ratio'` - **范围过滤**: 通过 `min_ratio` 和 `max_ratio` 设置保留样本的合法比例区间 [min, max]。 --- ## ⚙️ 参数说明 | 参数名 | 类型 | 描述 | |---------------|---------|--------------------------------------------| | `tokenization`| `bool` | 是否启用词元化计算(默认 False → 字符级) | | `min_ratio` | `float` | 最小字母数字比例阈值 | | `max_ratio` | `float` | 最大字母数字比例阈值 | > 💡 示例:设置 `min_ratio=0.25`, `max_ratio=1.0` 可过滤掉字母数字比例低于 25% 的样本(如纯符号、乱码文本)。 --- ## 🧩 使用示例(YAML 配置) ```yaml process: - alphanumeric_filter: tokenization: false min_ratio: 0.25 max_ratio: 1.0 ``` --- ## 📚 参考资料 - 算子源码:[alphanumeric_filter.py](https://github.com/datajuicer/data-juicer/blob/main/data_juicer/ops/filter/alphanumeric_filter.py) - 单元测试:[test_alphanumeric_filter.py](https://github.com/datajuicer/data-juicer/blob/main/tests/ops/filter/test_alphanumeric_filter.py) - 官方文档:[alphanumeric_filter.md](https://datajuicer.github.io/data-juicer/en/main/docs/operators/filter/alphanumeric_filter.md)
--- ### 案例 2 · 模块介绍(DJ-Agents,ZH) - **类型**: `submodule_qa` - **语言**: `zh` **输入(用户提问)** > 介绍DJ-Agents
输出(助手回答) Data-Juicer Agents(DJ-Agents)是 Data-Juicer 生态中的智能代理模块,旨在通过对话式交互和可视化界面,帮助用户快速构建、调试和优化数据处理菜谱(Recipe)。它结合了大语言模型(如通义千问)与 Data-Juicer 的算子能力,实现“需求描述 → 自动生成菜谱 → 交互式调试”的闭环流程。 --- ### ✅ 核心功能 1. **对话式菜谱生成** 用户只需用自然语言描述数据处理需求(例如:“帮我过滤掉中文文本中长度小于50的样本”),Agent 会自动生成对应的 YAML 菜谱配置。 2. **交互式调试与优化** 支持在运行过程中动态修改参数、增删算子、查看中间结果,并实时反馈调整效果。 3. **支持自定义算子开发** 若需扩展新算子,可结合本地 Data-Juicer 源码进行开发,Agent 会自动识别并集成新增算子。 4. **双模式运行** - **命令行模式**:适合快速测试与脚本化使用。 - **AgentScope Studio 可视化模式**:提供图形化界面,便于教学、演示和协作。 --- ### 🚀 快速开始 #### 系统要求 - Python 3.10+ - DashScope API Key(用于调用大模型) - (可选)本地 Data-Juicer 源码路径(用于自定义算子) #### 安装步骤 ```bash # 安装 uv(推荐) curl -LsSf https://astral.sh/uv/install.sh | sh # 克隆并安装 DJ-Agents git clone https://github.com/datajuicer/data-juicer-agents.git cd data-juicer-agents uv pip install -e . ``` > 如需开发自定义算子,请同时安装 Data-Juicer: ```bash git clone https://github.com/datajuicer/data-juicer.git cd data-juicer uv pip install -e . ``` #### 配置环境变量 ```bash export DASHSCOPE_API_KEY="your-dashscope-key" export DATA_JUICER_PATH="/path/to/data-juicer" # 可选 ``` #### 启动方式 - **命令行模式**(默认): ```bash dj-agents ``` - **可视化模式**(需先安装 AgentScope Studio): ```bash npm install -g @agentscope/studio as_studio # 启动 Studio dj-agents --use-studio ``` --- ### 💡 使用示例 你可以这样与 Agent 对话: > “帮我写一个菜谱:读取 JSONL 文件,过滤掉英文文本中单词数少于10的样本,再按语言聚合并保存。” Agent 将返回结构化的 YAML 配置,并支持你进一步调整参数或添加新步骤。 --- 📌 **提示**:所有操作均可通过自然语言完成,无需记忆 YAML 语法或算子名称! --- ### 🔗 参考资料 - [DJ-Agents QuickStart 文档](https://github.com/datajuicer/data-juicer-agents/blob/main/docs/QuickStart.md) - [Data-Juicer GitHub 主仓库](https://github.com/datajuicer/data-juicer) - [AgentScope Studio 官网](https://github.com/modelscope/agentscope)
--- ### 案例 3 · 概念问题(基类算子,ZH) - **类型**: `concept_qa` - **语言**: `zh` **输入(用户提问)** > 介绍一下基类算子
输出(助手回答) 在 Data-Juicer 系统中,**基类算子(Base Operator)** 是所有具体算子(如 Mapper、Filter、Deduplicator 等)的抽象父类,定义了数据处理算子的基本结构、通用属性和核心方法。它位于 `data_juicer/ops/base_op.py` 文件中,是整个算子体系的基石。 --- ## 🧱 基类结构概览 ### 1. **顶层基类 `OP`** 所有算子都继承自 `OP` 类,该类使用元类 `OPMetaClass` 实现实例化时自动记录初始化参数: ```python class OP(metaclass=OPMetaClass): ``` #### ✅ 核心功能: - **统一数据字段键名管理**:如 `text_key`, `image_key`, `audio_key`, `video_key`, `query_key`, `response_key`, `history_key` 等。 - **硬件加速支持**:通过 `accelerator` 属性支持 CPU/CUDA 自动切换。 - **批处理模式控制**:`_batched_op` 和 `batch_mode` 控制是否启用批处理。 - **资源调度配置**:支持 Ray 分布式执行时的资源配置(`num_cpus`, `num_gpus`, `memory`, `runtime_env`, `ray_execution_mode`)。 - **错误容忍机制**:通过 `skip_op_error` 控制是否跳过处理异常样本。 - **运行时并发计算**:`runtime_np()` 方法根据资源限制自动计算并行进程数。 - **嵌套数据访问封装**:通过 `wrap_func_with_nested_access` 自动支持嵌套字段访问。 - **通用运行入口 `run()`**: - 自动为 Tagging 类算子添加 `meta` 字段; - 为 Filter 类算子添加 `stats` 字段; - 支持为样本添加索引(`index_key`)。 --- ### 2. **五大核心子类算子** 从 `OP` 派生出五类专用基类,分别对应不同数据处理范式: | 类型 | 基类 | 功能描述 | 输入 → 输出 | |---------------|----------------|--------------------------------------|--------------------------| | 数据映射 | `Mapper` | 修改或增强样本内容 | sample → sample | | 数据过滤 | `Filter` | 根据条件保留/丢弃样本 | sample → bool | | 数据去重 | `Deduplicator` | 计算样本哈希并移除重复项 | dataset → dataset | | 数据选择 | `Selector` | 在数据集级别选择子集(如Top-K采样) | dataset → dataset | | 数据聚合 | `Aggregator` | 将分组样本聚合成单个样本 | batched sample → sample | > 💡 每个子类都强制要求实现特定方法(如 `process_single`, `compute_stats`),并通过装饰器自动包装为支持批处理和错误捕获的版本。 --- ## ⚙️ 关键设计特性 ### 🔁 自动批处理与单样本兼容 - 若 `_batched_op = True` 或用户设置 `batch_mode=True`,系统自动将 `process_single` 包装为批处理逻辑。 - 所有输入统一转换为 Python dict(支持 Arrow Table 自动转换)。 - 提供 `convert_list_dict_to_dict_list` / `convert_dict_list_to_list_dict` 工具函数用于格式互转。 ### 🛡️ 错误容忍机制 - 使用 `catch_map_single_exception` / `catch_map_batches_exception` 装饰器捕获单样本或批次处理中的异常。 - 可选跳过错误样本(`skip_op_error=True`),避免整个流程中断。 ### 📊 数据追踪支持(Tracer) - 自动包装 `process` 方法,在处理前后记录样本变化(适用于 Mapper/Filter)。 - 支持可视化调试和质量分析。 ### 🧩 注册机制 - 所有算子通过 `Registry("Operators")` 注册,便于动态发现和调用。 - 特殊类型算子(如不可 fork 的、非统计型 Filter、Tagging 算子等)也有独立注册表。 --- ## 🧩 示例:自定义一个简单 Mapper ```python from data_juicer.ops import Mapper class MyTextMapper(Mapper): def process_single(self, sample): sample[self.text_key] = sample[self.text_key].upper() return sample ``` 系统会自动为其添加: - 批处理支持 - 错误捕获 - 嵌套字段访问 - Tracer 集成 --- ## 📚 参考资料 - 基类源码: https://github.com/datajuicer/data-juicer/blob/main/data_juicer/ops/base_op.py - 算子文档: https://github.com/datajuicer/data-juicer/blob/main/docs/Operators.md - 教程: https://github.com/datajuicer/data-juicer/tree/main/docs/tutorial
--- ### 案例 4 · 快速开始(如何安装 DJ,ZH) - **类型**: `quick_start_qa` - **语言**: `zh` **输入(用户提问)** > 如何安装DJ?
输出(助手回答) 安装 Data-Juicer(DJ)有多种方式,您可以根据需求选择适合的安装方法: --- ## 🐍 基础安装(推荐) ### 前提条件: - Python 3.10 ~ 3.12 - 推荐使用 `uv` 包管理器(更快更稳定) ```bash # 安装 uv(任选其一) curl -LsSf https://astral.sh/uv/install.sh | sh # 或 pip install uv # 安装 DJ 核心功能 uv pip install py-data-juicer ``` > 此方式仅包含核心数据处理能力:数据加载、文件操作、并行处理等。 --- ## 🧩 场景化安装(按需组合) 根据您的任务类型,可选择安装特定模块: ```bash # 通用机器学习/深度学习支持 uv pip install "py-data-juicer[generic]" # 自然语言处理 uv pip install "py-data-juicer[nlp]" # 计算机视觉 uv pip install "py-data-juicer[vision]" # 音频处理 uv pip install "py-data-juicer[audio]" # 分布式计算 uv pip install "py-data-juicer[distributed]" # AI服务/API支持 uv pip install "py-data-juicer[ai_services]" # 开发与测试工具 uv pip install "py-data-juicer[dev]" ``` ### 常用组合示例: ```bash # 文本处理完整环境 uv pip install "py-data-juicer[generic,nlp]" # 视觉处理完整环境 uv pip install "py-data-juicer[generic,vision]" # 全功能安装(除沙箱外) uv pip install "py-data-juicer[all]" ``` --- ## 🛠️ 从源码安装(获取最新特性) ```bash git clone https://github.com/datajuicer/data-juicer.git cd data-juicer uv pip install -e . # 安装核心 uv pip install -e ".[vision]" # 安装特定模块 ``` > `-e` 表示“可编辑模式”,便于开发调试。 --- ## 🐳 Docker 安装 ### 拉取官方镜像: ```bash docker pull datajuicer/data-juicer: # 示例: docker pull datajuicer/data-juicer:v0.2.0 ``` ### 或自行构建镜像: ```bash docker build -t datajuicer/data-juicer:v0.2.0 . ``` --- ## ⚙️ 特定算子依赖安装 如果只想为某个配置文件中的算子安装最小依赖: ```bash # 仅适用于源码安装 python tools/dj_install.py --config your_config.yaml # 或使用命令行工具 dj-install --config your_config.yaml ``` --- ## 📌 注意事项 1. **视频处理**:如需使用视频相关算子,请先安装 **FFmpeg** 并确保其在 `$PATH` 中。 ```bash # Ubuntu/Debian sudo apt install ffmpeg # macOS brew install ffmpeg ``` 2. **验证安装**: ```python import data_juicer as dj print(dj.__version__) ``` 3. **遇到问题**: - 优先查阅文档或 GitHub Issues - 可提交 Issue 或加入社区讨论 --- ✅ 推荐首次用户使用 `uv pip install py-data-juicer` 快速上手,再根据具体任务扩展模块。 --- **参考文档**: - [Installation Guide](https://github.com/datajuicer/data-juicer/blob/main/docs/tutorial/Installation.md)
--- ### 案例 5 · 处理指导(过滤脏话文本,ZH) - **类型**: `processing_qa` - **语言**: `zh` **输入(用户提问)** > 我想过滤文本数据中的脏话,告诉我怎么做
输出(助手回答) 要过滤文本数据中的脏话,你可以使用 **`remove_words_with_incorrect_substrings_mapper`** 算子。虽然该算子默认用于移除包含如 "http"、"www" 等子串的词,但你可以通过自定义 `substrings` 参数传入脏话关键词列表,从而实现脏话过滤。 --- ### ✅ 使用方法 在你的 Data-Juicer 配置文件(如 `config.yaml`)中添加如下配置: ```yaml process: - remove_words_with_incorrect_substrings_mapper: lang: "en" # 或 "zh" 等其他语言 tokenization: false # 若无需分词可设为 false substrings: ["fuck", "shit", "bitch", "asshole"] # 替换为你想过滤的脏话关键词 ``` --- ### 📌 说明 - **`lang`**: 指定文本语言,影响分句和分词行为。 - **`tokenization`**: 是否使用 Hugging Face tokenizer 进行分词。若设为 `false`,则按空格或标点简单切分。 - **`substrings`**: 关键参数!填入你希望屏蔽的所有脏话或敏感词子串(支持部分匹配)。 > ⚠️ 注意:该算子会**删除包含指定子串的整个词**。例如,若 `substrings` 包含 `"ass"`,则 `"classic"` 也会被误删。建议尽量使用完整脏词,避免过度匹配。 --- ### 🧪 示例输入/输出 **输入文本**: ``` This is a fucking bad example, don't be an asshole. ``` **处理后输出**: ``` This is a bad example, don't be . ``` --- ### 📚 参考资料 - 算子代码:https://github.com/datajuicer/data-juicer/blob/main/data_juicer/ops/mapper/remove_words_with_incorrect_substrings_mapper.py - 使用文档:https://datajuicer.github.io/data-juicer/en/main/docs/operators/mapper/remove_words_with_incorrect_substrings_mapper.md - 测试用例:https://github.com/datajuicer/data-juicer/blob/main/tests/ops/mapper/test_remove_words_with_incorrect_substrings_mapper.py 如需更智能的脏话识别(如语义或上下文感知),可结合外部敏感词库或模型进行预处理,再接入 Data-Juicer 流程。
--- ### 案例 6 · 最佳实践(使用 DJ 的建议,ZH) - **类型**: `best_practice_qa` - **语言**: `zh` **输入(用户提问)** > 你能给我一些使用DJ的最佳实践吗?
输出(助手回答) 以下是使用 Data-Juicer (DJ) 的一些最佳实践,结合官方文档、示例菜谱和社区经验整理而成: --- ## ✅ 1. **模块化安装,按需加载** - **不要一次性安装全部依赖**。DJ 支持按场景安装,避免环境臃肿: ```bash # 文本处理基础 uv pip install "py-data-juicer[generic,nlp]" # 图像处理 uv pip install "py-data-juicer[vision]" # 分布式处理 uv pip install "py-data-juicer[distributed]" ``` - 对于特定菜谱(Recipe),可使用 `dj-install` 工具自动安装最小依赖: ```bash dj-install --config your_recipe.yaml ``` > 📌 参考:[Installation Guide](https://github.com/datajuicer/data-juicer/blob/main/docs/tutorial/Installation.md) --- ## ✅ 2. **从官方菜谱库学习与复用** - DJ Hub 提供了大量经过验证的菜谱,涵盖文本、图像、视频等模态: - 预训练数据清洗(如 RedPajama、BLOOM) - 指令微调数据优化(如 Alpaca-CoT) - 多模态合成(如 Img-Diff、LLaVA) - 视频数据处理(如 HumanVBench) 👉 推荐路径: ```text data-juicer-hub/refined_recipes/ ├── pretrain/ # 预训练数据精炼 ├── alpaca_cot/ # 指令微调数据优化 ├── image/ # 图像数据处理 └── video/ # 视频数据处理 ``` > 📌 参考:[Data-Juicer Recipe Gallery](https://github.com/datajuicer/data-juicer-hub/blob/main/docs/RecipeGallery.md) --- ## ✅ 3. **合理组合算子(Operators)** - 根据任务选择合适的 OP 类型: - **Filter(过滤器)**:去除低质量样本(如 `language_id_score_filter`, `image_nsfw_filter`) - **Mapper(映射器)**:增强或转换数据(如 `image_captioning_mapper`, `generate_qa_from_text_mapper`) - **Deduplicator(去重器)**:消除重复内容(如 `document_simhash_deduplicator`) - **Selector(选择器)**:基于评分筛选优质样本(如 `topk_specified_field_selector`) 💡 示例:构建高质量图文数据集 ```yaml process: - image_aspect_ratio_filter: { min_ratio: 0.5, max_ratio: 2.0 } - image_nsfw_filter: { score_threshold: 0.8 } - image_text_matching_filter: { model: "clip", min_score: 0.2 } - image_captioning_mapper: { model: "blip" } ``` > 📌 参考:[Operator Schemas](https://github.com/datajuicer/data-juicer/blob/main/docs/Operators.md) --- ## ✅ 4. **利用批处理与分布式加速** - 对大规模数据,启用 Ray 分布式后端: ```yaml # 在 config.yaml 中启用 use_ray: true ray_num_nodes: 4 ``` - 使用 `grouper` 和 `pipeline` 算子实现批量推理,提升 GPU 利用率。 --- ## ✅ 5. **评估与迭代** - 所有精炼后的数据集都应进行下游任务验证(如 LLM 训练、多模态模型微调)。 - 官方案例显示,经 DJ 处理的数据在多个基准上显著提升模型性能(如 LLaVA、T2V-Turbo)。 📊 示例:LLaVA 使用 DJ 优化预训练数据后,在 MM-Bench 上提升 +0.5,MM-Vet 提升 +1.3。 > 📌 参考:[RecipeGallery 中的评估表格](https://github.com/datajuicer/data-juicer-hub/blob/main/docs/RecipeGallery.md#61-evaluation-and-verification) --- ## ✅ 6. **贡献与协作** - 如果你开发了新算子或优化了菜谱,欢迎提交 PR 至 [data-juicer-hub](https://github.com/datajuicer/data-juicer-hub)。 - 社区共建的菜谱会被收录到 Gallery,并获得官方致谢。 --- ## ✅ 7. **调试与日志** - 启用详细日志便于调试: ```yaml # config.yaml log_level: "INFO" save_stats_in_one_file: true ``` - 使用内置测试数据验证算子效果: ```bash python -m tests.ops.test_your_operator ``` --- 遵循以上最佳实践,你可以高效、稳定地使用 Data-Juicer 构建高质量数据集,为大模型训练提供坚实基础。 --- ### 🔗 参考资料 - [Data-Juicer Installation Guide](https://github.com/datajuicer/data-juicer/blob/main/docs/tutorial/Installation.md) - [Data-Juicer Recipe Gallery](https://github.com/datajuicer/data-juicer-hub/blob/main/docs/RecipeGallery.md) - [Data-Juicer Operators Documentation](https://github.com/datajuicer/data-juicer/blob/main/docs/Operators.md)
--- ### 案例 7 · 越界问题(与 DJ 无关提问,ZH) - **类型**: `off_topic_qa` - **语言**: `zh` **输入(用户提问)** > 今天天气怎么样?
输出(助手回答) Sorry, this question is unrelated to Data-Juicer.