LiveKit Turn Detector v1-mini 韩泰评估
执行机器:本机 Apple M4 Mac mini,CPU,16 GB。Python 3.11.15;独立 uv 环境。官方 PyPI livekit-local-inference==0.2.7(内嵌模型)与 livekit-agents==1.8.8,完整依赖见 uv.lock。
复现
从项目根目录执行:
cd experiments/livekit-v1-mini
uv sync --locked
uv run --locked python run_experiment.py smoke
uv run --locked python run_experiment.py all
smoke 使用种子 42 生成固定输入,重复推理必须一致,输出 WITNESS;all 生成 44 点 predictions.csv、summary.json 和六通录音的 score-timeline.json。evaluate 只跑标注点。所有输出位于 results,不修改人工标注。
输入与评分
- 只用用户左声道 channel 0;先裁取判断时间之前的 int16 音频,除以 32768,再用 scipy resample_poly 重采样到 16 kHz,取最近 19200 样本(1.2 秒),乘以 32767 转为 int16。短窗口由原生模型左补零,不使用未来音频或人工转写。
- 使用 Agents
_LocalTransport._predict入口,严格锁定 SDK 版本;原生异常或框架默认回退分数会导致实验失败,不计成真实预测。 - 每 200 ms 及每个原标注精确时刻计算原始分数;不加 VAD 停止门槛、静音等待、超时放行、会话结束信号或前一预测状态。
- 默认阈值为锁定 SDK 的中文阈值 0.355,同时报告 0.5,未在本批数据上搜索最优阈值。
- 每个判断点重复推理并验证分数一致;将该点之后的音频改为零,验证输入不变。该方法的前缀重采样与官方 benchmark 的 librosa 或在线重采样存在实现差异,因此不称为完整官方在线策略复现。
- 单个评估请求依次执行。脚本请求 EOT_PARALLELISM=1;当前原生库实际报告 parallelism=2,记录于结果,不声称原生单线程。OMP/MKL/OPENBLAS 请求线程数均为 1。
环境与模型校验
macOS arm64 CPython 3.11 官方 wheel SHA256:fa4cb2d495c80be6121642dba4def3a88b22a68d52c1b0affccd66c563de6622。
原生二进制 SHA256:7afa5899367957328c9916153b5d672392e191c0bfadf1f49325af2e4f3055b4。模型嵌于二进制,未暴露独立权重文件,不虚构独立权重哈希。结果还记录 Python、依赖、脚本、标注及各录音哈希。环境规范见 env-spec.json。
限制与许可
这 44 个手选判断点仅作探索性对比,不是独立大样本泛化评估。点级误接话率不等于整段对话的抢话率,用户声道也可能存在机器人回声。模型分数和 SDK 完整终点策略须分开讨论。
当前 wheel 附带的 MODEL_LICENSE.md 要求模型配合 LiveKit Agents 使用,并限制用其输出改进其他模型;本实验通过 Agents 官方本地传输入口执行。网页仅查看分数;不将其用作其他模型的训练标签。不要将该模型描述为 Apache-2.0 权重。
官方参考:
- https://docs.livekit.io/agents/logic/turns/turn-detector/
- https://github.com/livekit/eot-bench/blob/main/eot_harness/livekit_turn_detector_mini_adapter.py
结果解读见 results/summary.json 和 results/评估说明.md。