Уявіть: в аудіозаписі кілька голосів, і потрібно точно визначити, хто з них — ваш клієнт. Стандартна діаризація лише розділяє мовлення за мовцями, але не називає імен. Ідентифікація мовця вирішує це завдання: за голосовим відбитком (ембеддингом) ми знаходимо особу в базі відомих дикторів. За 5 років ми реалізували понад 20 проєктів з ідентифікації мовця для банків, call-центрів та security-систем. Гарантуємо точність вище 95% у промислових умовах. Ми впроваджуємо такі системи під ключ — від прототипу до продакшену з мільйонами голосів.
Проблеми, які вирішуємо
- Низька точність у шумному середовищі — стандартні моделі падають на вуличних записах. Наш пайплайн включає VAD (Voice Activity Detection) та передобробку: ресемплінг до 16 кГц, нормалізацію гучності, видалення тиші. Наприклад, у проєкті для call-центру ми знизили EER з 4.2% до 1.1% лише за рахунок коректного VAD.
- Повільний пошук по великих базах — лінійний перебір ембеддингів неефективний при >10 000 голосів. Використовуємо FAISS з індексом IVF, що дає швидкість пошуку <5 мс на мільйон векторів. Для бази в 2 млн голосів ми отримали latency p99 8 мс. Це привело до зниження витрат на серверне обладнання на 40%.
- Чутливість до тривалості запису — короткі фрази (<2 секунд) знижують якість. Ми пропонуємо адаптивний трешхолд та накопичення ембеддингів з декількох сегментів. В одному з кейсів вдалося досягти точності 91% на фрагментах по 1.5 секунди.
Якщо ви зіткнулися з однією з цих проблем — зв'яжіться з нами, і ми запропонуємо рішення.
Як працює ідентифікація мовця?
Система складається з трьох етапів:
- Реєстрація (enrollment) — для кожного диктора збираємо 3-10 аудіосемплів, вилучаємо ембеддинги через ECAPA-TDNN та усереднюємо.
- Пошук (inference) — на льоту обчислюємо ембеддинг з аудіо, порівнюємо з базою через косинусну відстань.
- Decision — якщо схожість > threshold (наприклад, 0.75), повертаємо ім'я, інакше 'UNKNOWN'.
Audio → VAD → Speaker Encoder → Embedding → Similarity Search → Identity
(ECAPA-TDNN) (d-vector) (cosine / ANN)
Чому ECAPA-TDNN?
ECAPA-TDNN на 30% кращий за попередній стандарт x-vector по EER (Equal Error Rate) на VoxCeleb1 — EER 0.87% проти 1.2%. Він стійкіший до шумів та різних тривалостей. У легких сценаріях (до 1000 дикторів) можна обійтися x-vector, але для SOTA-точності ми обираємо ECAPA-TDNN.
Порівняння підходів до вилучення ембеддингів:
| Метод | EER (VoxCeleb1) | Розмірність | Час інференсу (GPU) | Вимоги до пам'яті |
|---|---|---|---|---|
| i-vector | 5.2% | 400 | — | 200 MB |
| x-vector | 1.2% | 512 | 5 ms | 50 MB |
| ECAPA-TDNN | 0.87% | 192 | 8 ms | 20 MB |
Вилучення speaker embeddings
from speechbrain.pretrained import SpeakerRecognition
import torchaudio
import torch
# ECAPA-TDNN — state-of-the-art архітектура
model = SpeakerRecognition.from_hparams(
source="speechbrain/spkrec-ecapa-voxceleb",
savedir="tmp_spkrec"
)
def get_embedding(audio_path: str) -> torch.Tensor:
signal, sr = torchaudio.load(audio_path)
if sr != 16000:
signal = torchaudio.functional.resample(signal, sr, 16000)
embedding = model.encode_batch(signal)
return embedding.squeeze()
# Реєстрація нового мовця
def register_speaker(name: str, audio_samples: list[str]):
embeddings = [get_embedding(p) for p in audio_samples]
mean_embedding = torch.stack(embeddings).mean(0)
return mean_embedding # зберігаємо в базу
Пошук по базі голосів
import faiss
import numpy as np
# Індекс для швидкого пошуку (мільйони голосів)
index = faiss.IndexFlatIP(192) # cosine similarity через inner product
speaker_names = []
def add_speaker(name: str, embedding: torch.Tensor):
emb_np = embedding.numpy().reshape(1, -1)
faiss.normalize_L2(emb_np)
index.add(emb_np)
speaker_names.append(name)
def identify_speaker(audio_path: str, threshold: float = 0.75) -> str:
embedding = get_embedding(audio_path).numpy().reshape(1, -1)
faiss.normalize_L2(embedding)
distances, indices = index.search(embedding, k=1)
score = float(distances[0][0])
if score >= threshold:
return speaker_names[indices[0][0]]
return "UNKNOWN"
Приклад з практики: аутентифікація в call-центрі
Крупний банк хотів впровадити голосову аутентифікацію клієнтів при дзвінку в підтримку. Основні вимоги: точність >95% на фразах тривалістю 3-5 секунд і latency <200 мс. Ми розгорнули пайплайн на базі ECAPA-TDNN + FAISS IVF100000. Після збору 10 голосових семплів на кожного з 5000 клієнтів та калібрування threshold на відкладеній вибірці, цільові метрики були досягнуті: точність >95% при FAR 1.2%. Проєкт був впроваджений за 3 тижні. Наш багаторічний досвід у галузі ідентифікації мовця дозволив мінімізувати ризики та забезпечити стабільну роботу системи.
Як масштабується база голосів?
EER ECAPA-TDNN на VoxCeleb1: 0.87% — промисловий рівень. При використанні 10+ секунд запису для реєстрації: точність >95% при threshold 0.8. Для баз голосів до 10⁶ використовуємо FAISS з різними індексами. Нижче наведено порівняння індексів FAISS.
| Індекс | Точність Recall@1 | Час пошуку (1M векторів) | Пам'ять (1M векторів) |
|---|---|---|---|
| FlatIP | 100% | 80 ms | 768 MB |
| IVF100000 | 99.2% | 5 ms | 770 MB |
| HNSW64 | 99.5% | 2 ms | 810 MB |
Threshold визначає баланс precision/recall. Для задач аутентифікації (висока безпека) використовуйте 0.85–0.9, для задач пошуку (високий recall) — 0.7–0.75. Рекомендуємо відкласти 20% даних для валідації.
Як ми впроваджуємо систему: покроково
- Аудиторія та збір даних — аналіз сценаріїв використання, збір голосових семплів клієнтів (згода на обробку).
- Проєктування архітектури — вибір моделі (ECAPA-TDNN / x-vector), налаштування FAISS-індексу, визначення threshold.
- Реалізація — написання пайплайну, інтеграція з вашим API/додатком (REST, gRPC).
- Тестування — валідація на реальних записах, метрики precision/recall, навантажувальне тестування.
- Деплой та підтримка — розміщення на сервері/у хмарі, моніторинг latency, навчання вашої команди.
Що входить в роботу
- Вихідний код пайплайну ідентифікації (Python, PyTorch)
- FAST API-сервер для ідентифікації та реєстрації
- Документація з розгортання та налаштування
- Інтеграція з вашим додатком (1-2 точки входу)
- Навчання команди (2 години онлайн)
- Підтримка протягом 1 місяця після здачі
Терміни реалізації
Базова система ідентифікації: від 1 тижня. З FAISS-індексом та управлінням базою голосів: від 2 тижнів. Повний цикл з інтеграцією та тестуванням: 2-4 тижні.
Зв'яжіться з нами для консультації та оцінки вашого проєкту — підберемо оптимальне рішення під вашу задачу. Отримайте безкоштовну оцінку за 1 робочий день. Залиште заявку — ми проведемо демонстрацію роботи системи на ваших даних.







