想象你是一位刚刚开业的大厨。清晨,你从菜市场进了一麻袋食材,里面什么都有——水灵灵的时蔬、蔫掉的黄瓜、混进来的烂菜叶,甚至还有两袋长得一模一样的土豆。你没有时间逐一鉴别,索性整袋倒进锅里。结果可想而知:客人吃出一嘴烂菜味,招牌菜彻底砸了。 多模态预训练跟这如出一辙。CLIP、ALIGN 这类模型要用“图片+文本”配对来学习“看图识字”,而它们的学习素材来自互联网——那是一个天然的“大菜市场”:数十亿图文对通过网络自动抓取获得,没人帮你挑拣。数据干净与否,直接决定了模型能不能学会“看懂世界”。这篇文章就带你走进多模态数据清洗的“后厨”,看看如何分辨好食材、扔掉烂叶子、挑出重复的土豆,再用恰到好处的“火候”,把一锅好数据炒成一桌 AI 盛宴。你不需要任何基础,跟着这条从菜市场到餐桌的路线,就能掌握 CLIP/ALIGN 数据清洗与去噪的核心要义。
对 AI 从业者而言,数据清洗是决定多模态模型上限的“隐形工程”——掌握它,你就能用更低的数据成本训练出更鲁棒的模型,成为团队里真正“懂数据”的稀缺人才。
目录
可视化演示
展示多模态预训练数据的清洗管线、噪声图文对检测、以及CLIP对齐质量评分分布,切换模式查看。
本节配有交互动效(进入视口后自动加载,约 3KB)。
数据清洗管线 原始数据含噪声/重复/不安全内容 多级过滤:去重→质量→安全 输出高质量训练集 保留率 ≈ 38%(1000→380) 多级清洗管线将数据质量提升至可用水平
多模态基础:图文配对的艺术
你开了一家私房菜馆,收了个聪明徒弟。你没有让他背菜谱,而是让他“看菜配名”——桌上一次性摆出几十道菜,每道菜前放一张菜名卡:麻婆豆腐配“麻婆豆腐”,糖醋里脊配“糖醋里脊”。看一会儿,打乱卡片让他重新配对。几天之后,徒弟瞥一眼菜就能说出名字,听到一个菜名就能在脑子里浮现出它的样子。这种“配对”的训练方式,就是 CLIP 的灵魂。
CLIP 把这种“看菜配名”搬到了 AI 身上。它用了两个编码器:图像编码器负责“看菜”,把一张图片压缩成一个向量;文本编码器负责“读名牌”,把一句话压缩成另一个向量。训练时,模型要把同一菜品的“菜”和“名牌”拉近,把不同菜品的“菜”和“名牌”推远。这里的核心技巧是对比学习——它不需要人工标注“这张图是什么”,只需要知道哪些图文对是从网络上一起抓来的,就暗自假设它们是一对。这种依赖海量自动配对数据的训练方式,被称为“弱监督”。
把这种直觉写成数学,就是对比损失(InfoNCE):
你看,这桌“看菜配名”的训练,就是多模态模型的“基本功”。但基本功扎实还不够——如果端上桌的食材本身是坏的,再聪明的徒弟也会被带偏。于是我们走进下一站:菜市场。
- 批量配对设有 N 个图文对 $(v_i, t_i)$,i 从 1 到 N,构成一个训练批次,就像桌上摆出 N 道菜。
- 相似度计算用余弦相似度衡量图像与文本向量的匹配程度,值越大越般配。
- 温度缩放把相似度除以温度参数 $\tau$ 再取指数,相当于给“般配度”加一个放大镜。
- 对比归一化分母把所有文本(包括错误配对的文本)的指数分加起来,形成“竞争场”。
- 双向平均图像找文本的方向算一次,文本找图像的方向再算一次,取平均,保证两个方向都学扎实。
噪声来源:菜市场里的烂叶子
光有好厨师不够,原料得起得新鲜。你图省事,选择从网上的“自动配送”进货:一箱货送过来,可能有一张猫咪的照片配着“狗狗”的标签;有张风景照的标签就一个“图”字,等于没写;还有好几袋土豆,跟你昨天买的完全一模一样。这就是多模态预训练数据最真实的模样——网络自动抓取的图文对,天然混着各种“坏食材”。
业界把这类坏数据归纳成三类典型噪声。第一类是图文错配:网页上的图片和周边文字往往只是“沾边”,图片是毛绒玩具,文字却聊到家具打折,这种错配样本会直接教错模型。第二类是短标签歧义:标签只有一个词甚至只有"image"“图”这样的占位符,信息量几乎为零,模型从中学不到任何可迁移的概念。第三类是重复冗余:同一张图在互联网上被转载上万次,模型翻来覆去地看到它,就会产生“偏食”——对高频数据过度自信,对长尾真实数据毫无概念。
另外还有一类容易被忽略的噪声:元信息缺失。有些图文对虽然内容正确,但缺少来源、时间、语言等附带信息,导致后续做数据溯源和分布分析时无从下手,就像一袋没贴生产日期的食材,你不敢确定它还能不能吃。
这三类噪声的根源,都在于“弱监督”的获取方式——没有人逐条核对,数据只是“看起来配对”。你把整袋菜倒进锅里,结果就是模型学会的“猫”可能是“狗”,学会的“风景”可能是一片噪音。所以,后厨要开火,第一步不是热锅,而是挑菜。
清洗方法:后厨的挑拣台
挑菜怎么挑?有经验的大厨分三步:先一把薅掉明显烂掉的叶子——这叫规则过滤;再把剩下的菜放进水里泡、搓洗掉泥沙——这叫相似度筛选;最后对着光逐片检查,偶尔摘出几片漏网的坏叶——这叫人工抽查。
第一步规则过滤,是成本最低的“粗筛”。图像方面,直接按格式、分辨率、宽高比、是否带水印等硬指标过滤;文本方面,过滤掉长度小于某个阈值(比如少于3个token)的标签,去掉乱码、纯数字、纯URL等无意义内容。这类规则就像“买菜先掐一下根,蔫的直接扔”,不需要任何模型,速度快、覆盖广。
第二步是核心:相似度精筛。用一个质量还不错的预训练模型(比如一个较小的 CLIP)给每个图文对打分,分数低于阈值的直接淘汰。这里用的分数正是我们在第一节看到的余弦相似度:
经过这轮“搓洗”,大部分错配和低质量图文对已经被拦在门外。第三步是人工抽查:随机抽样 1%~5% 的保留数据让标注员快速复核,用来校准阈值和发现规则漏洞。这一步,菜市场里的烂菜叶被摘净,后厨的食材终于有了“保鲜柜”的模样。
- 向量内积把图片向量 $v$ 和文本向量 $t$ 逐维度相乘并累加,得到未归一化的重合度。
- 向量模长分别计算两个向量的长度,相当于测量“菜”和“名牌”各自的大小。
- 归一化余弦用向量内积除以两个模长的乘积,消除向量长短的影响,只看方向是否一致。
指纹去重:认出那袋重复的土豆
那袋长得一模一样的土豆怎么处理?人眼能一眼认出来,但如果你面对的是上百万袋土豆呢?你需要一个快速办法——给每颗土豆做一个“指纹”。食材和人一样,都有自己的纹理特征,只要比对指纹,就能知道两袋土豆是不是同一个品种。
在图像数据里,“指纹”就是感知哈希(pHash)。它的操作流程是:把图像缩放成固定尺寸(如 32×32),转成灰度图,做离散余弦变换,去掉高频细节,只保留低频轮廓,然后把每个系数二值化成 0/1 串。这样,一张图就变成了一串独特的“指纹码”。相似的图片指纹码也相似——因为感知哈希捕捉的是图像的全局结构,而不是具体像素。你还可以用更激进的方案,比如对缩略图取色块均值生成“平均哈希”(aHash),速度更快但粒度更粗。
有了指纹,去重就变成了计算两个指纹之间的汉明距离:
在海量数据场景下,逐对计算汉明距离会非常慢,工程师通常会再加两层加速:先用布隆过滤器快速排除明显不同的指纹,再把指纹聚类,只在同一簇内做精确比对。这就是“集群比对”策略——好比先把土豆按大小分筐,再在同一个筐里找长得一样的。经过指纹去重,模型终于不再“偏食”了。
- 指纹编码把每张图的感知哈希表示成长度为 L 的 0/1 序列,$p$ 和 $q$ 是两串指纹。
- 逐位比较对每一位做不等判定,相同记 0,不同记 1。
- 归一化距离把所有不同的位数加起来,再除以总长度 L,得到 0 到 1 之间的“相异比例”。
质量评估:品菜师的标准
菜洗好了,去重也做完了,是不是就能下锅了?还不行。高档餐厅上菜前,一定有一位品菜师把关:颜色正不正、香气够不够、盘边是否干净,每一项都要打分,合格才允许端到客人面前。数据清洗也是如此——你需要一套“品菜标准”,给每一对图文数据打分。
这个质量分不是单一指标,而是多项指标的综合。常见的打分器会融合三个维度:一是图文相似度,即前面算过的 $\text{score}(v,t)$;二是文本信息量,比如标签长度、名词密度、是否包含可检索的实体词;三是重复惩罚,如果该数据与数据集中已有样本的相似度超过阈值,就要扣分。把这些加权求和,就得到数据的综合质量分:
实践中的阈值设定很有讲究。没有绝对正确的“达标线”,工程师通常先看质量分的分布曲线,再结合下游任务的表现来反推:阈值太高,会把大量中低质量但仍有用的数据扔掉,造成“数据饥饿”;阈值太低,噪声溜进去,模型精度上不来。更稳妥的做法是“质量分层”——高分段数据进主训练集,中分段数据降权或延后训练,低分段数据直接丢弃。品菜师的标准,决定了这一桌菜的最终等级。
- 相似度分量$\text{sim}_i$ 是第 i 条数据的图文余弦相似度,衡量内容是否般配。
- 信息量分量$\text{info}_i$ 是文本信息量得分,可以通过标签长度或实体数量计算。
- 重复惩罚$\text{dup}_i$ 是一个 0/1 指示量,表示它是否与已有数据重复。
- 加权求和用超参数 $\alpha, \beta, \gamma$ 平衡三项指标的权重,得到最终质量分。
训练策略:火候与调味
食材备齐了,接下来就是烹饪环节。同样的食材,火候不对,照样砸招牌。对比学习这个“烹饪过程”里,最像火候的旋钮有两个:温度参数 $\tau$ 和批次大小。温度参数决定“注意力分布”的尖锐程度——温度一高,模型对所有候选样本一视同仁,学得浑浑噩噩;温度一低,模型死盯最难分的那个负样本,容易被带偏。好大厨会找到一个恰到好处的火候,既不让菜糊,也不让菜生。
难负样本就是烹饪中的“调味料”。想象徒弟面前摆着两份菜:红烧肉和回锅肉,都是红棕色的肉块,初看极像,但一个是甜口、一个是咸香。如果训练时只有“麻辣豆腐”这种极易区分的负样本,徒弟永远学不会分辨红烧肉和回锅肉。难负样本挖掘故意把那些“长得很像但答案不对”的图文对塞进训练批次,逼着模型关注细节。在公式层面,这种“注意力分配”由温度参数和相似度共同控制:
除了温度和难负样本,批次大小同样关键。对比学习的负样本来自“同一批次里的其他数据”,所以批次越大,竞争环境越丰富,模型学到的表示也越稳定——这也是为什么 CLIP 训练动辄使用数万级别的 batch size。火候对了,菜品才入味;数据策略对了,模型才能“吃透”每一对图文。
- 相似度打分对图像 $v_i$ 与批次内所有文本计算相似度。
- 温度指数缩放相似度除以温度参数后取指数,温度越低,指数差距越悬殊。
- 归一化权重除以所有候选的指数和,得到每个文本被选中的概率权重。
工程实践:后厨流水线
一家餐厅如果只服务一桌客人,大厨一个人忙活就够了。但要同时服务几百桌客人,就必须有后厨流水线:有人负责进货,有人负责洗菜,有人负责掌勺,有人负责试菜,环环相扣。真实世界里的多模态预训练数据清洗,面对的是几亿甚至几十亿条数据,绝不是跑一次脚本就能搞定的,它需要一条工业化流水线。
这条流水线通常包括五个工位:抓取与解析、规则过滤、相似度精筛、指纹去重、采样入库。数据从互联网流入后,先由分布式任务框架(如 Spark / MapReduce)把数十 TB 的图文对打散到上千台机器上并行处理——每台机器只负责自己分到的那一筐“菜”,洗完了再汇总。这一步就是“分布式清洗”,它解决的不是效果问题,而是“能不能在合理时间内洗完”的算力问题。
流水线跑通只是开始,真正的难点在于“迭代反馈”。第一次清洗的阈值很可能是拍脑袋定的,怎么办?最好的做法是:先用这批数据训练一个小模型,再用这个小模型给原始数据重新打分,找出那些被误杀或漏网的样本,调整阈值后重新清洗,然后再训练……如此循环,形成一个“训练→打分→清洗→再训练”的闭环。业界公开的 WIT、LAION-400M 等数据集,正是通过多轮这样的迭代清洗才达到可用质量。
在后厨里,每一步之间都有质检:抓取后看数据量,过滤后看分布,清洗后看保留率,训练后看下游指标。一个环节波动,就要追溯到上一个环节找原因。这样一套环环相扣的流水线,才能保证高质量数据源源不断地送进模型训练的火炉里,最终端出一桌做给世界品尝的 AI 盛宴。
AI 应用场景
电商拍照搜同款
阶段:多模态检索系统的数据准备阶段
解决的问题:电商平台有数亿条“商品图+标题”数据,但网络抓取的图文对经常错配——用户拍的是一件蓝色连衣裙,搜出来的却是“黑色外套”的链接。传统做法依赖人工录入关键词,成本高、更新慢。AI 方案先用 CLIP 对商品图文算相似度,自动过滤错配对,再按感知哈希去重,保证每个爆款商品只保留一两条高质量样本。
具体案例:某头部电商平台接入清洗流水线后,“拍照搜同款”的 Top-10 准确率从 68% 提升到 83%,同时搜索索引体积缩小了 37%,因为重复商品图被大量剔除。
自动驾驶长尾场景挖掘
阶段:车路协同感知模型的训练数据治理
解决的问题:自动驾驶数据采集车每天产生 TB 级视频帧,其中 90% 是高速路、晴天等“常见场景”,而真正需要模型掌握的“雨天夜间施工路段”等长尾场景极其稀缺。传统人工标注根本看不过来。
具体案例:数据团队用 CLIP 文本编码器给每帧图像打“场景标签”,再用规则过滤掉重复帧,构建了一个“长尾场景优先”的训练集。模型在遇到翻车事故碎片、异形路障等罕见目标时,识别率提升了 42%。
AIGC 内容库去重治理
阶段:文生图模型训练数据的清洗与合规
解决的问题:训练 Stable Diffusion 这类文生图模型需要海量“文本-图像”对,但直接从 LAION 等公开数据集复制数据,存在大量侵权重复图和水印图。AI 方案构建指纹库,对全网图片做感知哈希比对,自动标注重复来源和版权归属,再结合质量打分器筛掉低分辨率和水印遮挡的样本。
具体案例:某 AIGC 创业公司对自家 2 亿图文对做清洗后,重复率从 18% 降到 0.3%,生成图像的清晰度主观评分提升 30%,还规避了多次版权投诉。
Python 演示
"""多模态图文对清洗与去噪演示:模拟 CLIP 编码结果,执行错配过滤与去重。"""import numpy as np class PairCleaner: def __init__(self, sim_threshold=0.30, dup_threshold=0.60, embed_dim=64, seed=42): self.sim_threshold = sim_threshold self.dup_threshold = dup_threshold self.embed_dim = embed_dim self._rng = np.random.default_rng(seed) self._kept_pairs = [] def _build_embeddings(self, n): images = self._rng.normal(0, 1, (n, self.embed_dim)) noise = self._rng.normal(0, 0.5, (n, self.embed_dim)) texts = 0.6 * images + noise shift = int(n * 0.3) texts = np.concatenate([texts[shift:], texts[:shift]], axis=0) dup_start = int(n * 0.85) images[dup_start:] = images[:n - dup_start] + self._rng.normal(0, 0.02, (n - dup_start, self.embed_dim)) return images, texts def _cosine(self, matrix_a, matrix_b): matrix_a = matrix_a / np.linalg.norm(matrix_a, axis=1, keepdims=True) matrix_b = matrix_b / np.linalg.norm(matrix_b, axis=1, keepdims=True) return matrix_a @ matrix_b.T def _dedup_mask(self, sims, threshold): sims = sims.copy() np.fill_diagonal(sims, -1.0) return (sims > threshold).any(axis=1) def clean(self, n=60): images, texts = self._build_embeddings(n) sims = self._cosine(images, texts) diag_sim = np.diag(sims) text_lens = self._rng.integers(1, 15, size=n) noise_mask = diag_sim < self.sim_threshold img_sims = self._cosine(images, images) dup_mask = self._dedup_mask(img_sims, self.dup_threshold) keep = (~noise_mask) & (text_lens >= 3) & (~dup_mask) for i in range(n): if keep[i]: self._kept_pairs.append((i, float(diag_sim[i]))) return keep, diag_sim, noise_mask, dup_mask if __name__ == "__main__": cleaner = PairCleaner(sim_threshold=0.30) keep, sims, noise, dup = cleaner.clean(60) print("总数据对数:", len(keep)) print("保留数据对数:", int(keep.sum())) print("错配噪声占比: {:.1%}".format(noise.mean())) print("重复数据占比: {:.1%}".format(dup.mean())) print("清洗后保留比例: {:.1%}".format(keep.mean()))
texts = 0.6 * images + noise让配对文本与图像高度相关,模拟“真配对”的高相似度分布;错配样本的相似度则自然落得很低。shift = int(n * 0.3)把 30% 的文本整体错位,人工制造“图文错配”噪声,检验清洗器能否把它们检测出来。noise_mask = diag_sim < self.sim_threshold对角线上的相似度代表“图和它的标签”的匹配程度,低于阈值就判定为错配。img_sims = self._cosine(images, images)计算图像与图像之间的相似度矩阵,用于发现重复图片。np.fill_diagonal(sims, -1.0)把对角线(自己与自己)的相似度置为 -1,避免把每条数据误判为“和自己的重复项”。keep = (~noise_mask) & (text_lens >= 3) & (~dup_mask)三条过滤条件同时成立才保留:不是错配、标签长度达标、不是重复数据。
常见误区
误区我以为多模态数据清洗很简单,把图片和文本对不上的删掉就行,剩下的都是好数据。
正解图文一致性只是第一关。清洗还要处理重复数据(同一张图出现上万次)、标签信息量不足(只有一个词“图”)、数据分布不均衡(城市图片占 90%)等问题。就像做菜不只是扔掉烂叶子,还要摘除老梗、去掉泥沙、把大小均匀的食材归到同一筐,才能保证整桌菜品质稳定。
为何常见:因为“错配”是最直观的噪声,教程和文档里常用它举例,初学者很容易把局部等同为全部。
误区清洗会把大量数据过滤掉,太浪费了。反正模型参数量大,脏数据也能学到东西,不如全部喂进去。
正解多模态训练恰恰是“垃圾进,垃圾出”。LAION-400M 这类数据集的实践经验表明,保留数据里混入的噪声比例每上升 1%,下游零样本任务的准确率就明显下滑。重复数据还会造成训练开销的极大浪费——模型反复学习同一张图,等于把同一道菜吃了十万遍,却仍然没尝过其他菜。适度清洗不是浪费数据,而是把算力花在刀刃上。
为何常见:深度学习的“大数据”信念深入人心,大家默认数据量是王道,忽视了数据质量与数据量的乘法关系:有效信息量 = 数据量 × 质量系数。
误区我训练一个 CLIP 模型,拿它对所有图文对打分,分数低的删掉,清洗就完成了。
正解预训练 CLIP 分高的图文对不一定适合你的下游任务——它在通用互联网数据上训练,可能偏好“高颜值、高点击率”的图片,而不是“信息密度高、任务相关”的图片。更好的做法是引入任务相关的小模型做二次打分,并且把阈值放在验证集上调优,而不是拍脑袋定个 0.3。还要警惕打分器自身的偏差:它对某些语言、某些图像风格可能系统性误判。
为何常见:CLIP 是“通用”模型的代表,人们容易迷信“通用”等于“万能”,忘记了任何模型都有分布假设和盲区。
面试题
Q1. CLIP 模型的核心训练目标是什么?
- A.对图片做细粒度分类
- B.拉近配对图文并推离错配图文← 正确答案
- C.生成图片对应的文字描述
- D.对文本进行情感极性分析
答案:B。CLIP 用对比学习把正确的图文对拉近、错误的推远,就像让徒弟“看菜配名”。分类(A)是 CLIP 的下游用法而非训练目标;生成式任务(C)属于多模态生成模型;情感分析(D)与图文对齐无关。
Q2. 数据清洗中“指纹去重”主要解决哪类问题?
- A.图片分辨率过低
- B.图片与标签错配
- C.数据集中重复冗余← 正确答案
- D.文本语言混杂
答案:C。感知哈希把图像变成“指纹”,通过比较指纹之间的汉明距离识别重复图片。它针对的是“同一张/高度相似的图反复出现”的冗余问题,而不是分辨率、错配或语言问题。
Q3. 在 InfoNCE 对比损失中,分母的作用是什么?
- A.让正样本相似度变小
- B.把所有负样本纳入竞争← 正确答案
- C.降低模型收敛速度
- D.替换文本编码器参数
答案:B。分母对批次内所有负样本的相似度求和,形成一个“竞争场”——正样本必须从所有候选中脱颖而出才能压低损失。这就像徒弟必须在一桌子菜里准确配对,而不是只盯着一道菜。
Q4. 多模态预训练数据中常见的噪声类型有哪些?
- A.图文错配导致语义冲突← 正确答案
- B.短标签造成信息量不足← 正确答案
- C.重复图像引发训练偏食← 正确答案
- D.高分辨率增加存储成本
答案:ABC。图文错配(A)让模型学到错误的对应关系;短标签(B)信息量几乎为零,无法提供可迁移的语义;重复图像(C)会让模型对高频样本过拟合。高分辨率(D)只是存储压力,不属于语义噪声,而且可以通过缩放解决。
Q5. 温度参数 τ 调大(比如从 0.01 调到 0.1)会产生什么效果?
- A.分布更尖锐,模型更自信
- B.分布更平滑,负样本权重趋同← 正确答案
- C.维度灾难加剧
- D.相似度矩阵变成稀疏矩阵
答案:B。温度调大相当于把相似度差异“摊平”,softmax 输出的权重更均匀,模型对难负样本的关注度下降。反之,温度调小分布尖锐,相当于“火候调猛”,模型会死盯最难分的样本。
Q6. 多模态训练中的“弱监督”通常指什么?
- A.使用低学习率训练
- B.使用互联网自动配对的图文数据← 正确答案
- C.只使用单模态数据
- D.模型参数少于一万
答案:B。CLIP 的做法是直接把网页上天然共现的图文当成配对样本,不依赖人工标注,这种“自动获得但带有噪声的标签”就是弱监督。它跟学习率、参数量、单模态都没有关系。
Q7. 一条典型的多模态数据清洗流水线包含哪些环节?
- A.规则过滤与格式校验← 正确答案
- B.预训练模型相似度打分← 正确答案
- C.感知哈希去重← 正确答案
- D.搜索神经网络结构
答案:ABC。规则过滤(A)处理硬性不合格数据,相似度打分(B)筛掉语义错配,指纹去重(C)剔除重复样本,这三步构成清洗主链路。搜索网络结构(D)属于神经架构搜索(NAS),跟数据清洗无关。
Q8. 难负样本挖掘为什么能提升多模态模型的区分能力?
- A.它增大了批次中的正样本数量
- B.它迫使模型关注相似概念间的细微差异← 正确答案
- C.它直接修改了图像编码器参数
- D.它减少了训练所需的显存
答案:B。难负样本是那些“长得像但不对”的配对(如红烧肉 vs 回锅肉),它们贡献的梯度更大,能逼模型学习细微的区别。它不会增加正样本数量(A),也不改动编码器结构(C)或显存占用(D)。
Q9. 关于数据清洗阈值设定的正确理解是什么?
- A.阈值越高清洗效果越好
- B.阈值越低保留数据越多越好
- C.应根据验证集与下游任务调优← 正确答案
- D.阈值与数据分布完全无关
答案:C。阈值过高会导致“数据饥饿”,过低会让噪声漏网。工程实践上应该先看质量分分布,再根据下游任务(如零样本分类、检索)的表现反推阈值,必要时按数据子域分开设置。
Q10. 训练 CLIP 时为什么通常需要非常大的 batch size?
- A.批次内负样本更丰富,对比估计更稳定← 正确答案
- B.让更多难负样本在竞争场中出现← 正确答案
- C.减少梯度更新次数从而节省显存
- D.使文本编码器参数可以共享
答案:AB。对比学习的负样本来自批次内其他图文对,batch 越大,竞争场越丰富,梯度估计的方差越小,难负样本(如相似的商品图)也更可能被采样进来(A、B)。batch 大反而更耗显存(C 错),D 与参数共享无关。