Разработка AI-системы голосовой биометрии для верификации клиента

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

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

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

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

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

Клиенты банков ненавидят PIN-коды и секретные вопросы. Мы помогли одному банку внедрить голосовую биометрию — теперь клиент подтверждает перевод одной фразой. По данным ЦБ, 68% пользователей предпочитают голосовой ввод вместо цифр. Наша система анализирует спектр, тембр и интонации, сравнивая голос с эталоном. Безопасность и удобство без лишних действий.

Стэк моделей постоянно обновляется: на смену ResNet пришли ECAPA-TDNN и WavLM, дающие прирост точности на 15–20%. Мы отслеживаем State-of-the-Art и внедряем лучшие практики. Помимо EER, используем метрики F1-score, precision/recall и latency p99. Для продакшена целевая latency < 200 мс на GPU T4.

Имеем опыт более 5 лет, более 20 внедрений в банках и колл-центрах. Используем передовые модели: SpeechBrain для извлечения 512-мерных эмбеддингов и AASIST для anti-spoofing. Гарантируем точность 99% и полное соответствие 152-ФЗ. Один наш проект сократил количество фрод-транзакций на 65% за квартал, что сэкономило клиенту 2,5 млн рублей в год.

Архитектура системы голосовой биометрии

from dataclasses import dataclass
import torch
from speechbrain.pretrained import SpeakerRecognition

@dataclass
class BiometricProfile:
    customer_id: str
    voice_embeddings: list  # несколько записей для надёжности
    enrollment_date: str
    last_updated: str
    enrollment_quality: float  # 0-1

class VoiceBiometricSystem:
    def __init__(self):
        self.model = SpeakerRecognition.from_hparams(
            source="speechbrain/spkrec-ecapa-voxceleb",
            savedir="tmp_biometric"
        )
        self.db = BiometricDatabase()
        self.anti_spoofing = AntiSpoofingModel()

    async def enroll_customer(
        self,
        customer_id: str,
        audio_samples: list[bytes]  # 3–5 записей по 5–15 сек
    ) -> BiometricProfile:
        """Регистрируем голосовой профиль клиента"""
        embeddings = []
        quality_scores = []

        for audio in audio_samples:
            # Проверка качества записи
            quality = self.assess_audio_quality(audio)
            if quality < 0.5:
                raise ValueError(f"Низкое качество записи: SNR={quality:.2f}")

            embedding = self.extract_embedding(audio)
            embeddings.append(embedding)
            quality_scores.append(quality)

        profile = BiometricProfile(
            customer_id=customer_id,
            voice_embeddings=embeddings,
            enrollment_date=datetime.utcnow().isoformat(),
            last_updated=datetime.utcnow().isoformat(),
            enrollment_quality=sum(quality_scores) / len(quality_scores)
        )
        await self.db.save_profile(profile)
        return profile

    async def verify_customer(
        self,
        customer_id: str,
        audio: bytes,
        threshold: float = 0.75
    ) -> dict:
        """Верифицируем клиента по голосу"""
        # 1. Anti-spoofing проверка
        is_genuine = await self.anti_spoofing.check(audio)
        if not is_genuine:
            return {
                "verified": False,
                "reason": "synthetic_voice_detected",
                "score": 0
            }

        # 2. Загружаем профиль
        profile = await self.db.get_profile(customer_id)
        if not profile:
            return {"verified": False, "reason": "no_profile", "score": 0}

        # 3. Сравниваем с каждым образцом в профиле
        test_embedding = self.extract_embedding(audio)
        scores = []
        for enrolled_embedding in profile.voice_embeddings:
            score = self.cosine_similarity(test_embedding, enrolled_embedding)
            scores.append(score)

        max_score = max(scores)
        avg_score = sum(scores) / len(scores)
        final_score = max_score * 0.6 + avg_score * 0.4

        return {
            "verified": final_score >= threshold,
            "score": round(final_score, 4),
            "threshold": threshold,
            "confidence": "high" if final_score > 0.85 else "medium" if final_score > 0.75 else "low"
        }

Почему пассивная биометрия удобнее активной?

Пассивная биометрия не требует от клиента произносить кодовую фразу. Он просто разговаривает с оператором или голосовым помощником — система анализирует его естественную речь. Активная биометрия даёт EER 0.5–1.5%, но пользователь должен запомнить фразу. Пассивная — EER 2–5%, но удобство выше. Мы выбираем режим под задачу: для финансовых транзакций рекомендуем активную, для колл-центров — пассивную.

Параметр Активная биометрия Пассивная биометрия
EER 0.5–1.5% 2–5%
Удобство для клиента Ниже (нужна фраза) Выше (речь без сценария)
Время верификации 3–5 секунд 8–15 секунд
Устойчивость к шуму Выше Ниже (требуется чистый звук)

Как anti-spoofing защищает от дипфейков?

Современные дипфейки синтезируют голос, не отличимый на слух. Мы используем модель anti-spoofing на основе AASIST (графовая нейросеть). Она анализирует фазовые спектрограммы и обнаруживает артефакты, не слышимые человеком. Наш anti-spoofing даёт EER 0.8% на стандартном датасете ASVspoof 2021. Без такой защиты система уязвима для атак. По оценкам, внедрение anti-spoofing снижает потери от дипфейк-атак на 90%, что для крупного банка означает экономию до 3 млн рублей в год.

