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şamaAyrıntılar
GirişConv2d (1'den 32 kanala)
ResNet34[3, 4, 6, 3] artık blokları
Stats PoolingZaman üzerinden ortalama + standart sapma
ProjeksiyonLinear (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çenekAçıklama
--engineÇıkarım motoru: mlx veya coreml
--jsonTam 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.

Önemli

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

ModelBackendBoyutHuggingFace
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 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)