HuggingFace镜像/granite-speech-4.1-2b-plus
模型介绍文件和版本分析
下载使用量0

Granite-Speech-4.1-2B-Plus

模型概述

Granite-Speech-4.1-2B-Plus 与 Granite-Speech-4.1-2B 模型具有相似的能力。该增强版模型新增了两项社区需求的丰富转录功能,只需简单修改提示词即可激活:带说话人属性的语音识别(说话人标签和词语转录)以及词语级时间信息。与基础模型不同,增强版模型不提供标点符号和大小写转换功能。

该模型的训练语料与 Granite-Speech-4.1-2B 模型相似,并增加了说话人轮次和词语级时间戳标签。这使得模型能够通过不同的提示词控制,提供多种功能模式。

另外还有两个模型变体,分别针对不同的能力和推理优化进行了探索:

  • Granite-Speech-4.1-2B:适用于以准确性为首要考量的应用,支持带标点、大小写转换的转录文本、自动语音翻译(AST)和关键词偏向识别,并包含日语。
  • Granite-Speech-4.1-2B-NAR:采用新颖的非自回归架构,以实现更高的吞吐量。

仅语音识别模式

在此模式下,模型仅生成文本转录,类似于 Granite-Speech-4.1-2B 模型。

带说话人属性的语音识别(SAA)

在此模式下,模型会在每个说话人轮次前添加格式为 [Speaker N]: 的说话人标签,其中 NNN 为说话人编号。说话人按其出现顺序编号,因此第一个说话人始终标记为 [Speaker 1]:,第二个为 [Speaker 2]:,依此类推。例如:"[Speaker 1]: Hello how are you [Speaker 2]: I'm fine and how are you feeling [Speaker 1]: I feel wonderful"。

有关 SAA 的更多信息,请参见 资源。

词级时间戳

在此模式下,模型会在每个单词后添加时间戳标签,标明该单词在音频中的结束位置。静音部分会被转录为 _,其结束位置也会用时间戳标签表示。标签格式为 [T:N],其中 NNN 是一个整数,表示以厘秒(1/100 秒)为单位的时间。为减少生成的 tokens 数量,仅提供 NNN 的后三位数字。这会导致每 10 秒发生一次循环。

将时间 ttt(秒)转换为时间戳的公式为 N=round(t∗100)mod  1000N = round(t*100) \mod 1000N=round(t∗100)mod1000。要转换回秒,使用 t=N/100+10Rt = N/100 + 10Rt=N/100+10R,其中 RRR 是循环计数器。以下是 Python 中的示例实现代码。

有关时间戳的更多信息,请参见 资源。

增量解码

在某些情况下,我们希望将新的音频片段与之前已转录的片段一起进行转录。这有助于为模型提供更长的上下文,从而提高转录准确性,或在 SAA 模式下保持说话人编号。为避免重新解码先前的片段,我们可以在对话模板的 prefix_text 字段中提供先前的转录文本。模型将从该文本之后的部分开始解码。示例代码如下。

关键词列表偏向(KWB)

关键词列表偏向功能可用于增强对关键词(如名称和技术术语)的识别。 这在复杂术语可能被误识别的任务中尤为有用。 可以通过在提示中直接包含关键词来应用关键词偏向;例如,在 ASR 模式下:Can you transcribe the speech into a written format? Keywords: …

用户可以提供单个关键词或关键词列表,其中也可以包含未出现在输入音频中的术语,使其非常适合批量处理或特定领域的重复使用场景。

有关关键词列表偏向的更多信息,请参见 资源。

评估结果

我们的评估显示,该模型在自动语音识别(ASR)和说话人活动检测(SAA)任务中,可良好处理长达9分钟的音频片段;在时间戳任务中,可处理长达5分钟的音频片段。

自动语音识别(ASR)

在 HuggingFace 开放语音识别排行榜 上的表现:

model平均字错误率(WER)AMIEarnings22GigaspeechLS CleanLS OtherSPGISpeechTedliumVoxpopuli
ibm-granite/granite-speech-4.1-2b-plus5.718.638.6810.381.443.063.723.895.9
ibm-granite/granite-speech-4.1-2b5.338.098.379.81.332.53.783.075.7
ibm-granite/granite-speech-4.1-2b-nar5.448.038.4410.161.282.773.333.625.86

