Appearance
图文匹配问题
- 来源:
noai-train/联合训练/Day3/T3 图文匹配问题 郭亮钧 - 类型:Multimodal
- 原始资料:
题目.md、baseline.ipynb、baseline.py、metrics.py - 题面完整性:完整
- 解法资料完整性:有 baseline 与参考脚本;完整题解需推断
题面大意
训练集只给匹配的中文短文本和 32 x 32 RGB 图片对;测试集包含匹配和完全不相符的图文对,比例约 1:1。任务输出 0/1:0 表示完全不相符,1 表示相符。验证/测试 CSV 被 .lock 机制隐藏,提交时通过 metrics.py 选择保存的预测文件评分。分数由测试准确率线性映射,0.85 准确率封顶。
数据特点
训练数据只有正例,这使普通监督二分类缺少负样本。图像尺寸很小,文本为约 25 字中文短句。负例定义是“语义层面毫无关联”,通常可通过随机打乱图文对构造,但随机负样本可能太简单,模型只学到粗粒度类别而非细节匹配。
考点
核心考点是负样本构造和跨模态表示融合。题面没有直接提供负例,参赛者需要从训练正例中人工构造不匹配对,并让模型学会比较图像与文本语义,而不是分别做单模态分类。
涉及知识点
- 图像编码:小 CNN、ResNet 小变体。
- 文本编码:TF-IDF、字符 n-gram、Embedding/LSTM/Transformer 小模型。
- 跨模态融合:拼接、点积相似度、双塔检索。
- 对比学习与负采样。
- 锁文件评测与模型选择。
解法思路
基础方案是构造负样本:对训练集中图片和文本随机错配,形成标签 0;原始配对为标签 1。图像用轻量 CNN 编码,文本用 TF-IDF/字符 n-gram 或小 embedding 模型编码,拼接后用 MLP 二分类。由于图片只有 32 x 32,模型不能太深,增强和正则化很重要。
更强方案是双塔模型:图像塔和文本塔分别输出同维 embedding,训练时拉近真实配对、拉远错配配对,可用 BCE、contrastive loss 或 InfoNCE。推理时根据图文 embedding 相似度或拼接分类头判断是否匹配。难负样本可以选同一大类、颜色/物体描述相近但不完全匹配的错配文本,提升泛化。
可选/多种解法
随机负样本二分类:简单且有效,但容易学到浅层差异。
难负样本训练:用文本相似或图像相似的错配对训练,提高“完全不相符”判别力。
CLIP 式双塔:适合检索视角,若不能用预训练,则需要从头训练且数据量可能不足。
特殊技巧
训练负样本比例可以设为 1:1,与测试分布一致。每轮动态重采样负样本比固定一次错配更好。文本短且中文,字符级 TF-IDF 往往比复杂分词更稳定。图像很小,颜色和形状的低级特征也可能足够强。
调参优化
多模态匹配的关键调参项是负样本构造。建议扫描正负样本比例、hard negative 占比、文本 n-gram 范围、图像 CNN 宽度、融合层隐藏维度、dropout、学习率和匹配阈值。评估时既看 AUC,也要按提交需要扫描二分类阈值。由于图像只有 32 x 32,过深 CNN 收益有限;更值得调的是文本特征、负样本难度和图文融合方式。
注意事项
训练 CSV 没有 label,全部是匹配对;如果 baseline 把无 label 默认设为 0,需要注意训练逻辑是否反了。.lock 文件由 lock.py 管理,删除或绕过会破坏评测流程。最终提交实际是 test_model 中被锁定的预测文件,由 metrics.py 交互选择。
推广意义
这题对应真实数据清洗中的“图文是否错配”问题。核心经验是:当只有正例时,可以通过合理负采样把任务转化为可监督学习;难负样本质量决定模型是否学到真正语义匹配。