Files
mcn-short-video/素材卡召回能力实测报告_V1.0_20260928.md
maogeigei 80072ff542 chore(repo): 归集 09-14~09-29 工作产出(技能/知识库/工作台/报告)并收敛临时产物
- skill: 素材库分块定义(00~11)、05_极致事件知识库 4 篇、08_对话风格总纲、mcn-video-prompt 提示词质量门禁与外部语料检索流程

- workbench: mcn-work-shop 新增 cli-backend.js(本地 CLI 接入)、工作台视觉交互规范;移除旧 UI 规范

- docs: 根目录极致事件/素材卡/审计方案报告与热门短视频清单入库

- memory: 补 09-14~09-29 日志与自动化任务记忆

- chore: .gitignore 排除 tools/、.tmp-chrome-*/、_k_test.cjs
2026-09-29 18:56:24 +08:00

12 KiB
Raw Permalink Blame History

素材卡召回能力实测报告 V1.0

日期:2026-09-28|样本:5 条视频 / 15 张卡(戏剧类)+ 感官类全量 101 卡|方法:以视频原始画面/台词为独立查询源

一、为什么做这次实验(前两轮作废原因)

轮次 查询源 问题 结论
第 1 轮 库内 standard_question 原文 查询即答案,开卷考试 作废(R@1 全 100%)
第 2 轮 卡片内「极致内容」字段 与 standard_question 同源,语义泄漏 作废
第 3 轮(本轮) 视频脚本的场次画面 + 台词原话 信息源完全隔离 ✅ 有效

隔离性验证:抽查卡片正文(answers),全程为抽象结构描述,不含具体场景名/品牌名/人名(如 21728 卡正文只写"第一排绿色分类垃圾桶""两团发绿的臭气",无"垃圾站"字样)。视频原文与卡片文字在语言层完全不同 → 实验有效。


二、结论 A:查询源怎么拼(入库端无关,纯检索端)

5 条样本 × 6 种查询构造,命中率:

查询构造 R@1 R@3 均分 判断
V1 全量原文(画面+台词全带走) 5/5 5/5 0.7187 🥇 最佳
V5 原文截断 800 字 5/5 5/5 0.7187 🥇 并列最佳,成本更低
V2 画面+场次标记 5/5 5/5 0.7089 🥈 接近最佳
V3 仅画面描述行(剥掉台词) 5/5 5/5 0.7090 🥈 接近最佳
V4 仅台词 3/5 5/5 0.6641 ⚠️ 明显下降
V6 仅场次标记(【景别|场景】) 2/4 3/4 0.6184 ❌ 几乎无效

三条硬结论

  1. 画面信息 > 台词信息。剥掉台词只留画面(V3)不掉分(0.709 vs 0.719);剥掉画面只留台词(V4)R@1 从 5/5 掉到 3/5。→ 印证素材卡"以画面内容为核心"的定位正确。
  2. 800 字截断即够。V5 与 V1 分数完全相同(0.7187),说明前 800 字已覆盖关键信息,无须全文。
  3. 场次标记本身无效("【特写镜头|手机屏幕】"这类),剔除。须与画面描述句合并使用。

三、结论 B:检索时怎么拼(编导真实使用场景)

模拟编导「想找夫妻因生活小物吵架的开场」的真实检索,4 种问法:

问法 R@1 分数 第1-2名间隔 判断
纯口语需求「夫妻因为家里的小东西吵架,怎么开场」 0.6986 0.0545 ✅ 能召回,但间隔过小易误召
需求 + 结构词(+反差/痛点) 0.7169 0.1468 ✅✅ 间隔放大 2.7 倍
需求 + 画面词(+老公被吵到发火/老婆委屈) 0.7135 0.1605 ✅✅ 间隔最大
需求 + 检索后缀("有没有…用来…?"完整句式) 0.7326 0.1526 ✅✅ 分数最高

结论

  • 纯口语问法可用但不够:第 1 命中没问题,但第 1、2 名只差 0.05,接近并列 → 实际使用会"翻错页"。
  • 推荐拼法(按性价比排序):
    1. 需求句 + 结构词(如「…的开场 反差 痛点」)— 一句话成本,间隔拉大 2.7 倍
    2. 需求句 + 画面词(补一句具体画面,如"老公被吵到发火、老婆委屈")— 间隔最大
    3. 完整检索后缀句式(照卡片问法写)— 分数最高,但编导写起来最累
  • ⚠️ 关键词堆叠无效(如只丢"吵架 噪音 开场 反差"),须成句。

