PhotoBench Album1 故事检索实验观察台

这是一页面向团队同步的实验报告:我们固定 PhotoBench album1 单用户相册,比较多种检索方法是否能帮 agent 找到“能补充封面图、让故事更成立”的照片。先看人评结论,再看方法差异和上线边界;底部附录保留完整实验细节。

G reranker 人评已闭环,album1 当前胜出 质量检查:pass Embedding 环境:ready
Run: album1_v1_seed20260614
Album: album1
Generated: 2026-06-15 12:44:01
Story Cases30

固定 cover/query 后比较不同方法的 top2 候选

VLM Cards1069

gemini-3.1-flash-lite-preview

Best Retrieval R@1055.8%

F hybrid 的候选池召回最好

Best Human best@22.7833

G story-feature reranker 完整人评结果

给没有上下文的同学先看这里

实验一页结论

我们固定 PhotoBench album1 这个单用户相册,比较不同检索方法能不能帮 agent 从相册里找到“能补充封面图、让故事更成立”的照片。机器指标只判断候选池是否健康,最终产品判断看人工故事分。

当前产品判断 G 是 album1 当前最佳故事检索方法

G 在 album1 完整人评里胜出:pass@2 90.0%、usable@2 76.7%、avg best@2 2.78。产品方向从 embedding-only 转为“B/C/F 扩召回 + G-style 故事特征重排”,但线上 agent E 仍需同场 replay,且 G 的本地时延约为 B 的 4 倍。

候选池召回最佳 F R@10 55.8%

F 的候选池比 B/C 更健康,说明融合策略能捞到更多 PhotoBench GT。

人评故事质量最佳 G best@2 2.7833

G 把相关候选进一步筛成更有故事价值的 pin,说明故事维度可以工程化量化。

和线上 agent 的边界 E 组尚未同场 replay

当前胜负是 A/B/C/F/G 离线链路;线上 lane-search agent 仍需导出同一批 album1 候选后再做最终替换判断。

更高上限假设 I:人评偏好重排器

G 证明故事特征有用;下一步可以用已有人评训练 pairwise reranker,让模型学习“哪张 pin 更像好故事”,而不是继续手写权重。

方法R@10成立率平均故事分pass@2usable@2best@2结论
A 规则/元数据
A_rules_metadata
11.1% 28.8% 1.5763 37.9% 37.9% 1.7586 下界基线,证明单靠规则/元数据不够。
B PhotoCard Embedding
B_embedding_card
51.5% 63.2% 2.2632 74.1% 70.4% 2.5556 稳定、低时延,仍是线上主基线和召回对照。
C 多向量 Embedding
C_embedding_multivector
51.7% 64.3% 2.1607 76.9% 65.4% 2.4231 可做补充召回;候选覆盖略好,但故事分没有超过 B。
F Hybrid Embedding Agent
F_hybrid_embedding_agent
55.8% 63.3% 2.2500 76.7% 63.3% 2.5333 机器召回最好,但简单融合还没把提升转成更好的故事。
G Story-feature Reranker
G_story_feature_reranker
53.4% 90.0% - 90.0% 76.7% 2.7833 已完成补标后故事质量最好;下一步验证线上成本和跨相册泛化。

实验设计:先把目标校准清楚

真正要测什么

最终问题不是“谁最像论文 benchmark”,而是“哪种检索方法更适合从相册里找出能讲好故事的照片组合”。

PhotoBench 指标的角色

GT/R@K/NDCG 只做前置健康检查:方法至少要能找回相关照片。它不能直接证明“故事好”,也不能替代人工判断。

最终胜负怎么判

同一张 cover、同一批候选预算下,看不同方法找出的 pin/组合是否更有新信息、关系、反差、因果、过程/结果和隐藏上下文。

实验做了什么

数据集 album1 单用户相册

1069 张相册图,1069 张已生成 VLM PhotoCard;固定一个用户先排除跨用户差异。

对比方法 A / B / C / F / G

A 是规则下界,B 是单 PhotoCard embedding,C 是故事字段多向量,F 是 B+C 的 source-aware hybrid,G 是故事特征重排。

