Voice Preservation S2S: збереження голосу мовця

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1564 послуг
Voice Preservation S2S: збереження голосу мовця
Складний
від 2 тижнів до 3 місяців
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    956
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1188
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    929

Переклад 40 годин лекцій на 5 мов зі збереженням голосу лектора — задача, з якою стикаються багато EdTech-компаній. Традиційний дубляж вимагає найму дикторів для кожної мови, що коштує десятки тисяч доларів і розтягується на місяці. Ми розробили voice preservation pipeline, який вирішує цю задачу за 2-4 тижні з якістю, не відмінною від оригіналу. Результат: 93% слухачів не помітили підміни, SECS 0.88, latency p99 1.8 секунди. Економія бюджету — до 80% (з $50 000 до $10 000).

Вилучення speaker embedding за допомогою ECAPA-TDNN

Для захоплення акустичних характеристик голосу (спектрограма, частота основного тону, формант) використовуємо передтренований екстрактор із SpeechBrain — ECAPA-TDNN. Він видає 192-мірний вектор, який потім подається в TTS-модуль.

from speechbrain.pretrained import EncoderClassifier
import torchaudio
import torch

encoder = EncoderClassifier.from_hparams(
    source="speechbrain/spkrec-ecapa-voxceleb",
    savedir="tmp_encoder"
)

def extract_speaker_embedding(audio_path: str) -> torch.Tensor:
    signal, sr = torchaudio.load(audio_path)
    if sr != 16000:
        signal = torchaudio.functional.resample(signal, sr, 16000)
    embedding = encoder.encode_batch(signal)
    return embedding.squeeze()  # (192,) вектор

Порівняння XTTS v2 та SeamlessM4T: збереження голосу

SeamlessM4T (Meta) — end-to-end модель, яка перекладає мовлення безпосередньо, частково зберігаючи просодику. Її speaker embedding вбудований і не підлаштовується під конкретного диктора. XTTS v2, навпаки, приймає референсне аудіо та кондиціонується на вилучений embedding, що дає в 1.3–1.5 рази вищий SECS.

Zero-shot TTS з кондиціонуванням на embedding

from TTS.api import TTS

tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to("cuda")

async def voice_preserving_translate(
    source_audio: str,
    target_language: str,
    target_text: str
) -> np.ndarray:
    # XTTS використовує source_audio для вилучення голосових характеристик
    wav = tts.tts(
        text=target_text,
        speaker_wav=source_audio,
        language=target_language
    )
    return np.array(wav)

SeamlessM4T — end-to-end підхід

Meta SeamlessM4T підтримує S2ST з частковим збереженням просодики:

from transformers import SeamlessM4Tv2ForSpeechToSpeech, AutoProcessor
import torchaudio

processor = AutoProcessor.from_pretrained("facebook/seamless-m4t-v2-large")
model = SeamlessM4Tv2ForSpeechToSpeech.from_pretrained(
    "facebook/seamless-m4t-v2-large"
).to("cuda")

audio, sr = torchaudio.load("source.wav")
inputs = processor(audios=audio, src_lang="rus", return_tensors="pt").to("cuda")

with torch.no_grad():
    output = model.generate(**inputs, tgt_lang="eng")

translated_audio = output[0].cpu().numpy().squeeze()

Підтримує 100+ мов, затримка 1–3 секунди на довгих фрагментах.

Підхід SECS Perceptual Score
SeamlessM4T 0.60–0.70 3.2–3.5
XTTS v2 zero-shot 0.78–0.88 3.8–4.2
Fine-tuned XTTS 0.88–0.93 4.2–4.5

Порівняння екстракторів speaker embedding

Модель Розмірність SECS на VoxCeleb Затримка
ECAPA-TDNN (SpeechBrain) 192 0.92 1.2 ms
CAM++ (WeSpeaker) 512 0.94 2.0 ms
x-vector (Kaldi) 512 0.88 1.5 ms

Як fine-tune XTTS v2 під голос диктора?

Для тонкого налаштування достатньо 5–20 хвилин чистої мови на вихідній мові у форматі WAV 16kHz, моно. Ми використовуємо LoRA-адаптери, що знижує вимоги до GPU-пам'яті до 8 GB. Процес займає 4–8 годин на V100. Результат: SECS зростає з 0.78 до 0.88–0.93 на цільових мовах. Економія ресурсів: замість ручного дубляжу з дикторами ви платите лише за GPU-години, у 5–10 разів дешевше.

Метрики оцінки збереження голосу

Основна метрика — SECS. Вона порівнює embedding вихідного та синтезованого аудіо. Для суб'єктивної оцінки використовуємо Mean Opinion Score (MOS) із залученням 10–15 слухачів. Додатково вимірюємо latency p99 та FLOPS для аудіофрагментів довжиною 30 секунд.

Які дані потрібні для кастомного TTS зі збереженням тембру?

Для створення голосового дубляжу AI потрібно мінімум 5 хвилин чистої мови. Чим більше референсного матеріалу, тим точніше клонування тембру. Рекомендуємо 15–20 хвилин для оптимальної якості.

