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 секунд

## Ограничения

- Модель оптимизирована для мансийского языка
- Требует референсное аудио для клонирования голоса
- Качество зависит от качества референсного аудио