Дообучение модели TTS на голосе заказчика

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
Дообучение модели TTS на голосе заказчика
Сложный
от 2 недель до 3 месяцев
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    901
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1119
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    853

Дообучение модели TTS на голосе заказчика

Fine-tuning TTS на голосе конкретного человека даёт более стабильный и качественный результат по сравнению с zero-shot клонированием. Подходит для создания масштабируемого брендового голоса с предсказуемым качеством.

Подготовка данных

Минимальный объём для заметного улучшения: 30–60 минут качественных записей.

Структура датасета:
dataset/
  wavs/
    001.wav   # 5–15 секунд
    002.wav
    ...
  metadata.csv  # filename|text
import pandas as pd
from pathlib import Path
import soundfile as sf
import numpy as np

def validate_dataset(dataset_dir: str) -> dict:
    """Проверяем датасет перед обучением"""
    metadata = pd.read_csv(f"{dataset_dir}/metadata.csv",
                           sep="|", names=["file", "text"])
    stats = {
        "total_files": len(metadata),
        "total_duration": 0,
        "errors": []
    }

    for _, row in metadata.iterrows():
        wav_path = f"{dataset_dir}/wavs/{row['file']}.wav"
        if not Path(wav_path).exists():
            stats["errors"].append(f"Missing: {wav_path}")
            continue

        audio, sr = sf.read(wav_path)
        duration = len(audio) / sr
        stats["total_duration"] += duration

        if sr != 22050:
            stats["errors"].append(f"Wrong SR {sr}: {wav_path}")
        if duration < 1.0 or duration > 15.0:
            stats["errors"].append(f"Bad duration {duration:.1f}s: {wav_path}")

    stats["total_duration_min"] = stats["total_duration"] / 60
    return stats

Fine-tuning XTTS v2

from trainer import Trainer, TrainerArgs
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import Xtts

config = XttsConfig()
config.load_json("base_xtts_config.json")

# Параметры fine-tuning
config.audio.output_sample_rate = 24000
config.batch_size = 4
config.eval_batch_size = 2
config.num_loader_workers = 4

# Fine-tuning только decoder (быстрее, меньше данных)
config.trainer_args = {
    "epochs": 100,
    "save_step": 1000,
    "print_step": 50,
    "eval_split_size": 0.1
}

Оценка качества

MOS (Mean Opinion Score) — основная метрика:

  • Baseline XTTS zero-shot: MOS ~3.8
  • После fine-tuning 30 мин данных: MOS ~4.1–4.3
  • После fine-tuning 60+ мин данных: MOS ~4.3–4.5

Объективные метрики:

  • UTMOS: автоматическая оценка натуральности
  • SECS (Speaker Embedding Cosine Similarity): сходство с оригиналом
  • WER на обратном распознавании: разборчивость

Инфраструктура для обучения

Конфигурация Время обучения (30 мин данных) Стоимость
1x A100 80GB ~3–4 часа ~$15 (RunPod)
1x A10G ~6–8 часов ~$8
1x RTX 4090 ~8–12 часов ~$5 (local)

Сроки проекта

  • Сбор и очистка датасета: 1–2 недели
  • Обучение и оценка: 3–5 дней
  • Интеграция и A/B тест: 3–5 дней
  • Итого: 3–4 недели