स्पीकर एम्बेडिंग

WeSpeaker ResNet34-LM का उपयोग करके 256-dimensional L2-normalized speaker vectors निकालें। ये embeddings एक speaker की अद्वितीय vocal विशेषताओं को कैप्चर करते हैं और पहचान, verification, और voice search के लिए उपयोग किए जा सकते हैं।

आर्किटेक्चर

WeSpeaker ResNet34-LM speaker representation learning के लिए प्रशिक्षित एक deep residual नेटवर्क है।

चरणविवरण
InputConv2d (1 से 32 channels)
ResNet34[3, 4, 6, 3] residual blocks
Stats Poolingसमय पर Mean + standard deviation
ProjectionLinear (5120 से 256)
OutputL2-normalized 256-dim embedding

मॉडल आकार: ~6.6M पैरामीटर, डिस्क पर ~25 MB।

Mel Features

मॉडल Hamming window के साथ कंप्यूट किए गए 80-dimensional mel-frequency features का उपयोग करता है। Log scaling अतिरिक्त normalization के बिना एक सरल log(max(mel, 1e-10)) फ़ॉर्मूला का उपयोग करती है। Batch normalization को इन्फ़रेंस दक्षता के लिए कन्वर्ज़न समय पर Conv2d layers में fuse किया जाता है।

CLI उपयोग

# Extract speaker embedding
.build/release/speech embed-speaker voice.wav

# JSON output (includes the 256-dim vector)
.build/release/speech embed-speaker voice.wav --json

# Choose inference engine
.build/release/speech embed-speaker voice.wav --engine coreml

विकल्प

विकल्पविवरण
--engineइन्फ़रेंस इंजन: mlx या coreml
--jsonपूर्ण embedding vector के साथ JSON आउटपुट फ़ॉर्मैट

उपयोग केस

Speaker Verification

दो ऑडियो samples की तुलना करें यह निर्धारित करने के लिए कि क्या वे एक ही speaker से हैं। दोनों से embeddings निकालें और cosine similarity कंप्यूट करें। उच्च similarity score एक ही speaker की उच्च संभावना को इंगित करता है।

import SpeechVAD

let model = try await WeSpeakerModel.fromPretrained()

let samples1: [Float] = loadAudio("sample1.wav")
let samples2: [Float] = loadAudio("sample2.wav")
let embedding1 = model.embed(audio: samples1, sampleRate: 16000)
let embedding2 = model.embed(audio: samples2, sampleRate: 16000)

let similarity = WeSpeakerModel.cosineSimilarity(embedding1, embedding2)
print("Similarity: \(similarity)")  // > 0.7 typically same speaker

Speaker Identification

एक अज्ञात ऑडियो sample को enrolled speaker embeddings के database के विरुद्ध मिलाएँ। उच्चतम cosine similarity वाला enrolled speaker पूर्वानुमानित पहचान है।

Voice Search

Speaker embedding द्वारा ऑडियो रिकॉर्डिंग के एक संग्रह को index करें, फिर एक नए ऑडियो sample के साथ एक ही speaker से सभी recordings खोजने के लिए query करें।

महत्वपूर्ण

स्पीकर embeddings कम से कम 2-3 सेकंड की साफ़ speech के साथ सबसे अच्छा काम करते हैं। बहुत छोटे clips या noisy recordings कम विश्वसनीय embeddings उत्पन्न कर सकते हैं। noisy ऑडियो के लिए पहले स्पीच एन्हांसमेंट लागू करने पर विचार करें।

मॉडल डाउनलोड

मॉडलबैकएंडआकारHuggingFace
WeSpeaker-ResNet34-LMMLX~25 MBaufklarer/WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML~25 MBaufklarer/WeSpeaker-ResNet34-LM-CoreML

Swift API

import SpeechVAD

let model = try await WeSpeakerModel.fromPretrained()

// Extract embedding from audio samples
let samples: [Float] = loadAudio("voice.wav")
let embedding = model.embed(audio: samples, sampleRate: 16000)
print("Embedding dimensions: \(embedding.count)")  // 256