评估方式 机器召回 + 人工故事分

R@K/NDCG/MRR 看候选池有没有跑偏;人工看是否成立、故事价值和 Top2 是否至少有一张可用补图。

标注规模 292 / 300 条

A/B/C 首轮 180 个评分项,F 60 个,G 60 个;F/G 里和旧候选重复的项会复用已有人评。

目标校准

不是复现论文

论文/PhotoBench 给我们的是可控相册、query 和 GT,用来防止检索方法完全跑偏;但我们的产品问题是“找好故事照片”,不是刷新 R@K 排行。

机器指标只当闸门

如果一个方法连相关图片都找不回,就不值得进入故事评测;如果 R@K 高,也只是说明候选池健康,仍要看组合质量。

主实验应看组合

下一阶段每个方法必须输出 cover + 1-3 张 pin + rationale,由人工盲评“这组图是不是能讲出更好的故事”。

方法对比大白话

方法它怎么找图它回答什么问题本轮学到什么
A 规则/元数据 先用时间、地点、人物昵称、文件元数据做粗召回。 证明不用 embedding 的下界在哪里。 成立率低,适合作 sanity check,不适合作主链路。
B PhotoCard Embedding 每张图先由 VLM 写成一张 PhotoCard,再把整张卡片嵌入成一个向量检索。 验证“VLM 文本 + 好 embedding”是否足够找故事候选。 在 embedding-only 方案里最稳、成本低,适合继续当线上主召回 baseline 和对照组。
C 多向量 Embedding 把人物、关系、场景、动作、OCR、metadata 等字段拆开分别向量化,再按 query 类型融合。 验证好故事的维度是否可以工程化表达。 召回覆盖略有帮助,但故事分没超过 B;更适合按场景补召回。
F Hybrid Embedding Agent 把 B 的整卡语义和 C 的多字段信号合并,用 source-aware 融合产生候选。 验证 agent 式多路召回能不能提高候选池上限。 机器召回最好,但简单融合没有转成人评收益;更适合作 G 的扩候选池。
G Story-feature Reranker 在 B/C/F 合并候选池上,用 VLM PhotoCard 量化事实连接、信息增量、叙事回报、重复成本和多路共识,再重排 top2。 验证“好故事维度是否能被工程化量化,并用于在线候选选择”。 补标已完成,album1 人评故事质量当前第一;下一步是和线上 agent 同场 replay、再做跨相册验证。
E 线上 Agent 检索 复用当前线上 lane-search 的 same_person/event/object/place/temporal 路线。 验证线上策略和 embedding 策略在同一相册上的真实差异。 还需要 replay adapter;这是后续必须补齐的产品对照组。

怎么解读当前结果

为什么不是 F 直接赢

F 的 R@10/R@50/NDCG/MRR 都更好,代表候选池更健康;但人评里 B 的 usable@2 和 best@2 更高,所以 F 还没有证明“更会找好故事”。

G 新增了什么证据

G 把 B/C/F 的候选池再做故事特征重排,完整补标后达到 pass@2=90.0%、usable@2=76.7%、best@2=2.7833,说明“好故事维度”可以被量化并用于排序。

为什么 B 仍然重要

B 的策略简单、稳定、成本可控,是 G 的重要候选来源,也适合继续作为在线主链路对照 baseline。

当前最终判断

album1 离线实验里,G story-feature reranker 已经超过 A/B/C/F;产品方向应从 embedding-only 转为“B/C/F 扩召回 + G-style 故事特征重排”。线上替换前仍要补 E 组 replay、线上成本估算和跨相册验证。

可能更好的下一步:I

G 现在是手写规则,I 是把你已经标过的成立性和故事价值分转成 pairwise preference 数据,训练一个轻量 reranker。它不替代 embedding 召回,而是在 B/C/F 候选池上学习“哪张图更值得放进故事”。

关键结果:G 在 album1 离线人评里胜出

