Datawhale AI 夏令营-天池Better Synth多模态大模型数据合成挑战赛-task2探索与进阶(更新中)

在大数据、大模型时代,随着大模型发展,互联网数据渐尽且需大量处理标注,为新模型训练高效合成优质数据成为新兴问题。“天池 Better Synth - 多模态大模型数据合成挑战赛”应运而生,旨在探究合成数据对多模态大模型训练的影响及高效合成方法策略,推动多模态大模型数据合成创新。比赛关注图片理解任务,要求在给定种子数据集和计算量约束下,通过高效方法生成更优数据以训练模型。竞赛使用 Data-Juicer 系统助力参赛者,NVIDIA 的相关开源库让选手能探索高效合成大量优质数据。“Better Synth”是系列赛第四场,为专业人员提供舞台,引领多模态大模型开源共享发展。

天池Better Synth多模态大模型数据合成挑战赛

进阶与探索


在正式探索进阶之前,让我们来重新回顾一下,整个 baseline 的流程,笔者制作了下面这个简易的流程图,如下:

一、Baseline 流程分析与细节解释

1. 解压缩资源 & 配置环境

  • data-juicermapper 是数据处理工具,用于处理原始数据。
  • blip2 是一个预训练模型,用于生成图像描述数据。

2. 处理多模态数据

  • data-juicermapper 处理原始数据,生成种子数据和微调数据。
  • blip2 生成图像描述数据,作为预训练数据的一部分。

3. 下载开发套件

  • 下载所需的开发工具和库,确保环境配置正确。

4. 下载数据

  • 下载预训练和微调所需的数据集。

5. 预处理数据

  • 使用脚本中的 check_sample_number.pydj_to_llava.py 对数据进行预处理,确保数据格式和数量符合要求。

6. 预训练模型

  • 使用 deepspeed 进行预训练,模型为 gemma-2b,视觉塔为 clip-vitopenclip
  • 预训练参数包括批量大小、梯度累积步数、日志记录步数等。

7. 微调模型

  • 使用 deepspeed 进行微调,模型为 gemma-2b,视觉塔为 clip-vitopenclip
  • 微调参数与预训练类似,但批量大小和梯度累积步数有所不同。

8. 模型评估

  • 评估模型在 textvqammbench 数据集上的表现。
  • 评估结果用于提交。

二、详细脚本解释

1. 设置实验参数

EXP_NAME=default
PRETRAIN_DATASET=../output/image_captioning_output/res_all_blip2.jsonl
PRETRAIN_DATASET_IMAGE_PATH=../input/pretrain_stage_1
PRETRAIN_BATCH_SIZE_PER_GPU=2
PRETRAIN_GRADIENT_ACCUMULATION_STEPS=128
PRETRAIN_DATALOADER_NUM_WORKERS=4
FINETUNE_BATCH_SIZE_PER_GPU=2
FINETUNE_GRADIENT_ACCUMULATION_STEPS=64
FINETUNE_DATALOADER_NUM_WORKERS=4
LOGGING_STEP=1
CKPT_SAVE_STEPS=100
TOTAL_SAVE_CKPT_LIMIT=1
INFER_CUDA_IDX="0"

2. 检查全局批量大小

PRETRAIN_PASS=`python $SCRIPT_DIR/training/preprocess/check_global_batch_size.py $PRETRAIN_BATCH_SIZE_PER_GPU $PRETRAIN_GRADIENT_ACCUMULATION_STEPS 256`
if [ "$PRETRAIN_PASS" = "False" ]; then
    echo "[ERROR] The global batch size of pretraining stage is not 256! Please check and retry."
    exit
fi
FINETUNE_PASS=`python $SCRIPT_DIR/training/preprocess/check_global_batch_size.py $FINETUNE_BATCH_SIZE_PER_GPU $FINETUNE_GRADIENT_ACCUMULATION_STEPS 128`
if [ "$FINETUNE_PASS" = "False" ]; then
    echo "[ERROR] The global batch size of finetuning stage is not 128! Please check and retry."
    exit
fi

3. 检查数据集样本数量

MAX_SAMPLE_NUM=200000
SAMPLED_PRETRAIN_DATASET=$PRETRAIN_DATASET-200k.jsonl
python $SCRIPT_DIR/training/preprocess/check_sample_number.py $PRETRAIN_DATASET $SAMPLED_PRETRAIN_DATASET $MAX_SAMPLE_NUM

4. 转换数据集格式

PRETRAIN_DATASET_JSON=$SAMPLED_PRETRAIN_DATASET.json
python $SCRIPT_DIR/data-juicer/tools/multimodal/data_juicer_format_to_target_format/dj_to_llava.py $SAMPLED_PRETRAIN_DATASET $PRETRAIN_DATASET_JSON --image_special_token "<__dj__image>" --restore_questions True --original_llava_ds_path $ORIGINAL_DATASET_ALL

5 . 预训练模型

PRETRAIN_NAME=MGM-2B-Pretrain-$EXP_NAME
mkdir -p $SCRIPT_DIR/../output/training_dirs/$PRETRAIN_NAME
deepspeed $SCRIPT_DIR/training/mgm/train/train_mem.py \
    --deepspeed $SCRIPT_DIR/training/scripts/zero2_offload.json \
    --model_name_or_path $SCRIPT_DIR/training/model_zoo/LLM/gemma/gemma-2b-it \
    --version gem
        --version gemma \
    --data_path $PRETRAIN_DATASET_JSON \
    --image_folder $PRETRAIN_DATASET_IMAGE_PATH \
    --vision_tower $SCRIPT_DIR/training/model_zoo/OpenAI/clip-vit-large-patch14-336 \
    --vision_tower_aux $SCRIPT_DIR/training/model_zoo/OpenAI/openclip-convnext-large-d-320-laion2B-s29B-b131K-ft-soup \
    --mm_projector_type mlp2x_gelu \
    --tune_mm_mlp_adapter True \
    --mm_vision_select_layer -2 \
    --mm_use_im_start_end False \
    --mm_use_im_patch_token False \
    --image_size_aux $AUX_SIZE \
    --bf16 True \
    --output_dir $SCRIPT_DIR/../output/training_dirs/$PRETRAIN_NAME \
    --num_train_epochs $NUM_TRAIN_EPOCHS \
    --per_device_train_batch_size $PRETRAIN_BATCH_SIZE_PER_GPU \
    --per_device_eval_batch_size 4 \
    --gradient_accumulation_steps $PRETRAIN_GRADIENT_ACCUMULATION_STEPS \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps $CKPT_SAVE_STEPS \
    --save_total_limit $TOTAL_SAVE_CKPT_LIMIT \
    --learning_rate 1e-3 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps $LOGGING_STEP \
    --tf32 True \
    --model_max_length 2048 \
    --gradient_checkpointing True \
    --dataloader_num_workers $PRETRAIN_DATALOADER_NUM_WORKERS \
    --lazy_preprocess True \
    --report_to none \
    2>&1 | tee $SCRIPT_DIR/../output/training_dirs/$PRETRAIN_NAME/pretrain.log

6. 微调模型

FINETUNE_NAME=MGM-2B-Finetune-$EXP_NAME
mkdir -p $SCRIPT_DIR/../output/training_dirs/$FINETUNE_NAME
deepspeed $SCRIPT_DIR/training/mgm/train/train_mem.py \
    --deepspeed $SCRIPT_DIR/training/scripts/zero2_offload.json \
    --model_name_or_path $SCRIPT_DIR/training/model_zoo/LLM/gemma/gemma-2b-it \
    --version gemma \
    --data_path $SCRIPT_DIR/training/data/finetuning_stage_1_12k/mgm_instruction_stage_1_12k.json \
    --image_folder $SCRIPT_DIR/training/data/finetuning_stage_1_12k \
    --vision_tower $SCRIPT_DIR/training/model_zoo/OpenAI/clip-vit-large-patch14-336 \
    --vision_tower_aux $SCRIPT_DIR/training/model_zoo/OpenAI/openclip-convnext-large-d-320-laion2B-s29B-b131K-ft-soup \
    --pretrain_mm_mlp_adapter $SCRIPT_DIR/../output/training_dirs/$PRETRAIN_NAME/mm_projector.bin \
    --mm_projector_type mlp2x_gelu \
    --mm_vision_select_layer -2 \
    --mm_use_im_start_end False \
    --mm_use_im_patch_token False \
    --image_aspect_ratio pad \
    --group_by_modality_length True \
    --image_size_aux $AUX_SIZE \
    --bf16 True \
    --output_dir $SCRIPT_DIR/../output/training_dirs/$FINETUNE_NAME \
    --num_train_epochs $NUM_TRAIN_EPOCHS \
    --per_device_train_batch_size $FINETUNE_BATCH_SIZE_PER_GPU \
    --per_device_eval_batch_size 4 \
    --gradient_accumulation_steps $FINETUNE_GRADIENT_ACCUMULATION_STEPS \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps $CKPT_SAVE_STEPS \
    --save_total_limit $TOTAL_SAVE_CKPT_LIMIT \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps $LOGGING_STEP \
    --tf32 True \
    --model_max_length 2048 \
    --gradient_checkpointing True \
    --dataloader_num_workers $FINETUNE_DATALOADER_NUM_WORKERS \
    --lazy_preprocess True \
    --report_to none \
    2>&1 | tee $SCRIPT_DIR/../output/training_dirs/$FINETUNE_NAME/finetuning.log

