|
| 1 | +# 头脑风暴记录:视频类型档案自动检测准确度提升 |
| 2 | + |
| 3 | +**状态**: 前瞻构想(未排期)——2026-08 用户反馈"档案自动化检测准确度较低",本文对 |
| 4 | +根因做代码级定位并产出候选方案矩阵;落地项待裁决后进 requirements-pool。 |
| 5 | + |
| 6 | +## 基本信息 |
| 7 | + |
| 8 | +| 字段 | 内容 | |
| 9 | +|------|------| |
| 10 | +| 主题 | 视频类型档案(ProfileKind,13 类)自动检测准确度提升 | |
| 11 | +| 日期 | 2026-08 | |
| 12 | +| 目标 | 产出"信号 → 决策 → 反馈"全链路改进候选,按成本/收益排序,供裁决落地 | |
| 13 | + |
| 14 | +--- |
| 15 | + |
| 16 | +## 1. 问题定义 |
| 17 | + |
| 18 | +### 核心问题 |
| 19 | + |
| 20 | +档案自动检测(`detect_video_profile` / `vote_detect`)准确度低:低置信/信号冲突频繁触发 |
| 21 | +"请确认",或误选档案导致采样档位与产物模板不匹配(如把实操当网课、把直播当口播)。 |
| 22 | + |
| 23 | +### 根因(代码级证据,2026-08 核查) |
| 24 | + |
| 25 | +1. **检测信号实际只有标题一个**:前端 `ProfileDetector` 只调 `detect_video_profile({ title })`; |
| 26 | + `url / frame_switch_rate / has_subtitle / duration_min` 参数在命令层存在但**从未被任何调用方填充** |
| 27 | + ("会话中增量评估"是注释里的话,未接线)。而 `vote_detect` 打分里帧率区间(2 分)/字幕偏好(1 分)/ |
| 28 | + 时长达标(1 分)全部落空——检测事实上退化为"标题关键词投票"。 |
| 29 | +2. **关键词重叠制造歧义**:"教程"同时命中 Lecture 与 HandsOn;"播客"同时命中 Interview 与 Podcast; |
| 30 | + url 关键词 `bilibili/b23` 同时命中 Lecture+HandsOn 等四个档案(无区分度);"第X章"加成只对 |
| 31 | + Lecture 生效但其他档案标题同样可能含"章"。 |
| 32 | +3. **检测时点过早**:选窗口瞬间,画面(帧率/字幕/版面)、音频(人声/语速/多人)、时长全都还没有。 |
| 33 | +4. **只有正向证据,没有负向证据**:打分纯加分制——"标题含'直播'但回放中"这类互斥信号无法表达; |
| 34 | + "含'回放/录播'不太可能是直播"无机制。 |
| 35 | +5. **无归一化**:各档案关键词表长度不等(Lecture 8 个 vs 部分档案 2 个),大词表档案天然多得分, |
| 36 | + 阈值(`CONFIDENCE_THRESHOLD=2.5` / `CONFLICT_GAP=1.0`)是拍脑袋值,无标注集调参。 |
| 37 | +6. **反馈闭环薄**:记忆偏好只做"完整标题子串 contains"(标题稍变即失配);用户每次"改选" |
| 38 | + 的纠错数据(关键词 × 最终选择)不统计、不回流;会话结束后真实观测信号(帧率/字幕有无/ |
| 39 | + 时长/OCR 占比)不回写记忆。 |
| 40 | +7. **标题形态噪声**:中文标题多变体(【】/()/无标点/英文/连载序号"第X集/EP.12"), |
| 41 | + 现状无结构化解析。 |
| 42 | + |
| 43 | +### 约束条件 |
| 44 | + |
| 45 | +- 本地优先:检测必须可离线、纯本地、低延迟(选窗口 → 开始 的间隙内完成) |
| 46 | +- 已有管线零回归:采样/权重/后处理按档案查表,改检测不改消费端契约 |
| 47 | +- 单测可注入:`vote_detect` 为纯函数(决策矩阵可注入 fake 信号),新逻辑须可 AAA 单测 |
| 48 | + |
| 49 | +### 成功标准 |
| 50 | + |
| 51 | +- 无需确认(高置信静默生效)的会话占比显著上升 |
| 52 | +- 误选档案导致的产物/采样不匹配明显减少 |
| 53 | +- 用户改选数据开始回流并可见地改善后续检测 |
| 54 | + |
| 55 | +--- |
| 56 | + |
| 57 | +## 2. 发散阶段(不评判,只产出) |
| 58 | + |
| 59 | +| # | 想法 | 分组 | 备注 | |
| 60 | +|---|------|------|------| |
| 61 | +| 1 | 标题结构化解析:括号/分隔符内容作为强信号(【直播】/(回放)/「教程」/第X集/EP.xx) | 信号增量 | 零成本,纯文本 | |
| 62 | +| 2 | 负面关键词/互斥规则:含"回放/录播/重播"排除 Live;含"直播"强指向 Live;含"录屏"偏实操 | 决策升级 | 负证据机制 | |
| 63 | +| 3 | 档案内归一化:得分除以词表大小(或稀有词 IDF 加权)——"MOOC"比"教程"更有区分度 | 决策升级 | 修大词表偏置 | |
| 64 | +| 4 | 会话中增量再检测:frame_switch_rate/has_subtitle 实时可得(画面 worker + det 结果),会话开始 30s/1min 后重投一次票,与用户选择不一致时出"档案修正条"提示一次 | 信号增量 | 注释承诺未接线,成本最低、收益最直接 | |
| 65 | +| 5 | 选窗口时抓 1 帧预览做 OCR:字幕区有无/版面密度 → 有字幕=视频内容页 | 信号增量 | 预览帧已在窗口选择卡 | |
| 66 | +| 6 | 选窗口时录 5s 系统音频粗分析:无人声(纯图文课?)/单人口播/多人对话 | 信号增量 | 需权限与计时,成本中 | |
| 67 | +| 7 | 窗口进程名/窗口类信号:浏览器 vs 播放器 vs IDE(VS Code→coding)vs 会议软体(Zoom/腾讯会议→meeting) | 信号增量 | list_windows 已有 processName | |
| 68 | +| 8 | URL 细化:bilibili 域名下区分 视频页/直播页/课程合集页(路径级而非域名级) | 信号增量 | 需接入 URL 来源 | |
| 69 | +| 9 | 两级决策:先粗分(语音驱动:口播/播客/访谈 vs 屏幕驱动:网课/实操/编程 vs 图像流:白板/跟练),再细分类内 | 决策升级 | 决策树可解释 | |
| 70 | +| 10 | 候选冲突可视化:需确认时展示"哪两个信号打架"(如:标题像网课 × 画面高帧率像实操) | 交互 | 降低用户认知负担 | |
| 71 | +| 11 | 关键词命中统计反馈:每次用户确认/改选,记录"本次命中的关键词 × 最终档案";错判率高的关键词降权/移除 | 反馈闭环 | 用户纠错数据是免费标注集 | |
| 72 | +| 12 | 会话后复盘自动修正:会话结束用真实观测信号重投 → 与用户选择的档案对比 → 不一致(且置信高)时提示"下次可选 X"或直接修正记忆 | 反馈闭环 | 真实信号最可信 | |
| 73 | +| 13 | 质量报告反哺:产物质量指标(低置信段占比/OCR 占比/图集利用率)按档案聚合,间接验证档案参数匹配度 | 反馈闭环 | 慢反馈,辅助校准 | |
| 74 | +| 14 | 记忆模糊匹配:标题分词/编辑距离相似(而非精确 contains)命中记忆 | 反馈闭环 | 标题小变不再失配 | |
| 75 | +| 15 | 轻量分类器:用"用户确认历史 + 会话真实信号"训练标题 TF-IDF/朴素贝叶斯(几十 KB 本地模型) | 轻量学习 | 替代手写关键词表 | |
| 76 | +| 16 | 检测时点后移:开始会话不阻断;观察 1-2 分钟后档案修正条出现一次(真信号到手再问) | 交互 | 与 #4 配套 | |
| 77 | +| 17 | 阈值调参集:收集已确认会话构建小型标注集,网格搜索 CONFIDENCE_THRESHOLD/CONFLICT_GAP | 决策升级 | 用数据代替拍脑袋 | |
| 78 | +| 18 | "未知"兜底语义扩展:多次检测仍低置信的标题 → 自动沉淀为"该标题属于低识别区",累积后进人工校准队列 | 反馈闭环 | 与 v0.7.1 Unknown 联动 | |
| 79 | +| 19 | 弹幕/播放器元数据(如标题栏滚动信息)不采集(裁决不做),不进入候选 | 边界 | 明确不做防跑偏 | |
| 80 | +| 20 | OCR 混淆画像复用:混淆画像(REQ-120)里积累的常见字幕关键词可反哺标题识别(如"追剧"字样) | 信号增量 | 跨模块复用 | |
| 81 | + |
| 82 | +--- |
| 83 | + |
| 84 | +## 3. 收敛阶段(评估与筛选) |
| 85 | + |
| 86 | +### 评估矩阵(可行性/影响力 5 分制) |
| 87 | + |
| 88 | +| 想法 | 可行性 | 影响力 | 创新性 | 总分 | 排名 | |
| 89 | +|------|--------|--------|--------|------|------| |
| 90 | +| 4 会话中增量再检测 | 5 | 5 | 3 | 13 | 1 | |
| 91 | +| 1 标题结构化解析 | 5 | 4 | 3 | 12 | 2 | |
| 92 | +| 2 负面关键词/互斥 | 5 | 4 | 3 | 12 | 2 | |
| 93 | +| 3 词表归一化 | 5 | 4 | 3 | 12 | 2 | |
| 94 | +| 12 会话后复盘修正 | 4 | 5 | 4 | 13 | 1 | |
| 95 | +| 11 关键词命中统计 | 4 | 4 | 4 | 12 | 2 | |
| 96 | +| 7 进程名信号 | 4 | 3 | 3 | 10 | 3 | |
| 97 | +| 5 首帧预览 OCR | 3 | 4 | 3 | 10 | 3 | |
| 98 | +| 10 冲突可视化 | 4 | 3 | 4 | 11 | 3 | |
| 99 | +| 14 记忆模糊匹配 | 4 | 3 | 3 | 10 | 3 | |
| 100 | +| 9 两级决策 | 3 | 4 | 4 | 11 | 3 | |
| 101 | +| 6 音频粗采样 | 2 | 4 | 4 | 10 | 3 | |
| 102 | +| 15 轻量分类器 | 2 | 5 | 5 | 12 | 2 | |
| 103 | +| 16 检测时点后移 | 3 | 4 | 3 | 10 | 3 | |
| 104 | +| 17 阈值调参集 | 3 | 3 | 2 | 8 | 4 | |
| 105 | +| 8 URL 路径细化 | 2 | 2 | 2 | 6 | 4 | |
| 106 | +| 13 质量报告反哺 | 3 | 2 | 3 | 8 | 4 | |
| 107 | +| 18 低识别区累积 | 3 | 2 | 3 | 8 | 4 | |
| 108 | + |
| 109 | +### 分类 |
| 110 | + |
| 111 | +**第一批(立即执行,低成本高收益——纯逻辑可单测,不动采集链路):** |
| 112 | +- #4 会话中增量再检测接线(帧率/字幕信号已在管线中,仅接线 + 1 次提示) |
| 113 | +- #1 标题结构化解析(【直播】(回放)第X集 EP.xx 等强信号) |
| 114 | +- #2 负面关键词/互斥规则("回放/录播" 排除 Live 等) |
| 115 | +- #3 词表归一化(得分/词表大小或 IDF 加权) |
| 116 | + |
| 117 | +**第二批(反馈闭环,中成本高收益):** |
| 118 | +- #12 会话后复盘自动修正记忆(真实信号重投对比) |
| 119 | +- #11 关键词命中统计(用户改选 = 免费标注集) |
| 120 | +- #14 记忆模糊匹配(分词/编辑距离) |
| 121 | + |
| 122 | +**第三批(观察与长期):** |
| 123 | +- #5 首帧预览 OCR / #7 进程名 / #10 冲突可视化 / #16 检测时点后移(交互增强,与第一批可叠加) |
| 124 | +- #15 轻量分类器(依赖第二批积累的标注语料,V1.0+) |
| 125 | +- #6 音频粗采样(需新权限面,先搁置) |
| 126 | +- #17/#13/#8 依赖数据积累,随批次推进 |
| 127 | + |
| 128 | +--- |
| 129 | + |
| 130 | +## 4. 行动计划(建议) |
| 131 | + |
| 132 | +| 批次 | 想法 | 下一步 | 备注 | |
| 133 | +|------|------|--------|------| |
| 134 | +| 一 | #4 增量再检测 | 接线 `detect_video_profile` 的 frame_switch_rate/has_subtitle 实参(画面 worker/det 结果已在内存),会话开始后定时重投;不一致且高置信时前端提示一次 | 前端 + 命令层小改 | |
| 135 | +| 一 | #1/#2/#3 | 扩展 `ObservedSignals` 决策矩阵:标题结构解析、负向规则、归一化;`vote_detect` 纯函数单测全覆盖 | 纯逻辑,AAA 单测 | |
| 136 | +| 二 | #12 | 会话结束时把真实观测信号回写检测(新命令或事件),与用户档案对比,不一致且新置信高 → 更新记忆 | 需记录"用户选择的档案"到会话(已有 profile 列) | |
| 137 | +| 二 | #11/#14 | 记忆库加关键词命中统计字段;lookup 改模糊匹配 | ProfileMemory schema 兼容演进 | |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +## 5. 遗留问题 |
| 142 | + |
| 143 | +- 需要验证:标题含"教程"的真实歧义占比(Lecture vs HandsOn vs Coding 三向冲突频率) |
| 144 | +- 需要验证:用户改选行为中"从 X 改到 Y"的分布(决定 #11 的降权方向是否正确) |
| 145 | +- 需要调研:bilibili/网课平台 URL 路径结构是否稳定可用(#8 前置) |
| 146 | +- 需要设计:增量再检测的"修正条"出现时机与打扰阈值(与"静默生效可改"哲学一致) |
| 147 | + |
| 148 | +--- |
| 149 | + |
| 150 | +## 6. 回顾 |
| 151 | + |
| 152 | +- 产出想法数量:20 |
| 153 | +- 最有价值方向:接线已有信号(#4)+ 负证据与归一化(#2/#3)+ 用户纠错回流(#11/#12) |
| 154 | +- 改进建议:检测准确度提升的关键不在"更多新信号采集",而在"已有信号接线 + 决策质量 + 反馈闭环"三件事 |
0 commit comments