阿明刚被聘为“多模态档案馆”的首席馆员。馆里收藏着数百万张照片和短文,却没有目录。读者常拿着照片问:“哪篇文章在讲这张照片的事?”或者举着文章问:“哪张图配得上这段话?” 阿明的任务,是给每件藏品写一张“语义摘要卡”——卡片虽短,却要抓住藏品最核心的含义。含义相近的藏品,卡片应当长得像;含义相远的,卡片应当长得不同。这张卡,在 AI 中叫“表示”(嵌入向量)。可阿明怎么知道自己的卡片写得好不好?当然要考试——而且是一套覆盖检索、分类、聚类三科的全科体检。 这篇文章就带你走进这场体检:先用“档案馆”的视角看懂检索评估的“找得准不准”、分类评估的“分得对不对”、聚类评估的“归得自然不自然”;再理解 CLIP/ALIGN 如何让图片卡与文本卡“说同一种语言”;最后认识标准考卷、自动阅卷机与防作弊守则,帮你建立从原理到落地的评估体系。

岗位关联

掌握表示学习评估体系,是你从“能训练多模态模型”走向“能交付可靠模型”的分水岭——检索、分类、聚类项目最终都要靠这套体检标准证明价值。

目录
  1. 可视化演示
  2. 表示学习基础:语义摘要卡从何而来
  3. 检索评估指标:考“找得准不准”
  4. 分类评估指标:考“分得对不对”
  5. 聚类评估指标:考“归得自然不自然”
  6. 多模态对齐评估:让图片与文本“对暗号”
  7. 评估数据集基准:一份标准化考卷
  8. 评估工具链实践:一台自动阅卷机
  9. 行业最佳实践:防作弊与科学选型
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

表示学习基础:语义摘要卡从何而来

阿明先给自己定了个规矩:每张摘要卡必须能放进同一个“语义柜子”——柜子是多维空间,含义越接近的藏品,摆放的位置就越靠近。这个“放进去”的过程就是表示学习,算出来的位置坐标就是嵌入向量。

在 AI 里,嵌入向量是一串数字,比如 128 维或 512 维。它的核心性质是“语义相似 ⇒ 空间距离近”。距离用什么量?最常用的是余弦相似度——把两个向量看作从原点出发的两条箭头,比较方向,不关心长短。方向越一致,说明两张卡“讲的是同一件事”。

有了“语义距离”这把尺子,阿明就能给卡片系统出考题了——而考试不能只考一门。

sim(u,v)=u⋅v∥u∥ ∥v∥=cos⁡θ\displaystyle \text{sim}(\mathbf{u}, \mathbf{v}) = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \, \|\mathbf{v}\|} = \cos\theta
余弦相似度把两个向量的“方向一致性”压缩成一个介于 -1 到 1 之间的数:1 代表方向完全一致,0 代表垂直(毫无关系),-1 代表完全相反。
  1. 向量内积把两个向量的每一维相乘再累加,得到一个标量,它包含了两者的“同向程度”信息。
    u⋅v=∑i=1dui vi\mathbf{u} \cdot \mathbf{v} = \sum_{i=1}^{d} u_i \, v_i
  2. 向量范数对向量各维求平方和再开根号,得到向量长度,代表这张摘要卡的“信息总量”。
    ∥u∥=∑i=1dui2\|\mathbf{u}\| = \sqrt{\sum_{i=1}^{d} u_i^2}
  3. 归一化比值用内积除以两个范数的乘积,相当于把两条箭头都缩放到单位长度再比较方向。
    u⋅v∥u∥ ∥v∥\frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \, \|\mathbf{v}\|}
  4. 几何意义这个比值恰等于两个向量夹角的余弦值,取值恒在 [-1, 1] 之间,越接近 1 表示语义越相近。
    cos⁡θ∈[−1,1]\cos\theta \in [-1, 1]

检索评估指标:考“找得准不准”

阿明出的第一门考卷叫“检索”。他抓一把读者的真实需求:拿着照片 A,要求系统在百万张摘要卡里把配对文本找出来,按相关度从高到低排列。好的卡片系统,应当在清单最靠前的位置就出现正确答案——就像查字典,谁也不想翻到第 500 页才找到要的词。

