OpenMOSS/MOSS-Transcribe-Diarize
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MOSS-Transcribe-Diarize

MOSS-Transcribe-Diarize 是 OpenMOSS 团队推出的开源语音转写与说话人分离模型。它对长音频、多说话人音频进行统一建模,支持自动语音识别、带说话人标识的转写、说话人分离、时间戳预测以及简洁转录文本生成。

输入音频或视频文件后,MOSS-Transcribe-Diarize 可一次性生成带说话人标识的转录文本,并附带动段时间戳和如 [S01]、[S02]、[S03] 等匿名说话人标签。

新闻

  • 2026.05.21:我们发布了 MOSS-Transcribe-Diarize。

目录

  • 简介
  • 模型架构
  • 已发布模型
  • 评估
  • 快速开始
    • 环境搭建
    • 命令行推理
    • Python 使用
  • 输出格式
  • 更多信息
  • 许可证
  • 引用

简介

长音频语音理解不仅仅是简单的转写。对于会议、通话、播客、访谈、讲座、视频等实际场景的录音,一份有用的转录文本应当明确说了什么、谁在说以及何时说的。

MOSS-Transcribe-Diarize 的设计目标是在单个生成式模型中整合这些能力。

  • 长音频 ASR:将长音频和视频录音转录为文本。
  • 带说话人标识的转写:为每个语音片段添加匿名说话人标签。
  • 说话人分离:直接生成“谁在何时说话”形式的输出,无需独立的分离流水线。
  • 时间戳预测:生成片段级别的开始和结束时间戳。
  • 音视频输入:支持常见音频文件和通过 PyAV 解码的视频容器。
  • 可提示生成:允许用户自定义转写指令。

模型架构

MOSS-Transcribe-Diarize model architecture

MOSS-Transcribe-Diarize 采用模块化的音频-语言设计,包含三个组件:音频编码器、模态适配器和因果语言模型。原始音频被转换为对数梅尔特征,由 Whisper 风格的音频编码器进行编码,通过 MLP 适配器投影到语言模型的嵌入空间,然后由 Qwen3 风格的因果解码器进行自回归文本生成。

模型在文本序列中使用音频占位符令牌。在前向传播过程中,投影后的音频表示会替换相应的占位符嵌入,使语言模型能够根据输入音频生成带时间戳和说话人标识的转录文本。

组件规格
文本骨干Qwen3-0.6B 风格因果解码器
音频编码器Whisper-Medium 编码器配置
音频前端WhisperFeatureExtractor,16 kHz,80 个梅尔 bins,30 秒 chunks
音频-文本适配器4x 时间融合 + MLP 适配器
融合方法音频特征替换 `<
输出格式简洁的 [start][Sxx]text[end] 转录文本

已发布模型

模型音频编码器大语言模型 backboneHugging Face
MOSS-Transcribe-DiarizeWhisper 风格音频编码器Qwen3-0.6B 风格解码器Hugging Face

未来可能会发布更多模型变体,敬请期待!

评估

我们使用字符错误率(CER)、拼接最小排列字符错误率(cpCER)和 Delta-cp 对 MOSS-Transcribe-Diarize 进行评估。所有指标均越低越好。短横线(-)表示结果不可用。

数据集指标豆包ElevenLabsGPT-4oGemini 2.5 ProGemini 3 ProVIBEVOICE ASRMOSS Transcribe Diarize
AISHELL-4CER(↓)18.1819.58-42.7022.7521.4014.19
cpCER(↓)27.8637.95-53.4227.4324.9914.98
Delta-cp(↓)9.6818.36-10.724.683.590.79
PodcastCER(↓)7.938.50-7.38-27.944.46
cpCER(↓)10.5411.34-10.23-48.306.97
Delta-cp(↓)2.612.85-2.85-20.362.50
MoviesCER(↓)9.9411.4914.3715.468.6214.596.58
cpCER(↓)30.8817.8523.6724.1514.7342.5413.68
Delta-cp(↓)20.946.379.318.696.1127.947.24
AlimeetingCER(↓)25.2525.70-27.4326.7527.4024.80
cpCER(↓)37.5736.69-41.6432.8429.3321.51
Delta-cp(↓)12.3110.99-14.216.091.93-0.33

快速开始

环境设置

我们建议使用 Python 3.12 并创建一个干净的 Conda 环境。本仓库使用自定义的 Transformers 模型和处理器代码,因此加载模型和处理器时请始终使用 trust_remote_code=True。

git clone https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize
cd MOSS-Transcribe-Diarize

conda create -n moss-transcribe-diarize python=3.12 -y
conda activate moss-transcribe-diarize

conda install -c conda-forge "ffmpeg=7" -y
pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e ".[torch-runtime]"

可选:如果您的 GPU 支持 FlashAttention 2,请使用以下命令安装可选运行时:

pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e ".[torch-runtime,flash-attn]"

命令行推理

运行贪婪解码:

python infer.py \
  --model OpenMOSS-Team/MOSS-Transcribe-Diarize \
  --audio /path/to/audio_or_video.mp4 \
  --decoding greedy \
  --max-new-tokens 2048

执行采样解码:

python infer.py \
  --model OpenMOSS-Team/MOSS-Transcribe-Diarize \
  --audio /path/to/audio_or_video.mp4 \
  --decoding sample \
  --temperature 0.7 \
  --max-new-tokens 2048

返回 JSON 输出:

python infer.py \
  --model OpenMOSS-Team/MOSS-Transcribe-Diarize \
  --audio /path/to/audio_or_video.mp4 \
  --json

音频文件通过Transformers音频加载器加载。MP4、MOV和MKV等视频容器使用PyAV解码,并在特征提取前重采样为单声道16 kHz。

Python用法

import torch
from transformers import AutoModelForCausalLM, AutoProcessor

from moss_transcribe_diarize.inference_utils import (
    build_transcription_messages,
    generate_transcription,
    resolve_device,
)

model_id = "OpenMOSS-Team/MOSS-Transcribe-Diarize"
audio_path = "/path/to/audio_or_video.mp4"

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",
).to(dtype=dtype).to(device).eval()

processor = AutoProcessor.from_pretrained(
    model_id,
    trust_remote_code=True,
    fix_mistral_regex=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"])

默认提示会要求模型输出每个语音片段的开始时间戳、说话人标签、转录文本和结束时间戳。您可以通过以下方式自定义指令:

messages = build_transcription_messages(
    audio_path,
    prompt="Please transcribe the audio with timestamps and speaker labels.",
)

也可以通过命令行使用 --prompt 来实现相同的操作。

输出格式

标准输出格式如下:

[start_time][Sxx]transcribed speech[end_time]

示例:

[0.48][S01]Welcome everyone[1.66][12.26][S02]The new transcription pipeline is ready for evaluation[13.81][14.36][S01]Great, include the diarization results in the report[18.76]

以下格式说明:

  • start_time 和 end_time 为秒级时间戳。
  • [S01]、[S02] 及类似标签为模型生成的匿名说话人标签。
  • 说话人标签仅为输入音频内的相对标识,不应被解读为真实说话人身份。

更多信息

  • MOSI.AI:https://mosi.cn
  • OpenMOSS:https://www.open-moss.com

许可证

MOSS-Transcribe-Diarize 采用 Apache License 2.0 许可证。

引用

@misc{mosstranscribediarize2026,
      title={MOSS-Transcribe-Diarize},
      author={OpenMOSS Team},
      year={2026},
      howpublished={\url{https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize}},
      note={Hugging Face model repository}
}