方法已评 / 总数成立率平均故事价值胜出次数
A_rules_metadata 59 / 60 28.8% 1.5763 0
B_embedding_card 57 / 60 63.2% 2.2632 0
C_embedding_multivector 56 / 60 64.3% 2.1607 0

Top2 组合视角

怎么读 Top2

每个方法每个 cover 有 2 个候选;Top2 指标看“这个方法是否至少找出一张可用补图”,比逐候选平均更贴近检索召回目标。

当前限制

人工“设为最佳”没有写入 CSV,所以胜出次数只能用故事价值分做 proxy;22 / 30 组存在并列。

缺失标注

8 条候选缺少必填项,会轻微影响均值和组级完整性;正式结论前建议补齐。

方法完整组pass@2usable@2avg best score@2proxy winsunique wins
A_rules_metadata 29 / 30 37.9% 37.9% 1.7586 6.5 2
B_embedding_card 27 / 30 74.1% 70.4% 2.5556 13.5 5
C_embedding_multivector 26 / 30 76.9% 65.4% 2.4231 10.0 1

F Hybrid 补充评测

F Delta Review

F top2 共 60 条;其中 45 条复用旧标注,只剩 15 条需要补标。

评分台

photobench-agent-f-hybrid-review.html

experiments/photobench-album1-story-eval/runs/album1_v1_seed20260614/human_eval_f_hybrid/story_review_items.f_hybrid_delta.blind.jsonl

当前 F 估计

已评/复用 60 / 60;成立率 63.3%;平均故事分 2.2500;best@2 2.5333。

最终阶段判断

F improves candidate-pool health, but current simple fusion does not yet improve human story quality over B. Keep B as main online baseline; use F/C as recall expansion plus add story-aware reranker before replacing B.

状态数量说明
复用旧标注45这些 F 候选和 A/B/C 已评候选是同一组 cover+pin,直接复用。
待补标15打开 F 评分台补齐即可形成完整 F 人评。
冲突复用3同一 cover+pin 在旧标注里出现不同分数,当前用平均分保守合并。

B/C/F 合并候选池的故事重排上限

这不是线上方法

Oracle 使用人工标签从 B/C/F 候选池里挑最好候选,只用于估算 story-aware reranker 的上限,不可直接上线。

上限空间

Oracle avg best@2=2.6667,比 B 高 0.2000;usable@2=73.3%。

产品含义

Keep B as the online baseline, use C/F to expand recall, and prioritize a reranker trained/evaluated against human story labels.

方法/上限pass@2usable@2avg best@2
B PhotoCard Embedding 70.0% 63.3% 2.4667
C 多向量 Embedding 73.3% 60.0% 2.3333
F Hybrid Embedding Agent 76.7% 63.3% 2.5333
Oracle:B/C/F 标注池最佳 80.0% 73.3% 2.6667

G Story-feature Reranker 原型

G 是什么

G 把 B/C/F 候选合并后,用 VLM PhotoCard 量化 shared_context、information_gain、narrative_payoff、query_support、重复成本和多路共识,再重排 top2。

当前人评

G R@10=53.4%;top2 标签覆盖 100.0%。已标注候选 known-only best@2=2.7833,lower-bound best@2=2.7833。

补标状态

G 补标已完成,top2 标签覆盖 100.0%。当前结果可作为 album1 完整人评结论。

http://127.0.0.1:8767/photobench-agent-g-story-review.html

/Users/housen/Documents/策略/experiments/photobench-album1-story-eval/runs/album1_v1_seed20260614/human_eval_story_reranker/story_review_items.g_story_feature_delta.blind.csv

方法/口径pass@2usable@2avg best@2
B PhotoCard 74.1% 70.4% 2.5556
F Hybrid 76.7% 63.3% 2.5333
G known-only 90.0% 76.7% 2.7833
G lower-bound 90.0% 76.7% 2.7833
Oracle upper-bound 80.0% 73.3% 2.6667

成本与时延判断

在线判断

G is the strongest completed album1 story-quality method, but its cached local latency is higher than B. Use B/C/F as recall lanes plus G-style story-feature reranking as the next candidate online architecture; do not replace the current online agent until E replay and a second album validate the gain.

