共计 1977 个字符,预计需要花费 5 分钟才能阅读完成。
1. 为什么 ASR 数据标注这么难?
刚接触语音识别数据标注时,最常遇到这些头疼问题:

- 方言和口音 :同一个 ” 西红柿 ”,北方人可能念成 ”xihongshi”,南方人会说 ”fanqie”
- 背景噪声 :到底该标注空调嗡嗡声,还是忽略它?不同项目要求可能完全相反
- 多人对话 :三个人同时说话时,该标成重叠对话还是分段处理?
有次我们标注客服录音,发现 30% 的无效数据都是因为没统一标注规则——有人标了咳嗽声,有人却跳过。
2. 工具选型:Label Studio 还是 Prodigy?
试过市面上所有主流工具后,我的对比结论:
| 工具 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Label Studio | 开源免费,支持音频波形可视化 | 大文件加载慢 | 小团队敏捷标注 |
| Prodigy | 主动学习推荐标注,效率提升 40% | 商业授权贵($490/ 用户 / 年) | 专业标注团队 |
如果是学生党,强烈推荐用 Label Studio+ 自定义模板:
# 音频标注模板示例(XML 格式)<View>
<Labels name="speaker" toName="audio">
<Label value="客服" />
<Label value="客户" />
</View>
<Audio name="audio" value="$audio" />
</View>
3. 必须掌握的标注规范
3.1 语音分段原则
遇到 5 秒以上的静默时:
- 用 WebRTC 的 VAD 算法自动检测(Python 实现):
import webrtcvad
def vad_segment(audio, sample_rate=16000):
vad = webrtcvad.Vad(2) # 中等灵敏度
frame_duration = 30 # 毫秒
frames = []
for i in range(0, len(audio), int(sample_rate * frame_duration / 1000)):
frame = audio[i:i+frame_size]
if vad.is_speech(frame, sample_rate):
frames.append(1)
else:
frames.append(0)
return merge_continuous_segments(frames) # 合并连续语音段
3.2 文本标准化
统一处理以下情况:
- 数字:”123″ → “ 一百二十三 ”
- 英文:”CPU” → “C P U”(字母分开读)
- 符号:”20%” → “ 百分之二十 ”
用这个正则表达式校验格式:
import re
def validate_transcript(text):
# 禁止出现非中文 / 英文 / 数字的字符
pattern = r'^[\u4e00-\u9fa5a-zA-Z0-9\s]+$'
if not re.match(pattern, text):
raise ValueError(f"非法字符: {text}")
4. 新手避坑指南
4.1 采样率陷阱
遇到过最隐蔽的 bug:标注工具用 44.1kHz 播放音频,但模型训练用 16kHz,导致时间轴全部错位。解决方案:
from pydub import AudioSegment
def convert_sample_rate(input_path, output_path, target_rate=16000):
audio = AudioSegment.from_file(input_path)
audio = audio.set_frame_rate(target_rate)
audio.export(output_path, format="wav")
4.2 标注一致性控制
计算 Kappa 系数来判断标注员是否达成共识:
from sklearn.metrics import cohen_kappa_score
# 两个标注员的标注结果
annotator1 = [1, 0, 1, 1, 0]
annotator2 = [1, 1, 1, 0, 0]
kappa = cohen_kappa_score(annotator1, annotator2)
print(f"Kappa 系数: {kappa:.2f}") # >0.8 表示高度一致
5. 效率优化技巧
5.1 音频格式选择
对比测试结果(相同 1 小时音频):
| 格式 | 文件大小 | 加载速度 | 标注工具兼容性 |
|---|---|---|---|
| WAV | 650MB | 慢 | 最好 |
| FLAC | 320MB | 快 | 中等 |
| MP3 | 60MB | 最快 | 可能有失真 |
建议:原始存档用 FLAC,标注时转 WAV
5.2 版本控制策略
Git 不适合管理音频文件,我们的解决方案:
- 用 DVC 管理大文件
- 标注结果存为 CSV+ 时间戳
- 每次更新打标签:
dvc add dataset/raw_audio/
git commit -m "v1.2 标注更新"
git tag -a v1.2 -m "完成 200 小时客服数据"
6. 开放问题
当老板只给 5000 元标注预算时:
- 该标注 1000 小时普通质量数据?
- 还是 200 小时专家级标注?
我的选择是:先用 200 小时高质量数据训练基础模型,然后用这个模型预标注剩余 800 小时数据,人工只做校验——这样质量与数量兼得。你怎么看?
正文完