(使用 推测解码)

关键词列表偏向准确率 - 关键词 F1 分数(%,↑ 越高越好):

模式GigaspeechLS-CLS-OSPGISpeechVOXTED_LIUMEarnings22CV-enCV-deCV-esCV-frCV-pt
无 KWB74.289.178.280.893.987.968.874.678.583.174.590.0
有 KWB84.196.193.092.596.394.981.591.592.993.990.695.0

说话人归因语音识别

说话人归因语音识别性能 - 词分轨错误率(WDER,%,↓ 数值越低越好):

模型FISHERCALLHOME EnglishAMI-SDMGALE
VibeVoice ASR [1]2.87.127.444.8
Granite-speech-4.1-2b-plus0.92.214.630.2

结果为 2-5 分钟语音片段的平均值。

(评估指标:词分轨错误率 [WDER] 是指单词被错误归因于说话人的百分比)

时间戳

词级时间戳准确性 - 累积平均偏移(AAS,毫秒,↓ 数值越低越好):

模型AMI-IAMI-SLS-CLS-OVOXCVMLSTMTEn AvgMLS-frMLS-esMLS-deMLS-ptCV-frCV-esCV-deCV-ptML Avg
Qwen3-FA [2]48.182.527.829.341.048.434.329.942.738.127.031.226.330.340.029.434.233.3
CrisperWhisper [3]55.764.335.940.147.297.446.442.753.735.628.031.236.862.958.960.983.850.1
Canary-v2 [4]127.8129.792.589.2109.9110.394.386.1105.085.081.180.2–86.888.591.5––
WhisperX [5]107.1150.271.772.078.891.279.263.689.2117.384.7132.275.0104.288.1126.879.5101.0
Granite-speech-4.1-2b-plus43.469.011.414.680.243.324.324.538.845.423.041.347.118.619.319.524.229.8

(评估指标:累积平均偏移 [AAS] 用于衡量每个单词的平均时间偏移)

发布日期

2026年4月28日

许可证

Apache 2.0

支持语言

英语、法语、德语、西班牙语、葡萄牙语

预期用途

该模型旨在用于需要处理语音输入的企业应用,尤其适用于需要包含说话人轮次和时间戳的详细转录场景。特别地,该模型非常适合英语、法语、德语、西班牙语和葡萄牙语的语音转文本任务。

使用方法

Granite Speech模型在transformers>=5.8中得到原生支持。以下是使用该模型不同模式的简单示例。

与transformers配合使用

首先安装PyTorch。

安装transformers。granite-speech-plus模型的代码最近才添加,因此在PyPI包更新之前,您可能需要从源代码安装。

pip install torchaudio datasets accelerate torchcodec

设置 — 加载模型和测试音频片段:

import re
import torch
from datasets import Audio, load_dataset
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor

加载模型并定义用于音频解码的通用函数:

MODEL_NAME = "ibm-granite/granite-speech-4.1-2b-plus"

device = "cuda" if torch.cuda.is_available() else "cpu"
processor = AutoProcessor.from_pretrained(MODEL_NAME)
tokenizer = processor.tokenizer
model = AutoModelForSpeechSeq2Seq.from_pretrained(MODEL_NAME, device_map=device, dtype=torch.bfloat16)
model.eval()

SYSTEM_PROMPT = "Knowledge Cutoff Date: April 2024.\nToday's Date: December 19, 2024.\nYou are Granite, developed by IBM. You are a helpful AI assistant"

@torch.inference_mode()
def transcribe(audio, prompt, max_new_tokens=2000, prefix_text=None):
    chat = [{"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": prompt}]
    extra = {"prefix_text": prefix_text} if prefix_text is not None else {}
    prompt_text = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True, **extra)
    inputs = processor(prompt_text, audio, device=device, return_tensors="pt").to(device)
    outputs = model.generate(**inputs, max_new_tokens=max_new_tokens, do_sample=False, num_beams=1)
    new_tokens = outputs[0, inputs["input_ids"].shape[-1]:]
    output_text = tokenizer.decode(new_tokens, add_special_tokens=False, skip_special_tokens=True)
    return output_text

