
MOSS-Transcribe-Diarize
0.9B 模型搞定 50+ 语言长音频转写、说话人分离和字幕生成
MOSS-Transcribe-Diarize 是一个轻量级(0.9B 参数)的多语言长语音转写与说话人分离模型,支持 50 多种语言,并集成时间戳和声学事件识别。它解决长音频转录中常见的分段割裂、说话人混淆和事件遗漏问题,提供端到端的转写、说话人标记和字幕生成能力。核心能力包括:长音频流式处理、自动说话人分离(Diarization)、多语言识别、时间戳对齐和声学事件(如笑声、掌声)感知。项目基于 Python 实现,易于集成到现有语音处理流水线,适合会议记录、媒体字幕、访谈分析等场景。其 0.9B 的规模在保持较高准确率的同时,降低了部署门槛,适合资源受限环境。
项目数据
使用教程
环境要求
- Python 3.12(README 明确测试版本)
- Transformers 5.x
- uv 包管理器(用于建虚拟环境和装依赖)
- 可选:CUDA GPU,装 flash-attn 后可用更快的注意力内核
- 需联网从 HuggingFace 拉取 OpenMOSS-Team/MOSS-Transcribe-Diarize 权重
安装与启动步骤
-
1克隆仓库
从 GitHub 拉取源码,命令执行后会在当前目录生成项目文件夹。
git clone https://github.com/OpenMOSS/MOSS-Transcribe-Diarize.git -
2进入项目目录
后续所有安装与运行命令都在该目录下执行。
cd MOSS-Transcribe-Diarize -
3创建虚拟环境
README 要求使用干净的 Python 环境,此处用 uv 创建 Python 3.12 的 .venv。
uv venv --python 3.12 .venv -
4激活虚拟环境
Linux/macOS 下激活;激活后命令行前缀会出现 (.venv)。
source .venv/bin/activate -
5安装项目依赖
以可编辑模式安装 torch-runtime 依赖组,torch 后端自动匹配本机环境。
uv pip install -e ".[torch-runtime]" --torch-backend=auto -
6可选装 flash-attn
仅 CUDA GPU 需要,装上后可在代码里切换 flash_attention_2 加速长音频。
uv pip install flash-attn -
7运行转写示例
把 audio_path 换成自己的 wav 文件;eager 极易 OOM,长音频请用 flash_attention_2。
import torch from transformers import AutoModelForCausalLM, AutoProcessor from moss_transcribe_diarize import parse_transcript from moss_transcribe_diarize.inference_utils import ( build_transcription_messages, generate_transcription, resolve_device, ) model_id = "OpenMOSS-Team/MOSS-Transcribe-Diarize" audio_path = "audio.wav" device = resolve_device("auto") dtype = torch.bfloat16 if device.type == "cuda" else torch.float32 model = AutoModelForCausalLM.from_pretrained( model_id, trust_remote_code=True, dtype="auto", attn_implementation="sdpa", ).to(dtype=dtype).to(device).eval() processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True) messages = build_transcription_messages(audio_path) result = generate_transcription( model, processor, messages, max_new_tokens=2048, do_sample=False, device=device, dtype=dtype, ) print(result["text"]) for segment in parse_transcript(result["text"]): print(segment.start, segment.end, segment.speaker, segment.text)
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
model_id | 是 | HuggingFace 上的模型标识,首次运行会自动下载权重 | OpenMOSS-Team/MOSS-Transcribe-Diarize |
audio_path | 是 | 待转写的音频文件路径,README 示例为 wav 格式 | audio.wav |
attn_implementation | 否 | 注意力实现,sdpa 为默认;装 flash-attn 后可换 flash_attention_2 | sdpa |
max_new_tokens | 否 | 生成的最大 token 数,长音频可适当调大 | 2048 |
do_sample | 否 | 是否采样,转写任务建议关闭以保证结果稳定 | False |
如何确认成功
脚本打印出转写文本,且 parse_transcript 逐段输出 start、end、speaker、text,说明模型加载与说话人分离均成功。
常见问题
Q:长音频运行时报显存不足(OOM)怎么办?
A:不要用 eager,它的显存随音频长度平方增长。装上 flash-attn 并把 attn_implementation 设为 flash_attention_2,或退回 sdpa。
Q:对 Python 和 Transformers 版本有要求吗?
A:README 说明项目在 Python 3.12 与 Transformers 5.x 下测试通过,建议按文档用 uv venv --python 3.12 建干净环境。
Q:没有 GPU 能跑吗?
A:可以。resolve_device("auto") 会自动选设备,CPU 上 dtype 会回退为 float32,但速度较慢。
Q:支持哪些语言,能不能标出笑声掌声?
A:支持 50 多种语言;模型是端到端音频理解模型,除转写和说话人分离外,还带时间戳与声学事件感知能力。
注意事项
- 官方另有 MOSS-Transcribe-Diarize Pro,性能更强,可通过在线 playground 使用。
- README 提到项目带有 CLI 和字幕 Web UI(支持中英文),但未给出具体命令,需自行查阅仓库说明。
- 需要微调请参考仓库中的 FINETUNING.md。
- README 明确 CLI 与 Web 应用会自动按 sdpa、flash_attention_2、eager 的顺序挑选最佳后端。
核心亮点
- 模型仅 0.9B 参数,推理成本低,适合边缘部署
- 支持 50+ 语言,覆盖广泛,长音频处理不丢上下文
- 集成说话人分离和时间戳,输出可直接用于字幕制作
不足之处
- 0.9B 模型在极嘈杂或重口音场景下准确率可能不如大模型
- 文档/社区待观察
适用场景
- 会议录音自动生成带说话人标记的会议纪要
- 视频/播客生成多语言字幕及时间轴
- 访谈或客服录音的说话人分离与内容检索
替代项目
WhisperX、pyannote.audio、faster-whisper
项目介绍
上一篇:wenet
下一篇:obs-localvocal
同类项目推荐
obs-localvocal
开源
直播录屏时,本地AI实时生成字幕,保护隐私零延迟
OBS plugin for local speech recognition and captioning using AI
LiveCaptions-Translator
开源
实时捕获系统音频,一键翻译成你懂的语言
Lightweight and powerful real-time audio/speech translation tool based on Windows Li···
speechbrain
开源
一站式 PyTorch 语音工具箱,快速搞定识别、说话人验证等任务
A PyTorch-based Speech Toolkit
whisper-diarization
开源
给语音转写加上说话人标签,会议记录一目了然
Automatic Speech Recognition with Speaker Diarization based on OpenAI Whisper