- 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
12 KiB
素材卡召回能力实测报告 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 | ❌ 几乎无效 |
三条硬结论
- 画面信息 > 台词信息。剥掉台词只留画面(V3)不掉分(0.709 vs 0.719);剥掉画面只留台词(V4)R@1 从 5/5 掉到 3/5。→ 印证素材卡"以画面内容为核心"的定位正确。
- 800 字截断即够。V5 与 V1 分数完全相同(0.7187),说明前 800 字已覆盖关键信息,无须全文。
- 场次标记本身无效("【特写镜头|手机屏幕】"这类),剔除。须与画面描述句合并使用。
三、结论 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,接近并列 → 实际使用会"翻错页"。
- 推荐拼法(按性价比排序):
- 需求句 + 结构词(如「…的开场 反差 痛点」)— 一句话成本,间隔拉大 2.7 倍
- 需求句 + 画面词(补一句具体画面,如"老公被吵到发火、老婆委屈")— 间隔最大
- 完整检索后缀句式(照卡片问法写)— 分数最高,但编导写起来最累
- ⚠️ 关键词堆叠无效(如只丢"吵架 噪音 开场 反差"),须成句。
四、结论 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 |
三条洞察
- 感官类召回率 100%,且加不加意图/结构词几乎无差异(三种查询均分差 < 0.01)—— 与戏剧类(结论 B:纯口语间隔仅 0.054,补词后 ×2.7)结论相反。 原因:F1 型问法本身即完整事件描述,查询信息量已饱和;F3 型是抽象结构,必须外部补词才有区分度。
- 召回率由「入库问法形态」决定,不由标签决定 → 想提升某类召回,应改该批次的入库模板,而非改标签。
- 同源卡会聚团:感官类第 2 名常是同视频的其他卡(21728-1 的第 2 名是 21728-3)→ 利于"找一个事件带出同源素材"。
反例:4 条「无效查询卡」(仅存于感官类)
100000019 / 100000020 / 100000021 / 100000026 —— 形如 找一条低成本做出硬菜的极致美食事件素材,整句无「」包裹的事件名,剥壳后为空。
属 F3 壳句的退化写法(只有需求没有具体事件),是入库模板缺陷,不是检索问题;已从 97 卡统计中剔除(无有效查询可比)。
🔎 副产品:本轮沉淀的剥壳函数
extract_name()(15_sensory_recall.py)对 97 条壳句全部剥壳成功 → 壳句模板是规则化的,批量改造成本低。
另注:初版猜测"75 条前缀集中在感官类" 已被推翻 —— 实际是集中在 F1 型(跨感官/戏剧标签)。
五、附带发现
-
卡片
standard_question带{video_id}-{序号}|前缀:631 条中 75 条带前缀,全部落在 F1 型(后期补采批次)。→ 前缀会占用向量语义空间,若确认无检索价值可考虑去掉(待评估,见待办)。 -
V6 触发 HTTP 400:查询文本过短时接口报错 → 查询需设 ≥40 字最短长度保护(已写入 RUNBOOK 红线 14)。
-
样本代表性已补齐:戏剧类 5 条 + 感官类全量 101 卡,两类均已实测。
-
库内总量核对(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),不是标签。