F vs B 时延

当前本地 cached 检索里,F 平均时延约为 B 的 2.0131 倍。

成本口径

Only recorded local method-output cost fields are summarized. VLM generation cost and unrecorded online LLM/tool costs are not inferred.

方法QueryAvg latencyP95 latencyR@10usable@2latency / usable@2
A_rules_metadata 100 2.8 ms 4.1 ms 11.1% - -
B_embedding_card 100 75.9 ms 77.5 ms 51.5% 70.4% 107.8 ms
C_embedding_multivector 100 76.9 ms 77.5 ms 51.7% 65.4% 117.6 ms
F_hybrid_embedding_agent 100 152.7 ms 155.0 ms 55.8% 63.3% 241.2 ms
G_story_feature_reranker 100 305.5 ms 310.1 ms 53.4% 76.7% 398.5 ms

决策分析

建议

B_embedding_card 作为主召回,C_embedding_multivector 作为辅助召回/路由补强

  • B 的平均故事价值、usable@2 和 proxy wins 更高。
  • C 的 pass@2 略高,说明多向量召回能多捞到成立候选,但高分故事产出略弱。
  • A 规则/metadata 基线明显落后,可继续作为下界和成本基线。
B vs C 分歧

30 组中,B 更高 5 组,C 更高 3 组,并列 22 组。

proxy split wins:B=13.5,C=10.0,A=6.5。

行动含义

B 更适合作主召回;C 应做按 query/source 路由的补充召回,重点看人物/关系或 metadata 混合 query,而不是全量替代 B。

按 Source 看 B/C

Source组数B pass@2C pass@2B usable@2C usable@2B best@2C best@2
F 3 66.7% 66.7% 66.7% 33.3% 2.3333 2
M 3 33.3% 0.0% 33.3% 0.0% 1.6667 1
V 6 83.3% 83.3% 83.3% 83.3% 2.6667 2.6667
VF 6 50.0% 66.7% 50.0% 66.7% 2 2.3333
VM 7 85.7% 85.7% 57.1% 57.1% 2.5714 2.4286
VMF 5 80.0% 100.0% 80.0% 80.0% 3 2.8000
B 明显更好样例
  • 拍到浩哥运动会出场 VMF:B=5, C=3, delta=2
  • 2025年11月15日 M:B=3, C=1, delta=2
  • 开车经过收费站 VM:B=2, C=1, delta=1
  • 车上一起听歌 VM:B=3, C=2, delta=1
  • 有我在内的照片 F:B=3, C=2, delta=1
C 明显更好样例
  • 夜晚晨阳志浩争抢手机 VF:B=1, C=3, delta=-2
  • 车里和晓彤的合影 VMF:B=1, C=2, delta=-1
  • 趵突泉游览 VM:B=2, C=3, delta=-1
补标建议

当前还有 8 条必填缺失,且没有人工最佳选择;若要形成正式胜率,请补齐这两项。

和线上 Agent 的差异:现在还不能直接替换

线上 agent 当前策略

线上 agent 是先基于 cover/query 提假设,再走 same_person、event、object、place、temporal 等 lane-search 工具召回,最后逐个比较、组合和解释。

G 的策略差异

G 不先让 LLM 枚举搜索 lane,而是把 B/C/F embedding 候选池拿来,用 VLM PhotoCard 量化 shared context、information gain、narrative payoff、重复成本和多路共识,再排序。

当前实验结论

G 在 album1 人评完成后达到 pass@2=90.0%、usable@2=76.7%、best@2=2.7833,说明“故事特征重排”有效。

不能直接下的结论

E_current_lane_search 还没把线上 agent 对 album1 的真实输出 replay 到同一评分台,所以现在不能说 G 已经打败线上 agent,只能说 G 打败了本地 A/B/C/F 离线方法。

工程代价

本地 cached 检索中,G 平均时延约为 B 的 4.0262 倍。线上要优化成“召回缓存 + 轻量特征重排”,不能照搬离线脚本。

下一步对照

