357 lines
39 KiB
Markdown
357 lines
39 KiB
Markdown
# Q1 特征提取结果
|
||
|
||
## 题面要求与完成范围
|
||
|
||
按题面第 2、3、5、6 页,Q1 首先要从附件 1 的原始 100 条视频建立可追溯的文本、语音、视觉特征,保持样本覆盖完整,并给出 100 条汇总表、至少一个文本—语音—视频帧对应样例、工具参数与复现信息。原始视频和标签没有被修改。
|
||
|
||
全量特征提取与对应性核验已经完成;随后也按 `video_id` 分组跑完了 M1–M4 的五折方法比较、重构探针与冻结情感探针。结果显示当前 M3/M4 训练目标会产生注意力塌缩,详见文末比较结果;因此没有宣称某个方法已经获得可靠的跨模态对齐。
|
||
|
||
## 数据覆盖审计
|
||
|
||
| 核验项 | 结果 |
|
||
| --- | ---: |
|
||
| 标签表样本 | 100 |
|
||
| 唯一 `(video_id, clip_id)` | 100 |
|
||
| 视频文件 | 100 |
|
||
| `video_id` 分组 | 37 |
|
||
| 音视频均可读取 | 100 |
|
||
| 重复、缺失、额外文件 | 0 |
|
||
| 标签极性不匹配 | 0 |
|
||
|
||
题面给出的片段时长范围下限为 2.648 秒。按解码视频帧时间统计,有两条原始视频短于该下限:`-mJ2ud6oKI8/6` 为 2.2356 秒,`-s9qJ7ATP7w/6` 为 2.4667 秒。两条均保留并正常提取,没有为满足区间而裁剪或删除。详见 [coverage_summary.json](outputs/audit/coverage_summary.json)。
|
||
|
||
## 提取结果
|
||
|
||
| 模态/特征 | 每位置维数 | 全部样本总长度 | 有效覆盖 |
|
||
| --- | ---: | ---: | ---: |
|
||
| 文本:BERT 词向量 | 768 | 1,932 个词 | 100/100 样本 |
|
||
| 音频:eGeMAPSv02 LLD | 25 | 77,261 帧 | 100/100 样本 |
|
||
| 视觉:DeiT-Tiny 帧 CLS 向量,5 fps | 192 | 3,948 帧 | 100/100 样本 |
|
||
| 补充视觉:MediaPipe 人脸 blendshape | 52 | 随人脸帧变化 | 87/100 样本检测到人脸 |
|
||
|
||
词级强制对齐共直接得到 1,920/1,932 个词的时间区间。另有 12 个词分布在 9 条样本中无法直接对齐;它们以单调的零宽度时间点插值,并在 `word_alignment_valid` 中标为 `false`。这些词的音频和视觉词级特征用最近的有效源帧回退,回退标志单独保存在 NPZ 中。
|
||
|
||
本次运行 100 条均无提取错误;13 条样本没有检测到人脸,但它们仍有有效的 DeiT 通用视觉帧嵌入。每条样本一个 NPZ,数值特征存为 float16,时间戳为 float32,掩码为 bool。文件中同时保留原始变长时间序列和按词级时间区间平均后的 Audio/Vision 特征,不做磁盘填充。
|
||
|
||
## 典型样本
|
||
|
||
样本 `-tPCytz4rww/12` 展示了 transcript 词序、CTC 强制对齐区间、eGeMAPS 时序特征,以及相同片段内的抽样视频帧。例图里的文本片段为 “and going to similar in, similar with bedrooms and bathrooms as well”。
|
||
|
||

