Skip to content
音频与语音

用 Potato 做音频与语音标注

对照波形修正 Whisper 转写文本和说话人话轮,或运行 MUSHRA 与 MOS 听音测试,用的是一款运行在你自己服务器上的免费工具。

Potato 能把 Whisper、WhisperX、字幕、TextGrid 和 ELAN 转写文本连同录音一起加载,让标注者对照波形修正文字和说话人话轮;Potato 也能运行 MUSHRA 和 P.808 式 MOS 等标准听音测试。Potato 免费开源,运行在你自己的电脑或服务器上,还能在标注开始前于本地完成录音的转写和说话人分离。

如今大多数语音项目都从自动转写文本起步,标注工作就是修正转写:改正文字、拆分与合并话轮、指定说话人。Potato 按原样读取转写文本,不需要转换脚本。从 2.9 版起,Potato 也能在你自己的机器上生成转写文本。potato transcripts --transcribe --diarize 用 faster-whisper 转写、用 sherpa-onnx 做说话人分离,不需要 PyTorch,也不需要 Hugging Face 令牌,录音始终不离开本机。

Potato 中的语音与音频任务

每一行是 Potato 自带的一种标注类型或工作流,链接页面给出了它的配置。

任务Potato 的做法文档
修正 ASR 转写话轮以说话人气泡显示并与音频同步,每条都可编辑,来源可以是 Whisper JSON、SRT、VTT 等格式标注 Whisper 转写文本
说话人分离在波形上绘制片段并按说话人标注,或由标注者修正已自动分离话轮的说话人音频片段
声音事件与标记带标签的时间片段,或用单选和多选给整段音频打标签音频标注指南
听音测试listening_test 方案,支持 MUSHRA、BS.1116、ACR、DCR、CCR、P.835 和 ABX,刺激材料盲化并含隐藏参考听音测试
情绪与副语言对每段音频或每个片段给出类别标签,或李克特量表和滑块评分音频标注指南
频谱图框用时频框标出鸣叫、音符或其他事件频谱图标注
语音层级导入 TextGrid 和 ELAN 层级供修正,再导出回去转写格式

在你自己的机器上转写和分离说话人

下面的命令把一个录音文件夹变成一份数据文件,里面是已分离说话人、带时间戳的转写文本,供标注者修正。如果知道每段录音里有几个人说话,就传入 --num-speakers。

bash
pip install 'potato-annotation[transcribe]'
potato transcripts ./interviews --transcribe --diarize --num-speakers 2 -o data/interviews.json

模型权重在首次使用时下载,所以第一次运行需要联网。系统会先做语音活动检测,因此 Whisper 不会在静音处编造文字。同样的检测也可能在没有任何提示的情况下丢掉轻声或耳语。如果一段你确定有语音的录音返回的结果偏短,用 --asr-no-vad 重新运行。转写格式介绍了如何为离线机器预先准备模型。

听音测试

Potato 不附带测试材料,刺激材料由你提供。listening_test 方案对每个条目运行一项标准主观测试,样本经过盲化、顺序随机,导出时每个评分都能对应回它的条件。listening_test 导出会写出每个条件的 MOS 和 MUSHRA 均值及 95% 区间、ABX 结果,并应用 ITU-R BS.1534-3 事后筛选规则。测试前可以把耳机检查作为一个运行时阶段来运行。如果听者来自众包,Potato 以 Prolific 作为招募平台,详见众包集成。

与 ELAN、Praat 和 Label Studio 的分工

ELAN 面向单人完成的精细多层时间对齐标注,Praat 面向语音学分析。Potato 能导入和导出这两种格式,团队可以在浏览器里修正层级,再继续用 Praat 或 ELAN 分析。Label Studio 提供转写和说话人切分的模板。Potato 额外提供的是本地转写和说话人分离、带筛选规则的标准听音测试方法,以及研究所需的功能,例如每个条目分配多名标注者、时间片段上的一致性和注意力检查。音频标注工具对比逐项比较了这些差异。

常见问题

如何修正 Whisper 转写文本,而不是从头转写?

保留 Whisper 带片段时间戳的 .json 输出,对文件夹运行 potato transcripts,把每份转写文本和对应音频配对写入数据文件。标注者随后会看到与音频同步的话轮,并修正文字和说话人。如果时间戳还要交给 ELAN 或 Praat,就导出为 EAF 或 TextGrid。

如何为说话人分离标注说话人话轮?

使用 audio_annotation 方案,每个说话人一个标签,标注者在波形上为每个话轮绘制片段。如果录音已经用 WhisperX 或 potato transcripts --diarize 自动分离过说话人,标注者只需修正每个话轮的说话人,不必逐个绘制片段。时间维度上的一致性可以测量两名标注者的片段吻合到什么程度。

如何在线运行 MOS 或 MUSHRA 听音测试?

添加一个 listening_test 方案,把 method 设为你需要的测试,例如 mushra,或用于 MOS 测试的 acr,并为每个条目提供参考样本和待比较的条件。Potato 会盲化样本、为每位听者打乱顺序、为 MUSHRA 加入隐藏参考和锚点,并在 listening_test 导出中应用 BS.1534-3 事后筛选规则。听音测试列出了所有方法和选项。

能导入或导出 Praat TextGrid 和 ELAN 文件吗?

可以。potato import 读取 .TextGrid 和 .eaf 文件以及同名录音,把每个层级转成同一个 tiered_annotation 方案中的一层。textgrid 和 eaf 导出器会把修正后的层级写回去。

延伸阅读

从这里开始

示例设计

每个设计都是可以下载并直接运行的 Potato 配置。

其他领域

全部应用场景