Files
xiaobailing-turn-detection/labels/eot-studio/README.md
T

55 lines
5.1 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.
# EOT 标注工作台
基于 Next.js Minimal 模板的本地网页工具,独立放在 `labels/eot-studio`,按项目的 [EOT 标注格式](../EOT标注/EOT逐话轮标注格式.md)查看对话、回放音频并编辑判断位置和标签。
## 启动
```bash
cd labels/eot-studio
npm install
npm run dev
```
打开终端显示的本地地址,通常为 <http://localhost:3000>。生产构建使用 `npm run build`,随后 `npm start`。请从 `labels/eot-studio` 目录运行,API 以其上两级作为项目根目录。
## 使用
1. 默认载入“韩泰机器人抢话”的 6 通录音,以及原 XLSX 转换出的 76 条转写、39 个 EOT 判断点。已有工作数据时优先读取工作数据,初稿保留在 `labels/EOT标注/韩泰初稿/`。
2. 左右声道分别显示波形,共用时间刻度。机器人、用户转写作为对应轨道上的块显示;点击块在右侧栏编辑说话人、文本和起止时间;拖动左右边界直接调整片段范围。拖动结束作为一次修改,可撤销。查看模式的字段为只读。点击“在播放位置新增”的下拉菜单,选择机器人转写、用户转写或 EOT 判断点。
3. 点击判断点轨道空白处直接新增 EOT;聚焦该轨道后按 Enter 可在播放位置新增。点击已有标记选择标签,直接拖动判断点轴上的标记调整时间,聚焦标记后可用方向键微调;拖动时吸附转写边界、播放位置和其他判断点,按住 Alt 暂停吸附,松开后作为一次修改可撤销。同一通话的判断点不能重合。放大时间轴便于查看短片段。顶部只保留播放头。播放头在点击或拖动定位时,会吸附附近的转写块边界及 EOT 判断点;按住 Alt 暂停吸附。
4. 右侧编辑判断时的用户文本、是否可以接话、判断原因、置信度和标注员。标注员可选,不影响处理状态。标签为“可以接话”或“继续等待”就计入已处理,只有空白标签(需要仲裁)算待处理。
5. 时间轴下方“撤销上一步 / 重做上一步”支持最近 40 步转写、判断点和导入修改,Ctrl+Z 撤销,Ctrl+Y 或 Ctrl+Shift+Z 重做;Mac 也支持 ⌘+Z / ⌘+Shift+Z。在时间轴的块或判断点上聚焦时同样有效,文本输入框内保留原生文字撤销。撤销后作新修改会清空重做记录;刷新页面后历史记录清空,浏览器草稿仍按原规则恢复。
5. 时间轴显示整段对话,模型输入仍仅使用 `end_ms <= decision_ms` 的完整历史;当前用户表达跨越判断点时需回听填写 `user_text_at_decision`,不按字符比例推算。
6. 点击“保存到项目”写入 `labels/EOT标注/工作数据/`。切换数据集只改变浏览范围;导出菜单可选当前数据集或全部,项目保存保留全部数据。
浏览器草稿自动保留,刷新后可恢复。网页保存不覆盖原 XLSX、初稿和录音。初稿转换方法、标签映射与限制见 [转换说明](../EOT标注/韩泰初稿/转换说明.md),原行号及原结论保留在初稿目录的 `source_rows.json` 中。原表没有时间信息,录音中未收录的开场与其他发言需人工补充。
## CSV 格式
对话转写 `asr_history.csv`:
```csv
call_id,role,start_ms,end_ms,transcript
demo,agent,1000,2400,您什么时候方便接电话?
demo,user,3000,4400,我明天下午
```
EOT 标注 `eot_labels.csv`:
```csv
call_id,decision_ms,user_text_at_decision,can_reply_now,confidence,reason,annotator
demo,5200,我明天下午,0,high,mid_turn_pause,A
```
`role` 为 `agent` 或 `user`;`can_reply_now` 为 `1`、`0` 或空;`confidence` 为 `high`、`medium`、`low` 或空。时间为非负整数毫秒,转写满足 `start_ms < end_ms`。同一 `call_id + decision_ms` 不能重复。CSV 使用 UTF-8,支持标准引号、逗号和多行文本。
全部对话保存在转写表,当前用户表达保存在 EOT 表。查看或预测时以通话 ID 和判断时间关联这两份文件;空标签保留为待判断样本。
## 本地接口
- `GET /api/workspace`:读取工作数据和项目录音列表。工作数据的两份 CSV 都存在时使用它们,否则载入韩泰初稿;初稿不存在时载入示例;已保存 CSV 格式错误时返回错误,不用示例覆盖。
- `POST /api/workspace`:接受 `{ transcripts, annotations }`,校验后保存到固定工作数据目录,并返回 `savedAt`。同一进程的读写按顺序执行;文件锁防止不同进程同时操作,请求完成后释放。若进程在保存中被强制终止,请确认没有其他服务运行,检查残留 `.backup` 文件并恢复同一次保存前的两份 CSV,再移除工作数据目录的 `.workspace.lock`。
- `GET /api/audio?path=...`:仅提供 `data` 内的 MP3、WAV、M4A、OGG、FLAC 和 WebM 录音,支持 Range 请求和 HEAD,便于跳转播放。路径相对 `data` 目录,不能通过 `..` 或符号链接访问目录之外的文件。
录音 `call_id` 默认取文件名去除扩展名后的部分;同一通话有多个项目录音时,默认使用发现的第一条,可点击“更换录音”重新关联本地文件。