最常用的指标是 Recall@K:对每个查询,看前 K 个返回结果里有没有正确答案,有就算命中;最后统计所有查询的命中比例。K 就像“允许翻看的页数上限”——K 越大,答案越容易出现在前 K 里,指标自然越高。论文里常见的 R@1、R@5、R@10,就是对“前 1、前 5、前 10 个”分别统计。

光考“命中”还不够:如果正确答案排在第二位,R@1 会冤枉地记零。所以业界还有 mAP(平均精度,衡量排序整体质量)和 MRR(首个正确答案位置的倒数)等补充指标——它们像附加题,专治“排得近但不够前”的模糊地带。

Recall@K=1N∑q=1NI(rq∈TopK(q))\displaystyle \text{Recall@K} = \frac{1}{N} \sum_{q=1}^{N} \mathbb{I}\bigl( r_q \in \text{Top}_K(q) \bigr)
它回答的问题是:“所有查询中,有多大比例能在前 K 个候选中命中正确答案。”K 必须和场景挂钩:搜索引擎可能看 R@10,精确匹配场景则更看重 R@1。
  1. 查询集合把全部 N 个测试查询(照片或文本)一一列举。
    q=1,2,…,Nq = 1, 2, \dots, N
  2. 排序取前 K对查询 q 按相似度降序排列所有候选,截取前 K 个形成集合。
    TopK(q)={前 K 个最相似候选}\text{Top}_K(q) = \{ \text{前}\ K\ \text{个最相似候选} \}
  3. 命中指示判断正确答案 r_q 是否落在前 K 集合内,在则记 1,否则记 0。
    I(rq∈TopK(q))={1,命中0,未命中\mathbb{I}\bigl( r_q \in \text{Top}_K(q) \bigr) = \begin{cases} 1, & \text{命中}\\ 0, & \text{未命中}\end{cases}
  4. 平均对 N 个查询的命中率求算术平均,得到整体检索召回率。
    1N∑q=1N(⋯ )\frac{1}{N} \sum_{q=1}^{N} (\cdots)

分类评估指标:考“分得对不对”

第二门考卷是“分类”。档案馆有几排已经按主题分好的书架:体育、烹饪、山川、星舰……阿明让卡片系统给每张卡自动贴一个主题标签,再和书架上的“标准答案”比对。这就像学生做选择题:选对了得分,选错了扣分。

最朴素的指标是准确率(Accuracy):答对的卡片数除以总卡片数。但档案库里体育照片占八成时,系统只要无脑贴“体育”标签,准确率就有 80%——这是“赌徒式高分”。于是要引入精确率(Precision,声称是体育的卡片里真体育占多少)和召回率(Recall,真体育的卡片里被认出多少),再把两者压成一个综合分 F1。

阿明把这个指标写进了馆规:任何新卡片系统上线,必须同时报出精确率、召回率与 F1,不许只挑好看的数。对严重不均衡的馆藏(比如罕见天文照片只占千分之一),他还会额外看 ROC-AUC,因为 AUC 对类别比例相对不敏感——相当于给“偏科”的考试加了难度系数。

F1=2×P×RP+R,P=TPTP+FP,R=TPTP+FN\displaystyle F_1 = \frac{2 \times P \times R}{P + R}, \qquad P = \frac{TP}{TP+FP}, \qquad R = \frac{TP}{TP+FN}
精确率回答“抓到的有多少是好的”,召回率回答“好的有多少被抓到”。F1 是两者的调和平均:只有两者都高,F1 才高;“宁缺毋滥”或“宁可错杀”的偏科模型都会暴露原形。
  1. 混淆矩阵计数TP 是实际正例且被判正例的数量,FP 是实际负例却被判正例(误报),FN 是实际正例却被判负例(漏报)。
    TP, FP, FNTP,\, FP,\, FN
  2. 精确率在所有被判为正例的卡片中,真实正例的比例,衡量“抓得准不准”。
    P=TPTP+FPP = \frac{TP}{TP+FP}
  3. 召回率在所有真实正例的卡片中,被成功判出的比例,衡量“抓得全不全”。
    R=TPTP+FNR = \frac{TP}{TP+FN}
  4. 调和平均把 P 和 R 的倒数取平均再取倒数,对偏低的一方更敏感,得到综合指标 F1。
    F1=2PRP+RF_1 = \frac{2PR}{P+R}

聚类评估指标:考“归得自然不自然”

第三门考卷最特别:没有标准答案标签。阿明想看看,如果不告诉系统任何主题,它能不能自己把相像的卡片堆成一摞摞——就像让实习生不看书架标签,凭直觉把照片分组。分出来的堆,要和馆长手工分的主题越吻合越好。

这里有两个经典指标。NMI(标准化互信息)用信息论的方式回答:系统分组与真实标签“共享了多少信息”。分组和真标签完全对应时 NMI 为 1,随机乱分时接近 0。另一个是 ARI(调整兰德指数),它把所有卡片两两配对,看同一对卡片在系统分组与真实标签中是否“同进退”。

阿明还发现,聚类评估有个易踩的坑:如果系统分出的堆数和真实主题数差很远,NMI 会明显偏低。所以他还搭配“轮廓系数”看堆内是否紧凑、堆间是否疏离——这是不看任何标签、纯靠几何形状就能判断“归得自然不自然”的体检项。

NMI(U,V)=2×I(U; V)H(U)+H(V)\displaystyle \text{NMI}(U, V) = \frac{2 \times I(U;\, V)}{H(U) + H(V)}
互信息 I 衡量两个分组方案的共享信息量,H 是信息熵(衡量分组的不确定度)。把共享信息除以两个分组熵的平均,数值被压到 0~1 之间,同时天然免疫“标签名随意更换”的问题。
  1. 互信息统计两个分组中“同时落入某个交叉小格”的概率,衡量两者互相透露的信息量。
    I(U;V)=∑u∑vp(u,v)log⁡p(u,v)p(u) p(v)I(U;V) = \sum_{u}\sum_{v} p(u,v) \log \frac{p(u,v)}{p(u)\,p(v)}
  2. 信息熵分别计算两组划分的熵,熵越大说明分得越碎、越不确定。
    H(U)=−∑up(u)log⁡p(u)H(U) = -\sum_{u} p(u) \log p(u)
  3. 归一化分母把互信息除以熵的平均值,使取值范围稳定在 0 到 1 之间。
    H(U)+H(V)H(U) + H(V)
  4. 系数 2因为分母是熵的和而不是平均值,乘 2 等价于用平均熵做归一。
    2×I(U;V)H(U)+H(V)\frac{2 \times I(U;V)}{H(U)+H(V)}

多模态对齐评估:让图片与文本“对暗号”

三科考完,阿明意识到一个更深的问题:照片卡和文本卡之前是两套独立体系,彼此之间的“语义距离”根本没有校准。就像中英两本词典各自编得再好,没有对照表也无法互译。CLIP 与 ALIGN 就是来造这张“对照表”的。

CLIP 的做法像“相亲配对”:从海量图文对中取一批样本,把配对的图文视为“命定搭档”,把同批其他图文视为“干扰项”;训练目标是让配对组合的相似度远高于干扰组合。这就是对比学习。ALIGN 更进一步,直接使用十亿级别的噪声图文对——配对关系可能不精确,但数据量大到可以弥补噪声。

训练完成后,照片卡和文本卡被“对齐”进了同一个语义柜子。怎么验证?让模型做零样本迁移:对从未见过的类别,只要给它文本提示(如“一张极光照片”),就计算提示与所有图片的相似度,选出最高分。若它无需微调就能达到可观准确率,说明“对照表”确实好使。评估这类对齐效果,重点指标正是前文讲过的双向 R@K 与零样本 Top-1 准确率。

Lcontra=−12N∑i=1N[log⁡e sii/τ∑j=1Ne sij/τ+log⁡e sii/τ∑j=1Ne sji/τ]\displaystyle \mathcal{L}_{\text{contra}} = -\frac{1}{2N} \sum_{i=1}^{N} \left[ \log \frac{e^{\,s_{ii}/\tau}}{\sum_{j=1}^{N} e^{\,s_{ij}/\tau}} + \log \frac{e^{\,s_{ii}/\tau}}{\sum_{j=1}^{N} e^{\,s_{ji}/\tau}} \right]
这个式子让每张图片 i 与自己的配对文本 i 的相似度 s_ii,在一整批配对中“冒尖”;文本方向也做同样约束。温度系数 τ 控制分数的“锋利程度”,τ 越小,模型对相似度差异越敏感。
  1. 相似度矩阵对一批 N 对图文,计算图像嵌入与文本嵌入的两两余弦相似度,得到 N×N 矩阵。
    sij=sim(imagei,textj)s_{ij} = \text{sim}(\text{image}_i, \text{text}_j)
  2. 温度缩放把相似度除以温度系数 τ,调节 softmax 的尖锐程度。
    sijτ\frac{s_{ij}}{\tau}
  3. 图像到文本方向对每一行做 softmax,希望对角线元素 s_ii 在整行中概率最大。
    log⁡esii/τ∑j=1Nesij/τ\log \frac{e^{s_{ii}/\tau}}{\sum_{j=1}^{N} e^{s_{ij}/\tau}}
  4. 文本到图像方向 + 平均对每一列做同样约束,两个方向合成后除以 2N 求平均损失。
    −12N∑i=1N[log⁡(⋅)+log⁡(⋅)]-\frac{1}{2N} \sum_{i=1}^{N} \left[ \log(\cdot) + \log(\cdot) \right]

评估数据集基准:一份标准化考卷

阿明意识到,如果每家档案馆各出各的考题,成绩根本无法横向比较。业界因此沉淀了两份“标准化考卷”:Flickr30K 与 COCO Captions。Flickr30K 有 3.1 万张图片、每张配 5 句人工描述;COCO Captions 规模更大,有 33 万张图片、每张同样配 5 句描述。考卷规定:检索必须双向——图像检索文本(i2t)和文本检索图像(t2i),并且报告多个 K 下的 R@K。

为什么要双向?因为对齐是相互的:图片找文本强,不代表文本找图片也强。实践中常用“图文平均”把两个方向合成一个数,方便画曲线比高低。

除了这两份经典考卷,圈内还流行用 ImageNet 及其变体(如 ImageNetV2、ImageNet-R)考察零样本迁移的鲁棒性,用 MS COCO 的 Karpathy 划分保证图文检索与下游任务可比。阿明把规则写进馆规:所有模型必须用同一份考卷、同一种划分、同一套指标,成绩才作数——就像高考必须全国统一命题。

R@Kavg=12(R@Ki2t+R@Kt2i)\displaystyle \text{R@K}_{\text{avg}} = \frac{1}{2}\left( \text{R@K}_{\text{i2t}} + \text{R@K}_{\text{t2i}} \right)
这是论文中广泛使用的“总成绩单”:把两个检索方向当作两科成绩,取平均后作为模型在标准考卷上的综合排名依据。
  1. 图像检索文本以图片为查询,看前 K 个返回文本中是否包含配对描述。
    R@Ki2t\text{R@K}_{\text{i2t}}
  2. 文本检索图像以文本为查询,看前 K 个返回图片中是否包含配对图像。
    R@Kt2i\text{R@K}_{\text{t2i}}
  3. 取平均两个方向等权平均,避免模型只擅长单向检索时“报喜不报忧”。
    12(R@Ki2t+R@Kt2i)\frac{1}{2}\left( \text{R@K}_{\text{i2t}} + \text{R@K}_{\text{t2i}} \right)

评估工具链实践:一台自动阅卷机

考试出好了,还得有阅卷机。阿明不想每次手工算指标,他把评估流程固定成一条“流水线”:加载模型 → 抽取图文嵌入 → 计算相似度矩阵 → 统计 R@K、mAP、F1、NMI → 输出成绩报告。

社区里现成的阅卷机很多。OpenAI 的 CLIP 仓库提供模型权重与零样本分类评估脚本;HuggingFace Transformers 里只需两行代码即可加载 CLIP 并抽取图文嵌入;clip_benchmark 等库一键跑完多数据集、多指标。工业界的做法则是把评估写成 CI(持续集成):每次模型更新自动重跑考卷,成绩不达标就禁止上线。

有了自动阅卷机,阿明的档案馆从“手工评卷”升级为“每周自动体检”。体检报告还能按类别拆解:哪类照片检索成绩差,说明摘要卡对这类语义记忆不足,下一步就该针对性地补数据或调温度系数。

AP=∑k=1nP(k)×rel(k)#relevant,mAP=1Q∑q=1QAPq\displaystyle \text{AP} = \frac{\sum_{k=1}^{n} P(k) \times \text{rel}(k)}{\#\text{relevant}}, \qquad \text{mAP} = \frac{1}{Q} \sum_{q=1}^{Q} \text{AP}_q
平均精度 AP 把“命中质量”沿排序位置累加,再按相关总数归一;mAP 再对所有查询取平均。它比 R@K 更精细,能惩罚“正确答案排在后面”的情况。
  1. 逐位置精确率在第 k 个返回位置处,统计前 k 个结果里的相关命中比例。
    P(k)P(k)
  2. 相关标记rel(k) 表示第 k 个位置是否相关,相关为 1 否则为 0,只累加相关位置的 P(k)。
    rel(k)∈{0,1}\text{rel}(k) \in \{0, 1\}
  3. 按相关数归一累加值除以总相关样本数,避免被长列表稀释,得到单个查询的 AP。
    ∑k=1nP(k)×rel(k)#relevant\frac{\sum_{k=1}^{n} P(k) \times \text{rel}(k)}{\#\text{relevant}}
  4. 跨查询平均对所有查询的 AP 求平均,得到 mAP——排名质量的总分。
    1Q∑q=1QAPq\frac{1}{Q} \sum_{q=1}^{Q} \text{AP}_q

行业最佳实践:防作弊与科学选型

机器阅卷也有“作弊”风险。最典型的是数据泄漏:测试考卷里的图片(或其近重复版本)混进了训练数据,模型不是靠理解,而是靠“背答案”考出高分。阿明定下铁律:训练集与测试集必须严格隔离,凡是用过 Flickr30K/COCO 做训练的模型,不得再用同一份考卷宣称成绩。第二个风险是“偏科备考”:只在标准考卷上刷分,换一批真实场景数据就崩——这就是分布偏移。

科学的做法是“体检报告多看几项”。除了分布内成绩,还要看分布外(OOD)的落差:落差越大,说明模型只是记住了训练分布,而不是学到了真正可迁移的语义。

最后是选型:指标必须跟着业务场景走。做搜索引擎召回,优先看 R@10 与 mAP;做精准标签体系,必看 F1;做无监督去重归档,看 NMI/ARI 加轮廓系数;上线前再补一组 OOD 差距检查。阿明把这四条写成档案馆的《评估十诫》——从此每个模型在“入职”前,都要先过一遍这套全科体检。

Gapshift=Accin-distribution−Accout-of-distribution\displaystyle \text{Gap}_{\text{shift}} = \text{Acc}_{\text{in-distribution}} - \text{Acc}_{\text{out-of-distribution}}
分布偏移差距衡量模型“换个环境还灵不灵”。顶尖多模态模型在 ImageNet 上准确率很高,但换到 ImageNetV2 或风格化变体上,成绩下降得少才算真本事。
  1. 分布内成绩在训练数据同分布的测试集上测得的准确率,是“熟悉的考场成绩”。
    Accin-distribution\text{Acc}_{\text{in-distribution}}
  2. 分布外成绩在经历过风格、背景、噪声变化的测试集上测得的准确率,是“陌生考场成绩”。
    Accout-of-distribution\text{Acc}_{\text{out-of-distribution}}
  3. 做差两者相减,差值越小说明泛化越稳,差值越大说明过拟合训练分布越严重。
    Accin−Accout\text{Acc}_{\text{in}} - \text{Acc}_{\text{out}}

AI 应用场景

电商多模态检索召回

阶段:模型部署与评估阶段

解决的问题:传统电商搜索只匹配标题文本,用户“以图搜图”时无法找到视觉相似但标题不同的商品。用 CLIP 类模型抽取商品图与商品文案的嵌入,再用 R@10 与 mAP 评估召回质量,能显著提升跨模态检索体验。这就像阿明给商品图与文案各写一张摘要卡,再考“凭图找文”。

具体案例:某服装电商把 500 万商品图与描述分别过 CLIP 编码器,构建统一向量索引;用户上传一张“奶油色针织开衫”照片,系统在 20 毫秒内返回前 10 个候选,评估报告显示 R@10 从旧版文本搜索的 0.42 提升到 0.78。

医学影像图文报告对齐

阶段:数据与评测体系建设

解决的问题:影像科报告与 X 光片之间缺乏自动关联手段。借鉴 ALIGN“海量噪声数据 + 对比学习”的思路,在弱标注数据上训练对齐模型,并用双向 R@K 评估图文匹配准确率,辅助医生检索历史报告——等于为影像与报告建立了一张专科“对照表”。

具体案例:某三甲医院将 60 万份“X 光片 + 报告”对用于训练轻量级对齐模型,评估遵循 COCO 式协议(i2t/t2i 双向、R@1/R@5/R@10),R@1 达 0.61,成功上线辅助诊断参考系统。

无监督档案聚类归档

阶段:数据处理与归档

解决的问题:企业知识库的图片与文档缺乏标签体系,人工打标成本高。使用预训练多模态嵌入加 KMeans 聚类,再用 NMI/ARI 与轮廓系数挑选合适的类别数,实现自动归档——正是阿明“不看标签自己归堆”的考题在工业界的翻版。

具体案例:某设计公司对 20 万张素材图抽取 CLIP 嵌入并聚类,NMI 0.83、轮廓系数 0.51,将素材自动分成 156 个主题堆,配合人工抽查即可上线内部素材库。

Python 演示

python50 行
import numpy as npfrom sklearn.cluster import KMeansfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import (adjusted_rand_score, f1_score,                             normalized_mutual_info_score) rng = np.random.default_rng(42)  def make_synthetic_data(n=600, dim=128):    """生成模拟的图文配对嵌入: 同标签向量在语义空间中彼此靠近"""    labels = rng.integers(0, 10, size=n)    images = rng.normal(scale=0.6, size=(n, dim)) + labels[:, None] * 0.9    texts = rng.normal(scale=0.6, size=(n, dim)) + labels[:, None] * 0.9    return images, texts, labels  def cosine_sim(a, b):    """标准化后计算余弦相似度矩阵"""    a = a / np.linalg.norm(a, axis=1, keepdims=True)    b = b / np.linalg.norm(b, axis=1, keepdims=True)    return a @ b.T  def recall_at_k(sim, k):    """每个查询在前k位是否召回配对正样本"""    n = sim.shape[0]    hits = sum(i in np.argsort(-sim[i])[:k] for i in range(n))    return hits / n  def main():    images, texts, labels = make_synthetic_data()    sim = cosine_sim(images, texts)    for k in (1, 5, 10):        print(f"Retrieval R@{k}: "              f"i2t={recall_at_k(sim, k):.3f} "              f"t2i={recall_at_k(sim.T, k):.3f}")    clf = LogisticRegression(max_iter=500)    pred = clf.fit(images, labels).predict(images)    print(f"Classification F1: {f1_score(labels, pred, average='macro'):.3f}")    km = KMeans(n_clusters=10, n_init=10, random_state=0)    pred_km = km.fit_predict(images)    nmi = normalized_mutual_info_score(labels, pred_km)    ari = adjusted_rand_score(labels, pred_km)    print(f"Clustering NMI: {nmi:.3f}, ARI: {ari:.3f}")  if __name__ == "__main__":    main()
目的:用合成图文嵌入演示表示学习评估三件套——检索 R@K、分类 F1、聚类 NMI/ARI,跑通即可迁移到真实 CLIP 嵌入评估。
  1. images = rng.normal(scale=0.6, size=(n, dim)) + labels[:, None] * 0.9生成同标签彼此靠近的模拟嵌入,相当于给档案馆造一批“卡片”
  2. a = a / np.linalg.norm(a, axis=1, keepdims=True)按行做 L2 归一化,让余弦相似度只比方向不比长度
  3. return a @ b.T矩阵乘法一次性算完所有图文两两相似度
  4. hits = sum(i in np.argsort(-sim[i])[:k] for i in range(n))对每个查询取相似度降序前 k 个,判断配对正样本是否命中
  5. f1_score(labels, pred, average='macro')宏平均 F1,先算每个类再平均,避免多数类主导
  6. KMeans(n_clusters=10, n_init=10, random_state=0)固定类别数与随机种子,保证聚类结果可复现
  7. normalized_mutual_info_score(labels, pred_km)计算聚类结果与真实标签的 NMI
  8. adjusted_rand_score(labels, pred_km)计算 ARI,衡量两两配对的一致性

常见误区

误区小白拿到分类模型,第一反应就是看准确率。如果准确率 90%,就觉得模型很能打,可以直接上线。

正解准确率在类别不均衡时会严重失真——假如 90% 的样本是“非故障”,模型全部输出“非故障”就有 90% 准确率,却一个故障都抓不到。这就像档案馆里八成是体育照片时,闭眼贴“体育”标签也能得高分。必须同时看精确率、召回率、F1,必要时看 ROC-AUC。

为何常见:准确率最容易理解、最常出现在宣传材料里,新手自然把它当作第一直觉,等遇到长尾场景才意识到它会被多数类“绑架”。

误区同一篇文章里看到 R@10 比 R@1 高很多,就以为模型变强了,直接拿 R@10 当最大卖点。

正解对同一模型,R@10 ≥ R@1 是必然的——窗口放宽了,命中机会自然变多。正确姿势是固定考卷、固定 K 值再横向比较不同模型,并同时报告 R@1/R@5/R@10 与 mAP。就像考试改成“可翻书找 10 页”,分数高不代表记忆力强。

为何常见:数字大就好看,新手容易拿不同 K 的指标互相比大小,被“分母红利”误导。

误区聚类结果 NMI 0.9,就觉得系统把每件藏品都分到了正确类别,可以直接当分类结果用。

正解NMI 衡量的是分组与标签的“信息吻合度”,不保证能识别出标签的语义含义;聚类的用途恰恰是发现未知结构。0.9 的 NMI 只能说明分组结构和人工标注高度一致,堆内是否紧凑、堆间是否分离,还要看轮廓系数。就像两个实习生都把书分成三堆,分法“英雄所见略同”不意味着堆名正确。

为何常见:NMI 数值接近 1 让人误以为“等于分类准确率”,混淆了“与标签对齐”和“分类正确”两个概念。

误区用训练完的数据再测一遍,成绩漂亮,感觉模型已经掌握全部知识,就把报告写进 PPT。

正解训练集评估反映的是“记忆”而非“泛化”。模型见过训练样本甚至背下来,成绩会系统性虚高。严谨做法是训练/验证/测试三分离,并额外测分布外数据。好比学生拿做过的原题自测满分,考新题才知道真水平。

为何常见:训练集成绩唾手可得、数字漂亮,新手贪图方便,没意识到数据泄漏与过拟合会毁掉评估的可信度。

误区CLIP 在标准 benchmark 上零样本准确率很高,就直接部署到生产环境,结果真实场景效果崩了。

正解标准 benchmark 的分布与真实业务分布往往不同:真实数据可能有摄影风格、方言、低清晰度等偏移。上线前必须做分布偏移检查(分布内 vs 分布外的 Gap),并准备小样本微调或重排兜底。这就像阿明的卡片系统在“标准考卷”满分,进了读者的真实手机相册却认不出照片。

为何常见:标准数据集分数高带来信心,而真实场景的分布偏移看不见摸不着,直到用户投诉才暴露。

面试题

Q1. 在图文检索中,若正确文本恰好排在返回列表第 1 位,则本次查询的 Recall@1 记录为?

单选题 · easy

  • A.记作一次命中,计入分子← 正确答案
  • B.记作一次未命中,忽略
  • C.记作零分,重新检索
  • D.记作负分,惩罚模型

答案:A。Recall@K 的规则是每个查询若正确答案出现在前 K 位就记一次命中。正确答案排在第一位,必然位于前 1 个候选内,因此本次查询命中、计数加一。就像阿明拿着照片找文章,第一张翻开的卡片就是对的,当然算“找着了”。

Q2. 当正负样本数量极不平衡时,最不建议单独使用的分类指标是?

单选题 · mid

  • A.F1 调和平均分数
  • B.召回率 Recall
  • C.准确率 Accuracy← 正确答案
  • D.精确率 Precision

答案:C。样本极不均衡时,准确率会被多数类“绑架”——模型全猜多数类也能拿高分,但少数类一个都认不出。精确率、召回率与 F1 针对正类计算,不受总样本比例支配,AUC 也相对稳健,所以最不该单独用的是准确率。

Q3. 对同一模型的同一排序列表,Recall@5 与 Recall@1 的关系通常是?

单选题 · mid

  • A.Recall@5 恒小于 Recall@1
  • B.Recall@5 不小于 Recall@1← 正确答案
  • C.两者结果必然完全相等
  • D.两者计算结果毫无关联

答案:B。R@5 的判断窗口“前 5 个”包含了“前 1 个”的全部元素:只要正确答案在前 1 位,必然也在前 5 位。所以对同一排序列表,R@5 恒不小于 R@1。K 越大,窗口越宽、命中机会越多,这是定义使然而非模型变强。

Q4. 关于 NMI 指标,下列说法正确的是?

单选题 · mid

  • A.NMI 越大分类一定越准
  • B.NMI 衡量标签与聚类的互信息← 正确答案
  • C.NMI 与类别标签含义无关
  • D.NMI 只用于二分类的情况

答案:B。NMI 衡量聚类结果与真实标签的互信息,并以熵归一化取值 0~1。它反映“分组与标签的吻合度”而非“分类正确率”;NMI 对标签名不敏感,也适用于多类聚类,因此 A、C、D 均错误。

Q5. 为什么评估表示学习要用未参与训练的测试集,而不是训练集?

单选题 · hard

  • A.训练集运算的速度更慢
  • B.训练集存在过拟合虚高← 正确答案
  • C.训练集数据量远远不够
  • D.训练集格式与测试不同

答案:B。模型在训练集上会记住样本细节(过拟合),导致训练集成绩虚高。测试集从未参与训练,才能模拟真实新数据的表现。就像学生拿做过的原题考满分,不能证明掌握知识;数据泄漏正是指测试样本混入训练导致成绩失真。

Q6. CLIP 模型通过什么方式对齐图像与文本表示?

单选题 · mid

  • A.拼接图文向量为单一表示
  • B.对比学习拉近配对图文距离← 正确答案
  • C.逐像素用文本回归图像
  • D.用生成式翻译把文本变图

答案:B。CLIP 用对比学习训练:对一批图文对,拉近配对样本的嵌入距离、推远不配对样本。它不拼接向量、不做逐像素回归、也不是生成式翻译。训练目标就是让图文在统一语义空间中互相对齐。

Q7. ALIGN 方法与 CLIP 的主要区别在于?

单选题 · mid

  • A.使用更大规模含噪数据← 正确答案
  • B.完全舍弃了文本的编码器
  • C.只处理单模态检索任务
  • D.训练过程不需要损失函数

答案:A。ALIGN 与 CLIP 核心思想一致(对比学习对齐图文),区别在数据规模与质量:ALIGN 使用约十亿级、带噪声的图文对,用规模弥补噪声;CLIP 使用经过筛选的高质量数据。两者都保留图文双塔编码器和对比损失。

Q8. 以下哪些是表示学习评估中的常见风险?

多选题 · hard

  • A.测试集与训练集发生数据泄漏← 正确答案
  • B.只看平均分忽略分布细节← 正确答案
  • C.检索评估只测一个单向← 正确答案
  • D.增加测试图片数量提升指标

答案:ABC。测试集泄漏会使指标虚高;只看平均分可能掩盖长尾类别失效;只测单方向检索无法反映双向对齐质量,都是真实风险。而 D 选项“增加测试图片数量”只是换了考卷,模型能力不变,指标不会被提升,只会更稳定地暴露真实水平。

Q9. 关于分类指标的精确率与召回率,下列说法正确的有?

多选题 · mid

  • A.精确率是预测正例中的真实正例比例← 正确答案
  • B.召回率是真实正例中被预测出的比例← 正确答案
  • C.两者在样本不均衡时都会失真
  • D.F1 是精确率与召回率的调和平均← 正确答案

答案:ABD。精确率 = 预测正例中真实正例占比,召回率 = 真实正例中被预测出的占比,F1 是两者调和平均,这三项正确。C 错在样本不均衡时精确率与召回率本身依然有效,只是容易被误读,真正被“绑架”的是准确率。

Q10. 图文双向检索评估中,综合指标 R@K 通常如何得到?

单选题 · mid

  • A.取文图双向检索结果的平均← 正确答案
  • B.只取图像检索方向的数值
  • C.只取文本检索方向的数值
  • D.取两者之中较大的那个数值

答案:A。标准协议要求双向检索(i2t 与 t2i)都报告 R@K,综合指标通常取两者算术平均,避免模型只擅长单向。只报单方向会掩盖对齐缺陷,取最大值更是“报喜不报忧”,所以 A 正确。