想象你开了一家跨国婚介所。每天涌入海量相亲资料:一边是一张张真实照片,一边是一段段中文自我介绍。你的红娘团队要回答一个核心问题:“这张照片和这段文字,说的是同一件事吗?”传统做法靠人工一对一对地核对,费时费力;而 CLIP 家族模型,靠着“对比学习”这门手艺,从几亿对互联网上自然出现的图文组合里自学成才。Chinese-CLIP 就是其中专门服务中文场景的“王牌红娘”——它掌握了一项关键技能:把照片和文字都翻译进同一个“缘分空间”,在这里,天生一对的图文离得近,毫无关系的图文离得远。靠着这个本事,它能从百万张照片中找出“穿红裙子的狗”,也能对陌生照片直接给出类别判断。接下来,我就带你走进这场“红娘培训课”,把双塔编码器、对比损失、中文预训练这些概念一一拆开看明白。
对 AI 从业者而言,看懂 Chinese-CLIP 的对比学习原理,能在多模态检索、图搜、零样本分类等真实业务中做出更理性的技术选型,听懂架构评审会上的关键争论,避免盲目堆数据或误用模型。
可视化演示
展示视觉文本双塔编码器架构、对比损失相似度矩阵、零样本图像分类推理及图文检索Top-K排序的完整机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Chinese-CLIP多模态对比学习 双塔编码:ViT视觉编码器+RoBERTa文本编码器 对比损失:拉近匹配图文对推远不匹配对 零样本分类:中文描述类别无需标注数据 图文检索:相似度排序返回Top-K结果 亿级中文图文对预训练学习跨模态表征
双塔编码器
你这家婚介所里,有两类档案专员。第一类只看照片,他们能从一张照片里飞快提炼出“金色头发、白色连衣裙、背景是海滩”等要素;第二类只看自我介绍,他们总结出“喜欢旅行、性格开朗、养了一只柯基”等要点。两组人从没商量过,但公司要求他们最终都填写同一种“缘分档案卡”——用统一的格式、统一的词汇来描述观察结果。这样一来,照片和文字虽然来源不同,却能在档案室里用同一把尺子互相比较。
这两类专员,在机器学习里就是两个“编码器”。Chinese-CLIP 沿用了经典的双塔结构:一座视觉塔,一座文本塔。视觉塔通常采用 ViT(Vision Transformer,一种把图片切成小方块、再像读句子一样处理的网络)来编码图像;文本塔通常采用 BERT(一种擅长理解上下文语义的语言模型)来编码中文句子。两座塔的参数完全独立、互不共享,就像两类专员各学各的业务。
两座塔的输出都是向量——例如 512 维的向量。图片被翻译成向量 $\mathbf{v}_I$,文本被翻译成向量 $\mathbf{v}_T$,二者落在同一个特征空间里。这个空间是“缘分空间”的数学版本:语义越接近的图文,向量距离越近。Chinese-CLIP 对文本塔做了中文优化,比如调整分词方式、扩充中文词表,让“二哈”“铲屎官”这类中文梗也能被准确编码。
所以红娘最终看的不是原始照片和原始介绍,而是两张精炼的“缘分档案卡”。档案件是否可靠,直接决定后续配对的准确度——这也是为什么两组专员都需要精心培训。
对比学习原理
档案库里有百万份资料,但红娘怎么知道哪张照片配哪段介绍?答案是:互联网已经悄悄给了“标准答案”。一篇网页里,宠物照片旁边的文字说明通常就是在描述它;一条微博里配的图和正文往往讲的是同一件事。这些“天然配对”就是红娘的教材。
在对比学习中,这些天然配对被称为正样本对(匹配的图文对),模型要把它们的向量距离拉近。而那些负样本对(不匹配的图文对),则要被推远。负样本不需要额外采集:在一个批次(batch)里,给第 $i$ 张图片做正样本的只有第 $i$ 段文本,其他所有文本都自动沦为这张图片的负样本。一个批次有 $N$ 对样本,每张图就拥有 1 个正样本和 $N-1$ 个负样本——这就是“批内困难负样本”,既高效又能让模型在大量干扰项中找到正确配对。
如何度量“近不近”?最常用的是余弦相似度,它衡量两个向量的方向是否一致:
经过拉近正对、推远负对之后,缘分空间里的距离真正具备了“语义”:靠得近的图文往往是天生一对,离得远的则八竿子打不着。红娘手里的“尺子”,就这样被互联网这位免费教练校准出来了。
- 向量内积把两个向量的对应分量相乘再求和,数值越大说明两个向量方向越接近。
- 向量模长$\|\mathbf{v}_I\|$ 表示向量自身的长度,用来弱化“分量大”的影响。
- 归一化压缩内积除以两个模长后,结果只取决于方向,范围被压缩到 $[-1, 1]$,消除向量长度差异。
对比损失函数
红娘不能凭感觉说“我觉得这对差不多成了”,婚介所要靠明确的考核表来评分。考核规则是:每场相亲活动里,红娘要拿每一张照片去匹配对应的介绍,正确配对得分越高越好,错误配对得分越低越好。这张考核表,就是对比损失函数。
Chinese-CLIP 使用 InfoNCE 损失(一种带温度系数的多类别交叉熵)。以“图片找文本”方向为例:
同样的操作反过来,也可以让文本去找图片,得到另一份损失 $\mathcal{L}_{t2i}$。最终总损失取两者平均:
有了考核表,红娘的每一次撮合都有明确反馈:得分低就调整策略,直到每场相亲活动都能“点对点”精准牵手。温度系数 $\tau$ 就是考核表上那个“严苛程度”旋钮——调得越小,越是拿放大镜挑毛病,进步也就越快。
- 遍历批次取平均$i$ 遍历每一张图片,先算每张图片的惩罚,最后对 $N$ 张图片取平均。
- 相似度打分矩阵$\text{sim}(\mathbf{v}_{I_i}, \mathbf{v}_{T_j})$ 计算第 $i$ 张图片与第 $j$ 段文本的余弦相似度,构成一个 $N \times N$ 的矩阵。
- 温度缩放$\tau$ 是温度系数,相似度除以 $\tau$ 后再做 softmax;$\tau$ 越小,分布越尖锐,模型被迫更用力地把正样本对的相似度顶高。
- 指数化与归一化分子是“第 $i$ 张图配第 $i$ 段文”这条正确配对路线的指数得分,分母是第 $i$ 张图对所有文本得分的指数和,整体构成 softmax 概率。
- 负对数似然$-\log$ 把概率转成损失。正确配对概率越接近 1,损失越小。
中文预训练
光有英文经验还不够。中文相亲资料有自己的表达体系:“二哈”指的是哈士奇,“铲屎官”指的是养猫人,“烟火气”背后是一种生活氛围。想成为中文专员,必须每天泡在中文资料海里,见多识广。
Chinese-CLIP 的预训练数据达到亿级中文图文对(约 2 亿对),这些数据来自互联网公开数据集与大规模爬取。但互联网数据质量参差不齐——很多图片和文本根本对不上,需要数据清洗:过滤过短文本、丢弃图文相关性差的样本、去除重复项。清洗之后剩下的“优质档案”才值得红娘反复研读。
为了让训练又快又稳,Chinese-CLIP 采用热启动策略:直接用 OpenAI CLIP 的权重来初始化两个塔,再在中文图文对上继续训练。这相当于让一位已有英文经验的红娘转学中文,而不是从零开始学“怎么看照片、怎么读文字”。
海量优质中文档案,加上已有英文底子的红娘,两者结合后,中文的“图文默契”被快速掌握,为后续的检索和分类打下坚实基础。这也解释了为什么 Chinese-CLIP 能用一个相对有限的训练预算,达到远超从零训练的效果。
图文检索应用
培训完毕,婚介所正式营业。客户一句“我想要一张穿红裙子的狗的照片”,红娘在几百万张照片档案中翻找,几秒内给出最像的几张——这就是文搜图。
文搜图的流程可以分为离线与在线两步。离线阶段,视觉塔把库里所有图片编码成特征向量,建立“向量档案库”;在线阶段,文本塔把用户查询编码成查询向量,然后在向量库中做相似度 top-k 检索。图搜文则是反过来:图片编码后作为查询,去匹配预先编码好的文本特征库。这种“提前算好入库、查询时只做比对”的架构,让百万级甚至亿级规模的检索也能快速响应。
凭借对齐良好的双塔结构,Chinese-CLIP 在 MUGE 中文文搜图榜单、COCO-CN 图文检索等任务上刷新了纪录,成为中文多模态检索领域的重要基线模型。
这正是红娘的核心价值:不需要每次来客户就重新相亲,而是靠过硬的档案库和统一的匹配尺子,快速精准地给结果。跨模态理解在这里不是玄学,而是“先各自归档,再统一比对”的工程艺术。
零样本分类
客户拿来一张陌生照片:“这是什么动物?”红娘没专门培训过这个品类,但她手边有几张卡片——“猫”“狗”“雪豹”。她拿起照片特征和每张卡片特征逐一比对,最像的那张就是答案。整个过程不用额外培训,直接上岗——这就是零样本分类。
具体做法是:准备好 $C$ 个候选类别名,套进提示模板,比如“一张{类别}的照片”;文本塔把这 $C$ 个句子编码成类别文本向量;图片塔把待分类图片编码成查询向量;然后计算查询向量与各个类别向量的相似度,经 softmax 得到各类别概率,取概率最大者作为预测类别。不需要任何下游微调,省去了大量标注成本:
红娘手里的类别卡片,就是一张张“岗位说明书”。哪怕从没做过这类配对,只要缘分空间里的尺子足够准,她也能立刻给客户一个靠谱的答案。这就是预训练蕴含的知识在发挥作用。
- 类别文本向量$\mathbf{v}_{T_c}$ 是第 $c$ 个类别经过模板化之后由文本塔编码得到的向量。
- 图片-类别相似度$\text{sim}(\mathbf{v}_I, \mathbf{v}_{T_c})$ 计算图片向量与第 $c$ 个类别向量的相似度。
- softmax 归一化温度缩放后经 softmax 得到每个类别的概率,分母对所有 $C$ 个类别的指数得分求和。
工程选型决策
要开一家中文婚介所,市面上可选的红娘团队不少:有从英文转学中文的(Chinese-CLIP)、有本土起家的生成式模型(如 OFA)、也有通用但偏贵的多模态大模型(如 Florence)。选择哪个团队,取决于你的客户是谁。
在工程选型时,可以遵循几条原则。第一,纯中文理解与检索任务优先考虑 Chinese-CLIP:它在原版 CLIP 基础上用中文图文对做了持续预训练,中文检索、零样本分类任务上明显优于原版 CLIP,且开源权重成熟。第二,检索/匹配类任务优先选择双塔结构:双塔能离线预计算并缓存特征向量,查询时只做相似度比对,速度快、扩展性好,适合百万级候选池;如果要的是“根据文本生成图片”这类生成任务,双塔并不适用,应选择生成式多模态模型。第三,综合评估成本与迭代:参数量大小、推理时延、显存占用、是否有微调接口、社区维护活跃度等,都应纳入选型对比表。
红娘贵不贵不重要,“配得准、回得快、养得起”才重要。理解了 Chinese-CLIP 的原理后,你在方案评审会上就能有理有据地说出:“这个项目该用双塔,而不是生成模型。”
AI 应用场景
电商平台“以文搜物”
阶段:模型应用与在线推理
解决的问题:用户用自然语言描述商品(如“复古皮质双肩包”),传统关键词搜索难以覆盖颜色、材质、风格等属性,召回率低。Chinese-CLIP 先把商品图片离线编码为向量,查询时把文本实时编码,在向量库中做相似度检索,就能把“语义相近但不是同一关键词”的商品找出来。
具体案例:某电商平台在商品搜索后端接入中文 CLIP 双塔模型,用户搜索“奶黄色法式连衣裙”,系统从百万商品图库中秒级返回风格匹配的商品,搜索转化率明显提升。
手机智能相册“自然语言找图”
阶段:离线向量化 + 在线检索
解决的问题:传统相册只能按时间、地点或人脸分类,用户无法用自然语言找照片。借助 Chinese-CLIP,把相册图片全部离线编码为向量,用户搜索“去年冬天在长白山拍的雪景”时,系统把查询文本编码后与相册向量比对,直接返回匹配照片。
具体案例:某手机厂商在相册 App 中内置中文 CLIP 模型,用户用口语化的中文描述即可在几万张本地照片中快速找到目标照片,而且整个过程完全在端侧完成,保护隐私。
新闻图片自动归档
阶段:零样本分类与内容理解
解决的问题:新闻机构每天产生海量图片,人工打标成本高、时效差。用零样本分类,把候选类别写成模板文本(“体育”“科技”“突发新闻”等),模型自动计算每张图片与类别文本的相似度并归档,无需针对新闻域做任何微调。
具体案例:某媒体平台在采编系统中接入中文 CLIP,记者上传照片后,系统自动标注“城市夜景”“演唱会现场”“交通事故”等标签,编辑检索素材的效率大幅提升。
Python 演示
import torchimport torch.nn as nn class VisionTower(nn.Module): def __init__(self, in_dim=64, hidden=48, out_dim=16): super().__init__() self.net = nn.Sequential( nn.Linear(in_dim, hidden), nn.ReLU(), nn.Linear(hidden, out_dim) ) def forward(self, x): return self.net(x) class TextTower(nn.Module): def __init__(self, in_dim=64, hidden=48, out_dim=16): super().__init__() self.net = nn.Sequential( nn.Linear(in_dim, hidden), nn.ReLU(), nn.Linear(hidden, out_dim) ) def forward(self, x): return self.net(x) def contrastive_loss(img_feat, txt_feat, tau=0.07): img_feat = nn.functional.normalize(img_feat, dim=1) txt_feat = nn.functional.normalize(txt_feat, dim=1) logits = img_feat @ txt_feat.t() / tau labels = torch.arange(logits.size(0)) loss_i2t = nn.CrossEntropyLoss()(logits, labels) loss_t2i = nn.CrossEntropyLoss()(logits.t(), labels) return (loss_i2t + loss_t2i) / 2 torch.manual_seed(0)vision_enc = VisionTower()text_enc = TextTower()optimizer = torch.optim.Adam( list(vision_enc.parameters()) + list(text_enc.parameters()), lr=1e-2) # 模拟 8 对匹配图文: 同一语义基线上加轻微噪声semantic_base = torch.randn(8, 64)image_batch = semantic_base + 0.2 * torch.randn(8, 64)text_batch = semantic_base + 0.2 * torch.randn(8, 64) for step in range(300): img_vec = vision_enc(image_batch) txt_vec = text_enc(text_batch) loss = contrastive_loss(img_vec, txt_vec) optimizer.zero_grad() loss.backward() optimizer.step() if step % 60 == 0: print("step %3d loss %.4f" % (step, loss.item()))
logits = img_feat @ txt_feat.t() / tau图片特征与文本特征做矩阵乘法,得到 N×N 的相似度矩阵,再除以温度系数。labels = torch.arange(logits.size(0))对角线上的索引就是“正确配对”的标签,第 i 张图应匹配第 i 段文本。loss_i2t = nn.CrossEntropyLoss()(logits, labels)图片找文本方向的多分类损失。loss_t2i = nn.CrossEntropyLoss()(logits.t(), labels)文本找图片方向对称损失。semantic_base + 0.2 * torch.randn(...)同一语义基线上加轻微噪声,模拟“同一内容的图片和文字”天然配对。
常见误区
误区同学以为 Chinese-CLIP 的训练数据是人工一对一对标注出来的,“两亿对图文得雇多少人去标啊!”
正解对比学习的正样本来自互联网天然存在的图文配对——网页中的配图与正文、社交平台帖子里附带的照片与文案,都是免费的“标准答案”。模型需要的是海量数据中自行发现匹配规律,而非人工告知匹配关系。这正是自监督学习的魅力。
为何常见:习惯了监督学习“输入-人工标签”的模式,容易忽略互联网内容本身自带的结构化对应关系。
误区以为视觉塔和文本塔是同一个网络的两种输入,“反正 CLIP 是一个模型,里面应该共享一套参数吧?”
正解它们是两个完全独立的编码器,参数互不共享。双塔只是在训练时共同优化,并把各自的输出映射到同一特征空间。就像两组档案专员各写各的档案,只不过最终采用同一套表格格式。
为何常见:“CLIP 是一个模型”这种日常说法,让初学者误以为它像单塔模型那样参数统一。
误区“τ 不就是让数字变小吗?设成 0.1 还是 0.01 有什么区别?”
正解τ 直接控制 softmax 分布的锐度。τ 过大会让所有类别的概率都趋于平均,梯度消失、难以学习;τ 过小则模型过分激进,对噪声敏感、收敛不稳。在 CLIP 中 τ 是要精心调节的超参数(可以训练),直接影响最终检索精度。
为何常见:看起来只是除法缩放,初学者容易忽略它对梯度分布和困难样本权重的决定性影响。
误区“既然叫零样本,那模型应该不需要任何训练数据,拿来就能分任何东西。”
正解零样本指的是在下游任务中不需要微调、不需要标注样本,但模型在预训练阶段已经通过亿级图文对见过大量语义概念。它学到的不是某个分类器的权重,而是“图片特征与类别文本特征的通用对齐关系”。遇到训练时完全没见过的概念组合,效果仍可能打折。
为何常见:“零样本”三个字字面上容易误读为“零训练”,忽略了背后的大规模预训练。
面试题
Q1. Chinese-CLIP 采用的双塔结构是指?
- A.一座视觉塔和一座文本塔← 正确答案
- B.两座视觉塔和一座文本塔
- C.一座视觉塔和两座文本塔
- D.共享一个网络的单一编码器
答案:A。双塔即“视觉塔 + 文本塔”两个独立编码器。它们分别处理图片和文本,参数互不共享,只在同一特征空间中对齐。选项 B、C 塔数量错误,D 描述的是单塔共享结构。
Q2. 对比学习中,正样本对指的是?
- A.相互匹配的图文组合← 正确答案
- B.相互不匹配的图文组合
- C.任意截取的两张图片
- D.任意拼接的两段文本
答案:A。正样本对是“天生一对”的图文组合,比如网页配图和它的说明文字。红娘要把它们拉近;不匹配的组合是负样本对,要被推远。C、D 只涉及单模态,不符合“图文匹配”的定义。
Q3. 余弦相似度的取值范围是?
- A.从负一到正一之间的数← 正确答案
- B.从零到正无穷大的数
- C.从负无穷到正无穷的数
- D.大于等于零的实数集合
答案:A。余弦相似度计算两个向量夹角的余弦值,数学上恒在 [-1,1] 内。1 表示方向完全一致,-1 表示方向完全相反。B、C、D 都超出了这一范围。
Q4. 温度系数 τ 在对比损失中的作用是?
- A.控制相似度分布锐度← 正确答案
- B.控制模型学习速率
- C.控制批次样本数量
- D.控制图片输入尺寸
答案:A。τ 缩放相似度后再进 softmax。τ 越小分布越尖锐,模型越用力地拉高正样本对得分、压低负样本对得分。它和学习率、batch size、图片尺寸无关。
Q5. 与原版 CLIP 相比,Chinese-CLIP 的核心区别是?
- A.文本塔针对中文做了优化← 正确答案
- B.视觉塔换成了更大的模型
- C.完全移除了对比损失函数
- D.只使用中文图片进行训练
答案:A。Chinese-CLIP 在预训练数据、分词方式、中文词表等方面对文本塔进行了中文优化,并在约 2 亿中文图文对上进行训练。它保留了对比损失,视觉塔结构并未彻底更换,训练数据也并非只有中文图片。
Q6. 零样本分类的主要依据是?
- A.图片特征与类别文本特征的相似度← 正确答案
- B.图片特征与训练集标签分布相似度
- C.图片像素颜色直方图的相似程度
- D.图片与随机噪声序列的相似程度
答案:A。零样本分类把类别名模板化后编码成文本向量,再与图片特征算相似度,取最高者。它不依赖训练集标签分布,也不看像素直方图。红娘比对的是“照片档案”和“类别卡片”。
Q7. 图搜文任务中,离线阶段需要预先完成?
- A.将库中的文本全部编码成向量← 正确答案
- B.将库中的图片全部编码成向量
- C.将查询图片裁剪成固定尺寸
- D.将查询文本翻译成中文再编码
答案:A。图搜文以图片为查询、以文本库为候选,所以离线要把文本库全部编码成向量,在线时把查询图片编码后去检索。B 是文搜图的离线流程,C 只是预处理细节,D 与图搜文无关。
Q8. 对称对比损失中的 L_t2i 表示?
- A.以文本为查询、图片为候选的损失← 正确答案
- B.以图片为查询、文本为候选的损失
- C.图片与图片之间的相似性损失
- D.文本与文本之间的相似性损失
答案:A。t2i 即 text-to-image,让文本当“红娘”去图片堆里找对象;i2t 则相反。二者对称互补,总损失取平均,图文两个方向都得到训练。C、D 不涉及跨模态。
Q9. 关于对比损失,下列说法正确的有?
- A.拉近正样本对之间的距离← 正确答案
- B.推远负样本对之间的距离← 正确答案
- C.让所有样本对彼此完全重合
- D.批次越大负样本对越丰富← 正确答案
答案:ABD。对比损失的目标是“正对拉近、负对推远”。C 错在如果所有样本都重合,模型就无法区分图文内容,正是要避免的情况。D 正确:batch 越大,每张图拥有的批内负样本越多,任务越有挑战性,学到的表征通常越好。
Q10. 关于零样本分类,以下说法正确的有?
- A.将类别名套入中文提示模板← 正确答案
- B.需要下游标注数据参与微调
- C.计算图片与类别文本的相似度← 正确答案
- D.取相似度最高的类别为预测结果← 正确答案
答案:ACD。零样本分类的关键是模板化类别名、编码类别文本、计算图片与各类别文本相似度并取最大值。它不需要下游标注数据微调,B 与“零样本”矛盾。提示模板的质量会影响效果,这也是实际调优的常见切入点。