把线上 agent 的 lane-search 输出接入 E 组,并用同一批 cover/query、同一评分台比较:线上 agent vs G reranker vs G + agent verification。

维度线上 agent lane-searchG story-feature reranker产品含义
召回入口LLM/agent 先拆 lane,再调用 same_person/event/place/object/temporal 工具。先用 embedding/hybrid 候选池覆盖,再做故事特征排序。G 更稳定可批量化;线上 agent 更灵活但成本和可控性更差。
故事判断LLM 在比较阶段隐式判断上下文、逻辑和故事 payoff。显式量化 shared_context、information_gain、narrative_payoff、multi-image cost。G 更容易做离线评估、调参和回归。
当前证据尚未 E replay,没有同场人评分。album1 30 case 完整人评,best@2=2.7833。G 是当前离线最优,但还不是线上 agent 的最终替代结论。
建议架构保留为 verification / fallback / 高难 case。作为默认候选重排层继续验证。短期不是二选一,而是 G 先收敛候选,agent 做必要的解释和核验。

后续计划与局限

局限 1:样本还小

当前只固化 PhotoBench album1 单用户、30 个故事 case。它适合做方向判断,还不能直接代表所有用户相册。

局限 2:A/B/C 没有人选最佳

首轮人评主要打“是否成立”和“故事价值分”,没有稳定写入最佳选择,所以胜率只能用分数 proxy。

局限 3:线上 agent 对照未完全 replay

E 组还需要把线上 lane-search 输出接到同一套评测,才能比较当前线上策略和 embedding/hybrid 的真实差异。

下一步 1:补 E 组 replay

用线上 agent 配置跑同一批 cover/query,把候选和组合导入同一评分台,和 G 做同场人评。

下一步 2:工程化 G 链路

把离线 G 拆成“缓存召回 + 轻量故事特征重排 + 必要时 agent 核验”,测线上时延、成本和失败兜底。

下一步 3:扩到第二个用户

当 album1 结论稳定后,再加一个相册验证是否存在用户/相册风格迁移问题。

下一步 4:训练 I 偏好重排器

用现有人评构造同一 cover/query 下的候选对,例如高分成立 pin 胜过低分或不成立 pin;先训 pairwise logistic / LightGBM ranker,按 query 分组交叉验证,看能否超过手写 G。

细节附录:需要时再展开

这里保留完整配置、指标定义、盲评包和数据质量信息,方便复核实验过程。

实验配置与验证目标
配置项当前设置
实验对象 album1,固定为一个用户相册,避免多用户差异干扰。
Run / Seed album1_v1_seed20260614 / 20260614, 保证子集抽样和方法输出可复现。
数据规模 validation query 全量评测;story subset 目标 30 条,当前 30 条;reject subset 当前 6 条。
VLM 数据 使用 Langfuse prompt album-vision-analysis v3,模型 gemini-3.1-flash-lite-preview,本地保存每张图的 PhotoCard。
Embedding 模型 BAAI/bge-m3 dense embedding;B 组单 PhotoCard 向量,C 组多字段向量 late fusion。
方法组 A_rules_metadata, B_embedding_card, C_embedding_multivector, D_llm_ceiling, E_current_lane_search, F_hybrid_embedding_agent
检索 K 1, 5, 10, 20, 50, 100
人工评审 每方法每 query 取 2 个候选;每 item 至少 2 人;盲评 method_id=True.
Reject 设置 include_all_zero_gt=True; 用来检查方法是否会给无答案 query 硬凑结果。
运行环境 Embedding env=ready;bge-m3 smoke=not recorded。

验证目标

