Llasa 3B
Llasa是一個基於LLaMA的文本轉語音(TTS)系統,通過整合語音標記擴展了語言模型的能力,支持中英文語音生成。
下載量 55
發布時間 : 5/15/2025
模型概述
Llasa是一個文本轉語音(TTS)系統,通過整合來自XCodec2碼本的65,536個語音標記,擴展了基於文本的LLaMA語言模型。該模型能夠僅從輸入文本或利用給定的語音提示生成語音。
模型特點
訓練時和推理時計算擴展
支持在訓練和推理階段進行擴展計算,提高模型性能
多語言支持
支持中文和英文的語音生成
語音提示生成
能夠利用給定的語音提示生成語音
高效訓練
訓練TTS類似於訓練LLM,可利用現有LLM的壓縮、加速和微調方法
模型能力
文本轉語音
語音提示生成
中英文語音合成
使用案例
語音合成
語音助手
為虛擬助手生成自然語音
生成高質量的語音輸出
有聲讀物
將文本內容轉換為語音
生成自然流暢的語音
語音提示應用
語音風格轉換
根據給定的語音提示生成相似風格的語音
保持語音風格一致性
🚀 語音合成模型項目
本項目專注於文本轉語音(TTS)技術,基於強大的基礎模型,能夠高效地將文本轉化為自然流暢的語音。通過獨特的訓練方法和技術架構,為用戶提供高質量的語音合成服務。
🚀 快速開始
- 查看模型集合:點擊查看我們上傳的所有TTS模型。
- 學習微調TTS模型:閱讀指南,瞭解如何微調TTS模型。
- 瞭解Unsloth Dynamic 2.0:Unsloth Dynamic 2.0實現了卓越的準確性,性能優於其他領先的量化方法。
✨ 主要特性
- 支持多基礎模型:基於
meta-llama/Llama-3.2-3B-Instruct
和HKUSTAudio/Llasa-3B
等基礎模型。 - 高性能表現:
Unsloth Dynamic 2.0
實現了卓越的準確性,性能優於其他領先的量化方法。 - 多語言支持:支持中文和英文的語音合成。
📦 安裝指南
安裝 XCodec2。
💻 使用示例
基礎用法
僅從輸入文本進行語音合成:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import soundfile as sf
llasa_3b ='HKUSTAudio/Llasa-3B'
tokenizer = AutoTokenizer.from_pretrained(llasa_3b)
model = AutoModelForCausalLM.from_pretrained(llasa_3b)
model.eval()
model.to('cuda')
from xcodec2.modeling_xcodec2 import XCodec2Model
model_path = "HKUSTAudio/xcodec2"
Codec_model = XCodec2Model.from_pretrained(model_path)
Codec_model.eval().cuda()
input_text = 'Dealing with family secrets is never easy. Yet, sometimes, omission is a form of protection, intending to safeguard some from the harsh truths. One day, I hope you understand the reasons behind my actions. Until then, Anna, please, bear with me.'
# input_text = '突然,身邊一陣笑聲。我看著他們,意氣風發地挺直了胸膛,甩了甩那稍顯肉感的雙臂,輕笑道:"我身上的肉,是為了掩飾我爆棚的魅力,否則,豈不嚇壞了你們呢?"'
def ids_to_speech_tokens(speech_ids):
speech_tokens_str = []
for speech_id in speech_ids:
speech_tokens_str.append(f"<|s_{speech_id}|>")
return speech_tokens_str
def extract_speech_ids(speech_tokens_str):
speech_ids = []
for token_str in speech_tokens_str:
if token_str.startswith('<|s_') and token_str.endswith('|>'):
num_str = token_str[4:-2]
num = int(num_str)
speech_ids.append(num)
else:
print(f"Unexpected token: {token_str}")
return speech_ids
#TTS start!
with torch.no_grad():
formatted_text = f"<|TEXT_UNDERSTANDING_START|>{input_text}<|TEXT_UNDERSTANDING_END|>"
# Tokenize the text
chat = [
{"role": "user", "content": "Convert the text to speech:" + formatted_text},
{"role": "assistant", "content": "<|SPEECH_GENERATION_START|>"}
]
input_ids = tokenizer.apply_chat_template(
chat,
tokenize=True,
return_tensors='pt',
continue_final_message=True
)
input_ids = input_ids.to('cuda')
speech_end_id = tokenizer.convert_tokens_to_ids('<|SPEECH_GENERATION_END|>')
# Generate the speech autoregressively
outputs = model.generate(
input_ids,
max_length=2048, # We trained our model with a max length of 2048
eos_token_id= speech_end_id ,
do_sample=True,
top_p=1, # Adjusts the diversity of generated content
temperature=0.8, # Controls randomness in output
)
# Extract the speech tokens
generated_ids = outputs[0][input_ids.shape[1]:-1]
speech_tokens = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
# Convert token <|s_23456|> to int 23456
speech_tokens = extract_speech_ids(speech_tokens)
speech_tokens = torch.tensor(speech_tokens).cuda().unsqueeze(0).unsqueeze(0)
# Decode the speech tokens to speech waveform
gen_wav = Codec_model.decode_code(speech_tokens)
sf.write("gen.wav", gen_wav[0, 0, :].cpu().numpy(), 16000)
高級用法
利用給定的語音提示進行語音合成:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import soundfile as sf
llasa_3b ='HKUSTAudio/Llasa-3B'
tokenizer = AutoTokenizer.from_pretrained(llasa_3b)
model = AutoModelForCausalLM.from_pretrained(llasa_3b)
model.eval()
model.to('cuda')
from xcodec2.modeling_xcodec2 import XCodec2Model
model_path = "HKUSTAudio/xcodec2"
Codec_model = XCodec2Model.from_pretrained(model_path)
Codec_model.eval().cuda()
# only 16khz speech support!
prompt_wav, sr = sf.read("太乙真人.wav") # you can find wav in Files
#prompt_wav, sr = sf.read("Anna.wav") # English prompt
prompt_wav = torch.from_numpy(prompt_wav).float().unsqueeze(0)
prompt_text ="對,這就是我萬人敬仰的太乙真人,雖然有點嬰兒肥,但也掩不住我逼人的帥氣。"
#promt_text = "A chance to leave him alone, but... No. She just wanted to see him again. Anna, you don't know how it feels to lose a sister. Anna, I'm sorry, but your father asked me not to tell you anything."
target_text = '突然,身邊一陣笑聲。我看著他們,意氣風發地挺直了胸膛,甩了甩那稍顯肉感的雙臂,輕笑道:"我身上的肉,是為了掩飾我爆棚的魅力,否則,豈不嚇壞了你們呢?"'
#target_text = "Dealing with family secrets is never easy. Yet, sometimes, omission is a form of protection, intending to safeguard some from the harsh truths. One day, I hope you understand the reasons behind my actions. Until then, Anna, please, bear with me."
input_text = prompt_text + target_text
def ids_to_speech_tokens(speech_ids):
speech_tokens_str = []
for speech_id in speech_ids:
speech_tokens_str.append(f"<|s_{speech_id}|>")
return speech_tokens_str
def extract_speech_ids(speech_tokens_str):
speech_ids = []
for token_str in speech_tokens_str:
if token_str.startswith('<|s_') and token_str.endswith('|>'):
num_str = token_str[4:-2]
num = int(num_str)
speech_ids.append(num)
else:
print(f"Unexpected token: {token_str}")
return speech_ids
#TTS start!
with torch.no_grad():
# Encode the prompt wav
vq_code_prompt = Codec_model.encode_code(input_waveform=prompt_wav)
print("Prompt Vq Code Shape:", vq_code_prompt.shape )
vq_code_prompt = vq_code_prompt[0,0,:]
# Convert int 12345 to token <|s_12345|>
speech_ids_prefix = ids_to_speech_tokens(vq_code_prompt)
formatted_text = f"<|TEXT_UNDERSTANDING_START|>{input_text}<|TEXT_UNDERSTANDING_END|>"
# Tokenize the text and the speech prefix
chat = [
{"role": "user", "content": "Convert the text to speech:" + formatted_text},
{"role": "assistant", "content": "<|SPEECH_GENERATION_START|>" + ''.join(speech_ids_prefix)}
]
input_ids = tokenizer.apply_chat_template(
chat,
tokenize=True,
return_tensors='pt',
continue_final_message=True
)
input_ids = input_ids.to('cuda')
speech_end_id = tokenizer.convert_tokens_to_ids('<|SPEECH_GENERATION_END|>')
# Generate the speech autoregressively
outputs = model.generate(
input_ids,
max_length=2048, # We trained our model with a max length of 2048
eos_token_id= speech_end_id ,
do_sample=True,
top_p=1,
temperature=0.8,
)
# Extract the speech tokens
generated_ids = outputs[0][input_ids.shape[1]-len(speech_ids_prefix):-1]
speech_tokens = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
# Convert token <|s_23456|> to int 23456
speech_tokens = extract_speech_ids(speech_tokens)
speech_tokens = torch.tensor(speech_tokens).cuda().unsqueeze(0).unsqueeze(0)
# Decode the speech tokens to speech waveform
gen_wav = Codec_model.decode_code(speech_tokens)
# if only need the generated part
# gen_wav = gen_wav[:,:,prompt_wav.shape[1]:]
sf.write("gen.wav", gen_wav[0, 0, :].cpu().numpy(), 16000)
📚 詳細文檔
模型信息
我們的模型Llasa
是一個文本轉語音(TTS)系統,它通過結合來自XCodec2碼本的語音標記,擴展了基於文本的LLaMA(1B、3B和8B)語言模型,該碼本包含65,536個標記。我們在包含250,000小時中英語音數據的數據集上訓練了Llasa
。該模型能夠僅從輸入文本或利用給定的語音提示生成語音。
該方法與Llama框架無縫兼容,使得訓練TTS與訓練大語言模型(LLM)類似(將音頻轉換為單碼本標記,並將其視為一種特殊語言)。這為將現有的用於LLM的壓縮、加速和微調方法應用於TTS提供了可能性。
模型訓練與測試
- 從頭開始訓練:如果您想從頭開始訓練模型,請使用 LLaSA Training Repository。
- 測試時計算擴展:如果您想嘗試在測試時進行計算擴展,請使用 LLaSA Testing Repository。
模型支持情況
屬性 | 詳情 |
---|---|
模型類型 | 文本轉語音(TTS) |
訓練數據 | 250,000小時的中英語音數據 |
支持模型 | Llasa-3B、Whisper Large V3、Qwen3 (14B)、Llama 3.2 Vision (11B) |
模型性能
模型 | 免費筆記本 | 性能 | 內存使用 |
---|---|---|---|
Llasa-3B | ▶️ 在Colab上開始 | 快1.5倍 | 減少58% |
Whisper Large V3 | ▶️ 在Colab上開始 | 快1.5倍 | 減少50% |
Qwen3 (14B) | ▶️ 在Colab上開始 | 快2倍 | 減少70% |
Llama 3.2 Vision (11B) | ▶️ 在Colab上開始 | 快1.8倍 | 減少50% |
更新日誌
- 2025-05-10:有時發現
top_p=0.95
和temperature=0.9
會產生更穩定的結果。 - 2025-02-13:添加 Llasa微調說明。
- 2025-02-07:我們的論文已發佈!LLaSA: Scaling Train-Time and Inference-Time Compute for LLaMA-based Speech Synthesis
📄 許可證
本模型採用CC BY-NC 4.0許可證,由於倫理和隱私問題,禁止免費商業使用;檢測到的違規行為將導致法律後果。
本代碼庫嚴禁在任何國家或地區用於任何非法目的。請參考您當地有關DMCA和其他相關法律的規定。
⚠️ 重要提示
本模型採用CC BY-NC 4.0許可證,禁止免費商業使用,違規將承擔法律後果。代碼庫嚴禁用於非法目的,請遵守當地法律。
💡 使用建議
若想從頭開始訓練模型,可使用 LLaSA Training Repository;若想在測試時進行計算擴展,可使用 LLaSA Testing Repository。在使用模型時,可根據實際情況調整
top_p
和temperature
參數以獲得更穩定的結果。
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