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

68 lines
6.1 KiB
Markdown
Raw Normal View History

# VAP / MaAI:机器人输入静音的用户语音评测
## 当前主评测口径:流式场景(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`)后会自动刷新对应流式目录;四配置对比统一用上述命令更新。
## 历史独立窗口及原始连续推理记录
以下记录说明原始实验、权重和独立窗口诊断。所述独立点评分及旧指标不是当前流式场景的主结果;前端已切换为上方流式目录。
本实验复用 MaAI `ch_kyoto` 的独立 uv 环境和同一组 VAP/CPC 权重,新增一个输入对照:保留索引 0 的用户声道,索引 1 的机器人声道全程填零。保留时间轴、停顿及原采样长度,不把用户语音复制到两路、不混音,也不修改源录音或人工标签。用户声道本身已有的机器人串音不会因另一声道置零而消失。
## 运行
在项目根目录执行:
```bash
cd experiments/maai-ch-kyoto
uv run --locked python run_user_only.py smoke
uv run --locked python run_user_only.py all
```
已有 `.venv` 和权重直接复用,无需重新下载。`smoke` 执行真实判断点两次,验证固定种子下结果一致,并验证机器人声道、未来音频的变化不影响输入和结果;`evaluate` 只计算判断点;`all` 同时生成判断点评测和六通录音连续评分。
本次执行机器为本机 Apple M4 Mac mini、16 GB 内存,使用 CPU、4 个计算线程和 1 个 inter-op 线程。Python 3.11.15,MaAI 0.2.22,PyTorch 2.14.1,transformers 5.5.3;其余实际依赖、平台、权重 SHA256、uv.lock 和脚本哈希写入输出的 provenance。Python、NumPy 和 PyTorch 种子均为 42。
## 输入与评分
- 每个判断点独立重置 CPC/VAP,取判断前最多 20 秒历史,按 100 ms 对齐并保持末帧结束于精确 `decision_ms`;先裁取收到的音频,再置零机器人输入、重采样至 16 kHz。逐帧处理,不读取判断点之后的音频,不使用标注转写作为模型输入。
- 主分数与现有前端一致,为 `1 - p_now[user]`,默认规则为分数严格大于 `0.5` 可以接话。`p_now` 是说话活动预测,该映射不是官方校准的 EOT 概率;不加入外部结束信号、VAD 静音门槛或超时放行。
- 同时在**相同的当前判断点**重跑双声道对照,使用相同用户输入、20 秒窗口、分数映射和阈值。原有双声道结果及前端曲线保留,避免因当前标注点有调整而混用旧点评分。
- 连续曲线按完整录音持续更新 CPC 和 20 秒 KV cache,机器人输入全程为零。使用流式重采样,时间戳包含重采样缓冲;录音尾部不补虚构静音。连续状态与独立窗口不同,因此空心判断点可能不落在连续曲线上。
- 这是当前选定判断点上的探索性分类评估,不等同于 LiveKit 的区间误抢话和结束延迟策略评估。实际标签来源与音频哈希随结果保存。
## 输出与前端
输出位于本目录 `results/user-only/`:
| 文件 | 内容 |
| --- | --- |
| `predictions.csv` | 当前判断点的仅用户分数、同点双声道对照、原生活动预测、窗口和重放计算耗时。 |
| `errors.csv` | 仅用户版本阈值 0.5 下的错误点;没有错误时不生成。 |
| `thresholds.csv` | 不同参考阈值下的分类指标,仅用于分析,不据此声称独立测试集最优效果。 |
| `summary.json` | 汇总、每通话指标、同点双声道对照、种子和输入不变性校验、来源哈希。 |
| `score-timeline.json` | 模型 ID 为 `maai_user_only` 的连续曲线与独立判断点评分。 |
在工作台展开“模型分数对比”→“选择模型”→勾选 **VAP / MaAI(仅用户)**。橄榄绿色曲线支持独立显示、0.11 / 0.5 / 0.8 参考线、悬停分数和点击判断点。原紫色 VAP / MaAI 仍为双声道版。模型输入静音不改变页面播放的原始录音。
本次仅用户判断点来自运行时的“工作数据”;原有双声道曲线的空心点保留此前回测位置。严格同点比较使用本次 `predictions.csv` 的 `stereo_can_reply_score` 和 `summary.json` 的 `same_point_stereo_reference`。