研究提案

[WIP] [v2] 视频教程步骤标注:操作序列理解的多模态训练数据

一个面向大型多模态模型(LMM)的视频教程步骤标注数据集构建方案,聚焦编程/技术操作类视频的步骤依赖关系与操作意图标注。

多模态学习 视频理解 数据构建 操作序列 LMM

[WIP] 视频教程步骤标注:操作序列理解的多模态训练数据

动机

LMM 在操作视频理解上的短板

当前大型多模态模型(LMM)在图像描述、视觉问答、场景理解等任务上已经相当成熟。然而,当任务变成「观看一段操作视频并理解其中的步骤序列」时,模型表现往往令人失望。

问题不在于感知能力——LMM 能识别帧里的代码编辑器、终端窗口、鼠标点击位置——而在于序列推理:步骤之间的因果依赖、中间状态的变化、以及操作意图的抽象。一个典型例子:给模型看一段「配置 Python 虚拟环境并安装依赖」的录屏,它可以逐帧描述每一步在做什么,却很难回答「为什么第 3 步必须在第 2 步之后执行」,更难在步骤出错时定位原因。

这种能力的缺失,根源在于训练数据的结构性空缺:现有视频训练数据几乎没有对步骤依赖关系和操作意图进行系统性标注。

为什么这个能力很重要

工程 AI 场景:面向开发者的 AI 助手(如 Copilot、Cursor)目前主要依赖代码上下文,无法利用视频教程这一海量知识来源。如果模型能理解操作视频中的步骤序列,就可以直接从 YouTube/Bilibili 教程中学习「如何部署一个 K8s 集群」「如何调试 CUDA OOM」。

实验室 AI 场景:科研人员日常会录制实验操作视频用于存档和传承。理解这类视频中的步骤依赖关系,有助于构建自动化实验记录系统和实验可重复性验证工具。

操作助手场景:在工业、医疗等领域,操作手册日益以视频形式存在。能够理解「这一步的前提是上一步完成了哪些状态变化」的 AI,才能真正充当合格的操作指导助手,而不只是播放视频的遥控器。

现有视频训练数据的缺口

目前主流视频数据集面临以下共同问题:

  • 动作标注,而非步骤标注:标注的是「正在敲键盘」而非「正在安装依赖包以为后续导入做准备」。
  • 无依赖关系:缺乏对「步骤 B 为何必须在步骤 A 之后」的显式建模。
  • 无操作意图:缺乏对每步操作目的的抽象标注(functional intent),只有表面动作描述。
  • 领域偏差:大量数据集集中在烹饪、运动等场景,技术操作类内容占比极低。

与现有方法的对比

现有视频理解数据集

ActivityNet(约 20K 视频,203 个活动类别)和 Kinetics(约 650K 视频片段)是动作识别领域的标杆数据集。它们的标注粒度是「动作类别」,每个片段对应一个独立动作标签,完全没有跨片段的依赖关系建模。

HowTo100M 是迄今最大的操作类视频数据集(136M 个视频片段,来自 1.2M YouTube 教学视频),通过自动对齐字幕与视频生成弱监督标注。然而其字幕来自自动语音识别(ASR),质量参差不齐,且没有对步骤之间的逻辑依赖关系进行任何标注——本质上仍是「动作描述序列」而非「步骤依赖图」。

COIN(约 11K 视频,180 种任务)在 HowTo100M 的基础上增加了步骤边界标注,是离本方案最近的工作,但仍然缺乏操作意图和依赖关系的标注,且技术操作类视频占比极低。

现有多模态指令数据

以 LLaVA、InstructBLIP 为代表的多模态指令数据集,主要建立在静态图像上。即使有视频版本(如 Video-LLaVA),视频数量远少于图像,且操作类内容更是凤毛麟角。这类数据的问题在于:它训练的是「看图说话」,而非「看操作序列推理依赖」。

本方案的差异化

维度ActivityNet/COINHowTo100MLLaVA-Video本方案
领域通用/生活通用教学通用编程/技术操作
步骤边界部分有弱无✅ 精确
操作意图✗✗✗✅
依赖关系✗✗✗✅
标注来源人工/弱监督自动ASR自动/人工LMM辅助+人工验证

本方案的核心差异化在于两点:技术操作领域的专注,以及步骤依赖关系的显式标注。


具体方案

数据来源