四、结论 C:入库问法不是两类,而是 5 种形态

⚠️ 本节为 V1.1 修订。初版曾把入库问法粗分为「戏剧类 vs 感官类」两类分叉 —— 实测推翻:形态与标签不一一对应,同一标签内也混杂多种形态(如 视觉冲击 67 条含 F1/F2/F3/F4 四种)。真实决定因素是批次模板时代,不是标签。

5 种形态分布(全库 631 条实测)

形态 模板 条数 占比 典型
F3 需求壳句 有没有「{抽象结构}」…? / 想找一条「…」 / 我需要一个「…」 318 50.4% 有没有「内行人一口尝出食材被掉包」的悬念开场钩子?
F4 白描事件陈述 纯事件描述,无发问壳 202 32.0% 账单金额超高但客人毫无反应的反差
F1 编号+呈现后缀 {id}-{n}|{事件名} —— 这条素材里的极致事件具体是怎么呈现的? 75 11.9% 34020-3|陪诊推老人回家,老伴转身烙饼塞进怀里 —— …
F2 事件+复用后缀 {事件名},这个极致事件怎么复用到短视频里? 30 4.8% —
F5 结论判据式 讲道理不讲事件(判据/结论句) 6 1.0% —

按标签交叉:同标签内多形态并存

标签 n F1 F2 F3 F4 F5 主形态
反差 175 14 12 94 54 1 F3
反常识 119 0 3 75 41 0 F3(全无编号前缀)
价值观冲击 93 4 1 56 32 0 F3
视觉冲击 67 2 2 36 25 2 F3(4 种形态并存)
自嘲反差 44 3 3 27 11 0 F3
细节专业 32 6 2 13 10 1 F3(接近五五)
感官沉浸 26 12 0 6 7 1 F1
氛围沉浸 25 16 2 0 7 0 F1(最纯)
预见式服务 20 9 1 5 5 0 F1
品质对比 19 9 3 3 4 0 F1
食材极致 9 0 1 1 6 1 F4
难度极限 2 0 0 2 0 0 F3

关键规律:F1 集中出现在后期补采批次(氛围沉浸/感官沉浸/预见式服务/品质对比),F3/F4 集中在早期批次。 → 那 75 条 {video_id}-{序号}| 前缀全部落在 F1 型上,是后期批次模板的产物,不是"感官类专属"。

结论 C-2:感官类全量扩测(101 卡 / 97 有效)

查询构造 n R@1 R@3 均分 均间隔
事件名(最简) 97 97 97 0.7739 0.1686
事件名 + 意图句 97 97 97 0.7727 0.1690
事件名 + 结构词 97 97 97 0.7809 0.1601
标签 n R@1 均分
品质对比 19 19/19 0.7905
感官沉浸 26 26/26 0.7886
氛围沉浸 25 25/25 0.7802
预见式服务 19 19/19 0.7668
食材极致 8 8/8 0.7681

三条洞察

  1. 感官类召回率 100%,且加不加意图/结构词几乎无差异(三种查询均分差 < 0.01)—— 与戏剧类(结论 B:纯口语间隔仅 0.054,补词后 ×2.7)结论相反。 原因:F1 型问法本身即完整事件描述,查询信息量已饱和;F3 型是抽象结构,必须外部补词才有区分度。
  2. 召回率由「入库问法形态」决定,不由标签决定 → 想提升某类召回,应改该批次的入库模板,而非改标签。
  3. 同源卡会聚团:感官类第 2 名常是同视频的其他卡(21728-1 的第 2 名是 21728-3)→ 利于"找一个事件带出同源素材"。

反例:4 条「无效查询卡」(仅存于感官类)

100000019 / 100000020 / 100000021 / 100000026 —— 形如 找一条低成本做出硬菜的极致美食事件素材,整句无「」包裹的事件名,剥壳后为空。 属 F3 壳句的退化写法(只有需求没有具体事件),是入库模板缺陷,不是检索问题;已从 97 卡统计中剔除(无有效查询可比)。

🔎 副产品:本轮沉淀的剥壳函数 extract_name()(15_sensory_recall.py)对 97 条壳句全部剥壳成功 → 壳句模板是规则化的,批量改造成本低。

另注:初版猜测"75 条前缀集中在感官类" 已被推翻 —— 实际是集中在 F1 型(跨感官/戏剧标签)。