7. 模型评估

# TextVQA
echo "Infer on TextVQA..."
bash $SCRIPT_DIR/eval/textvqa.sh $FINETUNE_NAME $INFER_CUDA_IDX

# MMBench
echo "Infer on MMBench..."
bash $SCRIPT_DIR/eval/mmbench.sh $FINETUNE_NAME "mmbench_dev_20230712" $INFER_CUDA_IDX

8. 复制脚本到输出目录

# copy this script to output
cp $0 $SCRIPT_DIR/../output/train.sh

9.输出信息

# info
echo "Training and Inference done."
echo "Training checkpoints are stored in output/training_dirs/$FINETUNE_NAME."
echo "Inference results are stored in output/eval_results/$FINETUNE_NAME."

总结

整个流程包括以下几个主要步骤:

  1. 解压缩资源 & 配置环境:准备数据处理工具和预训练模型。
  2. 处理多模态数据:使用 data-juicermapper 处理原始数据,生成种子数据和微调数据。
  3. 下载开发套件和数据:确保所有必要的工具和数据集都已下载。
  4. 预处理数据:检查数据集样本数量并转换数据格式。
  5. 预训练模型:使用 deepspeed 进行预训练,配置预训练参数。
  6. 微调模型:使用 deepspeed 进行微调,配置微调参数。
  7. 模型评估:在 textvqammbench 数据集上评估模型性能。
  8. 复制脚本和输出信息:将脚本复制到输出目录,并输出训练和推理完成的信息。

通过这些步骤,整个流程实现了从数据准备、预处理、模型训练到评估的完整过程。


三、Baseline探索进阶

在当前的 baseline 中,模型本身不能进行改动,因此我们需要通过数据处理和数据增强来提升模型的性能。

官方那边给出了一些示例教程,下面是对其的复现:

数据集准备

在这里,我们仅考虑一个包含两个图像 - 文本对样本的示例数据集。我们首先将其写入一个 jsonl 文件。

Data-Juicer 中多模态数据集的中间格式在这里定义

import jsonlines as jl

ds = [
    {
        'text': '<__dj__image> a picture of prince and princess kate\'s mugs in a frame',
        'images': ['imgs/img1.png'],
    },
    {
        'text': 'the setting sun in africa on a cloudy day stock photo © monkeypox <__dj__image>',
        'images': ['imgs/img2.png'],
    }
]

with jl.open('ds.jsonl', 'w') as writer:
    writer.write_all(ds)

图像的可视化

我们还可以准备一个函数来可视化数据集中的样本。

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline
def vis(s):
    print(s['text'])
    img = Image.open(s['images'][0])
    plt.imshow(np.asarray(img))
    plt.show()

for s in ds:
    vis(s)

图像重新描述

我们可以使用 OP image_captioning_mapper 对图像进行重新描述。首先,我们需要为此过程创建一个数据配方。

recipe = '''
dataset_path: ds.jsonl
export_path: outputs/image_captioning_output/res.jsonl

process:
  - image_captioning_mapper:
      hf_img2seq: '/mnt/workspace/lielin.hyl/models/blip2-opt-2.7b'  # You can replace this path to a local downloaded HF model
      keep_original_sample: false  # we only need the recaptioned captions
'''

with open('image_captioning.yaml', 'w') as fout:
    fout.write(recipe)

然后,我们可以运行 Data-Juicer 的处理程序来处理数据集。

!dj-process --config image_captioning.yaml

我们可以读取结果数据集,以检查重新描述前后的差异。

![image-20240816003928291]

图像合成

我们可以使用 OP image_diffusion_mapper 生成新图像或编辑原始图像的内容。同样,我们需要为此过程创建一个数据配方。

recipe = '''
dataset_path: ds.jsonl
export_path: outputs/image_diffusion_output/res.jsonl

process:
  - image_diffusion_mapper:
      hf_diffusion: '/mnt/workspace/lielin.hyl/models/stable-diffusion-v1-4'  # You can replace this path to a local downloaded HF model
      keep_original_sample: false  # we only need the recaptioned captions
      caption_key: 'text'
'''

with open('image_diffusion.yaml', 'w') as fout:
    fout.write(recipe)

然后,我们可以运行 Data-Juicer 的处理程序来处理数据集。

!dj-process --config image_diffusion.yaml

我们可以读取结果数据集,以检查合成前后的差异。

下面是完整的 config,参考示例:

# 流程配置示例包括:
#-所有全局参数
#-所有操作及其参数

# 全局参数
project_name: 'all' # 项目名称,用于区分您的配置
dataset_path:'/path/to/your/dataset'# 数据集目录或文件的路径,权重(0.0-1.0),默认值为 1.0。
                                                            # 接受的格式:'权重1(可选)数据集1路径权重2(可选)数据集2路径'
export_path: '/path/to/result/dataset.jsonl' # 处理结果数据集路径,支持后缀包括['jsonl', 'json', 'parquet']
export_shard_size: 0 # 导出数据集的分片大小,单位为字节。默认为 0,表示将整个数据集导出到一个文件中。如果设置为正数,则导出的数据集将被拆分为多个数据集分片,每个分片的最大大小不会大于 export_shard_size
export_in_parallel: false # 是否将结果数据集并行导出到单个文件,这通常需要更少的时间。它仅在 export_shard_size 为 0 时有效,其默认进程数与参数 np 相同。**注意**:如果为 True,有时并行导出可能会由于 IO 阻塞而需要更多时间,尤其是对于非常大的数据集。发生这种情况时,False 是更好的选择,尽管这会花费更多时间。
np: 4 # 处理数据集的子进程数量
text_keys: 'text' # 要处理的样本文本的字段的键名,例如,`text`、`instruction`、`output`,...
                                                            # 注意:目前我们只支持为每个操作指定一个键,对于需要多个键的情况,用户可以多次指定操作。当您设置多个键时,我们只会使用`text_keys`中的第一个键。
suffixes: [] # 将读取的文件的后缀。例如:'.txt'、'txt' 或 ['txt', '.pdf', 'docx']
use_cache: true # 是否使用 Hugging Face 数据集的缓存管理,使用缓存可能会占用大量磁盘空间
ds_cache_dir: null # Hugging Face 数据集的缓存目录,默认与环境变量 HF_DATASETS_CACHE 相同,默认值一般为“~/.cache/huggingface/datasets”,如果用户将该参数设置为有效路径,则会覆盖默认缓存目录
use_checkpoint: false # 是否使用检查点管理在处理时将数据集的最新版本保存到工作目录。重新运行相同的配置将重新加载检查点并跳过检查点之前的操作。使用检查点时将禁用缓存。如果检查点之前的操作的参数发生变化,则所有操作将从头开始重新运行。
temp_dir: null # 当缓存被禁用时,存储中间缓存的临时目录的路径,这些缓存文件将被即时删除。默认情况下,它是 None,因此临时目录将由系统指定。注意:设置此参数时应谨慎,因为当此路径设置为不安全的目录时可能会导致意外的程序行为。
open_tracer: false # 是否打开 tracer 来跟踪过程中的变化。打开 tracer 可能需要更多时间
op_list_to_trace:[] # 只有此列表中的 op 才会被跟踪器跟踪。如果它为空,则所有 op 都将被跟踪。仅在跟踪器打开时可用。
trace_num: 10 # 显示每个操作前后数据集之间差异的样本数。仅在打开跟踪器时可用。
op_fusion: false # 是否自动融合共享相同中间变量的运算符。Op fusion 可能会略微减少内存需求,但会加快整个过程。
cache_compress: null #缓存文件的压缩方式,可以在['gzip', 'zstd', 'lz4']中指定。如果此参数为None,则不会压缩缓存文件。当您的输入数据集大于几十GB,并且您的磁盘空间不够时,建议开启此参数。
keep_stats_in_res_ds: false # 是否将计算后的统计数据保留在结果数据集中。如果为 False,则存储 Filters 计算后的统计数据的中间字段将被删除。默认为 False。
keep_hashes_in_res_ds: false # 是否将计算出的哈希值保留在结果数据集中。如果为 False,则用于存储 Deduplicator 计算出的哈希值的中间字段将被删除。默认情况下为 False。