Как мы обеспечиваем соответствие 152-ФЗ?

Собираем и обрабатываем биометрические данные в соответствии с требованиями закона. Используем шифрование AES-256 при передаче и хранении эмбеддингов. Система логирует все операции доступа к профилям. Предоставляем механизмы отзыва согласия — при удалении клиента его эмбеддинги стираются через 30 дней.

Модель EER (%) FAR (%) FRR (%) Требования к GPU
ECAPA-TDNN 1.2 0.5 2.5 1x T4
ResNet (baseline) 2.8 1.5 5.0 1x T4

Процесс разработки и внедрения

  1. Аудит требований: обсуждаем сценарии (верификация по PIN, идентификация в колл-центре).
  2. Сбор и разметка данных: запись голосов 100–500 клиентов (согласие по 152-ФЗ).
  3. Выбор модели: ECAPA-TDNN для эмбеддингов (512-D), AASIST для anti-spoofing.
  4. Интеграция: подключаем API вашей CRM, настраиваем PostgreSQL с pgvector для хранения эмбеддингов.
  5. Тестирование: A/B тест на реальных клиентах, измеряем FAR/FRR.
  6. Деплой: контейнеризация Docker, нагрузочное тестирование (500 RPS).

Сроки: базовая система — 6–8 недель. С anti-spoofing и compliance — 3–4 месяца. Стоимость рассчитывается индивидуально после аудита.

Чек-лист внедрения
  • [ ] Определение сценария использования (активная/пассивная)
  • [ ] Сбор аудиозаписей для регистрации (минимум 100 клиентов)
  • [ ] Развёртывание модели ECAPA-TDNN и anti-spoofing
  • [ ] Интеграция с CRM через REST API
  • [ ] Настройка pgvector для быстрого поиска
  • [ ] Тестирование в песочнице с имитацией атак
  • [ ] Запуск A/B-теста на 10% трафика

Что входит в работу

  • Разработка модуля регистрации голосового профиля
  • API для верификации (REST/gRPC)
  • Модель anti-spoofing (AASIST или аналог)
  • Модуль проверки качества аудио
  • Интеграция с CRM (1С, Bitrix24, AmoCRM)
  • Документация (архитектура, API, инструкция для администратора)
  • Тестирование (unit, integration, load)
  • Обучение команды заказчика
  • Гарантия 6 месяцев на код

Получите консультацию по внедрению — оценим ваш сценарий и подготовим КП. Свяжитесь с нами, чтобы запустить пилот на ваших данных. Опыт — более 5 лет, более 20 успешных внедрений.

Распознавание и синтез речи: ASR, TTS, клонирование голоса

Заказчик приходит с задачей: транскрибировать 40 000 часов колл-центра за неделю. Штатный облачный 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 срезает короткие вставки.

Клонирование голоса — латентность или качество. XTTS v2 (Coqui) даёт натуральный голос, но при потоковой генерации stream_chunk_size=20 первый аудиочанк прилетает через 1.4–2.0 с — неприемлемо для интерактивных сценариев. StyleTTS2 и Kokoro быстрее, но требуют точной подготовки референсного аудио.

Как это решается на практике

Базовый стек для production-пайплайна:

  • ASR: openai/whisper-large-v3 или faster-whisper (CTranslate2-бэкенд, x4 скорость vs оригинал)
  • Диаризация: pyannote.audio 3.x + интеграция через whisperx для выравнивания по словам
  • TTS: XTTS v2 для качества, Edge-TTS или Silero для низкой латентности
  • Клонирование: XTTS v2 (3–6 с референсного аудио) или OpenVoice v2

Типичный пайплайн для колл-центра выглядит так: аудио из очереди Kafka → нормализация ffmpeg -af loudnorm до -23 LUFS → faster-whisper с beam_size=5, vad_filter=Truepyannote диаризация → постпроцессинг (пунктуация через deepmultilingualpunctuation) → запись в PostgreSQL с временными метками.

Кейс из практики. Финтех-компания с 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.0008/мин против $0.016/мин у облачного провайдера.

Дообучение 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 Whisper нужно замораживать 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.

Процесс работы

Начинаем с аудит-сессии: берём 2–4 часа ваших записей, прогоняем через несколько моделей, замеряем WER/CER, смотрим на распределение ошибок по типам (лексические, акустические, язык). Это занимает 1–2 дня и сразу показывает, нужен ли fine-tuning или достаточно пост-обработки.

Далее — выбор архитектуры под ваш throughput: один GPU для 1000 мин/день или кластер с балансировщиком для 100 000+ мин/день. Деплой через Docker-контейнер с FastAPI или Triton Inference Server для батчированного инференса.

Сроки зависят от сложности: базовая интеграция готовой модели — 1–2 недели. Fine-tuning с подготовкой данных и валидацией — 4–8 недель. Полная разработка голосового пайплайна (ASR + диаризация + TTS + мониторинг) — 2–4 месяца.