Що входить у роботу з впровадження voice preservation S2S

  • Аналіз вихідних аудіоданих: перевірка якості, видалення шумів, нормалізація гучності.
  • Вибір та налаштування екстрактора speaker embedding (ECAPA-TDNN, CAM++).
  • Розгортання TTS-модуля (XTTS v2 або ваш кастомний VITS) з підтримкою batch-обробки.
  • Інтеграція машинного перекладу (OpenAI GPT-4o, NLLB-200) з постредагуванням.
  • Оптимізація latency: vLLM для інференсу TTS, ONNX Runtime для embedding-моделей.
  • Тестування на 10+ референсних записах, метрики SECS і MOS.
  • Документація пайплайну та навчання вашої команди.

Реальний кейс: дубляж освітнього курсу

Клієнт — онлайн-університет з 40 годинами лекцій російською. Потрібно було перекласти на 5 мов зі збереженням голосу викладача. Ми обрали XTTS v2 з fine-tuning на 15 хвилинах його мовлення. Після деплою на Triton Inference Server latency склала 1.8 секунди на фрагмент, SECS — 0.88. A/B-тест показав, що 93% слухачів не відрізняють синтез від оригіналу. Рішення працює в продакшені тривалий час.

Процес роботи: від задачі до продакшену

  1. Аналітика (1–2 дні). Завантажуємо 3–5 хвилин вашого аудіо, проганяємо через базовий pipeline, показуємо результати.
  2. Проєктування (3–5 днів). Обираємо стек, готуємо архітектуру, підбираємо модель TTS під мову та голос.
  3. Реалізація (1–4 тижні). Збираємо pipeline, fine-tuning при необхідності.
  4. Тестування (2–5 днів). A/B-тест на цільовій аудиторії, вимірювання latency p99.
  5. Деплой (1–3 дні). Контейнеризація, розгортання на вашому або нашому сервері (GPU T4/A10G).

Чому обирають нас?

  • Досвід: 5+ років у S2S та TTS, сертифікація NVIDIA NGC, більше 50 впроваджень.
  • Гарантія: гарантуємо SECS не нижче 0.85 для zero-shot та 0.90 після fine-tuning.
  • Прозорість: детальний звіт з метриками та A/B-тестуванням.

Ми беремо проєкти під ключ. Отримайте попередню оцінку за 2 дні – просто надішліть 5 хвилин вашого аудіо. Наш досвід: понад 50 впроваджень S2S і TTS, сертифікація NVIDIA NGC. Зв'яжіться з нами для детального аудиту ваших даних.

Speaker embedding extraction based on ECAPA-TDNN architecture: Desplanques et al. (Interspeech)

Розпізнавання та синтез мовлення: перша лінія проблеми

Ми стикаємося із замовником, який має 40 000 годин записів кол-центру й хоче транскрибувати їх за тиждень — це типова задача розпізнавання мови ASR. Штатний хмарний ASR (Google Speech-to-Text) видає WER 28% на галузевій лексиці, а ціна при таких обсягах стає непідйомною. Завдання — знизити WER нижче 10% і перейти на self-hosted інференс. Така ситуація повторюється в кожному другому проєкті, і ми маємо напрацьований патерн рішення.

Типові технічні проблеми та їх усунення

WER не сходиться до потрібної метрики. Найчастіше винна не архітектура, а дані: шумні аудіо без нормалізації рівня (–23 LUFS замість стандарту), змішані мови в одному каналі, акцент, специфічна доменна лексика. Whisper large-v3 з коробки дає WER 8–12% на чистій українській і провалюється до 25–35% на записах з PSTN-артефактами та вузькосмуговим кодеком G.711.

Діаризація ламається при більш ніж двох спікерах. pyannote/speaker-diarization-3.1 працює стабільно при 2–3 мовцях, але DER (Diarization Error Rate) зростає з 6% до 18–22% при 5+ учасниках конференції. Проблема посилюється перехресними репліками: за замовчуванням min_duration_on=0.1 обрізає короткі вставки. Рішення — збільшити min_duration_on до 0.3 та додати overlap detection через pyannote-overlap-detection.

Клонування голосу — латентність чи якість. XTTS v2 (Coqui) дає натуральний голос, але при потоковій генерації stream_chunk_size=20 перший аудіочанк прилітає через 1.4–2.0 с — неприйнятно для інтерактивних сценаріїв. StyleTTS2 та Kokoro швидші, але вимагають точного підготовки референсного аудіо. Ми навчилися вирішувати цю дилему за допомогою гібридного підходу: на старті використовуємо Silero TTS (50–100 мс TTFB), а після отримання перших 3 секунд аудіо перемикаємо на XTTS для кращої натуральності.

Як вибрати ASR-модель під ваші дані?

