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

188 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 素材卡召回能力实测报告 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 起)已见效。
---
## 六、待办
- [x] ✅ **结论 A/B/C 已写入 RUNBOOK**(2026-09-28):新增 §2.4「检索与召回最佳实践」;红线区新增 13(`vector_threshold=0.0` 陷阱)、14(查询过短 400);步骤 6/7 已加交叉引用
- [x] ✅ **临时脚本已正式化**:`13_recall_map/parse/bench/summary.py` + `14_form_audit.py` + `15_sensory_recall.py` + `recall_cache/`
- [x] ✅ **结论 C 已修订为 5 形态**(原"两类分叉"表述已推翻并替换)
- [x] ✅ **感官类扩测已完成**:101 卡(97 有效),R@1 = 100%
- [x] ✅ **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),不是标签。**