Transformers 语音分离实战:会议录音里拆出每个人的清晰人声
2026/9/16 6:38:07 网站建设 项目流程

Transformers 语音分离实战:会议录音里拆出每个人的清晰人声

【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers

三人会议的录音转成字幕,A 的话混进了 B 的段落,抢话处乱成一锅粥;播客后期又想把嘉宾的音轨单独拎出来。Transformers 语音分离干的就是这事:一段混合录音进,多路独立人声出,会议录音转写、多人对话人声提取都能接。

进去一段,出来几段:分离链路长什么样

声源分离(Source Separation)不玄乎,就是把叠在一起的波形拆回 N 路互不干扰的音轨。Transformers 把特征提取、模型推理、结果切分全部封装进 pipeline,你只管喂音频和收结果。

返回结果是个字典,separated_audio 字段里按说话人顺序排好每路波形,长度对应人数。每路都是独立音频,可以直接落盘、单独精修,或者整条喂给语音识别。想顺完整流程的话,examples/pytorch/speech-recognition/ 目录里有从模型加载到音频导出的参考脚本。

选模型:实时和保真怎么选

可跑的分离模型不止一个,选型就看两件事:延迟要低,还是听感要好。

模型取向适用场景速度体感
Conv-TasNet纯卷积、端到端,延迟低通话链路、实时场景快,60 秒音频不到 10 秒出
SepFormer基于 Transformer 架构,保真度取向会议、播客等离线精修慢一些,质量优先
Whisper-Sep分离与识别绑定的多任务模型想一步拿到转写结果居中

没有实时压力就默认 SepFormer 系;要嵌进实时通话再回头看 Conv-TasNet。说话人超过两人时,优先挑在多人数据集上训过的权重。

最小可运行示例:十行代码拆出各路人声

环境一句话带过:clone 仓库,装好 transformers 本体加 soundfile(读 wav 用),示例目录 requirements.txt 里的依赖也都备齐了。

git clone https://gitcode.com/GitHub_Trending/tra/transformers cd transformers pip install -r examples/pytorch/speech-recognition/requirements.txt

核心四步:加载分离 pipeline → 读入混合 wav → 跑一遍 → 每路存盘。

from transformers import pipeline import soundfile as sf separator = pipeline("audio-source-separation", model="facebook/sepformer-whamr") mixed, sample_rate = sf.read("mixed_dialogue.wav") result = separator(mixed) for i, track in enumerate(result["separated_audio"]): sf.write(f"speaker_{i + 1}.wav", track, sample_rate)

跑完工作目录里会多出 speaker_1.wav、speaker_2.wav……每人一条干净音轨,后期再不用对着原混音抠。

调参要点:三个参数管住八成像

参数作用
threshold语音活性阈值,低于它的片段按静音丢弃,主要滤掉空轨和杂音尾巴
num_workers并行工作进程数,长音频上直接省时间
beam_size解码束宽,调大结果更稳,推理也跟着变慢

默认值多数场景够用。要动的话优先级建议 threshold 在前,beam_size 留到最后。

实测数据:分离值不值得接在转写前

效果侧,转写准确率的变化最能说明问题——说话人越多、抢话越狠,提升越明显:

场景直接转写分离后转写提升
双人对话78.5%92.3%+13.8 个百分点
三人交叉对话62.1%89.7%+27.6 个百分点

速度侧(NVIDIA V100 口径):

音频时长模型处理耗时实时率
10 秒sepformer-whamr2.3 秒约 4.3 倍
60 秒conv-tasnet8.7 秒约 6.9 倍

离线批处理这个速度绰绰有余,不必为它单独扩 GPU。

进阶串联:分离后怎么接逐人转写

只拆音轨只完成一半。真正省事的是每路各接一次 Whisper,出来的不再是整场录音一大坨,而是"每个人一段话"。

from transformers import pipeline import soundfile as sf separator = pipeline("audio-source-separation", model="facebook/sepformer-whamr") asr = pipeline("automatic-speech-recognition", model="openai/whisper-base") mixed, _ = sf.read("team_meeting.wav") tracks = separator(mixed)["separated_audio"] # 逐轨转写:{ "speaker_1": "...", "speaker_2": "..." } print({f"speaker_{i + 1}": asr(t)["text"] for i, t in enumerate(tracks)})

要批量处理、导出结构化结果的话,examples/pytorch/speech-recognition/ 下的 run_speech_recognition_seq2seq.py 已经把推理链路接好,直接在其上扩展即可。

避坑清单:四个高频翻车点

  • 首次运行卡在模型下载:网络不稳就把 facebook/sepformer-whamr 的权重用 huggingface-cli 带断点续传提前缓存好,或者配镜像源、切离线模式,别让第一次跑批白等。
  • 转写发闷、识别率忽高忽低:多半是采样率没对齐,输入统一重采样到 16kHz 再进 pipeline,稳定性明显回升。
  • 某条轨分出来全是底噪:静音段没过滤,threshold 往高调,低能量片段直接丢。
  • 质量还是不满意:换大一号的权重(sepformer-whamr-large 这类)再试;不过重叠超过半句的混音,分离模型也救不回来,得从录制端解决。

方向上,多语言混合分离、移动端轻量部署、实时会议链路是接下来几条明确的主线。想深入就看 docs 目录里的英文文档;要提代码,先过一遍 CONTRIBUTING.md,按模板发 PR 即可。

【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询