五、附带发现

  1. 卡片 standard_question 带 {video_id}-{序号}| 前缀:631 条中 75 条带前缀,全部落在 F1 型(后期补采批次)。→ 前缀会占用向量语义空间,若确认无检索价值可考虑去掉(待评估,见待办)。

  2. V6 触发 HTTP 400:查询文本过短时接口报错 → 查询需设 ≥40 字最短长度保护(已写入 RUNBOOK 红线 14)。

  3. 样本代表性已补齐:戏剧类 5 条 + 感官类全量 101 卡,两类均已实测。

  4. 库内总量核对(2026-09-28 实测):631 条(此前记忆"480 条"已过时)。12 标签真实分布:

    标签 数量 标签 数量
    反差 175 感官沉浸 26
    反常识 119 氛围沉浸 25
    价值观冲击 93 预见式服务 20
    视觉冲击 67 品质对比 19
    自嘲反差 44 食材极致 9
    细节专业 32 难度极限 2

    → 修正:难度极限/食材极致 不是 0 覆盖(此前记忆有误),定向补采(批次 32 起)已见效。


六、待办

  • ✅ 结论 A/B/C 已写入 RUNBOOK(2026-09-28):新增 §2.4「检索与召回最佳实践」;红线区新增 13(vector_threshold=0.0 陷阱)、14(查询过短 400);步骤 6/7 已加交叉引用
  • ✅ 临时脚本已正式化:13_recall_map/parse/bench/summary.py + 14_form_audit.py + 15_sensory_recall.py + recall_cache/
  • ✅ 结论 C 已修订为 5 形态(原"两类分叉"表述已推翻并替换)
  • ✅ 感官类扩测已完成:101 卡(97 有效),R@1 = 100%
  • ✅ 75 条编号前缀已评估完成(见下节「八、编号前缀专项评估」)
  • 入库问法是否统一为 F1 型(待决策):F1 型实测召回 100% 且查询无需补词;F3/F4 型(占 82.4%)为早期批次遗留 → 是否批量回炉改造,需按使用场景决策

八、编号前缀专项评估(任务 3,仅评估不清理)

评估对象:75 条 {video_id}-{序号}| 前缀(如 25106-1|一把扯下整排厚重假睫毛…) 分布:全库 631 条中 75 条带前缀,全部落在 F1 型(后期补采批次),分属 9 个标签: 氛围沉浸 16 / 反差 14 / 感官沉浸 12 / 品质对比 9 / 预见式服务 9 / 细节专业 6 / 价值观冲击 4 / 自嘲反差 3 / 视觉冲击 2

五个判据

# 判据 实测结果 结论
1 是否稀释语义 用不含编号的纯语义查询("抽出一整排厚重的假睫毛,卸妆棉整块糊上来")→ 带前缀卡仍 R@1=0.7471 ✅ 未稀释
2 是否造成同源污染 单独搜纯编号 25106 / 21728 → 返回空(未达 0.5 阈值) ✅ 无污染
3 是否影响召回率 带前缀 46 卡均分 0.7984 vs 不带前缀 51 卡 0.7650 ✅ 无负作用(差值来自批次差,非编号)
4 是否重复冗余 编号同时出现在 standard_question 与 answers 头部 ⚠️ 冗余,但不影响召回
5 是否影响展示 检索结果列表中前缀占前 6 个字符,编导扫列表先看到编号而非事件名 ⚠️ 唯一的实际影响

评估结论

✅ 建议保留,不必清理。 编号对检索能力零危害(判据 1-3 全部通过),且它是卡片与源视频的可追溯锚点(编导看到 25106-1 可回查原视频)。 ⚠️ 唯一问题在展示层:列表里前缀占据视觉首位。若将来要优化,推荐做法是「保留入库、仅在做 UI 展示时前端剥离前缀」——而不是从库里删掉(删掉会丧失溯源能力)。

风险评估:清理成本 ≈ 75 次 DELETE + 重导(RUNBOOK §2.5 回炉链路),且重导后索引重建、有召回波动风险 → 为纯展示收益不值得付这个成本。


七、一句话总结

素材卡语义表达是有效的:仅凭视频原始画面/台词(信息源完全隔离),即可在 631 条库中把对应卡召回至第 1 名 —— 戏剧类需"画面 + 结构词"补词(区分度 ×2.7),感官类(F1 型入库)裸事件名即 100% 命中。召回率的决定变量是「入库问法形态」(F1 优于 F3),不是标签。