# 用于多模式数据处理
image_key: 'images' # 存储示例图像路径列表的字段的键名。
image_special_token: '<__dj__image>' # 表示文本中图像的特殊标记。默认情况下,它是“<__dj__image>”。您可以根据输入数据集指定自己的特殊标记。
audio_key: 'audios' # 用于存储样本音频路径列表的字段的键名。
audio_special_token: '<__dj__audio>' # 表示文本中音频的特殊标记。默认情况下,它是“<__dj__audio>”。您可以根据输入数据集指定自己的特殊标记。
video_key: 'videos' # 用于存储示例视频路径列表的字段的键名称。
video_special_token: '<__dj__video>' # 文本中代表视频的特殊标记。默认情况下,它是“<__dj__video>”。您可以根据输入数据集指定自己的特殊标记。

eoc_special_token: '<|__dj__eoc|>' # 表示文本中一个块结束的特殊标记。默认情况下,它是“<|__dj__eoc|>”。您可以根据输入数据集指定自己的特殊标记。

# 用于分布式处理
executor_type:执行器的默认#类型,目前支持“default”或“ray”。
ray_address:auto#Ray 集群的地址。

# 仅用于数据分析
percentiles: [0.25, 0.5, 0.75] # 百分位数用于分析数据集分布
export_original_dataset: false # 是否导出带有统计数据的原始数据集。如果您只需要数据集的统计数据,则将其设置为 false 可以加快导出速度。
save_stats_in_one_file: false # 是否将所有统计结果存储到一个文件中

# 用于沙盒或 hpo
data_probe_algo: 'uniform' # 数据集的采样算法。应为 ["uniform", "frequency_specified_field_selector", "topk_specified_field_selector"] 之一。默认为“uniform”。仅用于数据集采样。
data_probe_ratio: 1.0 # 相对于原始数据集大小的采样率。默认为 1.0。仅用于数据集采样。
hpo_config:null#使用自动 HPO 工具时的配置文件路径。