验证目标要回答的问题判断方式
主目标:找到更适合好故事照片的检索方法 比较 A/B/C/E/F 不是为了复现论文,而是为了判断哪种方法在同样成本下,更能给 cover 找到有叙事价值的 pin 组合。 最终看人工盲评胜率、hard-gate 通过率、平均故事分、重复率和单位成本下的好故事产出。
前置目标:候选池不能跑偏 用 PhotoBench GT 检查各方法是否能找回相关图片。这个阶段只回答“候选池健康吗”,不回答“故事好吗”。 看 Recall@50/100 是否足够高、NDCG/MRR 是否合理、zero-GT 是否乱返回。通过后才进入故事组合评测。
机制目标:故事特征是否能被工程化表达 C 组把人物、关系、场景、活动、时间地点、OCR 拆成多向量;F 组把 embedding 候选交给 agent 组合。它们验证关系/因果/过程等故事信号是否能被检索链路利用。 看 C 是否补强人物/关系桶;看 F 是否在人工故事分上超过单纯 embedding topK。
工程目标:判断在线链路的成本和时效 同一批 query 记录 latency、模型调用、token/embedding 成本。离线可以追求上限,在线要看是否能在可接受延迟内返回足够好的候选。 看单位好故事成本:好故事通过数 / 延迟 / token / 模型调用。线上优先选择能稳定进入人工高分区且成本可控的方法。
人评方案、盲评包与指标说明
故事评测设计具体做法为什么这样做
实验单元 固定一张 cover,让每个方法在同样预算下返回 1-3 张 pin 和一句选择理由。 这样评审比较的是“组合质量”,不是某个方法是否更会复述 query。
方法输入 A/B/C/E/F 都使用同一份 album1 VLM PhotoCard、metadata、face mapping;差异只在检索和组合策略。 避免因为输入信息不一致造成方法间不公平。
必填 1:是否成立 成立 / 不确定 / 不成立。它合并判断事实依据、逻辑关系和主题匹配。 先用一个总判断快速筛掉明显不可信或没关系的组合,降低人评负担。
必填 2:故事价值 1-5 分。看补充图是否让封面图更值得讲、更有上下文、情绪、关系或叙事回报。 这是主要质量分,直接用于比较哪种检索方法更会找到好故事。
可选诊断 失败原因:事实不支撑 / 没有逻辑关系 / 偏离主题 / 重复无增量 / 可有可无。故事标签:新信息 / 反差 / 因果 / 人物关系 / 过程结果等。 可选项只用于分析失败模式和故事类型,不阻塞快速打分。
主要结论指标 方法胜率、成立率、平均故事价值分、失败原因分布、故事标签分布。 这些指标决定哪种检索方法更适合产品目标。
机器指标定位 R@K/NDCG/MRR 作为候选池健康检查和失败诊断,不作为最终胜负。 如果机器指标高但人工故事分低,说明方法会找相关图但不会找好故事。

故事盲评包

Blind Review Items

180 条,覆盖 30 个 story query,3 个方法,每方法每 query 2 个候选。

当前方法

A_rules_metadata, B_embedding_card, C_embedding_multivector。评审只看到 blind method id,真实方法映射保存在 internal key 中。

Review Files

/Users/housen/Documents/策略/experiments/photobench-album1-story-eval/runs/album1_v1_seed20260614/human_eval/story_review_items.blind.csv

Scoring Station

/Users/housen/Documents/策略/photobench-agent-story-review.html

指标大白话