从 AMI 数据集中加载一些示例音频数据

SAMPLE_RATE = 16000

ds = load_dataset("diarizers-community/ami", "ihm", split="test")
ds = ds.cast_column("audio", Audio(sampling_rate=SAMPLE_RATE, num_channels=1))

TEST_SAMPLE = 0
START_TIME, END_TIME = 5 * 60, 6 * 60
audio = ds["audio"][TEST_SAMPLE].get_samples_played_in_range(START_TIME, END_TIME)

任务 1:ASR — 纯语音转文本转录:

ASR_PROMPT = "<|audio|> can you transcribe the speech into a written format?"

asr_text = transcribe(audio.data, ASR_PROMPT)
print(asr_text)

任务 2:带说话人属性的自动语音识别(Speaker Attributed ASR)——带说话人标签的转录:

SAA_PROMPT = "<|audio|> Speaker attribution: Transcribe and denote who is speaking by adding [Speaker 1]: and [Speaker 2]: tags before speaker turns."

saa_text = transcribe(audio.data, SAA_PROMPT)
for segment in re.split(r"(

$$Speaker \d+$$

:)", saa_text):
    print(segment.strip())

任务 3:单词级时间戳——带逐词计时的转录:

时间戳以厘秒为单位给出,且采用模 1000(=10 秒)的方式,因此我们需要通过添加 10 秒的倍数来对其进行解包。

TS_PROMPT = "<|audio|> Timestamps: Transcribe the speech. After each word, add a timestamp tag showing the end time in centiseconds, e.g. hello [T:45] world [T:82]"