# 进程调度:几个进程操作符及其参数的列表。
process:
  # Mapper 操作。大多数这些操作不需要参数。
  - audio_ffmpeg_wrapped_mapper: # FFmpeg 音频过滤器的简单包装器
  - chinese_convert_mapper:# 在繁体中文、简体中文和日文汉字之间转换中文。
      mode: 's2t' # 选择转换中文的模式:['s2t', 't2s', 's2tw', 'tw2s', 's2hk', 'hk2s', 's2twp', 'tw2sp', 't2tw', 'tw2t', 'hk2t', 't2hk', 't2jp', 'jp2t']
  - clean_email_mapper:#从文本中删除电子邮件。
  - clean_html_mapper:#从文本中删除 html 格式。
  - clean_ip_mapper: # 从文本中删除 IP 地址。
  - clean_links_mapper:#从文本中删除网络链接。
  - clean_copyright_mapper:#删除版权注释。
  - expand_macro_mapper:# 扩展 Latex 文本中的宏定义。
  - extract_qa_mapper:#映射器从文本中提取问题和答案对。
      hf_model: 'alibaba-pai/pai-qwen1_5-7b-doc2qa'
  - fix_unicode_mapper:#修复文本中的unicode错误。
  - image_blur_mapper:#映射器用于模糊图像。
      p: 0.2 # 图像模糊的概率
      blur_type: 'gaussian' # 模糊核的类型,包括 ['mean', 'box', 'gaussian']
      radius: 2 #模糊内核的半径
  - image_captioning_from_gpt4v_mapper: # 生成基于 gpt-4-visison 和图像生成文本的样本
      mode: 'description' # 从图像生成的文本模式,可以是 ['resoning', 'description', 'conversation', 'custom'] 之一
      api_key: '' # 用于验证请求的 API 密钥
      max_token: 500 # 生成的最大 token 数量。默认值为 500。
      temperature:1.0 # 控制输出的随机性(范围从 0 到 1)。默认值为 0。
      system_prompt: '' # 用于设置对话上下文的字符串提示,并为 gpt4-vision 提供全局指导或规则,以便它能够以预期的方式生成响应。如果 `mode` 设置为 `custom`,则将使用该参数
      user_prompt: '' # 一个字符串提示,用于指导每个样本生成 gpt4-vision。默认为 "",表示不提供提示
      user_prompt_key: null #samples 中存储每个样本提示的字段的键名,用于为不同的样本设置不同的提示,如果没有,则使用参数prompt中的prompt,默认为None
      keep_original_sample: true # 是否保留原始样本,若设置为 False,则最终数据集中只有生成的文本,原始文本会被移除,默认为 True
      any_or_all: 'any' # 使用“any”或“all”策略保留所有图像的此样本。'any':如果任何图像满足条件,则保留此样本。'all':仅当所有图像都满足条件时才保留此样本
  - image_captioning_mapper:# 生成图像标题以扩充数据集
      hf_img2seq:'Salesforce/blip2-opt-2.7b'# huggingface 上的模型名称用于生成标题
      caption_num: 1 # 为每个图像生成多少个候选字幕
      keep_candidate_mode: 'random_any' # 为生成的 $caption_num$ 个候选保留策略。应该在 ["random_any", "similar_one_simhash", "all"] 中。
      keep_original_sample: true # 是否保留原始样本。如果设置为 False,最终数据集中将只有生成的字幕,原始字幕将被删除。默认为 True。
      prompt: null # 一个字符串提示,用于指导全局所有样本生成blip2模型。默认为None,即不提供任何提示。
      prompt_key: null #samples 中用于存储每个样本提示的字段的键名,用于为不同的样本设置不同的提示。如果没有,则使用参数“prompt”中的 prompt。默认为 None。
      mem_required: '16GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - image_diffusion_mapper: # 通过扩散模型生成图像
      hf_diffusion: 'CompVis/stable-diffusion-v1-4' # huggingface 上用于生成图像的稳定扩散模型名称
      torch_dtype: 'fp32' # 用于加载扩散模型的浮点类型。可以是 ['fp32', 'fp16', 'bf16'] 之一
      revision: 'main' # 要使用的特定模型版本。它可以是分支名称、标签名称、提交 ID 或 Git 允许的任何标识符。
      strength: 0.8 # 稳定扩散模型的参数,表示变换参考图像的程度。如果等于 1,将忽略输入图像
      guide_scale: 7.5 #稳定扩散模型的参数,较高的指导尺度值鼓励模型生成与文本提示紧密相关的图像,但代价是图像质量较低
      aug_num: 1 # 要生成的图像数量
      keep_original_sample: true #是否保留原始样本,若设置为False,则最终数据集中只有生成的图片,原始图片会被移除,默认为True。
      caption_key: null # 样本中字段的键名称,用于存储每个图像的标题,标题指导扩散模型生成图像
      hf_img2seq:'Salesforce/blip2-opt-2.7b'# 如果 caption_key 为空,则 huggingface 上的模型名称将生成标题
      mem_required: '8GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - image_face_blur_mapper: # 模糊图像中检测到的人脸
      blur_type: 'gaussian' # 模糊核的类型,包括 ['mean', 'box', 'gaussian']
      radius: 2 #模糊内核的半径
  - nlpaug_en_mapper: # 基于 nlpaug 库简单地增强英文文本
      Sequenced: false # 是否将所有增强方法组合成一个序列。如果为 True,则样本将按顺序通过所有打开的增强方法进行增强。如果为 False,则每个打开的增强方法将独立生成其增强样本。
      aug_num: 1 # 要生成的增强样本数量。如果 `sequence` 为 True,则将生成总共 aug_num 个增强样本。如果为 False,则将生成 (aug_num * #opened_aug_method) 个增强样本。
      keep_original_sample: true # 是否保留原始样本,若设置为False,则最终数据集中只有生成的文本,原始文本会被删除,默认为True。
      delete_random_word: false # 是否开启从原文中删除随机单词的增强方法。例如“I love LLM” --> “I LLM”
      swap_random_word: false # 是否开启在原文中随机交换连续单词的增强方法。例如“I love LLM” --> “Love I LLM”
      pelling_error_word: false # 是否开启模拟原文单词拼写错误的增强方法。例如“I love LLM” --> “Ai love LLM”
      split_random_word: false # 是否开启在原文中使用空格随机切分单词的增强方法。例如“I love LLM” --> “I love LL M”
      keyboard_error_char: false # 是否开启模拟原文字符键盘输入错误的增强方法。例如“I love LLM” --> “I ;ov4 LLM”
      ocr_error_char: false # 是否开启模拟原文字符OCR误差的增强方法。例如“I love LLM” --> “I 10ve LLM”
      delete_random_char: false # 是否开启从原文中删除随机字符的增强方法。例如“I love LLM” --> “I oe LLM”
      swap_random_char: false # 是否开启原文中随机连续字符交换的增强方法。例如“I love LLM” --> “I ovle LLM”
      insert_random_char: false # 是否开启在原文中插入随机字符的增强方法。例如“I love LLM” --> “I ^lKove LLM”
  - nlpcda_zh_mapper: # 基于 nlpaug 库简单地增强中文文本
      Sequenced: false # 是否将所有增强方法组合成一个序列。如果为 True,则样本将按顺序通过所有打开的增强方法进行增强。如果为 False,则每个打开的增强方法将独立生成其增强样本。
      aug_num: 1 # 要生成的增强样本数量。如果 `sequence` 为 True,则将生成总共 aug_num 个增强样本。如果为 False,则将生成 (aug_num * #opened_aug_method) 个增强样本。
      keep_original_sample: true # 是否保留原始样本,若设置为False,则最终数据集中只有生成的文本,原始文本会被删除,默认为True。
      Replace_similar_word: false # 是否开启用原文中相似词替换随机词的增强方法。例如“这里共有5种不同的数据增强方法”-->“香料一共有5种不同的数据增强方法”
      Replace_homophone_char: false # 是否开启用原文中的同音字替换随机字符的增强方法。例如“这里共有5种不同的数据增强方法”-->“这里共有5种不同的濖据增强方法”
      delete_random_char: false # 是否开启从原文中删除随机字符的增强方法。例如“这里共有5种不同的数据增强方法”-->“这里共有5种不同的数据增强”
      swap_random_char: false # 是否开启交换原文中随机连续字符的增强方法。例如“这里共有5种不同的数据增强方法”-->“这里共有5种不同的数据增强方法”
      Replace_equivalent_num: false # 是否开启将随机数替换为原文中的等价表示的增强方法。 **注意**:目前仅适用于数字。例如“这里一共有5种不同的数据增强方法”-->“这里一共有5种不同的数据增强方法”
  - punctuation_normalization_mapper:# 将unicode标点符号标准化为英语标点符号。
  - remove_bibliography_mapper:#从 Latex 文本中删除参考书目。
  - remove_comments_mapper:#从 Latex 文本、代码等中删除注释。
      doc_type: tex # 您想要删除的注释类型。目前仅支持“tex”。
      inline: true #是否删除内联注释
      multiline: true #是否删除多行注释
  - remove_header_mapper:#从 Latex 文本中删除标题文本。
      drop_no_head: true # 是否删除没有标题的样本文本
  - remove_long_words_mapper:# 从文本中删除太长的单词。
      min_len: 1 # 保留单词的最小字长。
      max_len: 128 # 保留单词的最大字长。
  - remove_non_chinese_character_mapper:# 删除文本样本中的非中文字符。
      keep_alphabet: true # 是否保留字母表
      keep_number: true #是否保留号码
      keep_punc: true # 是否保留标点符号
  - remove_repeat_sentences_mapper:# 删除文本样本中的重复句子。
      lowercase: false #是否将示例文本转换为小写
      ignore_special_character: true #判断重复句子时是否忽略特殊字符,特殊字符是除汉字、字母、数字以外的所有字符
      min_repeat_sentence_length: 2 # 短于此长度的句子不会被去重。如果 ignore_special_character 设置为 True,则此长度内不包含特殊字符
  - remove_specific_chars_mapper:#删除用户指定的字符
      chars_to_remove: '◆●■►▼▲▴∆▻▷❖♡□' # 包含需要删除的字符的字符串或列表
  - remove_table_text_mapper:#从文本中删除可能的表格文本。
      min_col: 2 # 表中要删除的最小列数
      max_col: 20 # 表中要删除的最大列数
  - remove_words_with_incorrect_substrings_mapper:# 从文本中删除带有不正确子字符串的单词。
      lang: en # 示例语言
      tokenization: false # 是否使用模型对文档进行标记
      substrings: ['http', 'www', '.com', 'href', '//'] # 需要删除的不正确子字符串
  - sentence_split_mapper: # 将文本拆分为多个句子,并用 '\n' 连接起来
      lang: 'en' # 用什么语言分割文本
  - video_captioning_from_audio_mapper:# 根据 Qwen-Audio 模型,根据音频流为视频添加字幕
      keep_original_sample: true # 是否保留原始样本,若设置为False,则最终数据集中只保留带字幕的样本,原始样本会被移除,默认为True。
      mem_required: '30GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_captioning_from_frames_mapper:# 生成样本,其字幕基于图像到文本模型和采样的视频帧生成。来自不同帧的字幕将连接成一个字符串。
      hf_img2seq:'Salesforce/blip2-opt-2.7b'# huggingface 上的图像转文本模型名称用于生成标题
      caption_num: 1 # 每个视频生成多少个候选字幕
      keep_candidate_mode: 'random_any' # 为生成的 $caption_num$ 个候选保留策略。应该在 ["random_any", "similar_one_simhash", "all"] 中。
      keep_original_sample: true # 是否保留原始样本。如果设置为 False,最终数据集中将只有生成的字幕,原始字幕将被删除。默认为 True。
      prompt: null # 一个字符串提示,用于指导全局所有样本的图像转文本模型的生成。默认为 None,即不提供任何提示。
      prompt_key: null #samples 中用于存储每个样本提示的字段的键名,用于为不同的样本设置不同的提示。如果没有,则使用参数“prompt”中的 prompt。默认为 None。
      frame_sampling_method: 'all_keyframes' # 从视频中提取帧图像的采样方法。应为 ["all_keyframes", "uniform"] 之一。前者提取所有关键帧,后者从视频中均匀提取指定数量的帧。默认值:"all_keyframes"。
      frame_num: 3 # 从视频中均匀提取的帧数。仅当 frame_sampling_method 为“uniform”时有效。如果为 1,则只提取中间帧。如果为 2,则只提取第一帧和最后一帧。如果大于 2,除了第一帧和最后一帧外,视频时长内的其他帧也会均匀提取。
      Horizontal_flip: false # 水平翻转帧图像(从左到右)。
      vertical_flip: false # 垂直翻转帧图像(从上到下)。
      mem_required: '20GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_captioning_from_summarizer_mapper:#通过总结几种生成的文本(来自视频/音频/帧的字幕、来自音频/帧的标签等)来生成视频字幕。
      hf_summarizer: 'mrm8488/flan-t5-large-finetuned-openai-summarize_from_feedback'# 用于总结其他方法生成的文本的总结模型。
      consider_video_caption_from_video:true # 是否在摘要过程中直接考虑从视频生成的视频字幕。默认值:True。
      consider_video_caption_from_audio:true # 是否在摘要过程中考虑从视频中的音频流生成的视频字幕。默认值:True。
      consider_video_caption_from_frames:true # 是否在摘要过程中考虑从视频中采样的帧生成的视频字幕。默认值:True。
      consider_video_tags_from_audio: true # 是否在摘要过程中考虑视频中音频流生成的视频标签。默认值:True。
      consider_video_tags_from_frames: true # 是否在摘要过程中考虑从视频中采样的帧生成的视频标签。默认值:True。
      vid_cap_from_vid_args:null # 直接从视频生成视频字幕的参数字典,键是参数名称,值是参数值。默认值:无。
      vid_cap_from_frm_args:null # 从视频中采样的帧生成视频字幕的参数字典,其中键是参数名称,值是参数值。默认值:无。
      vid_tag_from_aud_args:null # 用于从视频中的音频流进行视频标记的参数字典,其键是参数名称,值是参数值。默认值:无。
      vid_tag_from_frm_args:null # 用于从视频采样帧进行视频标记的参数字典,其键是参数名称,值是参数值。默认值:无。
      keep_tag_num: 5 # 取样帧中最多保留的标签数 N。​​太多标签可能会给摘要文本带来负面影响,因此我们考虑仅保留 N 个最常见的标签。默认值:5。
      keep_original_sample: true # 是否保留原始样本。如果设置为 False,最终数据集中将只有摘要字幕,原始字幕将被删除。默认为 True。
      mem_required: '40GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算过程中会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_captioning_from_video_mapper:# 通过从视频中提取的帧图像生成字幕以扩充数据集
      hf_video_blip: 'kpyu/video-blip-opt-2.7b-ego4d' # huggingface 上用于生成标题的 video-blip 模型名称
      caption_num: 1 # 每个视频生成多少个候选字幕
      keep_candidate_mode: 'random_any' # 为生成的 $caption_num$ 个候选保留策略。应该在 ["random_any", "similar_one_simhash", "all"] 中。
      keep_original_sample: true # 是否保留原始样本。如果设置为 False,最终数据集中将只有生成的字幕,原始字幕将被删除。默认为 True。
      prompt: null # 一个字符串提示,用于指导全局所有样本的视频片段模型的生成。默认情况下为 None,即不提供任何提示。
      prompt_key: null #samples 中用于存储每个样本提示的字段的键名,用于为不同的样本设置不同的提示。如果没有,则使用参数“prompt”中的 prompt。默认为 None。
      frame_sampling_method: 'all_keyframes' # 从视频中提取帧图像的采样方法。应为 ["all_keyframes", "uniform"] 之一。前者提取所有关键帧,后者从视频中均匀提取指定数量的帧。默认值:"all_keyframes"。
      frame_num: 3 # 从视频中均匀提取的帧数。仅当 frame_sampling_method 为“uniform”时有效。如果为 1,则只提取中间帧。如果为 2,则只提取第一帧和最后一帧。如果大于 2,除了第一帧和最后一帧外,视频时长内的其他帧也会均匀提取。
      Horizontal_flip: false # 水平翻转帧图像(从左到右)。
      vertical_flip: false # 垂直翻转帧图像(从上到下)。
      mem_required: '20GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_face_blur_mapper:# 在视频中检测到的模糊人脸
      blur_type: 'gaussian' # 模糊核的类型,包括 ['mean', 'box', 'gaussian']
      radius: 2 #模糊内核的半径
  - video_ffmpeg_wrapped_mapper: # FFmpeg 视频过滤器的简单包装器
  - video_remove_watermark_mapper: # 删除视频中指定区域的水印
      roi_strings: ['0,0,0.1,0.1'] # 水印所在区域的给定列表。每个区域的格式可以是“x1, y1, x2, y2”、“(x1, y1, x2, y2)”或“[x1, y1, x2, y2]”。
      roi_type: ratio # roi字符串类型,当类型为'pixel'时,(x1, y1), (x2, y2)分别为左上角和右下角像素的位置,如果roi_type为'ratio',坐标会根据权重和高度进行归一化。
      roi_key: null # 样本中用于存储每个样本的 roi_strings 的字段的键名。用于为不同的样本设置不同的 rois。
      frame_num: 10 #需要从视频中均匀提取用于检测水印像素的帧数。
      min_frame_threshold: 7 # 当坐标位于不少于 min_frame_threshold 个帧中的水印像素时,该坐标被视为水印像素的位置。
      detection_method: pixel_value # 检测水印像素的方法。如果是'pixel_value',我们会考虑每帧中像素值的分布。如果是'pixel_diversity',我们会考虑不同帧中的像素多样性。
  - video_resize_aspect_ratio_mapper:# 将视频的宽高比(宽度除以高度,r=w/h)调整为指定范围
      min_ratio: 9/21 # 最小宽高比,强制宽高比低于“min_ratio”的视频将调整大小以匹配此最小比例。该比例应以“9:21”或“9/21”格式的字符串提供。
      max_ratio: 21/9 # 最大宽高比,强制宽高比大于“max_ratio”的视频将调整大小以匹配此最大比例。该比例应以“21:9”或“21/9”格式的字符串提供。
      strategy:increase # 调整视频尺寸时应用的大小调整策略。可以是“减少”以减小尺寸,也可以是“增加”以放大尺寸。可接受的值为 ['减少', '增加']。
  - video_resize_resolution_mapper: # 将视频映射到具有给定分辨率范围的视频
      min_width: 640 # 最小水平分辨率(单位 p),宽度小于 'min_width' 的视频将被映射到宽度相等或更大的视频
      max_width: 1280 # 最大水平分辨率(单位 p),宽度大于“max_width”的视频将被映射到宽度相等或较小的视频
      min_height: 480 # 最小垂直分辨率(单位 p),高度小于 'min_height' 的视频将被映射到高度相等或更大的视频
      max_height: 1080 # 最大垂直分辨率(单位 p),高度大于 'max_height' 的视频将被映射到高度相等或更小的视频
      force_original_aspect_ratio: 'increase' # 如果需要保持原始纵横比,可以减少或增加输出视频的宽度或高度
      force_divisible_by: 4 # 确保与 force_original_aspect_ratio 一起使用时,输出尺寸(宽度和高度)都可以被给定的整数整除
  - video_split_by_duration_mapper:# 按持续时间分割视频的映射器。
      split_duration: 10 # 每个视频分割的持续时间(秒)。
      min_last_split_duration: 0.1 # 最后一个视频分割的最小允许时长(以秒为单位)。如果最后一个分割的时长小于此值,则会被丢弃。
      keep_original_sample: true # 是否保留原始样本,若设置为False,则最终数据集中只有切分样本,原始样本会被移除,默认为True
  - video_split_by_key_frame_mapper:# 通过关键帧分割视频的映射器。
      keep_original_sample: true # 是否保留原始样本,若设置为False,则最终数据集中只有切分样本,原始样本会被移除,默认为True
  - video_split_by_scene_mapper: # 将视频分割成场景剪辑
      detector: 'ContentDetector' # PySceneDetect 场景检测器。应该是 ['ContentDetector', 'ThresholdDetector', 'AdaptiveDetector`] 之一
      threshold:27.0 # 传递给检测器的阈值
      min_scene_len: 15 # 任何场景的最小长度
      show_progress: false # 是否显示 scenedetect 的进度
  - video_tagging_from_audio_mapper:# 从视频中提取的音频流生成视频标签的映射器。
      hf_ast: 'MIT/ast-finetuned-audioset-10-10-0.4593'# 音频分类模型的 Huggingface 模型名称。
      mem_required: '500MB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_tagging_from_frames_mapper:# 映射器,用于从视频中提取的帧生成视频标签。
      frame_sampling_method: 'all_keyframes' # 从视频中提取帧图像的采样方法。应为 ["all_keyframes", "uniform"] 之一。前者提取所有关键帧,后者从视频中均匀提取指定数量的帧。默认值:"all_keyframes"。
      frame_num: 3 # 从视频中均匀提取的帧数。仅当 frame_sampling_method 为“uniform”时有效。如果为 1,则只提取中间帧。如果为 2,则只提取第一帧和最后一帧。如果大于 2,除了第一帧和最后一帧外,视频时长内的其他帧也会均匀提取。
  - whitespace_normalization_mapper:#将不同类型的空格标准化为英语空格。

  # 过滤操作
  - alphanumeric_filter:# 过滤字母/数字比率超出特定范围的文本。
      tokenization: false #是否计算字母数字占token总数的比例。
      min_ratio: 0.0 # 过滤范围的最小比例
      max_ratio: 0.9 # 过滤范围的最大比例
  - audio_duration_filter:#保留音频持续时间在指定范围内的数据样本。
      min_duration: 0 # 过滤器范围的最小音频持续时间(以秒为单位)
      max_duration: 3600 # 过滤器范围的最大音频持续时间(以秒为单位)
      any_or_all: any # 当任何/所有音频满足过滤条件时保留此样本
  - audio_nmf_snr_filter:# 保留音频 SNR(基于 NMF 计算)在指定范围内的数据样本。
      min_snr: 0 # 保留样本的最小音频 SNR(以 dB 为单位)。默认为 0。
      max_snr: 1000 # 保留样本的最大音频 SNR(以 dB 为单位)。默认情况下为 sys.maxsize。
      nmf_iter_num: 500 # 运行 NMF 的最大迭代次数。默认值为 500。
      any_or_all: any # 当任何/所有音频满足过滤条件时保留此样本
  - audio_size_filter:#保留音频大小在指定范围内的数据样本。
      min_duration: "0" # 过滤器范围的最小音频大小
      max_duration: "1TB" # 过滤器范围的最大音频大小
      any_or_all: any # 当任何/所有音频满足过滤条件时保留此样本
  - average_line_length_filter:# 过滤超出特定范围的行平均长度的文本。
      min_len: 10 # 过滤范围的最小长度
      max_len: 10000 # 过滤范围的最大长度
  - character_repetition_filter: # 过滤字符重复率超出特定范围的文本
      rep_len: 10 # 字符级 n-gram 的重复长度
      min_ratio: 0.0 # 过滤范围的最小比例
      max_ratio: 0.5 # 过滤范围的最大比例
  - flagged_words_filter:# 过滤标记词比例大于特定最大值的文本
      lang: en # 考虑标记的单词属于哪种语言
      tokenization: false # 是否使用模型对文档进行标记
      max_ratio: 0.0045 # 过滤文本的最大比例
      flagged_words_dir: ./assets # 存储标记单词词典的目录
      use_words_aug: false # 是否增加单词,特别是中文和越南语
      words_aug_group_sizes: [2] # 要增强的单词组大小
      words_aug_join_char: "" # 要增强的单词之间的连接字符
  - image_aesthetics_filter:# 根据图像的美学分数过滤样本。
      hf_scorer_model: shunk031/aesthetics-predictor-v2-sac-logos-ava1-l14-linearMSE # 美学预测器的 Huggingface 模型名称
      min_score: 0.3 # 过滤范围的最小美学分数
      max_score: 1.0 # 过滤范围的最大美学分数
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '1500MB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - image_aspect_ratio_filter:# 根据图像的纵横比(宽度与高度的比率,r=w/h)过滤样本
      min_ratio: 0.333 # 过滤范围的最小宽高比
      max_ratio: 3.0 # 过滤范围的最大宽高比
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
  - image_face_ratio_filter: # 根据图片中人脸面积比例 (r=face_area/image_area) 过滤样本。如果有多个人脸,我们将使用最大的一个。
      min_ratio: 0.0 # 过滤范围的最小面面积比例
      max_ratio: 0.4 # 过滤范围的最大面面积比
  - image_nsfw_filter: # 根据图像的 nsfw 分数过滤样本
      hf_nsfw_model: Falconsai/nsfw_image_detection # 用于 nsfw 分类的 Huggingface 模型名称
      score_threshold: 0.5 # 样本的 nsfw 分数阈值,范围从 0 到 1。nsfw 分数低于此阈值的样本将被保留。
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '1GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - image_shape_filter: # 根据图像的宽度和高度过滤样本
      min_width: 200 # 宽度过滤范围的最小宽度
      max_width: 5000 # 宽度过滤范围的最大宽度
      min_height: 200 # 高度过滤范围的最小高度
      max_height: 5000 # 高度过滤范围的最大高度
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
  - image_size_filter: # 根据图像的大小(以字节为单位)过滤样本
      min_size: "0" # 过滤范围的最小大小
      max_size: "1TB" # 过滤范围的最大大小
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
  - image_text_matching_filter:#根据图像和文本之间的匹配分数过滤样本。
      hf_blip: Salesforce/blip-itm-base-coco # 使用的 Hugging Face blip 的名称
      min_score: 0.003 # 过滤范围的最小匹配分数
      max_score: 1.0 # 过滤范围的最大匹配分数
      Horizontal_flip: false # 水平翻转图像(从左到右)。
      vertical_flip: false # 垂直翻转图像(从上到下)。
      reduce_mode: avg # 当一个文本对应一个块中的多张图片时的减少模式,必须是 ['avg','max', 'min'] 之一。
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '1500MB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - image_text_similarity_filter:#根据图像和文本的相似性过滤样本。
      hf_clip: openai/clip-vit-base-patch32 # 使用的 Hugging Face 剪辑的名称
      min_score: 0.1 # 过滤范围的最小相似度
      max_score: 1.0 # 过滤范围的最大相似度
      Horizontal_flip: false # 水平翻转图像(从左到右)。
      vertical_flip: false # 垂直翻转图像(从上到下)。
      reduce_mode: avg # 当一个文本对应一个块中的多张图片时的减少模式,必须是 ['avg','max', 'min'] 之一。
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '1500MB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - image_watermark_filter: # 根据图像中预测的水印概率过滤样本
      hf_watermark_model: amrul-hzz/watermark_detector # 用于水印分类的Huggingface模型名称
      prob_threshold: 0.8 # 样本的预测水印概率阈值,范围从0到1。水印概率小于此阈值的样本将被保留。
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '500MB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - language_id_score_filter: # 过滤特定语言中语言分数大于特定最大值的文本
      lang: en # 保留文本的语言
      min_score: 0.8 # 过滤文本的最低语言分数
  - maximum_line_length_filter: # 过滤超出特定范围的最大行长文本
      min_len: 10 # 过滤范围的最小长度
      max_len: 10000 # 过滤范围的最大长度
  - perplexity_filter: # 过滤困惑度分数超出特定范围的文本
      lang: en # 计算使用哪种语言的困惑度
      max_ppl: 1500 # 过滤文本的最大困惑度分数
  - phrase_grounding_recall_filter:#根据从图像中的文本中提取的短语的定位召回率过滤样本。
      hf_owlvit: google/owlvit-base-patch32 # 使用的 Hugging Face Owl-ViT 的名称
      min_recall: 0.1 # 过滤范围内的最小短语基础召回率
      max_recall: 1.0 # 过滤范围内的最大短语基础召回率
      Horizontal_flip: false # 水平翻转图像(从左到右)。
      vertical_flip: false # 垂直翻转图像(从上到下)。
      iou_thr: 0.5 # NMS 类后处理的 IoU 阈值
      large_area_ratio_thr: 0.95 # 过滤掉大预测框的面积比阈值
      conf_thr: 0.0 # 删除低置信度边界框的置信度分数阈值
      reduce_mode: avg # 当一个文本对应一个块中的多张图片时的减少模式,必须是 ['avg','max', 'min'] 之一。
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '1GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - special_characters_filter: # 过滤特殊字符比例超出特定范围的文本
      min_ratio: 0.0 # 过滤范围的最小比例
      max_ratio: 0.25 # 过滤范围的最大比例
  - specified_field_filter: # 过滤特定范围内的指定字段信息的文本
      field_key: '' # 多级字段信息对应的目标key需要以'.'分隔。
      target_value: [] #需要保留的样本对应的指定字段信息范围
  - specified_numeric_field_filter: # 过滤特定范围内的指定数字字段信息的文本
      field_key: '' # 多级字段信息对应的目标key需要以'.'分隔。
      min_value: 0 # SpecifiedNumericField op 中的最小过滤值
      max_value: 10000 # SpecifiedNumericField 操作中的最大过滤值
  - stopwords_filter: # 过滤停用词比例小于特定最小值的文本
      lang: en # 考虑什么语言中的停用词
      tokenization: false # 是否使用模型对文档进行标记
      min_ratio: 0.3 # 过滤文本的最小比例
      stopwords_dir: ./assets #存储停用词词典的目录
      use_words_aug: false # 是否增加单词,特别是中文和越南语
      words_aug_group_sizes: [2] # 要增强的单词组大小
      words_aug_join_char: "" # 要增强的单词之间的连接字符
  - suffix_filter:#过滤以保留具有指定后缀的样本。
      suffixes: [] # 需要保留的文本后缀。例如:'.txt'、'txt' 或 ['txt', '.pdf', 'docx']
  - text_action_filter: # 根据动作动词的数量过滤文本
      lang: en # 考虑一下这些词用什么语言
      min_action_num: 1 # 将被过滤的文本的动词数小于最小动作数
  - text_entity_dependency_filter: # 过滤不含非独立实体名词的文本
      lang: en # 考虑一下这些词用什么语言
      min_dependency_num: 1 # 依赖树中非独立名词的最小相邻边数
      any_or_all: any # 当任何/所有实体名词都非独立时保留此样本
  - text_length_filter: # 过滤长度超出特定范围的文本
      min_len: 10 # 过滤范围的最小长度
      max_len: 10000 # 过滤范围的最大长度
  - token_num_filter: # 过滤总 token 数量超出特定范围的文本
      hf_tokenizer: EleutherAI/pythia-6.9b-deduped # 使用的 Hugging Face 标记器的名称
      min_num: 10 # 过滤范围的最小数量
      max_num: 10000 # 过滤范围的最大数量
  - video_aesthetics_filter:#根据从视频中提取的帧图像的美学分数过滤样本。
      hf_scorer_model: shunk031/aesthetics-predictor-v2-sac-logos-ava1-l14-linearMSE # 美学预测器的 Huggingface 模型名称
      min_score: 0.3 # 过滤范围的最小美学分数
      max_score: 1.0 # 过滤范围的最大美学分数
      frame_sampling_method: 'uniform' # 从视频中提取帧图像的采样方法。应为 ["all_keyframe", "uniform"] 之一。前者提取所有关键帧,后者从视频中均匀提取指定数量的帧。默认值:"uniform",frame_num=3,考虑到关键帧的数量可能很大,而从美观性方面来看,它们的差异通常很小。
      frame_num: 3 # 从视频中均匀提取的帧数。仅当 frame_sampling_method 为“uniform”时有效。如果为 1,则只提取中间帧。如果为 2,则只提取第一帧和最后一帧。如果大于 2,除了第一帧和最后一帧外,视频时长内的其他帧也会均匀提取。
      reduce_mode: avg # 对从视频中提取的所有帧进行减少模式,必须是 ['avg','max', 'min'] 之一。
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '1500MB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_aspect_ratio_filter:# 根据视频的宽高比(宽度与高度的比率,r=w/h)过滤样本
      min_ratio: 9/21 # 保留样本的最小纵横比,支持的格式是字符串,例如“9:21”或“9/21”。
      max_ratio: 21/9 # 保留样本的最大纵横比,支持的格式是字符串,例如“21:9”或“21/9”。
      any_or_all: any # 当任何/所有视频符合过滤条件时,保留此样本
  - video_duration_filter:# 保留视频时长在指定范围内的数据样本。
      min_duration: 0 # 过滤范围的最小视频持续时间(以秒为单位)
      max_duration: 10 # 过滤范围的最大视频持续时间(以秒为单位)
      any_or_all: any # 当任何/所有视频符合过滤条件时,保留此样本
  - video_frames_text_similarity_filter:# 保持样本在特定范围内采样视频帧图像和文本之间的相似性。
      hf_clip: openai/clip-vit-base-patch32 # 在 huggingface 上剪辑模型名称,以计算框架图像和文本之间的相似度。这有点与语言有关。例如,对于中文数据集,ChineseCLIP 可能是一个更好的选择。
      min_score: 0.1 # 保留样本的最小相似度。
      max_score: 1.0 # 保留样本的最大相似度。
      frame_sampling_method: all_keyframes # 从视频中提取帧图像的采样方法。应为 ["all_keyframes", "uniform"] 之一。前者提取所有关键帧,后者从视频中均匀提取指定数量的帧。默认值:"all_keyframes"。
      frame_num: 3 # 从视频中均匀提取的帧数。仅当 frame_sampling_method 为“uniform”时有效。如果为 1,则只提取中间帧。如果为 2,则只提取第一帧和最后一帧。如果大于 2,除了第一帧和最后一帧外,视频时长内的其他帧也会均匀提取。
      Horizontal_flip: false # 水平翻转帧图像(从左到右)。
      vertical_flip: false # 垂直翻转帧图像(从上到下)。
      reduce_mode: avg # 当一个文本对应一个块中的多个视频时的减少模式,必须是 ['avg','max', 'min'] 之一。
      any_or_all: any # 当任何/所有视频符合过滤条件时,保留此样本
      mem_required: '1GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_motion_score_filter:# 保留视频运动分数在特定范围内的样本。
      min_score: 0.25 # 保留样本的最小运动分数
      max_score: 10000.0 # 保留样本的最大运动分数
      sampling_fps: 2 # 计算光流的帧每秒的采样率
      size: null # 在计算光流之前沿较小边缘调整帧大小,或者像 (h, w) 这样的序列
      max_size: null # 调整大小后的帧较长边允许的最大值
      relative: false # 是否将光流幅度相对于帧的对角线长度标准化为[0, 1]
      any_or_all: any # 当任何/所有视频符合过滤条件时,保留此样本
  - video_nsfw_filter: # 根据视频的 nsfw 分数过滤样本
      hf_nsfw_model: Falconsai/nsfw_image_detection # 用于 nsfw 分类的 Huggingface 模型名称
      score_threshold: 0.5 # 样本的 nsfw 分数阈值,范围从 0 到 1。nsfw 分数低于此阈值的样本将被保留。
      frame_sampling_method: all_keyframes # 从视频中提取帧图像的采样方法。应为 ["all_keyframes", "uniform"] 之一。前者提取所有关键帧,后者从视频中均匀提取指定数量的帧。默认值:"all_keyframes"。
      frame_num: 3 # 从视频中均匀提取的帧数。仅当 frame_sampling_method 为“uniform”时有效。如果为 1,则只提取中间帧。如果为 2,则只提取第一帧和最后一帧。如果大于 2,除了第一帧和最后一帧外,视频时长内的其他帧也会均匀提取。
      reduce_mode:avg#针对多个采样视频帧的减少模式来计算视频的nsfw分数,必须是['avg','max','min']之一。
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '1GB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_ocr_area_ratio_filter:# 保留视频中指定帧的检测到的文本区域比例在指定范围内的数据样本。
      min_area_ratio: 0 # 保留样本的最小 OCR 面积比。默认为 0。
      max_area_ratio: 1.0 # 保留样本的最大 OCR 面积比。默认值为 1.0。
      frame_sample_num: 3 # 计算ocr面积比的采样帧数,如果为1则只选取中间帧,如果为2则只选取第一帧和最后一帧,如果大于2则除了第一帧和最后一帧,其他帧都会在视频时长内均匀采样。
      languages_to_detect:['ch_sim', 'en'] # 应检测语言的文本。默认值:['ch_sim', 'en']。完整语言列表可在此处找到:https://www.jaided.ai /easyocr/。
      any_or_all:any # 使用所有视频的“any”或“all”策略保留此样本。'any':如果任何视频满足条件,则保留此样本。'all':仅当所有视频都满足条件时才保留此样本。
  - video_resolution_filter: # 根据视频的分辨率过滤样本
      min_width: 1280 #水平分辨率滤波范围的最小分辨率(单位p)
      max_width: 4096 #水平分辨率滤波范围的最大分辨率(单位p)
      min_height: 480 # 垂直分辨率滤波范围的最小分辨率(单位p)
      max_height: 1080 #垂直分辨率滤波范围的最大分辨率(单位p)
      any_or_all: any # 当任何/所有视频符合过滤条件时,保留此样本
  - video_watermark_filter: # 根据视频中预测的水印概率过滤样本
      hf_watermark_model: amrul-hzz/watermark_detector # 用于水印分类的Huggingface模型名称
      prob_threshold: 0.8 # 样本的预测水印概率阈值,范围从0到1。水印概率小于此阈值的样本将被保留。
      frame_sampling_method: all_keyframes # 从视频中提取帧图像的采样方法。应为 ["all_keyframes", "uniform"] 之一。前者提取所有关键帧,后者从视频中均匀提取指定数量的帧。默认值:"all_keyframes"。
      frame_num: 3 # 从视频中均匀提取的帧数。仅当 frame_sampling_method 为“uniform”时有效。如果为 1,则只提取中间帧。如果为 2,则只提取第一帧和最后一帧。如果大于 2,除了第一帧和最后一帧外,视频时长内的其他帧也会均匀提取。
      reduce_mode:avg#针对多个采样视频帧的减少模式来计算视频的最终预测水印概率,必须是['avg','max','min']之一。
      any_or_all: any # 当任何/所有图像满足过滤条件时保留此样本
      mem_required: '500MB' # 此操作 (Op) 利用深度神经网络模型,该模型在计算时会消耗大量内存,因此系统的可用内存可能会限制可启动的最大进程数
  - video_tagging_from_frames_filter: # 根据视频中的标签过滤样本
      tags: ['people'] # 用于移动视频的标签列表,总标签可以在https://github.com/xinyu1205/recognize-anything/blob/main/ram/data/ram_tag_list.txt中找到。
      contain: any # 要求视频包含给定标签“any”或“all”。当标签等于 [] 时,“all”保留所有样本,“any”不保留任何样本。
      frame_sampling_method: all_keyframes # 从视频中提取帧图像的采样方法。应为 ["all_keyframes", "uniform"] 之一。前者提取所有关键帧,后者从视频中均匀提取指定数量的帧。默认值:"all_keyframes"。
      frame_num: 3 # 从视频中均匀提取的帧数。仅当 frame_sampling_method 为“uniform”时有效。如果为 1,则只提取中间帧。如果为 2,则只提取第一帧和最后一帧。如果大于 2,除了第一帧和最后一帧外,视频时长内的其他帧也会均匀提取。
      any_or_all: any # 当任何/所有视频符合过滤条件时,保留此样本
  - words_num_filter: # 过滤单词数超出特定范围的文本
      lang: en # 示例语言
      tokenization: false # 是否使用模型对文档进行标记
      min_num: 10 # 过滤范围的最小数量
      max_num: 10000 # 过滤范围的最大数量
  - word_repetition_filter: # 过滤单词重复率超出特定范围的文本
      lang: en # 示例语言
      tokenization: false # 是否使用模型对文档进行标记
      rep_len: 10 # 词级 n-gram 的重复长度
      min_ratio: 0.0 # 过滤范围的最小比例
      max_ratio: 0.5 # 过滤范围的最大比例

  # 重复数据删除操作
  - document_deduplicator: # 使用 md5 哈希精确匹配方法对文本样本进行重复数据删除
      lowercase: false #是否将文本转换为小写
      ignore_non_character: false # 是否忽略非字母字符,包括空格、数字和标点符号
  - document_minhash_deduplicator: # 使用 MinHash-LSH 方法对文本样本进行重复数据删除
      tokenization: space # 文本的 tokenization 方法。[空格、标点符号、字符、句子片段] 之一
      window_size: 5 # 瓦片窗口大小
      num_permutations: 256 # minhash 计算中的排列数
      jaccard_threshold: 0.7 # 近似重复检测中最小 Jaccard 相似度阈值,当两个样本文本的 Jaccard 相似度 >= 此阈值时,则视为相似样本,此 op 去重后只会保留其中一个样本
      num_bands: null # LSH 中的波段数。默认为 None,它将由最佳参数计算算法通过最小化假阳性和假阴性的概率加权和来确定
      num_rows_per_band: null # LSH 中每个波段的行数。默认为 None,将由最佳参数计算算法确定
      lowercase: true #是否将文本转换为小写
      ignore_pattern:null#计算simhash时是否忽略具有特定模式的子字符串。
      tokenizer_model:null#句子片段模型的路径,用于句子片段标记化。
  - document_simhash_deduplicator: # 使用 SimHash-LSH 方法对文本样本进行重复数据删除
      tokenization: space # 文本的 tokenization 方法。[空格、标点符号、字符] 之一
      window_size: 6 # 瓦片窗口大小
      num_blocks: 6 # SimHash计算中的块数
      hamming_distance: 4 # 将 2 个样本视为足够相似的对的最大汉明距离。应始终小于 num_blocks
      lowercase: true #是否将文本转换为小写
      ignore_pattern:null#计算simhash时是否忽略具有特定模式的子字符串。
  - image_deduplicator:# 重复数据删除器使用文档之间图像的精确匹配来对文档级别的样本进行重复数据删除。
      method:phash # 图像的哈希方法。[phash、dhash、whash、ahash] 之一
      consider_text: false # 应用重复数据删除时是否将文本哈希与图像哈希一起考虑。
  - video_deduplicator:# 重复数据删除器使用文档之间视频的精确匹配来对文档级别的样本进行重复数据删除。
      consider_text: false # 应用重复数据删除时是否将文本哈希与视频哈希一起考虑。
  - ray_video_deduplicator:# 可以在多节点上运行的简单视频去重器,使用 md5 哈希精确匹配方法
      redis_host: 'redis_host' # redis 实例的主机
      redis_port: 6380 # redis 实例的端口,请注意,redis 的默认端口是 6379,与 ray 的默认端口相同,因此我们需要修改默认 redis 配置以在其他端口使用它
  - ray_image_deduplicator:# 简单的图像重复数据删除器,可以使用文档之间图像的精确匹配在文档级别对样本进行重复数据删除。
      redis_host: 'redis_host' # redis 实例的主机
      redis_port: 6380 # redis 实例的端口,请注意,redis 的默认端口是 6379,与 ray 的默认端口相同,因此我们需要修改默认 redis 配置以在其他端口使用它
      method:phash # 图像的哈希方法。[phash、dhash、whash、ahash] 之一
  - ray_document_deduplicator:# 可以在多节点上运行的简单文档重复数据删除器,使用 md5 哈希精确匹配方法
      redis_host: 'redis_host' # redis 实例的主机
      redis_port: 6380 # redis 实例的端口,请注意,redis 的默认端口是 6379,与 ray 的默认端口相同,因此我们需要修改默认 redis 配置以在其他端口使用它
      lowercase: false #是否将文本转换为小写
      ignore_non_character: false # 是否忽略非字母字符,包括空格、数字和标点符号

  # 选择器操作
  - frequency_specified_field_selector:#选择器根据指定字段值的排序频率选择样本
      field_key: '' # 多级字段信息对应的目标键之间需要用'.'分隔。
      top_ratio: #选定顶部指定字段值的比例
      topk: # 选定的前几个指定字段值的数量
      reverse: True #确定排序规则,如果reverse=True,则按降序排序
  - random_selector: # 选择器随机选择样本
      select_ratio: # 要采样的比例
      select_num: # 需要采样的数量
  - range_specified_field_selector:#选择器根据从最小到最大排序的指定字段值选择一系列样本。
      field_key: '' # 多级字段信息对应的目标键之间需要用'.'分隔。
      lower_percentile: # 需要采样的百分位数的下限
      upper_percentile: # 需要采样的百分位数的上限
      lower_rank: # 需要采样的百分位数的最低等级
      upper_rank: # 需要采样的百分位数的上限
  - topk_specified_field_selector: # 选择器根据排序后的指定字段选择顶级样本
      field_key: '' # 多级字段信息对应的目标键之间需要用'.'分隔。
      top_ratio: # 选定的顶级样本的比例
      topk: # 选定的顶级样本的数量
      reverse: True #确定排序规则,如果reverse=True,则按降序排序

