mansi-xttsv2 / README.md
Chebukkk's picture
Upload README.md
0eab8a7 verified
---
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 секунд
## Ограничения
- Модель оптимизирована для мансийского языка
- Требует референсное аудио для клонирования голоса
- Качество зависит от качества референсного аудио