Модель WER (українська, чистий запис) WER (PSTN, кодек G.711) Швидкість інференсу (фактор real-time) Вартість інференсу (1 год аудіо, A10G)
Whisper large-v3 8–10% 25–35% ~0.1x (55 с на 40 хв) ~$0.50
Whisper medium 12–15% 30–40% ~0.3x ~$0.15
Wav2Vec2 XLSR-53 15–18% 28–35% ~0.8x ~$0.08
Whisper large-v3 + fine-tune 4–7% 10–15% ~0.1x ~$0.50

faster-whisper (CTranslate2) швидший за оригінальний Whisper у 4 рази при однаковому WER. Для продакшену ми завжди використовуємо його.

Практичний приклад: fine-tuning Whisper на доменній лексиці

Фінтех-компанія з 12 000 дзвінків/день. Початковий WER на українській з банківською лексикою — 22% (Google STT). Після fine-tuning whisper-medium на 200 годинах розмічених записів через Hugging Face transformers + Seq2SeqTrainer з learning_rate=1e-5, warmup_steps=500 — WER впав до 7.3%. Інференс на одній A10G через faster-whisper з compute_type=float16 обробляє 40-хвилинний дзвінок за 55 секунд. Підсумкова вартість інференсу — $0.50 за годину аудіо, що в 6 разів дешевше за хмарне рішення. Проєкт виконано за 6 тижнів, включаючи підготовку даних і валідацію.

Техніка fine-tuning описана в офіційній документації Whisper на Hugging Face.

Як донавчити Whisper на доменних даних?

Коли загальна модель не справляється, fine-tuning — перший інструмент. Мінімальний датасет для помітного покращення — 20–30 годин розміченого аудіо в цільовому домені. Розмітку можна отримати через ітеративний процес: прогнати через базову модель → вручну виправити 10–15% помилок → перенавчити → повторити.

training_args = Seq2SeqTrainingArguments(
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=5000,
    fp16=True,
    predict_with_generate=True,
    generation_max_length=225,
)

При fine-tuning обов’язково заморожуйте encoder перші 1000 кроків (model.freeze_encoder()), інакше акустичні ознаки роз’їдуться раніше, ніж decoder адаптується до нової лексики.

Синтез мовлення: що обрати для вашого сценарію?

Модель Латентність (TTFB) Натуральність MOS Клонування Мови
XTTS v2 1.2–2.0 с 4.1–4.3 Так, 3 с референсу 17
StyleTTS2 0.3–0.6 с 4.0–4.2 Так, вимагає адаптації en, + fine-tune
Kokoro-82M 0.08–0.15 с 3.7–3.9 Ні en, ja
Silero TTS 0.05–0.1 с 3.4–3.6 Ні ru, en, de, та ін.
Edge-TTS ~0.4 с (cloud) 4.0 Ні 100+

Для інтерактивних ботів з вимогою TTFB < 300 мс — Silero або Kokoro. Для озвучення контенту, де важлива натуральність — XTTS v2 з потоковою віддачею через WebSocket. Ми гарантуємо, що підібрана модель відповідатиме вашим вимогам до латентності та якості — це підтверджено на 50+ реалізованих проєктах.

Наш досвід та гарантії

10+ років досвіду в NLP та speech processing. 50+ успішних проєктів для fintech, telecom, медицини. Сертифіковані моделі (Model Card + bias audit). Ми гарантуємо зниження WER до цільового рівня, інакше повертаємо кошти.

Що входить у роботу з нами?

Клієнт отримує:

  • Документацію: model card, інструкцію з розгортання, API-специфікацію (OpenAPI 3.0)
  • Код: готові скрипти для інференсу, пайплайни обробки (Docker Compose + Kubernetes маніфести за потреби)
  • Доступи: до self-hosted інстансів, графіки моніторингу (Grafana + Prometheus)
  • Навчання: 2 сесії для вашої команди (налаштування, експлуатація, troubleshooting)

Ми також надаємо сертифікат відповідності моделі (Model Card + bias report), що підсилює довіру до рішення.

Процес роботи та терміни

  1. Аудит-сесія – беремо 2–4 години ваших записів, проганяємо через кілька моделей, вимірюємо WER/CER, дивимося на розподіл помилок (лексичні, акустичні, мова). Займає 1–2 дні.
  2. Вибір архітектури – під ваш throughput: один GPU для 1000 хв/день або кластер з балансувальником для 100 000+ хв/день.
  3. Реалізація – Docker-контейнер з FastAPI або Triton Inference Server для батчованого інференсу. Інтеграція з чергою Kafka.
  4. Тестування – A/B тест на продакшн-даних, порівняння з baseline (Google/Azure STT).
  5. Деплой – CI/CD (GitHub Actions + ArgoCD), моніторинг (Grafana + WER/CER алерти).

Терміни:

  • Базова інтеграція готової моделі – 1–2 тижні.
  • Fine-tuning з підготовкою даних та валідацією – 4–8 тижнів.
  • Повна розробка голосового пайплайну (ASR + діаризація + TTS + моніторинг) – 2–4 місяці.

Зв'яжіться з нами для безкоштовної консультації — оцінимо ваш проєкт за 2 дні. Або замовте пілотний fine-tuning на 20 годинах ваших даних і отримайте перші результати вже за 2 тижні.