以下是一些指向性的优化建议:

  1. 数据增强

data-juicer 中,数据增强的算子主要包括 image_augmentor。根据文档,image_augmentor 支持多种图像增强操作。

process:
  - image_augmentor:
      operations:
        - type: "flip"
        - type: "rotate"
          angle: 15
        - type: "crop"
          size: [224, 224]
  1. 数据过滤

数据过滤的算子可以使用 quality_filter。根据文档,quality_filter 可以根据质量分数进行过滤。

process:
  - quality_filter:
      min_score: 0.8
  1. 数据去重

数据去重的算子可以使用 deduplicator。根据文档,deduplicator 支持多种去重方法。

process:
  - deduplicator:
      method: "hash"
  1. 数据合成

数据合成的算子可以使用 data_synthesizer。根据文档,data_synthesizer 支持多种数据合成方法。

process:
  - data_synthesizer:
      methods:
        - type: "mixup"
        - type: "cutmix"

根据示例教程,我们可以看到如何使用 data-juicer 进行数据处理。

以下是一个参考示例:

dataset_path: /path/to/your/dataset
export_path: /path/to/your/output

np: 4
process:
  - image_captioning_mapper:
      hf_img2seq: 'path/to/your/model'
      keep_original_sample: true
  - image_augmentor:
      operations:
        - type: "flip"
        - type: "rotate"
          angle: 10
        - type: "crop"
          size: [256, 256]
  - quality_filter:
      min_score: 0.7
  - deduplicator:
      method: "hash"
  - data_synthesizer:
      methods:
        - type: "mixup"
        - type: "cutmix"
posted @ 2024-08-15 23:06  Xu_Lin  阅读(103)  评论(0编辑  收藏  举报