Kyutai STT 模型简介
一、模型概述
Kyutai STT 是一种用于流式语音转文字(STT,也称为自动语音识别,ASR)的模型。与传统的离线语音转文字不同,该模型能够在接收到几秒钟的音频后,立即开始输出转录文本。
开发团队:Kyutai
模型类型:流式语音转文字转录
支持的语言:kyutai/stt-1b-en_fr 支持英语和法语,kyutai/stt-2.6b-en 支持英语。
许可协议:模型权重采用 CC-BY 4.0 许可。
代码仓库:GitHub。
二、模型详情
该模型采用了基于 Mimi(参见 Moshi 论文)对音频进行分词的 Transformer 架构,输出文本分词。帧率为 12.5Hz,每个音频帧由 32 个音频分词表示。
团队发布了两个模型:
-
kyutai/stt-1b-en_fr:包含约 10 亿参数的英语和法语模型,具有 0.5 秒延迟和语义语音活动检测(VAD)。
-
kyutai/stt-2.6b-en:仅支持英语的模型,包含约 26 亿参数,延迟为 2.5 秒。
Kyutai STT 是一种仅解码器的流式语音转文字模型,利用 Moshi 的多流架构,基于语音流建模文本流。文本流相对于音频流有所偏移,以使模型能够根据输入音频预测文本分词。
三、应用说明
(一)直接使用
该模型可用于流式语音转文字。它对嘈杂环境具有较强的鲁棒性,测试表明它可以处理长达 2 小时的音频而无需额外修改。该模型生成的转录文本包含大写字母和标点符号。通过从帧的偏移量中减去模型的文本流偏移量(0.5 或 2.5 秒),可以恢复预测文本分词的时间戳。
(二)使用 transformers 库
- 从源代码安装 transformers:
pip install git+https://github.com/huggingface/transformers
- 推理代码示例:
import torch
from datasets import load_dataset, Audio
from transformers import KyutaiSpeechToTextProcessor, KyutaiSpeechToTextForConditionalGeneration
# 1. 加载模型和处理器
torch_device = "cuda" if torch.cuda.is_available() else "cpu"
model_id = "kyutai/stt-2.6b-en_fr"
processor = KyutaiSpeechToTextProcessor.from_pretrained(model_id)
model = KyutaiSpeechToTextForConditionalGeneration.from_pretrained(model_id, device_map=torch_device)
# 2. 加载音频样本
ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
ds = ds.cast_column("audio", Audio(sampling_rate=24000))
# 3. 准备模型输入
inputs = processor(ds[0]["audio"]["array"])
inputs.to(torch_device)
# 4. 推理模型
output_tokens = model.generate(**inputs)
# 5. 解码生成的分词
print(processor.batch_decode(output_tokens, skip_special_tokens=True))
- 批量推理代码示例:
import torch
from datasets import load_dataset, Audio
from transformers import KyutaiSpeechToTextProcessor, KyutaiSpeechToTextForConditionalGeneration
# 1. 加载模型和处理器
torch_device = "cuda" if torch.cuda.is_available() else "cpu"
model_id = "kyutai/stt-2.6b-en_fr"
processor = KyutaiSpeechToTextProcessor.from_pretrained(model_id)
model = KyutaiSpeechToTextForConditionalGeneration.from_pretrained(model_id, device_map=torch_device)
# 2. 加载音频样本
ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
ds = ds.cast_column("audio", Audio(sampling_rate=24000))
# 3. 准备模型输入
audio_arrays = [ds[i]["audio"]["array"] for i in range(4)]
inputs = processor(audio_arrays, return_tensors="pt", padding=True)
inputs = inputs.to(torch_device)
# 4. 推理模型
output_tokens = model.generate(**inputs)
# 5. 解码生成的分词
decoded_outputs = processor.batch_decode(output_tokens, skip_special_tokens=True)
for output in decoded_outputs:
print(output)
四、训练细节
(一)训练数据
-
预训练阶段:
- 对于 kyutai/stt-2.6b-en 和 kyutai/stt-1b-en_fr,使用了 250 万小时公开可用的音频内容集合。对于该数据集,通过运行 whisper-timestamped 获得合成转录文本。
-
细化训练阶段:
-
对 kyutai/stt-2.6b-en:
-
在包含真实转录文本的公开数据集上进行细化训练,该数据集包含 24000 小时的音频。
-
长形式细化训练阶段:最后,在前一阶段的数据和长形式音频的组合上进行细化训练。长形式音频来自两个来源:(a)拼接 LibriSpeech 示例(1000 小时),(b)合成对话(22000 小时)。
-
-
对 kyutai/stt-1b-en_fr:
- 在 Fisher 数据集(2000 小时英语音频)和专有数据(英语 1000 小时,法语 600 小时)上进行细化训练。
-
(二)计算基础设施
预训练和细化训练分别使用了 48 和 16 个 Nvidia H100 GPU。