|
||
|
||
## 产物与复现
|
||
|
||
- [100 条样本汇总表](outputs/q1_features/reports/sample_summary.csv)
|
||
- [100×3 样本—模态明细表](outputs/q1_features/reports/feature_summary_100x3.csv)
|
||
- [逐样本运行日志](outputs/q1_features/logs/samples.jsonl)
|
||
- [模型、版本、参数、哈希与运行命令](outputs/q1_features/reports/run_manifest.json)
|
||
- [100 个压缩特征文件](outputs/q1_features/features/)
|
||
|
||
100 个 NPZ 合计 9,261,634 字节;核心提取报告、日志与特征文件合计 10,460,565 字节。连同下面的轻量对比报告包仍低于题面 50 MB 上限;不要把完整训练检查点和全部逐样本对齐矩阵也放进提交包。
|
||
|
||
复现步骤(在 `deep_learning` 目录执行):
|
||
|
||
```bash
|
||
cd Q1
|
||
uv sync
|
||
uv run python -m q1.audit
|
||
uv run python -m q1.extract_features --output-dir outputs/q1_features
|
||
```
|
||
|
||
环境为 Python 3.14.7、PyTorch 2.14.0+cu130、torchvision 0.29.0,运行设备为 NVIDIA GeForce RTX 5070 Ti。具体依赖锁定在 [uv.lock](uv.lock),模型修订号、MediaPipe 资产 SHA-256、特征规则和运行参数记录在 `run_manifest.json`。
|
||
|
||
## M1–M4 方法比较
|
||
|
||
### 实验协议
|
||
|
||
- M1 使用 CTC 强制词时间;M2 把每条视频分成 50 个等长时间窗;M3 以文本顺序槽查询音频和视频;M4 使用 50 个共享潜在槽分别查询三个模态。
|
||
- M3/M4 采用相同的自监督目标:连续块跨模态重构、跨模态对比损失和时间单调性损失。情绪标签不进入对齐模型训练。
|
||
- 100 条样本按 37 个 `video_id` 分成 5 折;同一原始视频的片段不会跨训练/验证集。M3/M4 各用 3 个随机种子,所有特征归一化参数只由当前训练折估计。
|
||
- 在每折验证集上冻结对齐,再训练相同结构的检索投影、连续块重构和轻量情绪 Probe。情绪 Probe 使用五段时间池化后的正则化线性分类器/回归器,适合小样本诊断,不代表大型数据集上的最终模型。
|
||
|
||
### 主要发现
|
||
|
||
| 方法 | Audio 熵 ↓ | Vision 熵 ↓ | Audio 时间跨度比例 ↑ | Vision 时间跨度比例 ↑ | T→A R@1 ↑ | Audio 重构 MAE ↓ | 情绪宏 F1 ↑ | 情绪 Pearson ↑ |
|
||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
||
| M1 强制时间 | 0.358 | 0.021 | 0.894 | 0.896 | 0.0012 | 0.691 | 0.437 | 0.531 |
|
||
| M2 固定窗口 | 0.392 | 0.016 | 0.968 | 0.974 | 0.0014 | 0.662 | 0.343 | 0.508 |
|
||
| M3 文本锚定注意力 | 0.992 | 0.983 | -0.002 | -0.005 | 0.0197 | 0.384 | 0.438 | 0.546 |
|
||
| M4 共享潜轴 | 1.000 | 1.000 | 0.000 | 0.000 | 0.0071 | 0.378 | 0.414 | 0.507 |
|
||
|
||
时间跨度比例是每条样本“最后槽的期望时间减第一槽的期望时间”,再除以片段时长。接近 1 表示大致走过整段视频;接近 0 表示所有槽都落在同一时间附近。熵接近 1 表示注意力近似平均分布。检索使用训练折拟合的相同线性投影,正样本是同片段、同共享槽,因此只是表示一致性探针,不是人工对齐真值。
|
||
|
||
当前结果清楚暴露了学习型方法的问题:M3 的音频/视觉注意力接近均匀,时间跨度接近零;M4 的三种模态注意力几乎完全均匀。M4 的 MVR 虽然为 0,但这是因为平坦轨迹没有“向后走”;所以 MVR 必须与时间跨度和注意力熵一起看。重构误差更低也不能单独证明对齐更好,因为全局平均表示本身容易被重构。冻结情绪 Probe 的折间波动也较大,不能据此断言 M3 的细小优势稳定存在。
|
||
|
||
因此第一轮结论是:M1/M2 提供了可解释、覆盖完整的时间基线;v1 的 M3/M4 没有学到可信的细粒度跨模态对齐。没有人工事件时间标注,第一轮不报告 IoU/MATE,也不声称有直接对齐准确率。
|
||
|
||
### v2 对齐塌缩复查
|
||
|
||
按顺序只改变 M3/M4 的损失项,原始特征、提取器、M1/M2、五折 `video_id` 分组、三个随机种子和训练预算均保持不变。三阶段共训练 90 个 M3/M4 模型,使用 CUDA RTX 5070 Ti,完整运行耗时约 18 分钟。
|
||
|
||
| 阶段 | 新增约束 | 固定设置 |
|
||
| --- | --- | --- |
|
||
| v2-a | Span | 最小轨迹跨度 0.7,权重 5.0 |
|
||
| v2-b | Span + Diversity | 另加相隔至少 6 个槽的注意力行余弦相似度,权重 0.5 |
|
||
| v2-c | Span + Diversity + Band | 另加弱时间带约束,容许偏差 0.10,权重 10.0 |
|
||
|
||
所有阶段继续使用相同的重构、对比和单调性损失。M3 的时间带目标取文本词时间;M4 使用 50 个均匀槽中心。另记录 `C_row`,即不同槽位注意力行的平均余弦相似度;它越接近 1,槽位关注的位置越相似。
|
||
|
||
| 阶段/方法 | Audio 跨度 | Vision 跨度 | C_row Audio | C_row Vision | T→A R@1(±1 槽) | T→A 精确 R@1 | T→A MASE(槽) | Audio 重构增益 |
|
||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
||
| 固定 M1 | 0.894 | 0.896 | 0.000 | 0.028 | 0.067 | 0.025 | 16.28 | 0.012 |
|
||
| 固定 M2 | 0.968 | 0.974 | 0.000 | 0.016 | 0.077 | 0.028 | 16.00 | 0.016 |
|
||
| v2-a M3 | 0.025 | -0.014 | 0.847 | 0.979 | 0.175 | 0.074 | 14.14 | 0.036 |
|
||
| v2-b M3 | 0.030 | -0.016 | 0.777 | 0.961 | 0.191 | 0.083 | 13.59 | 0.060 |
|
||
| v2-c M3 | 0.030 | -0.017 | 0.784 | 0.964 | 0.185 | 0.080 | 13.55 | 0.057 |
|
||
| v2-a M4 | 0.001 | -0.002 | 0.994 | 0.999 | 0.060 | 0.024 | 17.94 | 0.002 |
|
||
| v2-b M4 | 0.002 | -0.001 | 0.983 | 1.000 | 0.061 | 0.025 | 17.90 | 0.005 |
|
||
| v2-c M4 | 0.005 | -0.001 | 0.965 | 0.999 | 0.069 | 0.029 | 15.09 | 0.010 |
|
||
|
||
跨度是验证样本上的平均“末槽期望时间减首槽期望时间”除以片段时长;负值表示两端略有倒退,仍属于未覆盖时间轴。检索用训练折拟合的投影,在每条留出片段自己的 50 个槽中找匹配位置;R@1 允许误差 ±1 槽,精确 R@1 要求同槽,MASE 是 top-1 的平均绝对槽位误差。随机猜测时 ±1 槽 R@1 约为 0.06。重构增益为 `MAE_shuffled - MAE_aligned`,正值表示保留跨模态槽位关系后误差下降。各均值汇总了折、种子和样本,样本量不应被当作独立视频数。
|
||
|
||
结果表明,Diversity 让 M3 的 Audio 注意力行有所分化,Audio 重构增益也从 v2-a 的 0.036 增至 v2-b 的 0.060;但 M3 Audio 时间跨度仍只有约 0.03,Vision 跨度接近零且 `C_row` 仍高。M4 的弱 Band 约束只带来有限改善,Audio/Vision 注意力仍接近塌缩,重构增益也很小。典型样本图同样显示 M3 Audio/Vision 近似水平轨迹,M4 三模态轨迹近乎平坦。因此这些阶段没有达到“沿时间移动的局部带状对齐”,也不足以证明 M3/M4 学到了可靠对齐;本轮不继续 RoPE、Gaussian Bias 或 latent 长度消融。下一步应先检查学习型注意力为何难以利用时间监督,并调整对齐目标或优化策略,再用相同探针复核。
|
||
|
||