主要面向三类视频来源:

  1. YouTube/Bilibili 编程教程:涵盖环境配置、框架使用、项目部署等,是最丰富的来源。
  2. 终端操作录屏:如 Linux 配置、Docker 操作、数据库管理,操作边界清晰,适合自动化处理。
  3. 数据处理演示视频:Jupyter Notebook 操作、Pandas/SQL 数据清洗演示,步骤结构规整。

筛选条件:视频时长 5–45 分钟、分辨率 ≥ 720p、有语音解说、操作对象为屏幕内容(录屏类优先)。

🔄 [v2 改进]

版权问题严重低估——数据来源必须重新定位

原方案将 YouTube/Bilibili 列为首要来源,但这在商业使用场景下存在致命的版权风险:YouTube 服务条款明确禁止未经授权下载视频内容,更不允许将其用于商业训练数据集。以下是修正后的数据来源优先级:

第一优先级:开放授权视频(可合法使用)

  • CC-BY 授权教学视频:
    • MIT OpenCourseWare(ocw.mit.edu):提供大量编程课程,授权明确
    • Coursera 部分课程(已明确 CC 授权的):需逐课核查授权协议
    • freeCodeCamp YouTube 频道:部分内容有明确开放授权
  • 企业官方教程(可主动协商授权):
    • Google Developers YouTube 频道(官方技术教程)
    • Microsoft Learn 视频(Azure/DevOps 教程)
    • 字节跳动/腾讯云官方技术视频
    • 这类来源需要与企业签署数据使用协议,但谈判成功率较高

第二优先级:自录制数据

  • 研究团队自己录制操作教程:100% 版权清晰,质量可控
  • 众包录制(MTurk 等平台):成本可控,授权明确,但需要制定规范化录制协议

放弃:普通 YouTube/Bilibili 视频

  • 版权风险过高,不建议作为正式数据集来源
  • 可用于原型验证和研究探索,但不能用于商业产品或公开发布的数据集

修正后的数据规模:

  • 可合法使用的视频:约 1-2 万个(而非原方案的 20 万个)
  • 这个规模在步骤依赖关系标注方面仍然有价值,但需要调整成本估算

采集 Pipeline

a. 字幕提取(Whisper ASR)

使用 OpenAI Whisper(large-v3)对视频音频进行转录,输出带时间戳的字幕片段。对于已有自动字幕的视频(如 YouTube CC),优先使用并与 Whisper 结果交叉验证。

b. 关键帧提取

采用双重检测策略:

  • 场景变化检测:基于帧间像素差和直方图差异,设定阈值提取场景切换帧。
  • 操作事件检测:针对技术操作视频特点,检测以下事件:光标大幅移动、新窗口/标签页出现、终端输出刷新、代码文件切换。

目标是每个「操作步骤」至少覆盖 3 个代表性关键帧:步骤开始帧、核心操作帧、步骤结束帧。

c. 步骤边界识别

通过字幕与视觉变化的联合判断识别步骤边界:

  • 字幕中出现明确的步骤信号词(“接下来”、“然后”、“第N步”、“now let’s”)
  • 视觉上发生场景级切换(如从编辑器切换到终端)
  • 两个信号同时出现时置信度最高

对于信号不明确的区域,记录为低置信度段,优先送人工审核。

🔄 [v2 改进]

步骤边界识别的具体技术方案(从「命名」升级为「给出方案」)

原方案只说了「通过字幕与视觉变化的联合判断识别步骤边界」,但没有给出具体技术路线。步骤边界识别是整个 pipeline 的核心难点,以下给出三种技术路线及其权衡:

方法 A:SRT 字幕 + 关键词检测(低成本,高误报)

  • 实现:正则匹配字幕中的步骤信号词(中文:「现在」「接下来」「第X步」「好的」;英文:「now」「next」「step」「alright」)
  • 成本:几乎零计算成本,可快速实现
  • 召回率:约 60%(大量隐式步骤切换没有语言信号)
  • 精确率:约 40%(大量误报:「好的」出现频率极高,不一定是步骤切换)
  • 适用:快速原型验证,初步分割

