Csm 1b Hf
芝麻科技会话语音模型(CSM)的Hugging Face实现版本,支持文本转语音和语音克隆任务
下载量 3,974
发布时间 : 3/26/2025
模型简介
这是芝麻科技CSM 1B模型的Hugging Face兼容版本,完全重写了官方实现,支持与Hugging Face生态系统的全面集成,包括推理和训练流程。
模型特点
Hugging Face兼容
完全重写实现以兼容Hugging Face生态系统,支持transformers库的所有功能
两阶段自回归架构
采用帧间处理和帧内处理的双阶段设计,有效建模长距离依赖关系
计算摊销训练
采用解码器训练摊销技术,仅训练部分帧的1-31码本,提高训练效率
多模态输入支持
支持处理交错的文本和音频输入数据
模型能力
文本转语音合成
语音克隆
多码本音频标记化
长距离语音建模
使用案例
语音合成
个性化语音助手
为虚拟助手生成自然的人声响应
可生成带有特定说话者特征的语音
语音内容创作
将文本内容自动转换为语音
支持高质量语音输出
语音克隆
个性化语音克隆
基于少量样本克隆特定说话者的声音特征
示例显示可成功克隆说话者声音
🚀 CSM-1B-HF
CSM-1B-HF是一个基于Hugging Face实现的语音模型,它能将文本转化为语音,为语音合成领域提供了新的解决方案。
🚀 快速开始
CSM-HF是 Sesame的对话语音模型(CSM) 在Hugging Face上的实现。它完全重写了 Sesame提供的PyTorch代码,并且从推理到训练都与Hugging Face的 transformers
库完全兼容。
✨ 主要特性
- 创建了
CSMModel
类。 - 用HF transformers的
LllamaModel
替换了骨干网络和解码器的TorchTune模型。 - 添加了一个处理器类,用于为模型准备输入。
- 增加了标签支持和 解码器训练摊销。
- 为模型类添加了
generate_frame
和generate
方法,用于生成音频。 - 完全支持HuggingFace的
Trainer
。
💻 使用示例
基础用法
你可以使用该模型从文本输入生成音频。以下是一个语音克隆的示例:
import torch
from modeling_csm import CSMModel
from huggingface_hub import hf_hub_download
from transformers import AutoTokenizer
from tokenizers.processors import TemplateProcessing
from moshi.models import loaders
from processor import CSMProcessor
import torchaudio
device = 'cuda'
def load_llama3_tokenizer():
"""
https://github.com/huggingface/transformers/issues/22794#issuecomment-2092623992
"""
tokenizer_name = "meta-llama/Llama-3.2-1B"
tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
bos = tokenizer.bos_token
eos = tokenizer.eos_token
tokenizer._tokenizer.post_processor = TemplateProcessing(
single=f"{bos}:0 $A:0 {eos}:0",
pair=f"{bos}:0 $A:0 {eos}:0 {bos}:1 $B:1 {eos}:1",
special_tokens=[(f"{bos}", tokenizer.bos_token_id), (f"{eos}", tokenizer.eos_token_id)],
)
return tokenizer
text_tokenizer = load_llama3_tokenizer()
mimi_weight = hf_hub_download(loaders.DEFAULT_REPO, loaders.MIMI_NAME)
audio_tokenizer = loaders.get_mimi(mimi_weight, device=device)
audio_tokenizer.set_num_codebooks(32)
processor = CSMProcessor(text_tokenizer, audio_tokenizer)
def load_audio(path, target_sr):
audio, sr = torchaudio.load(path)
audio = audio.squeeze(0)
if sr != target_sr:
audio = torchaudio.functional.resample(audio, orig_freq=sr, new_freq=target_sr)
return audio
model = CSMModel.from_pretrained("thomasgauthier/csm-1b-hf", torch_dtype=torch.bfloat16)
model.to('cuda')
inputs = processor(
messages=[
{
"role": "speaker_0",
"content": [
{"type": "text", "text": "<AUDIO_CLIP_TRANSCRIPT>"},
{"type": "audio"} # This placeholder is required for audio tokenization (it maps to the first element in the `audios` list passed to the processor)
]
},
{
"role": "speaker_0",
"content": [
{"type": "text", "text": "Hello, this is voice cloning speaking"},
# does not include audio as the model will generate it
]
}
],
audios=[load_audio('AUDIO_CLIP_FOR_VOICE_CLONING.wav', audio_tokenizer.sample_rate)],
return_tensors="pt"
)
import torch
with torch.inference_mode():
# Generate up to 50 new frames
gen_frames = model.generate(
input_ids=inputs['input_ids'].cuda(),
attention_mask=inputs['attention_mask'].cuda(),
max_new_frames=50,
topk=50,
temperature=1.0,
use_cache=True,
stop_on_all_zeros=True,
)
decoded_audio = audio_tokenizer.decode(gen_frames.permute(0, 2, 1)).squeeze(0).squeeze(0)
audio_array = (decoded_audio * 32768).to(torch.int16).cpu().numpy()
# Audio can be played with the following code:
# from IPython.display import Audio
# Audio(audio_array, rate=audio_tokenizer.sample_rate)
📚 详细文档
架构
模型架构在 ARCHITECTURE.md 中进行了讨论(由O1编写)。
训练
数据格式
CSM-HF期望训练数据采用JSONL格式,其中每行是一个包含对话的JSON对象。每个对话由以下部分组成:
messages
:消息对象数组,每个对象包含:role
:说话者标识符(例如,"speaker_0","speaker_1")content
:内容对象数组,可以是:- 文本:
{"type": "text", "text": "消息文本"}
- 音频:
{"type": "audio", "url": "音频文件路径.wav"}
- 文本:
training_mask
:布尔数组,指示哪些消息应用于训练(true)或作为上下文(false)
示例数据格式:
{
"messages": [
{
"role": "speaker_0",
"content": [
{"type": "text", "text": "We have a chance for a new life here."},
{"type": "audio", "url": "clips/example_audio.wav"}
]
},
{
"role": "speaker_1",
"content": [
{"type": "text", "text": "Uncle?"},
{"type": "audio", "url": "clips/response_audio.wav"}
]
}
],
"training_mask": [false, true]
}
训练过程
该模型采用两阶段自回归架构:
- 骨干网络(帧间处理):
- 处理整个帧序列
- 每个帧代表所有码本的组合嵌入
- 处理话语之间的长距离依赖关系
- 解码器(帧内处理):
- 一次处理一个帧
- 按顺序生成32个码本(1个语义码本 + 31个声学码本)
- 每个码本被视为序列中的一个标记
训练利用计算摊销技术:
- 第零个(语义)码本在所有帧上进行训练
- 其余码本(1 - 31)仅在
amortization_ratio
的帧上进行训练 - 这在保持质量的同时显著减少了内存使用
要训练模型,请运行以下命令:
python train.py \
--train_file path/to/training_data.jsonl \
--output_dir ./output \
--num_train_epochs 3 \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 8 \
--learning_rate 5e-6
📄 许可证
本项目采用 apache-2.0
许可证。
🔜 待办事项
- [x] 两阶段自回归架构实现
- [x] 多码本音频分词
- [x] 计算摊销以实现高效训练
- [x] 准备包含交错文本/音频的数据集
- [x] 自定义训练循环,分别计算骨干网络/解码器损失
- [x] 正确处理解码器摊销的epoch重复
- [x] 内存优化技术(混合精度、梯度累积)
- [ ] 支持LoRA以实现高效微调
- [ ] 使用
torch.compile
实现更快的推理 - [ ] 通过提示调整/前缀优化实现语音克隆
- [ ] 支持DPO
- [ ] 支持RL(GRPO、RLOO等)
🙏 致谢
特别感谢:
- Sesame Labs 提供原始架构设计和实现
- Hugging Face 提供Transformers库和训练基础设施
- Claude 和 ChatGPT 在文档和代码开发方面提供的帮助
本项目基于开源社区的研究和工具构建。感谢开源社区的协作精神,使这样的项目成为可能。
Kokoro 82M
Apache-2.0
Kokoro是一款拥有8200万参数的开源文本转语音(TTS)模型,以其轻量级架构和高音质著称,同时具备快速和成本效益高的特点。
语音合成 英语
K
hexgrad
2.0M
4,155
XTTS V2
其他
ⓍTTS是一款革命性的语音生成模型,仅需6秒音频片段即可实现跨语言音色克隆,支持17种语言。
语音合成
X
coqui
1.7M
2,630
F5 TTS
F5-TTS 是一个基于流匹配的语音合成模型,专注于流畅且忠实的语音合成,特别适用于童话讲述等场景。
语音合成
F
SWivid
851.49k
1,000
Bigvgan V2 22khz 80band 256x
MIT
BigVGAN是基于大规模训练的通用神经声码器,能够从梅尔频谱生成高质量音频波形。
语音合成
B
nvidia
503.23k
16
Speecht5 Tts
MIT
基于LibriTTS数据集微调的SpeechT5语音合成(文本转语音)模型,支持高质量的文本转语音转换。
语音合成
Transformers