|
||
|
||

|
||
|
||
### 文件与复现
|
||
|
||
- [对比总表](outputs/method_comparison/comparison_summary.csv)
|
||
- [逐样本对齐指标](outputs/method_comparison/alignment_metrics.csv) 与 [按方法汇总](outputs/method_comparison/alignment_summary.csv)
|
||
- [检索探针](outputs/method_comparison/retrieval_summary.csv)、[重构探针](outputs/method_comparison/reconstruction_summary.csv)、[情绪 Probe](outputs/method_comparison/emotion_summary.csv)
|
||
- [折分清单](outputs/method_comparison/splits.json)、[训练记录](outputs/method_comparison/training_summary.csv)、[运行清单](outputs/method_comparison/run_manifest.json)
|
||
- [典型样本对齐热图](outputs/method_comparison/typical_alignment_heatmaps.png) 与 [时间轨迹图](outputs/method_comparison/typical_alignment_trajectories.png)
|
||
- [v2 三阶段对比总表](outputs/alignment_v2/v2_c/comparison_summary.csv)、[v2-c 注意力指标](outputs/alignment_v2/v2_c/alignment_summary.csv)、[v2-c 检索摘要](outputs/alignment_v2/v2_c/retrieval_summary.csv) 与 [v2-c 重构摘要](outputs/alignment_v2/v2_c/reconstruction_summary.csv)
|
||
- [v2-c 典型样本热图](outputs/alignment_v2/v2_c/typical_alignment_heatmaps.png)、[v2-c 时间轨迹图](outputs/alignment_v2/v2_c/typical_alignment_trajectories.png)、[逐 epoch 训练记录](outputs/alignment_v2/v2_c/training_history.csv) 与 [运行日志](outputs/alignment_v2/experiment.log)
|
||
- [v2 轻量结果包](outputs/alignment_v2/report_bundle/README.md),约 4.6 MB;不含检查点和逐样本矩阵
|
||
|
||
复现命令:
|
||
|
||
```bash
|
||
cd Q1
|
||
uv sync
|
||
uv run python -m q1.compare_methods
|
||
uv run python -m q1.train_alignment_variants
|
||
uv run python -m q1.alignment_debug
|
||
uv run python -m q1.synthetic_alignment_sanity
|
||
uv run python -m q1.alignment_key_position_debug
|
||
uv run python -m q1.alignment_heldout_debug
|
||
uv run python -m q1.summarize_alignment_debug
|
||
```
|
||
|
||
本机的 GPU Triton 路径还需要系统 GCC 和 Python 开发头文件;Fedora WSL 可用 `sudo dnf install gcc python3-devel` 安装。完整方法比较目录约 119 MB,其中 30 个折/种子检查点约 53.5 MB;它们是本地研究复现材料,不应和必须提交的特征文件一起全部打包到 50 MB 附件中。可提交/分享的轻量结果包位于 [report_bundle](outputs/method_comparison/report_bundle/),约 1.18 MB;全量训练检查点和 800 个逐样本矩阵仍保存在其上一级目录。
|
||
|
||
v2 塌缩复查的完整材料位于 `outputs/alignment_v2/`,约 348 MB;其中检查点和 1,800 个逐样本矩阵只用于本地研究复现。分享时使用 [v2 report_bundle](outputs/alignment_v2/report_bundle/README.md),约 4.6 MB。完整比较运行清单在 [alignment_v2/run_manifest.json](outputs/alignment_v2/run_manifest.json)。
|
||
|
||
### M3/M4 可学习性诊断(D0–D5 与 D1-S)
|
||
|
||
v2 后先做小规模诊断,再决定是否增加位置编码或结构消融。本轮复用现有的 100 条特征,没有修改提取器、M1 或 M2;在 Fedora WSL 中通过 `uv` 使用 RTX 5070 Ti 运行,耗时 103.7 秒,环境为 Python 3.14.7、PyTorch 2.14.0+cu130。
|
||
|
||
| 编号 | 数据与目标 | M4 位置编码 | 目的 |
|
||
| --- | --- | --- | --- |
|
||
| D0 | 单样本 `-tPCytz4rww/12`,`5 × span + 10 × band`,1,000 步 | 无 | 检查时间损失是否能推动注意力 |
|
||
| D1 | 同一样本,仅 Gaussian target KL,1,000 步 | 无 / 固定正弦位置编码 | 检查直接注意力监督与槽位对称性 |
|
||
| D1-S | 只用合成时间输入 `[t, t², 1]`,Gaussian target KL,1,000 步 | M4 无 PE / 有 PE | 极简验证注意力实现能否拟合已知时间带 |
|
||
| D2 | 全部 100 条,仅 Gaussian target KL,500 步 | 固定正弦位置编码 | 检查全数据下直接时间目标是否可优化 |
|
||
| D3 | 全部 100 条,Gaussian KL + 遮挡重构 + 跨模态对比,500 步 | 固定正弦位置编码 | 检查内容损失是否干扰时间监督 |
|
||
| D4 | 单样本 Gaussian KL,1,000 步;对照显式时间身份 | M4 保留 absolute PE | 检查真实特征加入时间码后能否形成局部带 |
|
||
| D5 | 按 `video_id` 分组 fold 1:80 条训练、20 条留出,纯 Gaussian KL,500 步 | 对照无时间码 / 有时间码 | 检查时间码能否迁移到未见原视频 |
|
||
|
||
Gaussian target 是根据时间戳构造的弱时间先验,归一化时间上的 `sigma=0.10`;它**不是人工对齐真值**。D0/D1 是单样本过拟合诊断;D2/D3 在相同 100 条数据上训练并评价、每种方法仅一个随机种子,因此只反映优化情况,不表示泛化表现。每 20 步记录损失分量以及注意力 Q/K 投影和 M4 latent slots 的梯度。
|
||
|
||
| 诊断 | 结果 |
|
||
| --- | --- |
|
||
| D0 时间损失 | M3/M4 的最终 span loss 均为 0;band loss 分别为 `1.28e-5`、`7.10e-5`。损失对 Q/K 有梯度,M4 slots 也有非零梯度。 |
|
||
| D1 真实特征的逐模态 KL | M3:Audio `0.5254`,Vision `0.0001`;M4 无 PE:Text/Audio/Vision `0.000009/0.5496/0.000075`;M4 有 PE:`0.000026/0.5452/0.000065`。总体均值掩盖了 Audio 目标拟合失败,PE 几乎没有改善 Audio。 |
|
||
| D1-S 合成时间输入 | M3 Audio/Vision KL `0.000098/0.000103`、轨迹跨度 `0.836/0.840`;M4 无 PE 的三模态 KL 均约 `0.000025–0.000032`,有 PE 约 `0.000024–0.000035`。轨迹跨度约 `0.835–0.845`,中心时间误差约 `0.012–0.014`。 |
|
||
| D2 全量训练最终 KL | M3 `0.5194`;M4 `0.6222`。Q/K 梯度非零,M4 slots 梯度也非零。 |
|
||
| D3 最终损失 | M3:total `2.3617`、align KL `0.8575`、reconstruction `0.0652`、contrastive `1.4390`。M4:total `2.5226`、align KL `0.7414`、reconstruction `0.0345`、contrastive `1.7467`。Q/K 与 M4 slots 梯度非零。 |
|
||
| D4 单样本时间码 | Audio KL:M3 `0.5254 → 0.0012`,M4 `0.5452 → 0.0011`;Audio 轨迹跨度:M3 `0.426 → 0.803`,M4 `0.439 → 0.824`。两者 Vision KL 均低于 `0.00013`。 |
|
||
| D5 留出 20 条、6 个未见 video_id | M4 时间码版 Audio/Vision KL `0.0035/0.0135`、跨度 `0.814/0.822`、中心误差 `0.017/0.017`;无时间码版 KL `0.994/1.359`、跨度 `0.010/-0.077`。M3 时间码版有改善,但留出 KL 仍为 `0.491/0.479`、跨度 `0.716/0.712`、中心误差约 `0.09`。 |
|
||
|
||
KL 的取平均模态数不同:M3 只对 Audio/Vision 计算 Gaussian target,M4 对 Text/Audio/Vision 都计算。因此 D1–D3 的 KL 数值用于看各自能否下降,不能直接作为 M3 对 M4 的胜负排名;D1 更应看逐模态值,而不是整体均值。
|
||
|
||
D1-S 使用实际 M3/M4 注意力层,但输入不含真实内容,只含合成时间坐标。它把 Gaussian 时间带拟合到约 `1e-4` KL,说明这套注意力计算和优化在输入携带时间位置时可以学出局部带状结构。结合 D1 真实特征上的 Audio 失败,问题更可能在真实 Audio 表示/时间线索与注意力目标的衔接,而非完全断开的 Q/K 梯度。代码检查也确认当前真实 M3/M4 注意力把投影后的源特征直接作为 key/value,没有显式把源时间戳编码进 key;这使“Audio key 缺少足够时间身份”成为优先验证的假设,但还不是已证实的唯一原因。
|
||
|
||
D4 为 source key 加固定 Fourier 时间码,value 保留投影后的真实特征;M3 query 同时加文本词时间中心码,M4 query 保留 absolute PE 并加对应网格时间码。真实单样本上两者都形成局部带。首次 D5 只跑了 fold 1:训练集 80 条、31 个 `video_id`,留出集 20 条、6 个 `video_id`,两侧无组重叠;归一化参数只用训练集拟合。该折支持 M4 的 Audio/Vision 时间带可迁移到未见视频;M3 优于无时间码基线,但仍有明显泛化差距。M4 Text 分支也仍弱,留出平均 Gaussian KL 为 `0.477`。后续新增的五折 D5 汇总见“Q1-Correspondence Evaluation”。D5 仍只有一个训练随机种子,Gaussian target 又来自源时间戳,因此这不是人工对齐准确率或多种子稳定性结论。
|
||
|
||
汇总 100 条样本的逐样本诊断,D2 的 M3 Audio 注意力仍较分散(归一化熵 `0.965`,平均轨迹跨度 `0.152`);Vision 更随时间变化(熵 `0.781`,跨度 `0.601`),但热图仍未清晰贴合目标。D2 的 M4 Audio 几乎均匀(熵 `0.997`,跨度 `0.011`),Vision 时间覆盖也有限(熵 `0.937`,跨度 `0.199`)。D3 加入重构和对比损失后,Audio 塌缩更明显:M3 熵/跨度为 `0.995/0.016`,M4 为 `0.999/0.002`;M4 Vision 跨度也从 D2 的 `0.199` 降至 `0.061`。因此重构误差降低不能单独视为对齐改善。
|
||
|
||
这组诊断排除了“注意力计算图完全断开或没有梯度”这一简单解释:D0 时间损失可优化,D1-S 可拟合合成时间带,全数据训练时 Q/K(以及 M4 slots)也有非零梯度。D4/D5 显示显式时间身份能解决 M4 Audio/Vision 的塌缩,但 M3 和 M4 Text 还未达到同样水平。后续优先检查 M3 文本查询时间身份和 M4 Text 分支,再考虑其他结构;暂不恢复大规模 RoPE 或 latent 长度扫参。可以先在其余 grouped folds 上复核 M4 音视频,再单独改进 M3/Text 时间条件化。
|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||
诊断产物见 [逐方法汇总指标](outputs/alignment_debug/metric_summary.csv)、[训练及梯度汇总](outputs/alignment_debug/debug_summary.csv)、[运行清单](outputs/alignment_debug/run_manifest.json)、[合成控制指标](outputs/alignment_debug/synthetic/metrics.csv)、[D4 时间码指标](outputs/alignment_debug/source_time/per_sample_metrics.csv)、[D5 留出汇总](outputs/alignment_debug/heldout/heldout_summary.csv) 和 [D5 运行清单](outputs/alignment_debug/heldout/run_manifest.json)。可分享的轻量结果包在 [report_bundle](outputs/alignment_debug/report_bundle/README.md);逐方法训练历史、指标、热图、轨迹及检查点保存在 `outputs/alignment_debug/`。
|
||
|
||
### Q1-Correspondence Evaluation:同槽与时间错位
|
||
|
||
为区分“注意力找到了时间”与“同一槽中的模态内容确实可匹配”,新增冻结特征上的对应性探针。M1、M2、M3、M4 共六个设置(M3/M4 各含有/无 source-time code)都使用同一套评估。每个方法的线性投影只在训练折上用同一片段内的同槽正样本和错槽负样本训练;再在完全留出的 `video_id` 上评价。投影维度为 64,训练 40 个 epoch,不使用情绪标签,也不按留出分数挑选模型。M3/M4 的 D5 时间定位模型在 5 个既有分组折上各训练 500 步、随机种子 42;每折 80 条训练片段和 20 条留出片段,100 条留出预测合计覆盖 37 个 `video_id`。
|
||
|
||
三项核心测量为:
|
||
|
||
1. **时间偏移曲线**:计算 `sim(z_i^m, z_(i+Δ)^n)`,`Δ=-10…10`;若同槽内容关系具有迁移性,曲线应在零偏移附近出现峰。
|
||
2. **片段内时序检索**:每个查询只能在同一留出片段的 50 个槽中检索,报告精确 R@1、±1 槽 R@1 和 MASE。
|
||
3. **匹配/错位 AUC**:正样本为同槽配对,负样本来自同一片段且 `|i-j|>2` 的错槽配对。AUC `0.5` 表示无法区分。表中置信区间以 `video_id` 为单位做 2,000 次 bootstrap,避免把同视频片段或时间槽当成独立样本。
|
||
|
||
| 冻结表示 | T–A AUC(95% CI) | T–V AUC | A–V AUC | T→A 精确 R@1 | T→A ±1 R@1 | T→A MASE(槽) |
|
||
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
||
| M1 强制时间 | 0.524 [0.510, 0.538] | 0.499 | 0.499 | 0.028 | 0.075 | 16.35 |
|
||
| M2 固定窗口 | 0.531 [0.518, 0.545] | 0.499 | 0.503 | 0.029 | 0.078 | 15.95 |
|
||
| M3 无时间码 | **0.728 [0.706, 0.751]** | 0.531 | 0.512 | **0.135** | **0.275** | **9.94** |
|
||
| M3 有时间码 | 0.542 [0.527, 0.557] | 0.500 | 0.505 | 0.036 | 0.088 | 16.60 |
|
||
| M4 无时间码 | 0.621 [0.602, 0.641] | 0.560 | 0.541 | 0.046 | 0.114 | 11.21 |
|
||
| M4 有时间码 | 0.546 [0.517, 0.573] | 0.490 | 0.500 | 0.029 | 0.076 | 17.11 |
|
||
|
||
50 槽下,随机检索参考值为精确 R@1 `0.020`、±1 R@1 `0.059`、MASE `16.66`。最清晰的偏移曲线峰出现在 **M3 无时间码的 T–A**:同槽相似度高于错开位置,T→A 检索也优于随机参考。M4 无时间码在三组配对上都有高于机会水平的 AUC,但效应较小;M1/M2 的 T–A 也有较弱的同槽信号。M3/M4 有时间码的结果没有显示同等强度的内容匹配,尤其 M4 有时间码的 T–V 与 A–V 接近机会水平。
|
||
|
||
这个结果必须和时间定位指标一起读。下表是五折 D5 验证片段按 `video_id` 宏平均的时间跨度;置信区间也按原视频分组。KL 越低越符合弱 Gaussian 时间目标。
|
||
|
||
| D5 变体 | Audio 跨度(95% CI) | Vision 跨度(95% CI) | Audio KL | Vision KL |
|
||
| --- | ---: | ---: | ---: | ---: |
|
||
| M3 无时间码 | 0.007 [-0.005, 0.018] | -0.052 [-0.092, -0.017] | 1.270 | 1.931 |
|
||
| M3 有时间码 | 0.708 [0.664, 0.738] | 0.710 [0.678, 0.737] | 0.618 | 0.592 |
|
||
| M4 无时间码 | 0.006 [0.001, 0.010] | -0.068 [-0.103, -0.033] | 1.013 | 1.550 |
|
||
| M4 有时间码 | 0.816 [0.815, 0.817] | 0.822 [0.819, 0.824] | 0.004 | 0.022 |
|
||
|
||
M4 有时间码的 Audio/Vision 时间带清晰,但其 Text 分支 Gaussian KL 仍为 `0.608`,T–A/T–V/A–V 内容对应性也弱。反过来,M3 无时间码的 Audio/Vision 时间轴没有覆盖整段片段,却在 T–A 匹配探针上表现最好。M4 无时间码的 Audio/Vision 轨迹同样塌缩,但三组 AUC 均有一定高于机会水平的统计信号。也就是说,**时间定位与跨模态可匹配性确实是两件不同的事**:零偏移匹配不等于整段视频已经正确对齐;时间带漂亮也不保证槽内内容可匹配。
|
||
|
||
因此目前最稳妥的结论是:M3 无时间码的文本—音频表示具有可迁移的同槽可匹配性,但它没有形成完整时间覆盖;M4 有时间码建立了更好的 Audio/Vision 时间定位,却还没有证明三模态内容对应;M4 无时间码的内容探针结果值得跟进,但其时间轨迹塌缩,不能称为完整时序对齐。投影头本身使用了训练视频的同槽标签,所以这些结果是“冻结表示可被简单探针匹配”的证据,不是无监督模型独立发现的真值,也不证明模态间语义相同。还需要多随机种子和人工事件标注确认。
|
||
|
||

