|
|
--- |
|
|
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 секунд |
|
|
|
|
|
## Ограничения |
|
|
|
|
|
- Модель оптимизирована для мансийского языка |
|
|
- Требует референсное аудио для клонирования голоса |
|
|
- Качество зависит от качества референсного аудио |
|
|
|