Представьте: в аудиозаписи несколько голосов, и нужно точно определить, кто из них — ваш клиент. Стандартная диаризация лишь разделяет речь по говорящим, но не называет имён. Идентификация говорящего решает эту задачу: по голосовому отпечатку (эмбеддингу) мы находим личность в базе известных дикторов. За 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 рабочий день. Оставьте заявку — мы проведем демонстрацию работы системы на ваших данных.