|
||
|
||
逐片段结果、视频组 bootstrap 汇总、偏移曲线数据、五折 D5 时间定位汇总、探针训练记录、探针检查点和运行清单分别保存在 [correspondence_clip_metrics.csv](outputs/correspondence_eval/correspondence_clip_metrics.csv)、[metric_summary.csv](outputs/correspondence_eval/metric_summary.csv)、[shift_curve_summary.csv](outputs/correspondence_eval/shift_curve_summary.csv)、[time_localization_summary.csv](outputs/correspondence_eval/time_localization_summary.csv)、[probe_training_history.csv](outputs/correspondence_eval/probe_training_history.csv)、[probe_checkpoints.pt](outputs/correspondence_eval/probe_checkpoints.pt) 和 [run_manifest.json](outputs/correspondence_eval/run_manifest.json)。
|
||
|
||
完整复现(Fedora WSL,Python 环境由 `uv` 管理):
|
||
|
||
```bash
|
||
cd Q1
|
||
uv run python -m q1.alignment_heldout_debug --device cuda --seed 42 --fold 1 --output-dir outputs/alignment_debug/heldout
|
||
uv run python -m q1.alignment_heldout_debug --device cuda --seed 42 --fold 2 --output-dir outputs/alignment_debug/heldout/fold_02
|
||
uv run python -m q1.alignment_heldout_debug --device cuda --seed 42 --fold 3 --output-dir outputs/alignment_debug/heldout/fold_03
|
||
uv run python -m q1.alignment_heldout_debug --device cuda --seed 42 --fold 4 --output-dir outputs/alignment_debug/heldout/fold_04
|
||
uv run python -m q1.alignment_heldout_debug --device cuda --seed 42 --fold 5 --output-dir outputs/alignment_debug/heldout/fold_05
|
||
uv run python -m q1.correspondence_eval --device cuda --epochs 40 --seed 42
|
||
```
|
||
|
||
### M4 Shared Latent Timeline:结构与功能复核
|
||
|
||
M4 的判断不再以三张注意力图是否像对角线为依据,而分三层复核:先比较同一模态中 latent slots 的注意力相似度 (G^m=\hat A^m\hat A^{mT}),再由 (C^{m\to n}=\operatorname{ColNorm}(A^m)^T A^n) 生成模态到模态的转移图,最后用只看聚合内容的对应探针、内容打乱和错位重构检查这些关系是否有功能。此轮复用了五折 D5 `M4_sourceTime` 检查点,没有重新训练 M4 对齐模型。内容对应投影与小型重构器只在各折训练 video_id 上训练,再在留出组上打分;不使用情绪标签。全部 100 个片段各作为一次留出样本,分组覆盖 37 个 video_id。
|
||
|
||
结构指标按 video_id 做宏平均;95% 区间使用 2,000 次视频组 bootstrap。`near_similarity` 按定义包含自身对角线;`near_similarity_offdiag` 和 `d_self_offdiag` 排除自身,以免自相似度 1 掩盖邻近 slot 之间的结构。
|
||
|
||
| 模态 | 近邻相似(排除自身)↑ | 远邻相似 ↓ | (D_{self})(排除自身)↑ | Gram 目标误差 ↓ | 远槽泄漏 ↓ |
|
||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||
| Text | 0.985 | 0.122 | 0.863 | 0.733 | 0.192 |
|
||
| Audio | 0.983 | 0.069 | 0.914 | 0.544 | 0.126 |
|
||
| Vision | 0.983 | 0.073 | 0.910 | 0.543 | 0.133 |
|
||
|
||
三种模态的 Gram 矩阵都有清晰的局部带:相邻 slots 会看相似区域,远距离 slots 的相似度明显更低。这说明 latent timeline 在各模态内部形成了平滑的时间结构;Text 的远槽相似和 Gram 目标误差仍高于 Audio/Vision。
|
||
|
||
| Pairwise 方向 | 物理时间 MAE ↓ | 时间相关 ↑ |
|
||
| --- | ---: | ---: |
|
||
| Text → Audio | 0.0841 | 0.928 |
|
||
| Text → Vision | 0.0843 | 0.928 |
|
||
| Audio → Vision | 0.0248 | 0.996 |
|
||
|
||
时间 MAE 使用归一化片段时间,描述由 pairwise map 得到的期望时间是否接近;它不是语义或事件级对齐准确率。完整六个方向见 [pairwise_summary.csv](outputs/m4_shared_latent_eval/pairwise_summary.csv)。回环到 band target 的相对误差分别为 Text–Audio–Text `0.865`、Text–Vision–Text `0.864`、Audio–Vision–Audio `0.719`;对应回环时间 MAE 为 `0.096`、`0.099`、`0.050`。Triangle (T\to A\to V) 与 (T\to V) 的相对 Frobenius 残差为 `0.226`。所以时间轨迹较一致,但 cycle 回环还没有恢复到期望的局部时间带,pairwise 结构尚未完全自洽。
|
||
|
||
功能验证的结果进一步收紧了结论。Content-only probe 输入仅为 M4 的注意力加权 Value 表示;不把 latent query、位置向量或 slot 编号拼入 probe。需要注意,source-time code 仍会影响注意力权重 (A^m),所以时间信息可能通过“选中了哪些 Value”间接保留;内容 shuffle 用来检验槽内内容顺序是否贡献了可匹配信号。探针使用训练折的同槽正例训练,留出时的负例是同片段中相隔超过 2 槽的位置。
|
||
|
||
| 配对 | 匹配/错位 AUC(95% CI) | 左到右精确 R@1 | ±1 槽 R@1 | MASE(槽) |
|
||
| --- | ---: | ---: | ---: | ---: |
|
||
| Text → Audio | **0.616 [0.583, 0.650]** | 0.037 | 0.108 | 13.64 |
|
||
| Text → Vision | 0.504 [0.494, 0.514] | 0.025 | 0.069 | 17.83 |
|
||
| Audio → Vision | 0.513 [0.500, 0.530] | 0.024 | 0.062 | 17.66 |
|
||
|
||
50 槽随机检索的参考值为精确 R@1 `0.020`、±1 R@1 `0.059`、MASE `16.66`。Text–Audio 的同槽相似曲线在零偏移处达到峰值,AUC 也高于机会水平;打乱槽内内容后 AUC 从 `0.616` 降至 `0.500`,说明这项有限信号依赖实际内容顺序。Text–Vision 与 Audio–Vision 的 AUC 均接近 `0.5`,打乱前后没有实质差别。因此内容层证据只支持较弱的 Text–Audio 对应,没有支持完整三模态内容对齐。
|
||
|
||
Aligned-vs-shifted reconstruction 的目标是另一个模态的 M4 聚合内容向量,而不是原始波形或视频像素;每次只将一个输入伙伴错开,且比较相同目标槽。下表为绝对位移 10 槽时 `MAE_shifted - MAE_aligned` 的估计和视频组 95% 区间:
|
||
|
||
| 重构目标 | 增益 (G(10))(95% CI) |
|
||
| --- | ---: |
|
||
| Audio | 0.000049 [-0.000150, 0.000260] |
|
||
| Vision | 0.000176 [-0.000229, 0.000624] |
|
||
| Text | 0.000675 [-0.000249, 0.001793] |
|
||
|
||
三个区间都包含 0;在 `|Δ|=1,2,5` 时同样没有排除 0。错位越远时 Text/Vision 目标的增益均值略有上升,但这项探针尚未给出稳定的正向重构证据。
|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||

