File size: 6,159 Bytes
0eab8a7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
---
license: apache-2.0
language:
- mns
- ru
- en
tags:
- text-to-speech
- xtts
- mansi
- finetuned
pipeline_tag: text-to-speech
---
# XTTSv2 Fine-tuned для языка Манси
## Компоненты модели
Модель включает в себя:
- **model.pth** - Основная GPT модель (fine-tuned)
- **dvae.pth** - Discrete Variational AutoEncoder для кодирования/декодирования аудио
- **mel_stats.pth** - Статистики для нормализации мел-спектрограмм
- **vocab.json** - Словарь токенов с поддержкой мансийского языка
- **config.json** - Конфигурация модели
## Датасет
Модель обучена на датасете Mansi TTS, содержащем:
- **Общая продолжительность**: ~21.77 часов аудио
- **Количество записей**: 16,367 аудио файлов
- **Средняя длина записи**: ~4.79 секунд
- **Частота дискретизации**: 48,000 Hz
- **Язык**: Мансийский (mns)
## Использование
### Установка зависимостей
```bash
pip install TTS torch torchaudio
```
### Быстрый старт с TTS API
```python
from TTS.api import TTS
# Загрузка модели
tts = TTS("your_username/mansi-xttsv2")
# Синтез речи
tts.tts_to_file(
text="Ваш текст на мансийском языке",
speaker_wav="path/to/reference_audio.wav",
language="mns",
file_path="output.wav"
)
```
### Продвинутое использование (ручная загрузка)
Для более точного контроля над процессом генерации:
```python
import os
import torch
from tqdm import tqdm
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import Xtts
from TTS.tts.layers.xtts.tokenizer import VoiceBpeTokenizer
import torchaudio
# ----------------- Настройки -----------------
DEVICE = "cuda:0" if torch.cuda.is_available() else "cpu"
# Пути к файлам модели (после загрузки с Hugging Face)
MODEL_DIR = "path/to/downloaded/model"
CHECKPOINT_PATH = os.path.join(MODEL_DIR, "model.pth")
CONFIG_PATH = os.path.join(MODEL_DIR, "config.json")
VOCAB_PATH = os.path.join(MODEL_DIR, "vocab.json")
SPEAKER_FILE = "empty_speakers.pth" # создайте пустой файл или используйте существующий
# ----------------- Загрузка модели -----------------
config = XttsConfig()
config.load_json(CONFIG_PATH)
xtts_model = Xtts.init_from_config(config)
xtts_model.load_checkpoint(
config,
checkpoint_path=CHECKPOINT_PATH,
vocab_path=VOCAB_PATH,
speaker_file_path=SPEAKER_FILE,
use_deepspeed=False
)
xtts_model.tokenizer = VoiceBpeTokenizer(vocab_file=VOCAB_PATH)
xtts_model.to(DEVICE)
xtts_model.eval()
print("✅ Model loaded successfully!")
# ----------------- Подготовка данных -----------------
# Текст для синтеза на мансийском языке
tts_text = "Ты ня̄врамыт нэ̄паканыл хунь ва̄рсанум, то̄нт ла̄вве̄сум, амки нупылум воссыг ул вос хансыянум."
# Референсное аудио (голос для клонирования)
speaker_audio_file = "path/to/reference_audio.wav"
# ----------------- Получение conditioning latents -----------------
gpt_cond_latent, speaker_embedding = xtts_model.get_conditioning_latents(
audio_path=speaker_audio_file,
gpt_cond_len=xtts_model.config.gpt_cond_len,
max_ref_length=xtts_model.config.max_ref_len,
sound_norm_refs=xtts_model.config.sound_norm_refs,
)
# ----------------- Генерация речи -----------------
with torch.no_grad():
wav_chunk = xtts_model.inference(
text=tts_text,
language="mns", # мансийский язык
gpt_cond_latent=gpt_cond_latent,
speaker_embedding=speaker_embedding,
temperature=0.1, # низкая температура для стабильности
length_penalty=1.0,
repetition_penalty=10.0, # высокий penalty против повторов
top_k=10, # ограничение словаря
top_p=0.3, # nucleus sampling
)
# ----------------- Сохранение результата -----------------
output_audio = torch.tensor(wav_chunk["wav"]).cpu()
torchaudio.save("mansi_output.wav", output_audio.unsqueeze(0), 24000)
print("✅ Audio saved as mansi_output.wav")
```
### Параметры генерации
| Параметр | Рекомендуемое значение | Описание |
|----------|----------------------|----------|
| **temperature** | 0.1-0.3 | Низкие значения для стабильности, высокие для разнообразия |
| **repetition_penalty** | 5.0-10.0 | Высокие значения предотвращают повторы |
| **top_k** | 10-50 | Ограничивает выбор токенов |
| **top_p** | 0.3-0.8 | Nucleus sampling threshold |
| **length_penalty** | 1.0 | Контролирует длину генерируемого аудио |
## Технические детали
- **Архитектура**: XTTSv2 (GPT-based)
- **Размер модели**: ~5.6 GB
- **Поддерживаемые языки**: Мансийский (mns) + оригинальные языки XTTSv2
- **Формат аудио**: WAV, 24kHz
- **Максимальная длина текста**: 400 символов
- **Максимальная длина аудио**: ~15 секунд
## Ограничения
- Модель оптимизирована для мансийского языка
- Требует референсное аудио для клонирования голоса
- Качество зависит от качества референсного аудио
|