方法 B:视觉变化 + 字幕关键词联合(中等成本,中等效果)

  • 实现:
    1. 计算相邻帧的视觉差异(帧间 SSIM 或 embedding 距离)
    2. 检测「显著视觉变化」(SSIM < 0.7 或 embedding 距离 > 阈值)
    3. 要求:视觉变化 AND 字幕信号词同时出现(30 秒窗口内)才确认为步骤切换
  • 成本:需要 GPU 计算 embedding,约 $5000-10000(20 万视频)
  • 精确率提升至约 65%(联合条件减少误报)
  • 建议:作为主要方法

方法 C:专门训练边界检测模型(高成本,高质量)

  • 实现:收集 1000+ 人工标注视频(步骤边界精确标注),训练专门的边界检测序列模型
  • 成本:人工标注约 1000 视频 × $15/视频 = $15,000;模型训练约 $5,000
  • 精确率可达 85%+,是三种方法中最高的
  • 前提:需要先有方法 A 或 B 的初步结果作为「候选边界」,再由模型做二次判断

推荐执行策略(三阶段):

  1. 第一阶段:用方法 A 对全量视频做初步分割(快速,低成本)
  2. 第二阶段:用方法 B 对初步结果做过滤(提升精确率)
  3. 第三阶段:人工抽检 5% 样本,校准误报率,若整体精确率 < 60%,则启动方法 C

d. LMM 辅助标注操作意图

将每个步骤的关键帧序列 + 对应字幕文本,构造结构化 prompt 送入 GPT-4V 或 Claude 3.5 Sonnet,要求模型输出:

  • action_description:本步骤的表面操作描述(做了什么)
  • functional_intent:本步骤的功能意图(为了什么目的)
  • state_change:执行前后系统/环境状态的变化
  • prerequisites:执行本步骤需要哪些前提条件已满足

e. 依赖关系提取

在单视频内,基于 prerequisites 和 state_change 进行步骤间依赖推断:若步骤 B 的某个 prerequisite 与步骤 A 的某个 state_change 匹配,则建立 B → A 的依赖边。依赖图以有向无环图(DAG)形式存储。

数据格式示例

{
  "video_id": "yt_dQw4w9WgXcQ",
  "video_title": "Python 虚拟环境配置完整教程",
  "source": "youtube",
  "duration_sec": 742,
  "steps": [
    {
      "step_id": "step_001",
      "start_time": 12.4,
      "end_time": 38.7,
      "keyframes": [
        "frames/yt_dQw4w9WgXcQ/step_001_start.jpg",
        "frames/yt_dQw4w9WgXcQ/step_001_core.jpg",
        "frames/yt_dQw4w9WgXcQ/step_001_end.jpg"
      ],
      "transcript": "首先我们来安装 Python,打开终端输入 python3 --version 检查是否已安装",
      "action_description": "在终端执行 python3 --version 命令检查 Python 版本",
      "functional_intent": "确认系统中 Python 3 已正确安装,为后续创建虚拟环境做前提验证",
      "state_change": {
        "before": "未知系统 Python 安装状态",
        "after": "已确认 Python 3.11.x 可用"
      },
      "prerequisites": [],
      "confidence": 0.92
    },
    {
      "step_id": "step_002",
      "start_time": 39.1,
      "end_time": 67.3,
      "keyframes": [
        "frames/yt_dQw4w9WgXcQ/step_002_start.jpg",
        "frames/yt_dQw4w9WgXcQ/step_002_core.jpg"
      ],
      "transcript": "好,Python 已经安装好了,现在执行 python3 -m venv myenv 创建虚拟环境",
      "action_description": "执行 python3 -m venv myenv 创建名为 myenv 的虚拟环境",
      "functional_intent": "创建隔离的 Python 环境,避免全局包污染",
      "state_change": {
        "before": "无 myenv 目录",
        "after": "当前目录下生成 myenv/ 虚拟环境目录"
      },
      "prerequisites": ["Python 3 已安装且可从终端调用"],
      "confidence": 0.95
    }
  ],
  "dependency_graph": {
    "edges": [
      {
        "from": "step_002",
        "to": "step_001",
        "type": "requires_output",
        "reason": "step_002 的执行前提为 Python 3 可用,由 step_001 确认"
      }
    ]
  },
  "metadata": {
    "annotator": "gpt-4v-2024-11",
    "annotation_date": "2026-03-30",
    "human_verified": false,
    "quality_score": 0.88
  }
}

数据规模估算