|
||
|
||
**当前结论:** M4 有明显的 latent 自身时间结构,且 Audio–Vision pair map 在物理时间上接近一致;这与 D5 的 source-time 先验结果相符。可是 cycle band 误差仍大,内容对应主要只在 Text–Audio 上表现为中等信号,Text–Vision/Audio–Vision 接近机会水平,错位重构增益的区间包含 0。由此不能写成“M4 已学到可信的三模态共享语义对齐”。更稳妥的表述是:它建立了时间定位和部分 Text–Audio 内容可匹配性,但现有结果尚未证明完整、可靠的三模态跨模态对应。source-time D5 检查点只用一个对齐训练种子,而且训练中的 Gaussian 时间目标来自时间戳;本轮 bootstrap 只描述视频组采样不确定性,不覆盖训练种子不确定性。人工事件 IoU/中心误差仍需先标注 10–15 条视频的事件区间。
|
||
|
||
逐片段数据、汇总、探针训练记录和权重,以及可直接复查的典型样本矩阵保存在 [outputs/m4_shared_latent_eval](outputs/m4_shared_latent_eval/)。关键文件包括 [self_structure_summary.csv](outputs/m4_shared_latent_eval/self_structure_summary.csv)、[pairwise_summary.csv](outputs/m4_shared_latent_eval/pairwise_summary.csv)、[cycle_triangle_summary.csv](outputs/m4_shared_latent_eval/cycle_triangle_summary.csv)、[content_only_metrics_summary.csv](outputs/m4_shared_latent_eval/content_only_metrics_summary.csv)、[content_shuffle_summary.csv](outputs/m4_shared_latent_eval/content_shuffle_summary.csv)、[shifted_reconstruction_summary.csv](outputs/m4_shared_latent_eval/shifted_reconstruction_summary.csv) 和 [run_manifest.json](outputs/m4_shared_latent_eval/run_manifest.json)。
|
||
|
||
Fedora WSL 复现(复用已有五折 D5 检查点):
|
||
|
||
```bash
|
||
cd Q1
|
||
uv run python -m q1.m4_shared_latent_eval --device cuda --seed 42 --probe-epochs 40 --decoder-epochs 40 --shuffle-repeats 20
|
||
```
|
||
|
||
### TSFA:冻结时间候选范围与局部内容选择
|
||
|
||
在上述 D5/M4 结果之上,本轮验证“先用时间确定候选范围,再在范围内按内容选择”能否同时改善时间定位和跨模态内容对应。五折 `M4_sourceTime` 检查点保持冻结;每个共享槽的 M4 注意力期望时间作为候选中心,主方案在归一化时间 `±0.10` 的范围内,用文本内容查询音频和视觉内容。局部语义分支只用训练折的同槽正例和相隔 `±2、±3、±5` 槽的难负例训练 40 个 epoch。它的 Q/K 不显式接收源时间码、位置编码或槽编号;M4 选中的内容仍可能间接携带时间。情绪标签没有进入训练。原有 BERT 文本、eGeMAPS 音频和 DeiT 视觉特征均保持不变。
|
||
|
||
比较包括 M3 无/有时间码、冻结 M4、有时间候选的 TSFA 主方案、乘以 M4 时间注意力的变体、20 次同宽度随机候选窗口,以及允许搜索全部源位置的全局变体。全部方法复用相同的 5 个 `video_id` 分组折、训练折归一化、每折相同的评估探针随机种子。100 条样本各作一次留出预测,涉及 37 个原视频。表中 AUC 是 Text–Audio、Text–Vision、Audio–Vision 三组“同槽对错槽”AUC 的逐样本平均,再按 `video_id` 宏平均;`0.5` 为机会水平。时间 MAE 是三个正向跨模态映射在归一化视频时间上的平均,越低越好。
|
||
|
||
| 方法 | 模型输出 AUC ↑ | 统一原始特征 AUC ↑ | 时间 MAE ↓ |
|
||
| --- | ---: | ---: | ---: |
|
||
| M3 无时间码 | 0.708 | 0.592 | 0.251 |
|
||
| M3 有时间码 | 0.565 | 0.516 | 0.099 |
|
||
| M4 有时间码 | 0.544 | 0.517 | **0.064** |
|
||
| TSFA 主方案 | 0.627 | 0.553 | 0.070 |
|
||
| TSFA 乘时间权重 | 0.627 | 0.551 | 0.068 |
|
||
| TSFA 随机窗口 | 0.632 | 0.571 | 0.251 |
|
||
| TSFA 全局候选 | **0.685** | **0.608** | 0.243 |
|
||
|
||
时间轴诊断进一步说明候选范围的作用。MVR 使用相邻槽期望时间倒退超过 `0.02` 的比例;跨度是末槽减首槽的归一化时间。熵只作分布诊断,不能单独排名。
|
||
|
||
| 方法 | Audio MVR ↓ | Vision MVR ↓ | Audio 跨度 ↑ | Vision 跨度 ↑ | Audio 熵 | Vision 熵 |
|
||
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
||
| M4 有时间码 | 0.0000 | 0.0000 | 0.816 | 0.822 | 0.846 | 0.720 |
|
||
| TSFA 主方案 | 0.0025 | 0.0004 | 0.796 | 0.821 | 0.538 | 0.510 |
|
||
| TSFA 随机窗口 | 0.4650 | 0.4745 | -0.017 | 0.010 | 0.533 | 0.500 |
|
||
| TSFA 全局候选 | 0.1406 | 0.0645 | 0.011 | 0.008 | 0.701 | 0.902 |
|
||
|
||
主方案的注意力更集中,且仍覆盖约 `99.9%` 的有效源位置;因此时间 MAE 的对照没有靠删除大批难对齐源位置取得优势。随机窗口同样能给出较低的熵,却有严重倒序和近零跨度,再次说明熵低不等于对齐正确。
|
||
|
||
“模型输出”沿用各方法自己的 Value/输出投影;“统一原始特征”把同一折中归一化后的 BERT、音频和 DeiT 源特征分别乘以各方法的对齐矩阵,再训练相同的线性对应探针。后者隔离了“选中哪些源位置”的贡献,更适合判断对齐矩阵本身。两者都只用训练视频拟合探针,留出视频打分。M3 无时间码的模型输出 Text–Audio AUC 达 `0.956`,统一原始特征后为 `0.725`;这说明原生注意力输出的查询相关变换也对它的高分有贡献,不能把原生输出 AUC 全部解释为正确的时间选择。
|
||
|
||
成对比较同一留出样本,并按 `video_id` 做 2,000 次 bootstrap:TSFA 主方案相对 M4 的统一原始特征 AUC 增加 `0.035`,95% 区间 `[0.023, 0.047]`;时间 MAE 增加 `0.0059`,区间 `[0.0053, 0.0065]`,即时间精度略有下降。它的统一原始特征 Text–Audio AUC 为 `0.639`,M4 为 `0.539`;Text–Vision `0.507`、Audio–Vision `0.511` 仍接近机会水平。原生输出的 Text–Audio AUC 为 `0.844`,M4 为 `0.616`;独立打乱留出片段内各模态槽顺序后,TSFA Text–Audio AUC 降至 `0.500`,说明该探针确实依赖槽顺序。
|
||
|
||
随机窗口相对主方案的统一原始特征 AUC 高 `0.018`,全局候选高 `0.055`;同时二者的时间 MAE 分别升至 `0.251` 和 `0.243`。随机窗口使用相同 `δ`,但边界截断使 Audio 平均候选比例为 `19.3%`,主方案为 `20.3%`;这一对照并未做到逐槽候选数量完全相等。因此局部 M4 候选范围的作用主要是**约束时间位置**,现有实验没有证明它能提高内容 AUC。乘时间权重比硬候选主方案把时间 MAE 从 `0.070` 降至 `0.068`,但统一原始特征 AUC 从 `0.553` 降至 `0.551`。这是一条可描述的时间—内容权衡,不宜合成为一个总分。
|
||
|
||
错位重构也只给出有限支持:错开 10 槽时,TSFA 的 Vision 内容重构误差增加 `0.00148`,95% 区间 `[0.00050, 0.00240]`;Audio 和 Text 目标的对应区间都包含 0。重构对象是聚合特征,不是波形或像素。当前最稳妥的判断是:**TSFA 比冻结 M4 保留了更多可匹配的 Text–Audio 内容,且维持了大部分时间结构;它尚未证明可靠的三模态语义对齐。**训练折的同槽标签来自时间/槽约定,M4 的时间先验来自时间戳,均不是人工事件真值;直接的事件 IoU/MATE 仍需人工标注。此轮只有一个对齐训练种子,视频组区间不包含训练种子波动。基于这轮七方法结果,暂不把 `δ`、RoPE 或 latent 长度消融写成已完成实验。
|
||
|
||

