mirror of
https://github.com/modelscope/FunASR.git
synced 2026-10-12 02:19:18 +00:00
docs: clarify MOSS speaker-label boundaries
Signed-off-by: LauraGPT <[email protected]>
This commit is contained in:
@@ -13,6 +13,9 @@ MOSS-Transcribe-Diarize jointly generates transcription, timestamps, and
|
||||
speaker labels such as `[S01]`. An application therefore does not need to
|
||||
assemble an external VAD, ASR, and diarization pipeline. This is a deployment
|
||||
property, not a claim that the model has no internal segmentation or chunking.
|
||||
The labels are anonymous within a recording: `[S01]` does not identify a known
|
||||
person, verify an enrolled voiceprint, or necessarily map to `[S01]` in another
|
||||
recording.
|
||||
|
||||
## Pinned sources
|
||||
|
||||
@@ -33,7 +36,7 @@ floating model revision in a production service.
|
||||
Use an isolated Python 3.10+ environment with Transformers 5.6 or newer for
|
||||
the local backend. MOSS performs long-form transcription and speaker
|
||||
diarization in one generation, so do **not** pass `vad_model` or `spk_model`.
|
||||
External VAD segmentation would break the model's global speaker identity
|
||||
External VAD segmentation would break consistent anonymous speaker assignment
|
||||
across chunks.
|
||||
|
||||
```python
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
MOSS-Transcribe-Diarize 会联合生成转写、时间戳和 `[S01]` 等说话人标签,应用侧
|
||||
不必再拼接外部 VAD、ASR 和 diarization 管线。这里描述的是部署形态,不表示模型
|
||||
内部没有分块或分段。
|
||||
这些是单次录音内的匿名说话人标签:`[S01]` 不能识别已知人物,不做已注册声纹
|
||||
验证,也不保证与另一段录音中的 `[S01]` 是同一个人。
|
||||
|
||||
## 固定上游版本
|
||||
|
||||
@@ -28,8 +30,8 @@ MOSS-Transcribe-Diarize 会联合生成转写、时间戳和 `[S01]` 等说话
|
||||
## FunASR AutoModel 契约
|
||||
|
||||
本地后端应使用隔离的 Python 3.10+ 环境,并安装 Transformers 5.6 或更新版本。
|
||||
MOSS 在一次生成中完成长音频转写与说话人识别,因此不要传 `vad_model` 或
|
||||
`spk_model`。外部 VAD 会把长音频切开,并破坏跨分块的全局说话人身份。
|
||||
MOSS 在一次生成中完成长音频转写与说话人分离,因此不要传 `vad_model` 或
|
||||
`spk_model`。外部 VAD 会把长音频切开,并破坏跨分块的匿名标签一致性。
|
||||
|
||||
```python
|
||||
from funasr import AutoModel
|
||||
@@ -323,7 +325,7 @@ for segment in result["sentence_info"]:
|
||||
不要传入 `vad_model` 或 `spk_model`:MOSS 在一次生成中联合完成分段和匿名说话人
|
||||
归属,外部分段会破坏长轮次中的说话人一致性。适配器把上游带标签原文保存在
|
||||
`raw_text`,只从标准化 segment 中移除已经校验的 `[Sxx]` 前缀;如果 SGLang
|
||||
没有返回此前缀,则明确失败,不会伪造说话人身份。
|
||||
没有返回此前缀,则明确失败,不会伪造说话人标签。
|
||||
|
||||
原生 runtime 已通过 SGLang Omni
|
||||
[#914](https://github.com/sgl-project/sglang-omni/pull/914) 合并。其单张 H100
|
||||
|
||||
@@ -37,7 +37,7 @@ The four repositories share models and tooling but their responsibility boundari
|
||||
|---|---|
|
||||
| Use Python for speech recognition / training / fine-tuning | [modelscope/FunASR](https://github.com/modelscope/FunASR) |
|
||||
| Deploy a realtime streaming ASR service, recommend **Fun-ASR-Nano + vLLM** | [modelscope/FunASR/fun_asr_nano](https://github.com/modelscope/FunASR/tree/main/examples/industrial_data_pretraining/fun_asr_nano) — **canonical implementation, see below** |
|
||||
| Transcribe long multi-speaker audio with timestamps and speaker identities in one model pass | [MOSS-Transcribe-Diarize deployment guide](./moss_transcribe_diarize.md) — an OpenMOSS model integrated with FunASR through local Transformers or vLLM, and independently available through native SGLang Omni; no separate external VAD or speaker model |
|
||||
| Transcribe long multi-speaker audio with timestamps and anonymous speaker labels in one model pass | [MOSS-Transcribe-Diarize deployment guide](./moss_transcribe_diarize.md) — an OpenMOSS model integrated with FunASR through local Transformers or vLLM, and independently available through native SGLang Omni; no separate external VAD or speaker model. Labels distinguish speakers within the recording and do not identify a known person. |
|
||||
| Understand Fun-ASR-Nano / MLT capabilities, checkpoints, benchmarks, or use Transformers / vLLM / GGUF integrations | [QwenAudio/Fun-ASR](https://github.com/QwenAudio/Fun-ASR) |
|
||||
| Use emotion recognition / audio event detection | [QwenAudio/SenseVoice](https://github.com/QwenAudio/SenseVoice) |
|
||||
| Generate video subtitles / clip videos | [modelscope/FunClip](https://github.com/modelscope/FunClip) |
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|---|---|
|
||||
| 用 Python 做语音识别 / 训练 / 微调 | [modelscope/FunASR](https://github.com/modelscope/FunASR) |
|
||||
| 部署实时流式 ASR 服务,推荐 Fun-ASR-Nano + vLLM 做实时识别 | [modelscope/FunASR/fun_asr_nano](https://github.com/modelscope/FunASR/tree/main/examples/industrial_data_pretraining/fun_asr_nano) —— **推荐实现,见下节** |
|
||||
| 用一个模型完成长音频多人转写、时间戳与说话人身份识别 | [MOSS-Transcribe-Diarize 部署指南](./moss_transcribe_diarize_zh.md) —— OpenMOSS 模型通过本地 Transformers 或 vLLM 接入 FunASR,也可通过原生 SGLang Omni 独立服务,不需要额外的外部 VAD 或说话人模型 |
|
||||
| 用一个模型完成长音频多人转写、时间戳与匿名说话人标签 | [MOSS-Transcribe-Diarize 部署指南](./moss_transcribe_diarize_zh.md) —— OpenMOSS 模型通过本地 Transformers 或 vLLM 接入 FunASR,也可通过原生 SGLang Omni 独立服务,不需要额外的外部 VAD 或说话人模型。标签只区分本段录音中的说话人,不能识别已知人物。 |
|
||||
| 了解 Fun-ASR-Nano / MLT 的能力范围、权重、评测,或使用 Transformers / vLLM / GGUF 集成 | [QwenAudio/Fun-ASR](https://github.com/QwenAudio/Fun-ASR) |
|
||||
| 需要情感识别 / 音频事件检测 | [QwenAudio/SenseVoice](https://github.com/QwenAudio/SenseVoice) |
|
||||
| 做视频字幕 / 剪辑 | [modelscope/FunClip](https://github.com/modelscope/FunClip) |
|
||||
|
||||
@@ -15,6 +15,24 @@ MATRICES = (
|
||||
ROOT / "docs" / "deployment_matrix_ja.md",
|
||||
ROOT / "docs" / "deployment_matrix_ko.md",
|
||||
)
|
||||
BOUNDARY_DOCS = (
|
||||
*GUIDES,
|
||||
ROOT / "docs" / "repository_roles.md",
|
||||
ROOT / "docs" / "repository_roles_zh.md",
|
||||
ROOT
|
||||
/ "web-pages"
|
||||
/ "product-site"
|
||||
/ "legacy"
|
||||
/ "en"
|
||||
/ "blog"
|
||||
/ "funclip-v2-2-0-moss-speaker-clipping.html",
|
||||
ROOT
|
||||
/ "web-pages"
|
||||
/ "product-site"
|
||||
/ "legacy"
|
||||
/ "blog"
|
||||
/ "funclip-v2-2-0-moss-speaker-clipping.html",
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("guide", GUIDES)
|
||||
@@ -158,3 +176,20 @@ def test_openai_consumer_docs_expose_moss_alias_and_boundaries() -> None:
|
||||
spec = json.loads((root / "openapi.json").read_text(encoding="utf-8"))
|
||||
model = spec["components"]["schemas"]["TranscriptionRequest"]["properties"]["model"]
|
||||
assert "moss-transcribe-diarize" in model["enum"]
|
||||
|
||||
|
||||
def test_moss_docs_describe_anonymous_labels_not_known_person_identity() -> None:
|
||||
combined = "\n".join(path.read_text(encoding="utf-8") for path in BOUNDARY_DOCS)
|
||||
|
||||
for misleading_claim in (
|
||||
"speaker identity",
|
||||
"speaker identities",
|
||||
"说话人身份",
|
||||
"身份识别",
|
||||
):
|
||||
assert misleading_claim not in combined
|
||||
|
||||
assert "anonymous speaker labels" in combined
|
||||
assert "匿名说话人标签" in combined
|
||||
assert "does not identify a known person" in combined
|
||||
assert "不能识别已知人物" in combined
|
||||
|
||||
@@ -24,11 +24,12 @@
|
||||
<body>
|
||||
<nav class="nav"><div class="container"><a class="nav-logo" href="/">Fun<span>ASR</span></a><div class="nav-links"><a href="/deploy/">部署</a><a href="/blog/">博客</a><a href="/ecosystem.html">生态</a></div><a href="/en/blog/funclip-v2-2-0-moss-speaker-clipping.html">EN</a><a class="nav-btn" href="https://github.com/modelscope/FunASR">GitHub</a></div></nav>
|
||||
<article><div class="container">
|
||||
<h1>FunClip v2.2.0:用 MOSS 做长音频说话人识别与视频剪辑</h1>
|
||||
<h1>FunClip v2.2.0:用 MOSS 做长音频说话人分离与视频剪辑</h1>
|
||||
<p class="meta">2026-08-31 · FunClip Release</p>
|
||||
<img class="hero-media" src="/img/funclip-v2-1-0-interface.jpg" alt="FunClip 本地视频、字幕识别和智能剪辑界面">
|
||||
<p class="lead">FunClip v2.2.0 新增一条可选的 MOSS 路径:把长音频交给 vLLM 服务,FunASR 将模型输出归一化为文本、说话人身份和时间段,FunClip 再生成 SRT 或按 <code>spkS01</code>、<code>spkS02</code> 剪辑。</p>
|
||||
<p class="lead">FunClip v2.2.0 新增一条可选的 MOSS 路径:把长音频交给 vLLM 服务,FunASR 将模型输出归一化为文本、匿名说话人标签和时间段,FunClip 再生成 SRT 或按 <code>spkS01</code>、<code>spkS02</code> 剪辑。</p>
|
||||
<p><a href="https://github.com/OpenMOSS/MOSS-Transcribe-Diarize">MOSS-Transcribe-Diarize</a> 是 OpenMOSS 维护的第三方模型,不属于 FunASR 或 FunClip。集成固定使用 <code>OpenMOSS-Team/MOSS-Transcribe-Diarize</code> revision <code>e8681d68e7042738ffca8ac8212bc8fcb1131ab8</code>,并明确保留模型归属与支持边界。</p>
|
||||
<p><code>spkS01</code> 与 <code>spkS02</code> 只是当前录音内的匿名标签,不能识别已知人物、验证已注册声纹,也不保证不同录音中的同名标签对应同一个人。</p>
|
||||
|
||||
<h2>数据路径</h2>
|
||||
<table><thead><tr><th>阶段</th><th>职责</th></tr></thead><tbody>
|
||||
@@ -64,9 +65,9 @@ python funclip/launch.py \
|
||||
|
||||
<h2>能力与边界</h2>
|
||||
<ul>
|
||||
<li>支持长音频 ASR、说话人身份、SRT,以及按说话人剪辑,包括不足一秒的有效短说话片段。</li>
|
||||
<li>支持长音频 ASR、匿名说话人标注、SRT,以及按说话人剪辑,包括不足一秒的有效短说话片段。</li>
|
||||
<li>MOSS 提供段级时间戳,适合按整段或说话人剪辑;任意文本的精确字符级剪辑仍应使用 Paraformer。</li>
|
||||
<li>全局说话人身份依赖模型看到连续音频,因此不接外部 VAD 或说话人模型,避免预切块破坏身份一致性。</li>
|
||||
<li>单次录音内的标签一致性依赖模型看到连续音频,因此不接外部 VAD 或说话人模型,避免预切块破坏标签一致性。</li>
|
||||
<li>如果最后一个 MOSS 片段因 token 上限没有结束时间戳,FunClip 会明确报错并提示提高 <code>--moss-max-tokens</code>,不会静默丢掉尾段。</li>
|
||||
</ul>
|
||||
<p>完整生产部署、健康检查和容量边界见 <a href="/deploy/moss-transcribe-diarize.html">MOSS 双语部署指南</a>。</p>
|
||||
|
||||
@@ -27,8 +27,9 @@
|
||||
<h1>FunClip v2.2.0: Long-Form Speaker-Aware Video Clipping with MOSS</h1>
|
||||
<p class="meta">August 31, 2026 · FunClip Release</p>
|
||||
<img class="hero-media" src="/img/funclip-v2-1-0-interface.jpg" alt="FunClip local video, subtitle recognition, and intelligent clipping interface">
|
||||
<p class="lead">FunClip v2.2.0 adds an opt-in MOSS path: send long audio to a vLLM service, normalize text, speaker identities, and time ranges through FunASR, then generate SRT or clip by <code>spkS01</code>, <code>spkS02</code>, and later speaker IDs.</p>
|
||||
<p class="lead">FunClip v2.2.0 adds an opt-in MOSS path: send long audio to a vLLM service, normalize text, anonymous speaker labels, and time ranges through FunASR, then generate SRT or clip by <code>spkS01</code>, <code>spkS02</code>, and later speaker labels.</p>
|
||||
<p><a href="https://github.com/OpenMOSS/MOSS-Transcribe-Diarize">MOSS-Transcribe-Diarize</a> is a third-party model maintained by OpenMOSS, not a FunASR or FunClip-owned checkpoint. The integration pins <code>OpenMOSS-Team/MOSS-Transcribe-Diarize</code> revision <code>e8681d68e7042738ffca8ac8212bc8fcb1131ab8</code> and keeps ownership and support boundaries explicit.</p>
|
||||
<p><code>spkS01</code> and <code>spkS02</code> distinguish anonymous speakers within the current recording. The model does not identify a known person, verify an enrolled voiceprint, or promise that labels match across separate recordings.</p>
|
||||
|
||||
<h2>Data path</h2>
|
||||
<table><thead><tr><th>Stage</th><th>Responsibility</th></tr></thead><tbody>
|
||||
@@ -64,9 +65,9 @@ python funclip/launch.py \
|
||||
|
||||
<h2>Capabilities and boundaries</h2>
|
||||
<ul>
|
||||
<li>Long-form ASR, speaker identity, SRT, and speaker-based clipping are supported, including valid speaker turns shorter than one second.</li>
|
||||
<li>Long-form ASR, anonymous speaker labeling, SRT, and speaker-based clipping are supported, including valid speaker turns shorter than one second.</li>
|
||||
<li>MOSS provides segment-level timestamps. Use it for whole-segment or speaker clipping; keep Paraformer for precise arbitrary character-level text clipping.</li>
|
||||
<li>Global speaker identity depends on continuous context, so the MOSS path attaches no external VAD or speaker model that would pre-chunk the recording.</li>
|
||||
<li>Consistent speaker assignment within one recording depends on continuous context, so the MOSS path attaches no external VAD or speaker model that would pre-chunk the recording.</li>
|
||||
<li>If the final segment is missing its ending timestamp after token exhaustion, FunClip raises an explicit truncation error and asks for a higher <code>--moss-max-tokens</code> value instead of silently dropping the tail.</li>
|
||||
</ul>
|
||||
<p>See the <a href="/en/deploy/moss-transcribe-diarize.html">bilingual MOSS production guide</a> for health checks, runtime choices, and capacity boundaries.</p>
|
||||
|
||||
Reference in New Issue
Block a user