使用 MMF 参加 Hateful Memes 挑战赛:从 MMBT 基线训练、评估到提交预测的完整指南
发布时间:2026/10/12 2:17:43 锦皓数字建站

多模态人工智能深度学习NLP计算机视觉预训练【免费下载链接】mmfA modular framework for vision language multimodal research from Facebook AI Research (FAIR)项目地址https://gitcode.com/gh_mirrors/mm/mmf点击查看免费下载本文是 MMF 框架中 Hateful Memes Challenge 指南 的完整实践教程。Hateful Memes 是 Facebook AI ResearchFAIR联合 DrivenData 发起的多模态仇恨言论检测挑战赛参赛者需要同时结合图片与文本信息判断一条 meme 是否含有仇恨言论。本文将以 MMF 内置的 MMBT 模型为示例带你走通数据准备 → 训练 → 验证集评估 → 测试集预测 → 生成提交文件的完整链路同样的步骤可直接迁移到你自己的自定义模型上。挑战赛与 MMF 的对应关系Hateful Memes Challenge第二阶段托管在 DrivenData 平台上官方数据集与评测规则可从其竞赛页面获取。MMF 仓库为该挑战赛提供了三样开箱即用的资产基线模型预训练权重包括 Image-Grid、Image-Region、Text BERT、Late Fusion、ConcatBERT、MMBT-Grid、MMBT-Region、ViLBERT、Visual BERT 等多条论文基线训练配置全部收敛在 projects/hateful_memes/configs 目录下数据处理工具mmf_convert_hm命令可将从 DrivenData 下载的加密压缩包一键解压并转换成 MMF 标准格式完整基线复现说明见 projects/hateful_memes/README.md其中包含与论文《The Hateful Memes Challenge: Detecting Hate Speech in Multimodal Memes》Kiela et al., 2020一一对应的配置清单。本文后续所有命令均以MMBT-Gridmmbt 模型 原始图片输入为例。若使用 MMBT-Region区域特征输入只需把配置文件换成 projects/hateful_memes/configs/mmbt/with_features.yaml并在命令中将modelmmbt保持一致即可。安装与数据准备1. 安装 MMF按 MMF 官方安装文档完成框架安装确保mmf_run、mmf_predict、mmf_convert_hm等 CLI 命令可用。2. 下载并转换数据Hateful Memes 数据涉及许可协议MMF 不会自动下载必须手动从 DrivenData 竞赛页面下载。mmf/datasets/builders/hateful_memes/builder.py中的build方法对此有明确校验如果train.jsonl不存在会直接断言失败并提示按https://fb.me/hm_prerequisites的指引手动获取数据。具体步骤在 DrivenData 注册并同意数据许可下载加密 zip 压缩包记下路径为x从数据下载页面记录解压密码为y执行转换命令mmf_convert_hm --zip_filex --passwordy其中x替换为 zip 文件路径y替换为下载页面给出的密码。该命令会解压并自动将文件整理为 MMF 期望的目录结构解压大文件时可能耗时较长。注意如果命令因 checksum 校验失败而报错可追加--bypass_checksum1跳过校验重试。从 mmf_cli/hm_convert.py 的实现可以看到转换器同时兼容挑战赛两个阶段的数据第一阶段识别train.jsonl / dev.jsonl / test.jsonl第二阶段识别train.jsonl / dev_seen.jsonl / test_seen.jsonl / dev_unseen.jsonl / test_unseen.jsonlJSONL_PHASE_ONE_FILES与JSONL_PHASE_TWO_FILES两个常量并内嵌了多个已知 zip 文件的 SHA-256 checksum 用于完整性校验。3. 数据目录结构转换完成后数据会被放置到env.data_dir/datasets/hateful_memes/defaults/下包含annotations/各 split 的 jsonl 标注文件train.jsonl、dev_unseen.jsonl、test_unseen.jsonl等images/meme 图片features/可选区域特征detectron.lmdb仅在use_features配置下使用extras/vocabs/词汇表文件。上述路径与 mmf/configs/datasets/hateful_memes/defaults.yaml 中的annotations、images、features字段一一对应dataset_config: hateful_memes: data_dir: ${env.data_dir}/datasets use_images: true use_features: false annotations: train: - hateful_memes/defaults/annotations/train.jsonl val: - hateful_memes/defaults/annotations/dev_unseen.jsonl test: - hateful_memes/defaults/annotations/test_unseen.jsonl images: train: - hateful_memes/defaults/images/ val: - hateful_memes/defaults/images/ test: - hateful_memes/defaults/images/注意默认配置下验证集与测试集分别使用dev_unseen.jsonl与test_unseen.jsonlunseen split即第二阶段正式提交所用的划分。训练以 MMBT 模型跑通 train_val训练命令在仓库根目录执行mmf_run configprojects/hateful_memes/configs/mmbt/defaults.yaml \ modelmmbt \ datasethateful_memes \ run_typetrain_val命令语义拆解configprojects/hateful_memes/configs/mmbt/defaults.yaml指定实验配置文件这是 MMBT-Grid 基线在 Hateful Memes 上的完整配置modelmmbt从模型注册表加载 MMBT 模型mmf/models/mmbt.py 中以registry.register_model(mmbt)注册datasethateful_memes加载 HatefulMemesBuildermmf/datasets/builders/hateful_memes/builder.pyrun_typetrain_val同时执行训练与验证。训练结束后checkpoint 与最优模型默认保存在./save目录下最优模型名为mmbt_final.pth可通过env.save_dir修改保存位置。配置文件的构成与含义projects/hateful_memes/configs/mmbt/defaults.yaml 是 MMBT-Grid 基线的核心配置它通过includes机制叠加了两份基础配置includes: - configs/models/mmbt/classification.yaml - configs/datasets/hateful_memes/bert.yaml scheduler: type: warmup_linear params: num_warmup_steps: 2000 num_training_steps: ${training.max_updates} optimizer: type: adam_w params: lr: 1e-5 eps: 1e-8 evaluation: metrics: - accuracy - binary_f1 - roc_auc training: batch_size: 32 lr_scheduler: true max_updates: 22000 early_stop: criteria: hateful_memes/roc_auc minimize: false checkpoint: pretrained_state_mapping: bert: bert各关键参数说明配置项值说明scheduler.typewarmup_linear线性预热学习率调度前 2000 步预热optimizer.typeadam_wAdamW 优化器学习率1e-5eps1e-8evaluation.metricsaccuracy/binary_f1/roc_auc验证集评测指标准确率、二分类 F1、ROC-AUCtraining.batch_size32训练批大小training.max_updates22000最大训练步数同时被调度器插值引用training.early_stop.criteriahateful_memes/roc_auc以 Hateful Memes 验证集 ROC-AUC 作为早停指标checkpoint.pretrained_state_mappingbert: bert将预训练 BERT 权重映射到模型中的bert子模块includes中引用的两份配置分别定义了模型头与文本处理方式mmf/configs/models/mmbt/classification.yaml设定training_head_type: classification、num_labels: 2并使用cross_entropy交叉熵损失mmf/configs/datasets/hateful_memes/bert.yaml设定文本处理器为 BERT tokenizerbert-base-uncased、do_lower_case: true、max_seq_length: 128、mask_probability: 0。而模型架构层的默认值在 mmf/configs/models/mmbt/defaults.yaml默认使用resnet152作为模态编码器modal_encoderBERTbert-base-uncased作为文本编码器modal_hidden_size: 2048、text_hidden_size: 768。MMBT 模型在源码中如何工作从 mmf/models/mmbt.py 的源码可以看到为兼容 transformers v2.3 而内嵌的MMBTModel/ModalEmbeddings实现MMBTBase.build构建文本编码器BERT与模态编码器图片编码器并通过ModalEmbeddings将模态特征线性投影到 BERT 的hidden_size维度前向过程把模态 token 序列与文本 token 序列拼接torch.cat([modal_embeddings, txt_embeddings], 1)统一送入 Transformer encoder实现跨模态的早期融合MMBTForClassification在池化输出上叠加BertPredictionHeadTransform nn.Linear得到二分类 logits输出到scores字段。这也解释了为什么mmbt模型在use_imagestrue网格图片与use_featurestrue区域特征两种输入模式下都能工作——forward中通过_is_direct_features_input判断取input_modal区域特征还是image原始图片。评估在验证集上计算指标训练完成后用保存的最优模型在验证集上做评估mmf_run configprojects/hateful_memes/configs/mmbt/defaults.yaml \ modelmmbt \ datasethateful_memes \ run_typeval \ checkpoint.resume_file./save/mmbt_final.pth \ checkpoint.resume_pretrainedFalse要点run_typeval仅运行验证checkpoint.resume_file./save/mmbt_final.pth指向训练产出的最优模型文件checkpoint.resume_pretrainedFalse关键参数关闭预训练权重自动恢复逻辑确保加载的是本地训练好的 checkpoint而不是从头再拉取预训练模型。评估输出的指标即配置中声明的accuracyACC、binary_f1Binary F1、roc_aucAUROC。这些指标在 mmf/modules/metrics.py 中实现BinaryF1注册键binary_f1基于 sklearn 的 F1 计算ROC_AUC注册键roc_auc会先对model_output[scores]做 softmax再调用sklearn.metrics.roc_auc_score计算。生成挑战赛提交预测文件提交文件格式要求DrivenData 要求提交文件包含以下三列idmeme 的唯一识别编号proba该 meme 属于仇恨言论hateful的概率label二分类标签1 表示仇恨言论0 表示非仇恨言论。MMF 的预测输出逻辑在 mmf/datasets/builders/hateful_memes/dataset.py 的generate_binary_prediction函数中实现对 logits 做 softmax取第 1 类的概率作为probaprobabilities scores[:, 1]取 argmax 作为label与样本的id一起组装成字典列表数据集配置中的evaluation.predict_file_format: csv则决定最终以 CSV 格式写出。生成测试集预测mmf_predict configprojects/hateful_memes/configs/mmbt/defaults.yaml \ modelmmbt \ datasethateful_memes \ run_typetest \ checkpoint.resume_pretrainedFalse执行完成后命令会在日志中输出生成的预测 CSV 文件存放位置。mmf_predict的底层行为可参考 mmf_cli/predict.py它会自动向命令行追加evaluation.predicttrue随后调用mmf_cli/run.py中的run(predictTrue)在构建好训练器后走trainer.inference()分支执行推理而非trainer.train()。提示若你想先观察模型在验证集上的预测输出只需把上面的run_typetest改为run_typeval并保留checkpoint.resume_file指向训练好的模型即可。提交到 DrivenData将上一步生成的 CSV 文件上传到 DrivenData Hateful Memes 竞赛的 submissions 页面即可完成提交。第一阶段Phase 1预测的特殊处理如果你需要针对挑战赛第一阶段的划分seen dev / seen test生成提交则必须通过命令行 dotlist 覆盖默认加载的 jsonl 文件。在任何命令末尾追加dataset_config.hateful_memes.annotations.val[0]hateful_memes/defaults/annotations/dev_seen.jsonl \ dataset_config.hateful_memes.annotations.test[0]hateful_memes/defaults/annotations/test_seen.jsonl该操作利用了 MMF 基于 OmegaConf 的配置系统命令行 dotlist 具有最高优先级会覆盖数据集默认配置中val/test的 annotation 路径默认是dev_unseen.jsonl与test_unseen.jsonl从而加载第一阶段的dev_seen.jsonl与test_seen.jsonl进行评估与预测。这一机制同样适用于其他任何需要临时切换数据划分的场景。进阶在 MMF 之上构建自定义模型MMF 是配置优先config-first的框架自定义模型接入的通用路径是在model_config下注册你自己的模型配置并用registry.register_model(your_model_key)注册模型类在dataset_config下配置数据相关参数运行mmf_run configyour_config modelyour_model_key datasethateful_memes。整个流程与本文 MMBT 示例完全一致命令模板为mmf_run configREPLACE_WITH_YOUR_CONFIG modelREPLACE_WITH_YOUR_MODEL_KEY datasethateful_memes训练、验证、预测阶段与 MMBT 基线共用同一套命令骨架只需替换配置与模型键。直接加载官方预训练基线不想从头训练时可以用模型动物园zoo直接加载官方预训练基线。Hateful Memes 相关的 zoo 键定义在 mmf/configs/zoo/models.yaml 中包括mmbt.hateful_memes.images/mmbt.hateful_memes.featuresMMBT-Grid / MMBT-Regionvisual_bert.finetuned.hateful_memes.direct/.from_cocovilbert.finetuned.hateful_memes.direct/.from_cc_originalunimodal_image.hateful_memes.images/.features、unimodal_text.hateful_memes.bert、concat_bert.hateful_memes、late_fusion.hateful_memes等。在验证集上评估预训练模型mmf_run configREPLACE_WITH_BASELINE_CONFIG modelREPLACE_WITH_MODEL_KEY datasethateful_memes \ run_typeval checkpoint.resume_zooREPLACE_WITH_PRETRAINED_ZOO_KEY checkpoint.resume_pretrainedFalse在测试集上生成预测mmf_predict configREPLACE_WITH_BASELINE_CONFIG modelREPLACE_WITH_MODEL_KEY datasethateful_memes \ run_typetest checkpoint.resume_zooREPLACE_WITH_PRETRAINED_ZOO_KEY checkpoint.resume_pretrainedFalse在 Python 代码中直接加载预训练模型from mmf.common.registry import registry model_cls registry.get_model_class(DESIRED_MODEL_KEY) model model_cls.from_pretrained(DESIRED_PRETRAINED_ZOO_KEY)基线配置速查表projects/hateful_memes/README.md 中给出了论文全部基线的配置与预训练键对照摘录如下基线模型键预训练键配置Image-Gridunimodal_imageunimodal_image.hateful_memes.imagesprojects/hateful_memes/configs/unimodal/image.yamlImage-Regionunimodal_imageunimodal_image.hateful_memes.featuresprojects/hateful_memes/configs/unimodal/with_features.yamlText BERTunimodal_textunimodal_text.hateful_memes.bertprojects/hateful_memes/configs/unimodal/bert.yamlLate Fusionlate_fusionlate_fusion.hateful_memesprojects/hateful_memes/configs/late_fusion/defaults.yamlConcatBERTconcat_bertconcat_bert.hateful_memesprojects/hateful_memes/configs/concat_bert/defaults.yamlMMBT-Gridmmbtmmbt.hateful_memes.imagesprojects/hateful_memes/configs/mmbt/defaults.yamlMMBT-Regionmmbtmmbt.hateful_memes.featuresprojects/hateful_memes/configs/mmbt/with_features.yamlViLBERTvilbertvilbert.finetuned.hateful_memes.directprojects/hateful_memes/configs/vilbert/defaults.yamlVisual BERTvisual_bertvisual_bert.finetuned.hateful_memes.directprojects/hateful_memes/configs/visual_bert/direct.yamlViLBERT CCvilbertvilbert.finetuned.hateful_memes.from_cc_originalprojects/hateful_memes/configs/vilbert/from_cc.yamlVisual BERT COCOvisual_bertvisual_bert.finetuned.hateful_memes.from_cocoprojects/hateful_memes/configs/visual_bert/from_coco.yaml需要注意依赖区域特征region features的配置在首次运行时可能触发特征自动下载特征文件体积较大下载与解压耗时较长。结语通过本文你已经掌握了用 MMF 完整参与 Hateful Memes 挑战赛的闭环流程使用mmf_convert_hm准备数据、用mmf_run训练与验证 MMBT 基线、用mmf_predict生成符合 DrivenData 提交格式id/proba/label三列的 CSV 预测文件并通过命令行 dotlist 灵活切换 Phase 1 / Phase 2 的数据划分。无论你是复现论文基线、加载官方预训练模型还是在 MMF 上开发自己的多模态模型这套命令与配置体系都可以直接复用。如果你打算将自己的代码开源可以参考社区中基于 MMF 构建 Hateful Memes 解决方案的示例项目来组织工程结构。赞分享多模态人工智能深度学习NLP计算机视觉预训练【免费下载链接】mmfA modular framework for vision language multimodal research from Facebook AI Research (FAIR)项目地址https://gitcode.com/gh_mirrors/mm/mmf点击查看免费下载相关推荐使用 MMF 复现 Hateful Memes Challenge数据转换、基线训练、评估与推理完整指南使用 MMF 复现 Hateful Memes Challenge数据转换、基线训练、评估与推理完整指南 Hateful Memes 是一个多模态仇恨言论检测多模态人工智能深度学习NLP计算机视觉预训练MMF项目实战指南如何在Hateful Memes挑战中取得优异成绩MMF项目实战指南如何在Hateful Memes挑战中取得优异成绩 MMFMultimodal Framework是Facebook AI Resear多模态人工智能深度学习NLP计算机视觉预训练Demucs 实战指南基于 SDX23 挑战赛数据集训练 Hybrid Demucs 模型从数据准备到参赛提交Demucs 实战指南基于 SDX23 挑战赛数据集训练 Hybrid Demucs 模型从数据准备到参赛提交 本文围绕 Demucs 仓库中的 docs人工智能深度学习音频上一篇TanStack Router 代码式路由测试完整指南从 Vitest 单元测试到 Playwright E2E下一篇Telegraf Parquet 解析器Parquet Parser完整使用指南配置、数据映射与源码实现解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。