粗略估算目标数据规模:

  • YouTube 技术教程类视频存量约 500 万条(2024 年估计),其中符合筛选条件(时长/分辨率/有解说)的约 10%,即 50 万条。
  • 每视频平均步骤数约 15 步,初始可提取步骤约 750 万步骤。
  • 经过质量筛选(低置信度过滤、重复去除、领域相关性过滤)保留率约 30%,最终约 225 万步骤,涵盖约 15 万视频。

考虑到 Bilibili 中文教程的加入以及终端录屏类内容,总步骤量目标设定在 300 万步骤级别,视频量约 20 万条,形成一个中等规模、高质量的专域数据集。

🔄 [v2 改进]

成本估算严重失实——详细分解纠正

原方案估算总成本约 $4-6 万美元,但这个数字严重低估了「步骤依赖关系标注」的人工成本。以下是逐项详细分解:

各环节成本分解(基于 20 万视频规模):

环节单价总量小计原方案估算差异
Whisper 转录$0.006/分钟20万视频 × 30分钟$36,000$5-10K≈同量级
关键帧提取GPU 算力-$5,000$1-2K接近
步骤边界识别(方法B)$0.02/视频(LLM辅助)200,000$4,000$3-5K接近
LMM 意图标注(开源模型)GPU 算力300万步骤$20,000$10-20K接近
依赖关系标注(人工)$10/小时,15分钟/视频200,000$500,000未单列致命低估
质量验证(专家抽审)$15/视频 × 5%10,000$150,000$10-15K10倍低估

修正后总成本:约 700,000−700,000 - 1,000,000(50-100 万美元)

关键说明:

  • 依赖关系标注是整个方案的核心价值所在,但也是成本最高的环节
  • 每个视频平均 15 个步骤,建立依赖图需要标注员理解每个步骤的前提条件,平均需要 15 分钟/视频(保守估计)
  • 以 $10/小时计算,20 万视频的依赖关系标注成本为 $500,000,占总成本的 70%

应对策略(成本控制):

方案一:缩小规模,聚焦质量

  • 目标规模:1 万视频(而非 20 万)
  • 依赖关系标注成本:$10/小时 × 15分钟 × 10,000 = $25,000
  • 总成本约 $50,000-70,000(接近原方案的 $4-6 万估算)
  • 代价:规模大幅缩减,但步骤依赖关系的质量更有保障

方案二:两阶段执行

  • 第一阶段:20 万视频,只做步骤边界 + 意图标注(无依赖关系),成本约 $65,000
  • 第二阶段:从中选取 5,000 个最高质量视频,做依赖关系标注,成本约 $12,500
  • 总成本约 $80,000,产出:20 万视频的步骤意图数据 + 5,000 视频的完整依赖图数据

修正结论: 如果预算在 $4-6 万,只能覆盖 1 万视频的完整标注,或 20 万视频的步骤意图标注(无依赖关系)。原方案声称的「20 万视频 + 完整依赖关系标注」需要约 10 倍于原估算的预算。

质量验证方法

  1. 自动一致性检验:对同一视频的不同 LMM 标注版本(GPT-4V vs Claude)计算语义相似度,差异过大的条目标记为需要人工复核。
  2. 人工抽样审核:随机抽取 5% 的步骤标注,由领域专家评分(1–5 分),目标平均分 ≥ 3.8。
  3. 依赖关系合理性验证:对依赖图进行拓扑排序检验(确保无环),并人工验证随机抽样的依赖边是否合理。
  4. 下游任务验证:以构建好的数据微调小规模基线模型,在步骤预测和依赖推断任务上评估数据有效性。

🔄 [v2 改进]

评估闭环:如何验证数据集对下游模型有效

原方案的「下游任务验证」只提了「步骤预测和依赖推断任务」,但没有说明具体的验证指标和对比基线。以下补充完整的评估闭环方案:

评测集构建(独立于训练数据):

  • 从合法授权来源(MIT OCW 等)选取 200 个测试视频,完全不进入训练集
  • 人工标注这 200 个视频的「步骤边界」「操作意图」和「依赖关系」作为 ground truth

评测任务设计:

任务输入期望输出评测指标
步骤边界检测视频帧序列 + 字幕步骤起止时间戳F1(IoU > 0.5)
操作意图预测步骤关键帧 + 字幕functional_intent 文本BERTScore
依赖关系预测步骤列表 + 意图描述依赖边集合(DAG)F1(边级别)
步骤前提推断目标步骤描述所需前提条件列表Recall@3