ts_text = transcribe(audio.data, TS_PROMPT, max_new_tokens=10000)
ts_words = re.split(r"

$$T:(\d+)$$

", ts_text)
last_word_end_time = 0
offset_time = 0
for word, ts in zip(ts_words[::2], ts_words[1::2]):
    word_end_time = float(ts) / 100
    while word_end_time + offset_time < last_word_end_time:
        offset_time += 10
    last_word_end_time = word_end_time + offset_time
    print(f"{word}\t{last_word_end_time:.2f}s")

任务 4:增量解码——在累积音频上下文的同时转录片段:

NUM_SEGMENTS = 3
previous_transcript = ""
all_audio = None

for k in range(NUM_SEGMENTS):
    t1 = START_TIME + (END_TIME - START_TIME) * k / NUM_SEGMENTS
    t2 = START_TIME + (END_TIME - START_TIME) * (k + 1) / NUM_SEGMENTS
    new_audio = ds["audio"][TEST_SAMPLE].get_samples_played_in_range(t1, t2)
    all_audio = new_audio.data if all_audio is None else torch.cat([all_audio, new_audio.data], dim=-1)
    saa_text = transcribe(all_audio, SAA_PROMPT, prefix_text=previous_transcript)
    print(f"{t1:06.2f}-{t2:06.2f}:\t{saa_text}")
    previous_transcript = (previous_transcript + " " + saa_text).strip()

模型架构

本模型与 Granite-Speech-4.1-2B 模型采用相同的架构。

训练数据

本模型的训练数据集与 Granite-Speech-4.1-2B 相同。

用于说话人活动检测(SAA)的额外训练数据是利用包含说话人识别信息的数据集(如 Multilingual-Librispeech)中的音频片段创建的。我们将具有交替说话人的片段进行拼接,以生成较长的多说话人样本。

时间戳训练数据

词级时间戳功能的实现,是通过结合多种公开可用的语音语料库:LibriSpeech、MLS(英语、法语、德语、葡萄牙语、西班牙语)、CommonVoice(英语、法语、德语、葡萄牙语、西班牙语)、VoxPopuli(英语、法语、德语、西班牙语)、AMI-IHM、Switchboard、TIMIT 和 YODAS。对于 AMI-IHM、Switchboard 和 TIMIT,我们使用现有的时间戳标注。对于其他所有数据集,我们使用基于 GMM-HMM 的强制对齐工具——蒙特利尔强制对齐器(MFA)来获取词级对齐。我们还使用 MFA 在人工标注的数据集中插入静音边界。

为确保训练数据的高质量,我们使用基于 CTC 的语音编码器进行强制对齐,以此验证 MFA 生成的对齐结果。我们计算 CTC 与 MFA 对齐时间戳(以毫秒为单位)之间的平均绝对误差,即累积平均偏移(AAS),并仅保留对齐误差最低的样本:英语数据保留前 95%,非英语数据保留前 70%。对于较大的数据集(YODAS 和 MLS-英语),我们将训练数据分别限制在 400 万和 500 万样本。

此外,我们通过拼接短片段生成了包含时间戳的长音频样本作为额外训练数据。

模型在训练时,语音识别(ASR)和说话人活动检测(SAA)任务使用的音频样本最长为 10 分钟,时间戳任务使用的音频样本最长为 5 分钟。

基础设施

我们使用 IBM 的超级计算集群 Blue Vela 训练 Granite Speech 模型,该集群配备了 NVIDIA H100 GPU。此集群提供了可扩展且高效的基础设施,支持在数千块 GPU 上训练我们的模型。本模型的训练在 32 块 H100 GPU 上进行,耗时约 5 天完成。

伦理考量与局限性

大型语音和语言模型的使用可能引发特定风险及伦理问题。尽管我们的对齐流程已纳入安全考量,但在某些情况下,模型仍可能对用户提示生成不准确、带有偏见、冒犯性或非预期的响应。此外,小型模型由于规模较小,在生成场景中是否更容易出现幻觉现象,从而限制其生成连贯且上下文准确响应的能力,这一点尚不明确。该方面目前是研究的活跃领域,我们期待在这一领域进行更深入的探索、理解和风险缓解。

IBM 建议将此模型用于自动语音识别和翻译任务。模型设计通过限制音频输入对系统的影响来提升安全性。当接收到不熟悉或格式错误的提示时,模型会直接忽略该提示并执行转录,这是默认的回退模式。与直接解读音频且可能更容易遭受此类攻击的集成模型不同,这种设计将对抗性输入的风险降至最低。请注意,更通用的语音任务可能会带来更高的触发非预期输出的固有风险。

为增强安全性,我们建议将 Granite-Speech-4.1-2B-Plus 与 Granite Guardian 配合使用。Granite Guardian 是一个经过微调的指令模型,旨在根据 IBM AI 风险图谱中概述的关键维度,检测并标记提示和响应中的风险。

资源

  • 📄 阅读论文:
    • Speaker Attributed Automatic Speech Recognition Using Speech Aware LLMS
    • In-Sync: Adaptation of Speech Aware Large Language Models for ASR with Word Level Timestamp Predictions
    • Contextual Biasing for ASR in Speech LLM with Common Word Cues and Bias Word Position Prediction
    • Granite-speech: open-source speech-aware LLMs with strong English ASR capabilities
    • Self-Speculative Decoding for LLM-based ASR with CTC Encoder Drafts
    • NLE: Non-autoregressive LLM-based ASR by Transcript Editing
  • ⭐️ 了解 Granite 的最新更新:https://www.ibm.com/granite
  • 🚀 获取教程、最佳实践和提示工程建议:https://www.ibm.com/granite/docs/
  • 💡 了解最新的 Granite 学习资源:https://ibm.biz/granite-learning-resources

参考文献

[1] VibeVoice-ASR(与Transformers兼容版本)。在线获取:https://huggingface.co/microsoft/VibeVoice-ASR-HF。

[2] X. Shi 等人,“Qwen3-ASR 技术报告”,2026。arXiv

[3] M. Zusag、L. Wagner 与 B. Thallinger,“CrisperWhisper:逐字语音转录的精确时间戳”,收录于《Interspeech 会议论文集》,2024。

[4] M. Sekoyan、N. R. Koluguri、N. Tadevosyan、P. Zelasko、T. Bartley、N. Karpov、J. Balam 与 B. Ginsburg,“Canary-1B-v2 和 Parakeet-TDT-0.6B-v3:用于多语言语音识别和语音翻译的高效高性能模型”,2025。arXiv

[5] M. Bain、J. Huh、T. Han 与 A. Zisserman,“WhisperX:长音频的时间精确语音转录”,2023。arXiv