## Data-Juicer 问答 Copilot 示例(中文) 本文按案例展示 **输入问题(Input)** 与 **助手回答(Output)**,便于理解 QA Copilot 的实际效果。 你可以在官方[文档页](https://datajuicer.github.io/data-juicer/zh_CN/main/index_ZH.html)和我们的 [问答 Copilot](./README_ZH.md) ***Juicer*** 聊天! 欢迎向 ***Juicer*** 提出任何与 Data-Juicer 生态相关的问题。
--- --- ### 案例 1 · 算子介绍(alphanumeric_filter,ZH) - **类型**: `operator_qa` - **语言**: `zh` **输入(用户提问)** > 介绍alphanumeric_filter
输出(助手回答) `alphanumeric_filter` 是 Data-Juicer 中的一个**过滤器算子(Filter Operator)**,主要用于根据文本中**字母和数字字符(或 Token)的比例**来筛选数据样本。 ### 📌 核心功能 该算子计算样本中字母数字内容(Alphanumeric)占整体内容(字符或 Token)的比例,并保留该比例在指定范围 `[min_ratio, max_ratio]` 内的样本。这有助于过滤掉那些包含过多特殊符号、乱码或非自然语言内容的低质量数据。 ### ⚙️ 主要参数 | 参数名 | 类型 | 默认值 | 说明 | | :--- | :--- | :--- | :--- | | `tokenization` | `bool` | `False` | 是否基于 Token 计算比例。若为 `False`,则基于字符(Character)计算;若为 `True`,则使用 Hugging Face Tokenizer 分词后计算。 | | `min_ratio` | `float` | `0.25` | 最小比例阈值。低于此值的样本将被过滤掉。 | | `max_ratio` | `float` | `sys.maxsize` | 最大比例阈值。高于此值的样本将被过滤掉。 | ### 💡 工作原理 1. **计算指标**: - 如果 `tokenization=False`:计算 `alnum_ratio` = (字母+数字字符数) / (总字符数)。 - 如果 `tokenization=True`:计算 `alpha_token_ratio` = (包含字母或数字的 Token 数) / (总 Token 数)。 2. **过滤判断**:检查计算出的比例是否在 `[min_ratio, max_ratio]` 区间内。 3. **缓存统计**:算子会将计算出的比例值缓存到样本的 `stats` 字段中,方便后续分析或可视化。 ### 📊 效果示例 假设配置为 `min_ratio=0.2, max_ratio=0.9`: - **保留**:`"a=1\nb\nc=1+2"`(字母数字占比适中)。 - **过滤**:`",。、„”“«»1」"`(几乎全是特殊符号,字母数字占比极低)。 当启用 `tokenization=True` 且 `min_ratio=1.5` 时(注意:Token 模式下比例计算逻辑可能因 Tokenizer 而异,通常用于确保大部分 Token 都是有意义的字母数字组合): - **保留**:`"Do you need a cup of coffee?"` - **过滤**:纯标点或乱码样本。 ### 🔗 相关链接 - [官方文档](https://github.com/datajuicer/data-juicer/blob/main/docs/operators/filter/alphanumeric_filter.md) - [源代码](https://github.com/datajuicer/data-juicer/blob/main/data_juicer/ops/filter/alphanumeric_filter.py) 这个算子通常用于数据清洗的早期阶段,以快速剔除明显非文本或格式混乱的数据。
--- ### 案例 2 · 模块介绍(DJ-Agents,ZH) - **类型**: `submodule_qa` - **语言**: `zh` **输入(用户提问)** > 介绍DJ-Agents
输出(助手回答) **Data-Juicer Agents (DJ-Agents)** 是 Data-Juicer 生态系统中的一个智能代理套件,旨在实现**代理式数据处理(Agentic Data Processing)**。它构建在 [Data-Juicer](https://github.com/datajuicer/data-juicer) 和 [AgentScope](https://github.com/agentscope-ai/agentscope) 之上,目标是让开发者从“如何实现”数据处理细节中解放出来,专注于“要做什么”,从而实现无代码或低代码的数据处理生命周期。 以下是 DJ-Agents 的核心介绍: ### 1. 核心愿景与定位 * **智能副驾驶**:作为数据探索和数据处理流水线的智能助手。 * **自然语言交互**:用户可以通过自然语言描述数据处理需求(例如“为 RAG 任务去重并清洗文本”),Agent 会自动规划、选择算子并生成执行方案。 * **工具化与技能化**:将 Data-Juicer 的强大能力封装为 Agent 可调用的 `tools`(工具)和 `skills`(技能),支持通用大模型 Agent 的自主编排。 ### 2. 主要功能模块 根据最新的架构重构(2026-03-11),DJ-Agents 主要包含以下部分: * **CLI 命令行工具 (`djx`)**: * `djx retrieve`:根据自然语言意图检索合适的 Data-Juicer 算子。 * `djx plan`:分析数据集并生成处理计划(YAML 格式的 Recipe)。 * `djx apply`:应用生成的计划进行数据处理。 * `djx tool`:提供 JSON 格式的工具接口,便于与其他 Agent 系统或自动化流程集成。 * **会话模式 (`dj-agents`)**: * 提供一个交互式界面(支持 TUI 终端用户界面或 AgentScope Studio),用户可以像聊天一样与 Agent 对话,逐步完成数据检查、算子推荐、方案生成和执行。 * 支持中断当前操作 (`Ctrl+C`) 和退出 (`Ctrl+D`)。 * **Q&A Copilot (Juicer)**: * 一个专门针对 Data-Juicer 生态的智能问答助手,已部署在官方文档网站、钉钉群和 Discord 社区中,帮助用户解答关于 DJ 算子、菜谱和使用方法的问题。 ### 3. 技术架构特点 * **基于 AgentScope**:利用 AgentScope 框架强大的多 Agent 协作和工具调用能力。 * **模块化设计**: * **Core**:包含完整的 `djx` 和 `dj-agents` 命令。 * **Harness**:最小化安装,仅包含用于自动化的 `djx tool` 核心工具集。 * **Full**:包含核心功能以及 Q&A Copilot 和交互式菜谱(InteRecipe)等高级功能。 * **模型支持**:支持 DashScope(通义千问系列)以及其他 OpenAI 兼容的 API。 ### 4. 快速开始示例 你可以通过以下步骤体验 DJ-Agents: 1. **安装**: ```bash git clone https://github.com/datajuicer/data-juicer-agents.git cd data-juicer-agents uv pip install -e '.[full]' ``` 2. **配置 API Key**: ```bash export DASHSCOPE_API_KEY="your_api_key" ``` 3. **运行会话模式**: ```bash dj-agents --dataset ./data/demo-dataset.jsonl --export ./data/output.jsonl ``` 然后在终端中与 Agent 对话,例如输入:“帮我检查一下数据集的质量,并去除重复项。” ### 5. 未来路线图 (Roadmap) * **DJ Skills**:通过提示词软编排将工具打包为技能,供更通用的 Agent 使用。 * **InteRecipe Studio**:开发前端界面,支持通过自然语言交互式构建数据菜谱,并提供多维度的数据和结果视图。 * **扩展应用场景**:进一步支持 RAG(检索增强生成)、具身智能和数据湖仓架构等复杂场景的数据处理。 更多详细信息可以参考官方文档: * [Overview Doc](https://github.com/datajuicer/data-juicer-agents/blob/main/docs/overview.md) * [Quick Start Doc](https://github.com/datajuicer/data-juicer-agents/blob/main/docs/quick_start.md) * [CLI Doc](https://github.com/datajuicer/data-juicer-agents/blob/main/docs/cli.md)
--- ### 案例 3 · 概念问题(基类算子,ZH) - **类型**: `concept_qa` - **语言**: `zh` **输入(用户提问)** > 介绍一下基类算子
输出(助手回答) 在 Data-Juicer (DJ) 中,**基类算子 (Base Operators)** 是所有具体数据处理算子的父类或抽象基础。它们定义了算子的基本结构、接口规范以及通用的执行逻辑,确保所有算子遵循统一的标准以便组合成流水线(Pipeline)。 为了给你提供最准确的介绍,我需要检索 Data-Juicer源码中关于基类算子的定义和文档。 在 Data-Juicer (DJ) 中,**基类算子 (Base Operators)** 是所有具体数据处理逻辑的抽象基础。它们位于 `data_juicer/ops/base_op.py` 文件中,定义了算子的通用接口、执行流程以及资源管理方式。 以下是 DJ 中主要基类算子的详细介绍: ### 1. `OP` (Operator Base Class) 这是所有算子的最顶层父类。它定义了算子的基本属性和通用方法。 * **核心功能**: * **参数初始化**:统一处理数据键名(如 `text_key`, `image_key`)、批处理大小 (`batch_size`)、加速设备 (`accelerator`: cpu/cuda) 以及并行度 (`num_proc`)。 * **资源管理**:支持 Ray 分布式执行所需的资源配置(如 `num_cpus`, `num_gpus`, `memory`)。 * **生命周期**:提供 `run()` 方法的模板,负责在执行前后添加元数据列(如 `meta`, `stats`)或索引。 * **关键属性**: * `_name`: 算子名称(由注册表自动设置)。 * `_accelerator`: 默认运行设备。 * `_batched_op`: 是否为批处理算子。 ### 2. `Mapper` (映射算子) 继承自 `OP`,用于对数据进行**一对一**或**一对多**的转换和编辑。 * **用途**:数据清洗、格式转换、内容增强、标注等。 * **核心方法**: * `process_single(sample)`: 处理单个样本。 * `process_batched(samples)`: 处理一批样本(如果算子支持批处理)。 * **特点**: * 输入一个样本,输出一个修改后的样本(可能增加或删除字段)。 * 支持异常捕获(`catch_map_batches_exception`),确保流水线在遇到错误时不会完全崩溃。 * 示例:`clean_email_mapper` (删除邮箱), `image_face_blur_mapper` (人脸模糊)。 ### 3. `Filter` (过滤算子) 继承自 `OP`,用于根据特定条件**筛选**数据。 * **用途**:去除低质量数据、去重前的初步筛选、基于指标的过滤。 * **核心方法**: * `compute_stats_single(sample)`: 计算样本的统计指标(如文本长度、困惑度、图像相似度得分)。 * `process_single(sample)`: 根据计算出的 stats 返回 `True` (保留) 或 `False` (过滤)。 * **特点**: * 分为两步:先计算统计信息 (`compute_stats`),再根据阈值进行过滤 (`process`)。 * 支持将统计结果导出 (`stats_export_path`) 以便分析数据分布。 * 示例:`text_length_filter` (文本长度过滤), `image_face_count_filter` (人脸数量过滤)。 ### 4. `Deduplicator` (去重算子) 继承自 `OP`,专门用于**去除重复数据**。 * **用途**:MinHash 去重、精确哈希去重、语义去重。 * **核心方法**: * `compute_hash(sample)`: 为样本计算哈希值或指纹。 * `process(dataset)`: 在整个数据集层面根据哈希值移除重复项。 * **特点**: * 通常在数据集全局范围内操作,而不仅仅是单样本。 * 可以追踪并返回重复对 (`dup_pairs`)。 * 示例:`ray_basic_deduplicator`。 ### 5. `Selector` (选择算子) 继承自 `OP`,用于在**数据集级别**进行选择。 * **用途**:随机采样、基于复杂逻辑的子集选择。 * **核心方法**: * `process(dataset)`: 接收整个数据集,返回选中的子集。 * **特点**: * 与 `Filter` 不同,`Selector` 通常不依赖单样本的统计指标,而是基于全局逻辑(如“随机选择 10%”)。 * 示例:`random_selector`。 ### 6. `Grouper` (分组算子) & `Aggregator` (聚合算子) 这两个算子通常配合使用,用于处理**多对一**的逻辑。 * **`Grouper`**: * 将多个样本组合成一个批次(Batch)。 * `process(dataset)`: 返回分组后的数据集。 * **`Aggregator`**: * 对分组后的批次进行聚合处理,生成一个新的样本。 * `process_single(batched_sample)`: 输入一组样本,输出一个聚合后的样本。 * **用途**:构建训练对(如 SFT 数据构造)、文档级上下文聚合。 ### 7. `Pipeline` (流水线算子) * **用途**:将多个算子组合成一个复合算子。 * **特点**:允许用户将常用的算子序列封装成一个独立的单元,方便复用。 --- ### 基类算子的通用特性 1. **注册机制 (`Registry`)**: 所有算子通过 `@OPERATORS.register_module()` 装饰器注册,用户可以通过名称直接调用。 2. **批处理支持 (`Batched Op`)**: 基类支持 `_batched_op` 标记。如果设置为 `True`,算子将接收一个包含多个样本的字典(Dict of Lists),这在使用 GPU 加速模型(如 LLM、CLIP)时能显著提高效率。 3. **异常容错**: 基类提供了 `skip_op_error` 参数。如果开启,当某个样本处理失败时,算子会记录错误并跳过该样本,而不是中断整个任务。 4. **Tracer 集成**: 基类集成了 `tracer` 功能,可以自动记录数据在处理前后的变化(如文本被修改了多少字符,哪些样本被过滤了),便于数据溯源和分析。 5. **分布式兼容**: 所有基类都内置了对 Ray 分布式框架的支持,可以通过 `num_cpus`, `num_gpus` 等参数轻松扩展到多机多卡环境。 如果你想了解如何自定义一个新的算子,可以参考 [DeveloperGuide.md](https://github.com/datajuicer/data-juicer/blob/main/docs/DeveloperGuide.md),其中详细说明了如何继承这些基类并实现 `process` 方法。
--- ### 案例 4 · 快速开始(如何安装 DJ,ZH) - **类型**: `quick_start_qa` - **语言**: `zh` **输入(用户提问)** > 如何安装DJ?
输出(助手回答) 安装 Data-Juicer (DJ) 主要有几种方式,取决于您的使用场景(是作为 Python 库使用,还是使用 Docker 环境)。以下是基于官方文档的安装指南: ### 方法一:使用 pip 安装(推荐用于开发或作为库使用) 这是最通用的安装方式。建议您先创建一个虚拟环境。 1. **创建并激活虚拟环境**(可选但推荐): ```bash python -m venv dj_env source dj_env/bin/activate # Linux/Mac # 或者在 Windows 上: dj_env\Scripts\activate ``` 2. **安装 Data-Juicer**: ```bash pip install data-juicer ``` 3. **安装额外依赖**(可选): Data-Juicer 有很多算子依赖不同的第三方库(如 OCR、音频处理等)。如果您需要特定功能,可以安装 extras: ```bash # 例如,安装所有额外依赖 pip install data-juicer[all] # 或者只安装特定模块的依赖,例如: pip install data-juicer[video] pip install data-juicer[audio] ``` ### 方法二:使用 Docker 安装(推荐用于快速体验或隔离环境) 如果您不想配置本地 Python 环境,可以使用官方提供的 Docker 镜像。 1. **拉取镜像**: ```bash docker pull datajuicer/data-juicer:latest ``` 2. **运行容器**: ```bash docker run -it --gpus all --shm-size 16g \ -v /path/to/your/data:/data \ -v /path/to/your/config:/config \ datajuicer/data-juicer:latest \ bash ``` *注意:请根据您的实际需求调整挂载路径 (`-v`) 和 GPU 参数。* ### 方法三:从源码安装(用于贡献代码或获取最新特性) 1. **克隆仓库**: ```bash git clone https://github.com/datajuicer/data-juicer.git cd data-juicer ``` 2. **安装依赖**: ```bash pip install -e . # 如果需要所有额外依赖 pip install -e ".[all]" ``` ### 验证安装 安装完成后,您可以在终端输入以下命令来验证是否安装成功: ```bash dj --help ``` 如果看到帮助信息,说明安装成功。 ### 参考链接 * **详细安装教程**: [Data-Juicer Installation Guide](https://github.com/datajuicer/data-juicer/blob/main/docs/tutorial/Installation.md) * **GitHub 仓库**: [datajuicer/data-juicer](https://github.com/datajuicer/data-juicer) 如果您在安装过程中遇到特定错误(如依赖冲突),请提供错误日志,我可以帮您进一步排查。
--- ### 案例 5 · 最佳实践(使用 DJ 的建议,ZH) - **类型**: `best_practice_qa` - **语言**: `zh` **输入(用户提问)** > 你能给我一些使用DJ的最佳实践吗?
输出(助手回答) 当然可以!Data-Juicer (DJ) 是一个强大的多模态数据处理框架。为了帮助你更高效地使用它,我整理了一些基于官方文档和社区经验的最佳实践。 以下是使用 Data-Juicer 的关键最佳实践: ### 1. 明确数据处理流程 (Pipeline Design) 不要试图用一个巨大的配置文件完成所有事情。将数据处理分为几个逻辑阶段: * **基础清洗 (Basic Cleaning)**:去除空白、特殊字符、过短/过长文本等。 * **质量过滤 (Quality Filtering)**:使用语言模型评分、困惑度(Perplexity)、毒性检测等算子。 * **去重 (Deduplication)**:在高质量过滤后进行去重,以减少计算资源浪费。通常先做局部去重(MinHash),再做全局去重。 * **增强与格式化 (Enhancement & Formatting)**:如添加元数据、转换格式等。 **建议**:参考 [Data-Juicer Hub](https://github.com/datajuicer/data-juicer-hub) 中的官方菜谱(Recipes),它们已经展示了经过验证的处理流程。 ### 2. 合理选择算子 (Operator Selection) * **从小规模开始**:在大规模数据集上运行之前,先在小样本(例如 1000 条数据)上测试你的配置。这可以快速发现配置错误或性能瓶颈。 * **利用 `retrieve_operators_api`**:如果你不确定哪个算子适合你的需求,可以使用自然语言描述你的意图,让系统推荐合适的算子。 * 例如:*"我想过滤掉包含大量非ASCII字符的文本"* * **查看算子文档**:使用 `get_operator_info` 获取算子的详细参数说明和示例。确保你理解每个参数的含义,特别是阈值(thresholds)。 ### 3. 性能优化 (Performance Optimization) * **并行处理**:Data-Juicer 支持多进程并行处理。根据你的 CPU 核心数调整 `parallelism` 参数。 * **资源管理**: * 对于 CPU 密集型算子(如 MinHash 去重),确保有足够的内存。 * 对于 GPU 密集型算子(如基于 LLM 的评分),注意显存限制,可能需要减小 batch size。 * **缓存中间结果**:如果处理流程很长,建议在关键步骤后保存中间数据集。这样如果后续步骤失败或需要调整,可以从断点继续,而不必从头开始。 ### 4. 监控与调试 (Monitoring & Debugging) * **启用日志**:设置适当的日志级别(INFO 或 DEBUG),以便跟踪处理进度和潜在错误。 * **统计信息**:Data-Juicer 通常会输出每个算子处理前后的数据量变化。密切关注这些统计信息,如果某个算子过滤掉了过多数据(例如 >90%),可能需要检查其参数是否过于严格。 * **可视化**:如果可能,使用可视化工具检查处理后的数据样本,确保数据质量符合预期。 ### 5. 利用 Data-Juicer Hub * **复用现有 Recipes**:不要从头开始编写配置。浏览 [Recipe Gallery](https://github.com/datajuicer/data-juicer-hub/blob/main/docs/RecipeGallery.md),找到与你的数据类型(文本、图像、音频、视频)和目标相似的场景,然后在此基础上进行修改。 * **贡献与分享**:如果你开发了一个有效的处理流程,考虑将其贡献回 Hub,帮助社区其他成员。 ### 6. 特定数据类型建议 * **文本**:重点关注语言识别、毒性过滤和去重。 * **图像**:关注分辨率、宽高比、美学评分和水印检测。 * **多模态**:确保文本和图像/音频之间的对齐质量,使用多模态算子进行联合过滤。 ### 示例:一个简单的文本处理流程 ```yaml # example_recipe.yaml dataset_path: "path/to/your/dataset.jsonl" export_path: "path/to/output/dataset.jsonl" process: - filter: # 基础过滤 op: "alphanumeric_filter" args: min_ratio: 0.5 - filter: # 长度过滤 op: "text_length_filter" args: min_len: 10 max_len: 10000 - deduplicator: # 去重 op: "minhash_deduplicator" args: window_size: 5 threshold: 0.8 ``` 希望这些最佳实践能帮助你更好地使用 Data-Juicer!如果你有具体的数据处理任务或遇到问题,欢迎提供更多细节,我可以给出更针对性的建议。
--- ### 案例 6 · 越界问题(与 DJ 无关提问,ZH) - **类型**: `off_topic_qa` - **语言**: `zh` **输入(用户提问)** > 今天天气怎么样?
输出(助手回答) Sorry, this question is unrelated to Data-Juicer.