指标大白话定义怎么读注意事项
Recall@K 前 K 张里找回了多少正确图片。 越高越好。R@10 高,说明用户不用翻很久就能看到正确照片;R@50 高,说明候选池覆盖够好,适合交给后面的 agent 重排。 它不关心错误图片有多少,只关心 GT 有没有被捞上来。
Precision@K 前 K 张里有多少比例是真的正确。 越高越好。Precision 高代表候选池更干净,后续 agent 或人工少看无关图。 当 GT 很多或 K 很大时,Precision 会天然变低,不能单独看。
F1@K Recall 和 Precision 的折中分。 越高越好。它适合看“既想覆盖,又不想太脏”的平衡。 召回阶段通常更重视 Recall,所以 F1 只是辅助指标。
NDCG@K 正确图片排得越靠前,分越高。 越高越好。两个方法都找到了正确图,谁把正确图排在第 1、第 2,而不是第 40,谁 NDCG 更好。 比 Recall 更重视排序位置,适合评价首屏体验。
MAP@K 多张正确图片时,整体排序是否稳定地把正确图放前面。 越高越好。它比单次命中更严格,适合多 GT 查询。 对只有一张 GT 的查询,它和第一命中位置关系更大。
MRR 第一张正确图片出现得有多早。 越高越好。MRR 接近 1,代表经常第一张就命中;MRR 很低,代表用户要往后翻才看到第一张对的。 它只看第一张正确图,不衡量是否找全所有正确图。
Reject Empty 没有正确答案的查询,方法是否敢返回空。 越高越好。它衡量方法有没有乱编证据、硬凑结果。 album1 只有 6 条 zero-GT,样本太少,只能当 pilot warning,不能下强结论。
Latency 单条 query 平均耗时。 越低越好。它用于判断方法能不能放进在线链路。 当前 B 的耗时不包含首次建索引或模型加载,线上应看缓存后的查询耗时。
Source 分桶 按查询需要的线索类型拆开看:V 是视觉,M 是时间/地点等 metadata,F 是人物/人脸。 看分桶能知道方法强在哪里、弱在哪里。比如 B 整体强,但 F/person-only 桶弱,说明单向量语义召回不擅长同人线索。 小桶样本少时不要过度解读,比如 MF 只有 1 条。
Delta B 相比 A 的提升或下降。 正数代表 B 比 A 好,负数代表 B 不如 A。 Delta 要结合样本量 n 看,小样本的大幅波动不一定可靠。
方法进展、VLM 数据集与 embedding 策略
方法状态模型输入当前结果下一步
A_rules_metadata 已完成 无模型 query text + metadata + face nickname R@10 11.1%, MRR 0.0851 作为下界基线保留
B_embedding_card 已完成 BAAI/bge-m3 真实 VLM PhotoCard 文本 R@10 51.5%, MRR 0.5474 loop 会自动运行 B 组
C_embedding_multivector 已完成 BAAI/bge-m3 dense late fusion summary / people / relations / scene / activity / ocr / metadata R@10 51.7%, MRR 0.5028 进入 F hybrid agent
D_llm_ceiling 可选 LLM full/large context scan 小样本全量候选 未跑 只用于小样本上限,不进入在线成本判断
E_current_lane_search 待接入 线上 ReAct lane-search agent same_person / event / object / place / temporal lanes 需要 replay adapter 导出线上 agent 对 album1 的候选池和组合
F_hybrid_embedding_agent 已完成 B/C source-aware RRF hybrid B PhotoCard recall + C multivector recall R@10 55.8%, MRR 0.5614 进入 F 组故事盲评
G_story_feature_reranker 已完成 无新增模型,VLM PhotoCard 特征规则 B/C/F 合并候选池 + cover PhotoCard R@10 53.4%; known-only best@2 2.7833 E 组 replay + 跨相册验证

VLM 数据集进展

VLM Dataset

1069 / 1069 cards,覆盖率 100.0%。

线上 Prompt 对齐

album-vision-analysis v3,模型 gemini-3.1-flash-lite-preview

生成质量门槛

Readiness: pass;errors 0,warnings 0。

Embedding 策略说明

B:干净语义召回基线

一张图一个 VLM PhotoCard 向量,验证真实 VLM 文本 + bge-m3 能否稳定召回语义相关图片。它是强 baseline,但不是故事性上限。

C:故事特征多向量

把 summary、people、relations、scene、activity、ocr、metadata 拆开建向量,按 query 意图 late fusion,并补 face alias 规则信号。

F:Hybrid Agent 上限

embedding 负责召回候选,agent 再判断 information gain、narrative payoff、multi-image cost 和 novelty,最终靠人工评测故事质量。

机器指标、分桶变化与数据质量
方法R@10R@50R@100 NDCG@10MAP@10MRRLatency
A_rules_metadata 11.1% 23.0% 26.7% 0.0872 0.0662 0.0851 2.79 ms
B_embedding_card 51.5% 69.6% 77.4% 0.4783 0.4129 0.5474 75.88 ms
C_embedding_multivector 51.7% 70.4% 78.5% 0.4548 0.3810 0.5028 76.87 ms
F_hybrid_embedding_agent 55.8% 72.3% 79.3% 0.5106 0.4406 0.5614 152.75 ms
G_story_feature_reranker 53.4% 68.6% 74.4% 0.5113 0.4411 0.5928 305.50 ms

