Files
xiaobailing-turn-detection/experiments/maai-ch-kyoto/Mimi评测说明.md
T

88 lines
9.0 KiB
Markdown
Raw 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.
# MaAI Mimi ch_kyoto:标准版与降噪版双声道评测
## 当前主评测口径:流式场景(2026-10-28)
本场景以 VAP 连续流式推理为主:从录音开始持续维护编码器和 VAP 状态,在每个当前标注 `decision_ms`,取可用时间不晚于它的最后一个分数。判断点不重置模型、不插值、不使用未来音频。分数为 `1 - p_now[user]`,预测规则为严格 `> 0.5`;这是活动预测到可接话的映射,不是原生校准 EOT 概率。
前端圆点、悬停分数和准确率统一使用这份连续输出。时间戳包括流式重采样缓冲;没有输出或分数年龄超过两倍标称更新间隔时记为不可用,单独计数,不填 0。保存新增或移动的标注后,用已有真实连续记录重新取点,无需重跑模型:
```bash
cd experiments/maai-ch-kyoto
uv run --locked python evaluate_streaming.py all
```
| 配置 | 当前主结果目录 | 正确数 / 有效点 | 准确率 | FP / FN |
| --- | --- | --- | --- | --- |
| CPC 降噪双声道 | `results/streaming/cpc-stereo/` | 30 / 44 | 68.18% | 7 / 7 |
| CPC 降噪机器人静音 | `results/streaming/cpc-user-only/` | 24 / 44 | 54.55% | 18 / 2 |
| Mimi 标准双声道 | `results/streaming/mimi-standard/` | 31 / 44 | 70.45% | 5 / 8 |
| Mimi 降噪双声道 | `results/streaming/mimi-mc/` | 34 / 44 | 77.27% | 5 / 5 |
本次 44 点均有可用输出,来自同六通录音、22 个可接话与 22 个不可接话标签。每个目录包含 `predictions.csv`、`summary.json` 和前端 `score-timeline.json`;CSV 记录判断时间、实际评分时间及分数年龄,JSON 保留源记录、标签和评估代码的哈希。总表为 `results/streaming/comparison-summary.json`,文字说明为 `results/streaming/对比分析.txt`。
本次复用已有真实连续推理记录,没有新做模型推理或计算延迟实验。它仍是选定判断点上的分类评估,不等同于 LiveKit 的静音区间误抢话与结束延迟策略评估,也不代表完整在线系统的响应延迟。原始独立窗口结果保留作为历史诊断,不能与本表混用。重新运行原推理入口的 `all` 模式(CPC 双声道为 `export_timeline.py`)后会自动刷新对应流式目录;四配置对比统一用上述命令更新。
## 历史独立窗口及原始连续推理记录
以下记录说明原始实验、权重和独立窗口诊断。所述独立点评分及旧指标不是当前流式场景的主结果;前端已切换为上方流式目录。
两版均输入原录音的**用户左声道(索引 0)和机器人右声道(索引 1)**。保留两路音频及静音,不混音、不置零、不改变时间轴。当前人工标签从 `labels/EOT标注/工作数据` 读取,结果另存。
## 模型与环境
复用本目录现有 uv `.venv` 和 `uv.lock`,不与 Smart Turn 环境混装。本次不修改依赖:Python 3.11.15、MaAI 0.2.22、PyTorch 2.14.1、transformers 5.5.3、ONNX Runtime 1.31.0。执行机器为本机 Apple M4 Mac mini、16 GB 内存;CPU 推理,PyTorch 和 ONNX 各 4 个 intra-op 线程、1 个 inter-op 线程。
| 项目 | 标准版 | 降噪版 |
| --- | --- | --- |
| 模型参数 | `model_type="normal-ver2", mc=False` | `model_type="normal-ver2", mc=True` |
| VAP 权重 | `vap_mimi_state_dict_ch_kyoto_12.5hz_20000msec.pt` | `vap_mc_mimi_state_dict_ch_kyoto_12.5hz_20000msec.pt` |
| VAP SHA256 | `2820d2b172a6ddd4696d33edb43933f436a09a3e0d3eb41c7dc390c33b22d5ce` | `61c9e186d765cb6c338cb7fdacb68baf4b2533e72cde7c803e52480a62919219` |
| 频率、上下文 | 12.5 Hz(80 ms)、20 秒 | 相同 |
| 编码器 | 官方 FP32 ONNX Mimi | 与标准版共用同一文件 |
VAP 来自官方 [vap_ch_kyoto](https://huggingface.co/maai-kyoto/vap_ch_kyoto/tree/main),固定修订 `c135cdcfa12ff5aa1cce2fdd23df110941a78f38`。编码器来自官方 [continuous-mimi-onnx](https://huggingface.co/maai-kyoto/continuous-mimi-onnx/tree/main),固定修订 `303ef4ec0c70e4c71b67ea166acd26dd0d96655c`,文件为 `continuous_mimi_fp32.onnx` 和配套 JSON;ONNX SHA256 为 `c86171a48e1bd46aa31a52e7fe00f74acc310e0d15d11881516cdd1df1639b54`。
所有文件保存在本目录 `models/mimi/`,固定下载 URL、修订、大小和校验值保存在 `mimi-model-manifest.json`。脚本逐次验证清单,不自动切换或下载其他权重。环境声明为 `mimi-env-spec.json`,实际环境和输入哈希随结果保存。
## 复跑
从项目根目录执行:
```bash
cd experiments/maai-ch-kyoto
UV_CACHE_DIR=/private/tmp/xiaobailing-uv-cache uv run --locked --offline python run_mimi.py smoke --variant both
UV_CACHE_DIR=/private/tmp/xiaobailing-uv-cache uv run --locked --offline python run_mimi.py all --variant both
UV_CACHE_DIR=/private/tmp/xiaobailing-uv-cache uv run --locked --offline python compare_mimi.py
```
`smoke` 在真实双声道历史上检查权重加载、固定种子重复推理和未来音频不变性。`all` 依次计算两版的判断点和连续曲线;`evaluate` 只计算判断点。`--variant standard` 或 `--variant mc` 可以单独运行一版。已有依赖及本地权重可离线复用。
## 判断点与连续评分
- 每个判断点独立重置 Mimi 流式状态及 VAP KV cache,使用此前最多 20 秒音频,按 80 ms 帧对齐,最后一帧结束于精确 `decision_ms`。不足整帧的余量从历史开头丢弃。先裁剪收到的双声道音频,再重采样到 16 kHz;不读取未来音频,不使用人工转写。
- 保留 MaAI 官方启动逻辑:首次 ONNX Mimi 编码输出跳过,后续实际收到评分才使用。当前实现首次有效输出在输入 160 ms 后;不把启动期缺失评分补成 0。
- 主分数与既有 VAP 前端一致,为 `1 - p_now[user]`,主阈值为严格大于 0.5。它是说话活动预测映射,不是官方校准的 EOT 概率;不加入外部结束信号、VAD 等待或超时接话。
- 连续曲线在完整录音上持续维护状态,使用流式重采样,时间戳表示输入实际可用时间,包含重采样缓冲。末尾不足一帧不补虚构音频;空心点保留独立历史窗口结果,可能不落在连续曲线上。
- 模型原生步长是 80 ms,流式重采样可能使更新延后或多帧在同一个输入可用时刻产生,因此页面曲线并非严格每 80 ms 一个点。本批连续评分最早在 240 ms 可用,更新间隔为 80/160 ms;独立窗口不经过流式重采样缓冲,首次模型输出为 160 ms。两种时间均明确记录,不把预测提前显示。
- 本次比较引用 `results/user-only/predictions.csv` 中已在**相同当前判断点**重跑的 CPC 降噪双声道对照,同时保留 CPC 机器人静音版。复用前严格校验标签、转写、依赖锁和六通原录音的哈希。当前点位变化后,应先重跑 `run_user_only.py all`,不能直接复用旧位置的分数。
## 加载审计与比较边界
官方本地文件加载路径使用通用 `vap` 架构标识,即使文件是降噪权重,也不会把对象上的 `variant` 自动改为 `vap_mc`。实验因此以指定权重文件及 SHA256 标识标准/降噪版本,并核对全部实际使用的 VAP 参数与对应 checkpoint 完全一致,避免把相同架构误认为相同权重。
Mimi 的两个被冻结的帧率转换卷积在原生 12.5 Hz 路径不参与计算;原始 checkpoint 不包含这些卷积。加载审计单独列出这四个未使用的 weight/bias,核验输入输出帧率均为 12.5 Hz;其余参数必须来自 checkpoint。Mimi 编码器本体使用已校验的独立 ONNX 权重。加载器输出中与初始常量相同的参数提示不代表参数缺失,以逐参数相等性检查为准。
Mimi 标准与降噪版本使用相同编码器、80 ms 帧、输入和评分规则;两者可作为不同 VAP 权重的直接对照。现有 CPC 为降噪版、100 ms 帧,比较时明确这些配置差异,不把所有变化归因于编码器。这里只评价选定判断点,不代表独立测试集或完整话轮策略指标。记录的历史重放耗时也不等于单次在线更新延迟。
## 结果与前端
| 目录 | 内容 |
| --- | --- |
| `results/mimi-standard/` | Mimi 标准版的 `predictions.csv`、`errors.csv`(如有)、`thresholds.csv`、`summary.json`、`score-timeline.json`。 |
| `results/mimi-mc/` | Mimi 降噪版的同类结果。 |
| `results/mimi-comparison/` | 由 `compare_mimi.py` 汇总的四配置逐点对照、指标 JSON 和中文对比分析。 |
逐点 CSV 保留人工真值、原生 `p_now/p_future/vad`、接话候选分数、CPC 同点参考分数及输入窗口。汇总包含分类指标、每通话指标、重复/因果输入验证、完整来源哈希和配置差异说明。
工作台展开“模型分数对比”→“选择模型”,可分别勾选 **VAP / MaAI Mimi(标准双声道)**(蓝灰色)和 **VAP / MaAI Mimi(降噪双声道)**(金棕色)。它们支持独立开关、0.11 / 0.5 / 0.8 参考线、悬停分数和判断点定位,与现有 CPC、Smart Turn 等共用录音时间轴。原始录音、标签和其他模型结果保持原样。