Speaker Embedding
WeSpeaker ResNet34-LM kullanarak 256 boyutlu, L2 ile normalize edilmiş konuşmacı vektörleri çıkarın. Bu embedding'ler bir konuşmacının kendine özgü ses özelliklerini yakalar ve tanıma, doğrulama ile sesli arama için kullanılabilir.
Mimari
WeSpeaker ResNet34-LM, konuşmacı temsili öğrenimi için eğitilmiş derin bir artık ağdır.
| Aşama | Ayrıntılar |
|---|---|
| Giriş | Conv2d (1'den 32 kanala) |
| ResNet34 | [3, 4, 6, 3] artık blokları |
| Stats Pooling | Zaman üzerinden ortalama + standart sapma |
| Projeksiyon | Linear (5120'den 256'ya) |
| Çıkış | L2 ile normalize edilmiş 256 boyutlu embedding |
Model boyutu: ~6.6M parametre, diskte ~25 MB.
Mel Öznitelikleri
Model, Hamming penceresi ile hesaplanan 80 boyutlu mel-frekans öznitelikleri kullanır. Log ölçekleme, ek bir normalizasyon olmadan basit bir log(max(mel, 1e-10)) formülü uygular. Batch normalization, çıkarım verimliliği için dönüştürme zamanında Conv2d katmanlarına füzyonlanır.
CLI Kullanımı
# Speaker embedding çıkar
.build/release/speech embed-speaker voice.wav
# JSON çıkış (256 boyutlu vektörü içerir)
.build/release/speech embed-speaker voice.wav --json
# Çıkarım motorunu seç
.build/release/speech embed-speaker voice.wav --engine coreml
Seçenekler
| Seçenek | Açıklama |
|---|---|
--engine | Çıkarım motoru: mlx veya coreml |
--json | Tam embedding vektörünü içeren JSON çıkış formatı |
Kullanım Durumları
Konuşmacı doğrulama
İki ses örneğinin aynı konuşmacıya ait olup olmadığını belirlemek için karşılaştırın. Her ikisinden embedding çıkarıp kosinüs benzerliğini hesaplayın. Daha yüksek benzerlik puanı, aynı konuşmacı olma olasılığının daha yüksek olduğunu gösterir.
import SpeechVAD
let model = try await WeSpeaker.loadFromHub()
let embedding1 = try await model.embed(audioFile: "sample1.wav")
let embedding2 = try await model.embed(audioFile: "sample2.wav")
let similarity = cosineSimilarity(embedding1, embedding2)
print("Similarity: \(similarity)") // > 0.7 genellikle aynı konuşmacı
Konuşmacı tanıma
Bilinmeyen bir ses örneğini, kayıtlı konuşmacı embedding'lerinden oluşan bir veritabanıyla eşleştirin. Kosinüs benzerliği en yüksek olan kayıtlı konuşmacı, tahmin edilen kimliktir.
Sesli arama
Bir ses kayıtları koleksiyonunu speaker embedding'e göre indeksleyin, ardından aynı konuşmacıdan tüm kayıtları bulmak için yeni bir ses örneğiyle sorgu yapın.
Speaker embedding'ler, en az 2-3 saniyelik temiz konuşmayla en iyi şekilde çalışır. Çok kısa klipler veya gürültülü kayıtlar daha az güvenilir embedding üretebilir. Gürültülü ses için önce konuşma iyileştirme uygulamayı değerlendirin.
Model İndirmeleri
| Model | Backend | Boyut | HuggingFace |
|---|---|---|---|
| WeSpeaker-ResNet34-LM | MLX | ~25 MB | aufklarer/WeSpeaker-ResNet34-LM-MLX |
| WeSpeaker-ResNet34-LM | CoreML | ~25 MB | aufklarer/WeSpeaker-ResNet34-LM-CoreML |
Swift API
import SpeechVAD
let model = try await WeSpeaker.loadFromHub()
// Dosyadan embedding çıkar
let embedding = try await model.embed(audioFile: "voice.wav")
print("Embedding dimensions: \(embedding.count)") // 256
// Ses örneklerinden embedding çıkar
let samples: [Float] = loadAudio("voice.wav")
let embedding = try await model.embed(samples: samples, sampleRate: 16000)