Kartoffel Orpheus 3B German Synthetic V0.1
基於Orpheus-3B的德語文本轉語音(TTS)模型,支持多說話者和情感表達。
下載量 147
發布時間 : 4/5/2025
模型概述
這是一個德語文本轉語音模型,支持合成音色的說話者,並額外提供情感和語氣表達功能。
模型特點
多說話者支持
模型可以從預定義的說話者中選擇不同身份生成語音。
情感表達
支持多種情感表達,如開心、悲傷、興奮等。
語氣表達
支持多種語氣詞,如haha、ughh、wow等。
模型能力
德語文本轉語音
多說話者語音生成
情感化語音合成
語氣詞識別與生成
使用案例
語音合成
有聲讀物
生成帶有情感的有聲讀物內容。
自然且富有情感的語音輸出。
虛擬助手
為虛擬助手提供多說話者和情感化的語音響應。
提升用戶體驗,使交互更加自然。
🚀 卡託菲爾-3B(基於俄耳甫斯-3B) - 合成版
卡託菲爾-3B是一個基於俄耳甫斯-3B的德語文本轉語音(TTS)模型家族,能夠生成多種說話人身份和情感表達的語音,為德語語音合成提供了豐富的選擇。
模型概述
這是一個基於俄耳甫斯-3B的德語文本轉語音(TTS)模型家族,有兩個主要版本:
- 卡託菲爾-3B-自然版:主要在自然人類語音錄音上進行微調,旨在實現逼真的語音效果。數據集基於高質量的德語音頻,包括許可的播客、講座和其他開放教育資源(OER)數據,並通過Emilia風格的管道進行處理。
- 卡託菲爾-3B-合成版:使用合成語音數據進行微調,具有豐富的情感和不同的語氣表達。數據集包含4個不同說話人的多種情感。
目前這個是合成版,適用於合成語音效果,同時支持添加情感和語氣表達。
兩個版本都支持:
- 多說話人:模型可以根據預定義的說話人身份生成不同的語音。
- 多樣表達:能夠根據輸入文本生成具有不同情感基調和表達方式的語音。
合成版可用的說話人和表達
說話人
- 馬丁
- 盧卡
- 安妮
- 艾瑪
情感
為了添加情感,可以使用以下情感類型:
- 中性
- 高興
- 悲傷
- 興奮
- 驚訝
- 幽默
- 憤怒
- 平靜
- 厭惡
- 恐懼
- 驕傲
- 浪漫
使用時,在說話人姓名後面加上情感類型,格式為[說話人姓名] - [情感類型]: [德語文本]
。例如,對於說話人馬丁和悲傷情感,正確的模板是:
馬丁 - 悲傷: 哦,我太傷心了。
語氣表達
以下語氣表達可用:
- 哈哈
- 呃
- 哇
- 嗚呼呼
- 哦哦
可以直接在文本中使用這些語氣表達,也可以將它們放在標籤中。請確保使用確切的文本。
推理
import torch
import torchaudio.transforms as T
import os
import torch
from snac import SNAC
from peft import PeftModel
import soundfile as sf
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"SebastianBodza/Kartoffel_Orpheus-3B_german_synthetic-v0.1",
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained(
"SebastianBodza/Kartoffel_Orpheus-3B_german_synthetic-v0.1",
)
snac_model = SNAC.from_pretrained("hubertsiuzdak/snac_24khz")
snac_model = snac_model.to("cuda")
chosen_voice = "Martin"
prompts = [
'Tief im verwunschenen Wald, wo die Bäume uralte Geheimnisse flüsterten, lebte ein kleiner Gnom namens Fips, der die Sprache der Tiere verstand.',
]
def process_single_prompt(prompt, chosen_voice):
if chosen_voice == "in_prompt" or chosen_voice == "":
full_prompt = prompt
else:
full_prompt = f"{chosen_voice}: {prompt}"
start_token = torch.tensor([[128259]], dtype=torch.int64)
end_tokens = torch.tensor([[128009, 128260]], dtype=torch.int64)
input_ids = tokenizer(full_prompt, return_tensors="pt").input_ids
modified_input_ids = torch.cat([start_token, input_ids, end_tokens], dim=1)
input_ids = modified_input_ids.to("cuda")
attention_mask = torch.ones_like(input_ids)
generated_ids = model.generate(
input_ids=input_ids,
attention_mask=attention_mask,
max_new_tokens=4000,
do_sample=True,
temperature=0.6,
top_p=0.95,
repetition_penalty=1.1,
num_return_sequences=1,
eos_token_id=128258,
use_cache=True,
)
token_to_find = 128257
token_to_remove = 128258
token_indices = (generated_ids == token_to_find).nonzero(as_tuple=True)
if len(token_indices[1]) > 0:
last_occurrence_idx = token_indices[1][-1].item()
cropped_tensor = generated_ids[:, last_occurrence_idx + 1 :]
else:
cropped_tensor = generated_ids
masked_row = cropped_tensor[0][cropped_tensor[0] != token_to_remove]
row_length = masked_row.size(0)
new_length = (row_length // 7) * 7
trimmed_row = masked_row[:new_length]
code_list = [t - 128266 for t in trimmed_row]
return code_list
def redistribute_codes(code_list):
layer_1 = []
layer_2 = []
layer_3 = []
for i in range((len(code_list) + 1) // 7):
layer_1.append(code_list[7 * i])
layer_2.append(code_list[7 * i + 1] - 4096)
layer_3.append(code_list[7 * i + 2] - (2 * 4096))
layer_3.append(code_list[7 * i + 3] - (3 * 4096))
layer_2.append(code_list[7 * i + 4] - (4 * 4096))
layer_3.append(code_list[7 * i + 5] - (5 * 4096))
layer_3.append(code_list[7 * i + 6] - (6 * 4096))
codes = [
torch.tensor(layer_1).unsqueeze(0),
torch.tensor(layer_2).unsqueeze(0),
torch.tensor(layer_3).unsqueeze(0),
]
codes = [c.to("cuda") for c in codes]
audio_hat = snac_model.decode(codes)
return audio_hat
for i, prompt in enumerate(prompts):
print(f"Processing prompt {i + 1}/{len(prompts)}")
with torch.no_grad():
code_list = process_single_prompt(prompt, chosen_voice)
samples = redistribute_codes(code_list)
audio_numpy = samples.detach().squeeze().to("cpu").numpy()
sf.write(f"output_{i}.wav", audio_numpy, 24000)
print(f"Saved output_{i}.wav")
信息表格
屬性 | 詳情 |
---|---|
模型類型 | 基於俄耳甫斯-3B的德語文本轉語音(TTS)模型 |
訓練數據 | 自然版:高質量德語音頻,包括許可的播客、講座和其他開放教育資源(OER)數據;合成版:包含4個不同說話人的多種情感的合成語音數據 |
許可證 | llama3.2 |
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