A → B 分桶变化

SourcenA R@10B R@10DeltaA MRRB MRR
F 7 72.6% 0.8% -71.9% 0.6464 0.0573
M 15 7.3% 13.3% 6.1% 0.0444 0.1365
MF 1 100.0% 0.0% -100.0% 0.3333 0.0667
V 42 0.0% 75.9% 75.9% 0.0063 0.7654
VF 10 15.7% 25.1% 9.5% 0.1009 0.2955
VM 13 7.7% 57.6% 49.9% 0.0269 0.7258
VMF 6 11.0% 74.1% 63.1% 0.1417 0.7333

B → C 分桶变化

SourcenB R@10C R@10DeltaB MRRC MRR
F 7 0.8% 34.5% 33.8% 0.0573 0.4568
M 15 13.3% 15.0% 1.7% 0.1365 0.1442
MF 1 0.0% 100.0% 100.0% 0.0667 0.5000
V 42 75.9% 73.3% -2.5% 0.7654 0.6263
VF 10 25.1% 30.0% 4.9% 0.2955 0.4455
VM 13 57.6% 52.9% -4.7% 0.7258 0.6035
VMF 6 74.1% 37.3% -36.8% 0.7333 0.4663

B 组 PhotoCard Embedding 指标

Recall@10 51.5%

正例查询中,GT 图片进入前 10 的平均比例

Recall@50 69.6%

衡量候选池能否覆盖足够多真值

NDCG@10 0.4783

排序质量,越靠前命中越好

MAP@10 0.4129

多 GT 查询的平均精度

MRR 0.5474

第一张命中图的平均倒数排名

Reject Empty 0.0%

零 GT 查询是否能返回空结果

Latency 75.88 ms

单 query 平均耗时

SourcePositive QR@10R@50NDCG@10MRR
F 7 0.8% 14.7% 0.0122 0.0573
M 15 13.3% 13.3% 0.1333 0.1365
MF 1 0.0% 100.0% 0.0000 0.0667
V 42 75.9% 92.4% 0.6937 0.7654
VF 10 25.1% 69.5% 0.2180 0.2955
VM 13 57.6% 76.4% 0.5854 0.7258
VMF 6 74.1% 94.8% 0.6584 0.7333

C 组 Story-aware Multivector 指标

Recall@10 51.7%

正例查询中,GT 图片进入前 10 的平均比例

Recall@50 70.4%

衡量候选池能否覆盖足够多真值

NDCG@10 0.4548

排序质量,越靠前命中越好

MAP@10 0.3810

多 GT 查询的平均精度

MRR 0.5028

第一张命中图的平均倒数排名

Reject Empty 0.0%

零 GT 查询是否能返回空结果

Latency 76.87 ms

单 query 平均耗时

SourcePositive QR@10R@50NDCG@10MRR
F 7 34.5% 64.4% 0.4174 0.4568
M 15 15.0% 18.3% 0.1415 0.1442
MF 1 100.0% 100.0% 0.6309 0.5000
V 42 73.3% 86.8% 0.6060 0.6263
VF 10 30.0% 64.5% 0.3018 0.4455
VM 13 52.9% 72.6% 0.5142 0.6035
VMF 6 37.3% 93.4% 0.3196 0.4663

数据分布

F
7
M
15
MF
1
V
44
VF
10
VM
16
VMF
7

质量门槛

Hard errors: 0

Soft warnings: 3

当前 warnings

MF source bucket is very small; bucket-level conclusions will be weak; reject subset has fewer than 10 items; reject metrics will be noisy; face image mapping coverage is small; face-source findings need manual inspection

实验资产状态

Method output rows: 500

Blind story review items: 180

Reject subset: 6

VLM card status: pass

VLM card coverage: 100.0%

bge-m3 smoke: not recorded