对比基线:

  • 无数据微调:直接用 GPT-4V / VideoLLaMA 2 在零样本下做推断
  • 通用视频数据微调:用 HowTo100M 微调同一模型
  • 本数据集微调:用本方案数据微调
  • 目标:本数据集微调 > 通用视频数据微调 > 无数据微调(各任务均成立)

关键验证点:

  • 依赖关系预测的 F1 提升 ≥ 15 个百分点(与通用数据相比),才能证明「依赖关系标注」这部分高成本投入是值得的
  • 如果提升 < 5 个百分点,需要重新评估是否值得继续进行依赖关系标注(成本最高的部分)

客观评价

真正有价值的地方

步骤依赖关系是当前数据集的绝对空白。COIN 等数据集有步骤边界,但没有任何步骤之间的逻辑联系;HowTo100M 有规模,但标注几乎是噪声。本方案若能落地,将是第一个在技术操作领域系统性标注步骤依赖图的多模态数据集,直接填补这一空缺。

另一个被低估的价值在于操作意图(functional intent)的抽象层次。现有数据只标注「做什么(what)」,本方案额外标注「为什么做(why)」和「做完状态如何变化(state change)」,这对于训练模型具备因果推理能力至关重要。

主要挑战

版权问题:YouTube/Bilibili 视频受版权保护,直接分发原始视频帧存在法律风险。可行的规避路径是只发布标注元数据(时间戳、步骤描述、依赖关系等),不发布原始帧,用户自行下载视频并重建数据集——这与 HowTo100M 的做法一致,但会增加数据集使用门槛。

标注一致性:LMM 对同一步骤的 functional_intent 描述可能措辞差异很大,即使语义相近。这会在下游任务中引入噪声,需要建立标准化词汇表(尤其对常见操作类型)并进行后处理归一化。

视频质量差异大:YouTube 技术教程质量参差不齐——有高清录屏配专业解说,也有 360p 画质配口音浓重的音频。低质量视频的 ASR 错误率显著上升,关键帧提取也更困难。需要在筛选阶段严格把关,代价是可用视频数量减少。

计算成本:对 20 万视频调用 GPT-4V/Claude API 进行标注,按每视频平均发送 15 步 × 3 帧 = 45 张图片估算,API 成本约为每视频 $0.5–1.5 美元,总成本在 $10–30 万美元量级。这对大多数学术团队来说是不可承受的。实际上更可行的路径是:用开源视觉语言模型(如 InternVL2、Qwen-VL)进行初始标注,仅对低置信度样本使用商业 API,可将成本压缩至 1/10。

现实可行性评估

环节自动化程度人力需求成本量级
视频爬取与筛选高(90%+)极少服务器+带宽,$1–3K
Whisper 字幕完全自动无GPU算力,$5–10K
关键帧提取高(85%+)低置信度人工复核CPU算力,$1–2K
步骤边界识别中(70%)边界模糊处需人工$3–5K(人工)
LMM 意图标注中高(用开源模型)抽样质检GPU算力,$10–20K
依赖关系提取中(60%)复杂依赖需人工$5–10K(人工)
质量验证部分自动专家抽审必须人工$10–15K(人工)

总估算:以开源 LMM 替代商业 API 为前提,构建 20 万视频规模的数据集,总成本约在 $4–6 万美元,工期约 6–9 个月(含迭代和质检)。对于有 GPU 集群的研究机构,成本可进一步压缩。

这个量级是可行的,但不是小项目。最务实的起步策略是先构建 1 万视频的种子集,验证 pipeline 各环节的自动化效果和标注质量,再决定是否扩展规模。

🔄 [v2 改进]

现实可行性评估修正(基于成本重新估算)

注意:上表的成本估算对「依赖关系提取(人工)」的估算严重偏低。详细分解见数据规模估算节。

修正后的可行性建议:

  • 如果预算 ≤ $10 万:选择「方案一:1 万视频完整标注」,可行
  • 如果预算 ≤ $20 万:选择「方案二:20 万视频步骤意图 + 5000 视频完整依赖图」,可行
  • 如果预算 ≤ $100 万:「20 万视频完整标注」技术上可行,但需要专职团队
  • 原方案「$4-6 万覆盖 20 万视频完整标注」:不可行

本文为工作进展记录(WIP),方案细节将随实施过程持续更新。

原始版本:video-tutorial-step-annotation-data