S
microsoft
113.83k
760
Dia 1.6B
Apache-2.0
Dia是由Nari实验室开发的16亿参数文本转语音模型,能够直接从文本生成高度逼真的对话,支持情感和语调控制,并能生成非语言交流内容。
语音合成
Safetensors 英语
D
nari-labs
80.28k
1,380
Csm 1b
Apache-2.0
CSM是Sesame开发的10亿参数规模语音生成模型,可根据文本和音频输入生成RVQ音频编码
语音合成
Safetensors 英语
C
sesame
65.03k
1,950
Kokoro 82M V1.1 Zh
Apache-2.0
Kokoro 是一个开放权重的小型但功能强大的文本转语音(TTS)模型系列,新增了来自专业数据集的100名中文说话人数据。
语音合成
K
hexgrad
51.56k
112
Indic Parler Tts
Apache-2.0
Indic Parler-TTS 是 Parler-TTS Mini 的多语言印度语言扩展版本,支持21种语言,包括多种印度语言和英语。
语音合成
Transformers 支持多种语言

I
ai4bharat
43.59k
124
Bark
MIT
Bark是由Suno创建的基于Transformer的文本转音频模型,能生成高度逼真的多语言语音、音乐、背景噪音和简单音效。
语音合成
Transformers 支持多种语言

B
suno
35.72k
1,326
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98
智启未来,您的人工智能解决方案智库
简体中文