|
||
|
||

|
||
|
||
完整的逐片段指标、训练记录和探针检查点位于 [outputs/tsfa](outputs/tsfa/);可分享的汇总与图在 [report_bundle](outputs/tsfa/report_bundle/)。重点文件为 [七方法主表](outputs/tsfa/ablation_summary.csv)、[统一原始特征主表](outputs/tsfa/alignment_only_ablation_summary.csv)、[统一特征成对差值](outputs/tsfa/alignment_only_paired_contrasts.csv)、[三组配对和双向检索](outputs/tsfa/alignment_only_content_summary.csv)、[MVR/熵/覆盖率汇总](outputs/tsfa/tsfa_temporal_diagnostics_summary.csv)、[随机窗口统计](outputs/tsfa/candidate_window_stats.csv)、[运行清单](outputs/tsfa/run_manifest.json) 与 [统一特征运行清单](outputs/tsfa/alignment_only_run_manifest.json)。
|
||
|
||
Fedora WSL 复现(在 `deep_learning/Q1` 中执行,Python 环境由 `uv` 管理):
|
||
|
||
```bash
|
||
uv run python -m q1.tsfa_experiment --device cuda --seed 42
|
||
uv run python -m q1.tsfa_alignment_only_eval --device cuda --seed 42
|
||
```
|