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