Strojový překlad · Anglický originál
Vektorové reprezentace mluvčích
Extrakt 256- dimenzionální vektory L2-normalized reproduktoru WeSpeaker ResNet34-LM. Tyto vkládání zachycují jedinečné hlasové vlastnosti reproduktoru a mohou být použity pro identifikaci, ověření a vyhledávání hlasu.
Architektura
WeSpeaker ResNet34-LM je hluboká zbytková síť vyškolená pro výuku reprezentace reproduktorů.
| Fáze | Podrobnosti |
|---|---|
| Vstup | Conv2d (1 do 32 kanálů) |
| ResNet34 | [3, 4, 6, 3] zbytkové bloky |
| Stats Sdružování | Průměrná + směrodatná odchylka v čase |
| Projekce | Lineární (5120 až 256) |
| Výstup | L2-normalized 256-dim vkládání |
Velikost modelu: ~ 6.6M parametry, ~ 25 MB na disku.
Vlastnosti Mel
Model používá 80- dimenzionální mel- frekvenční funkce vypočtené s Hammingovým oknem. log(max(mel, 1e-10)) Vzorec bez další normalizace. Normalizace dávky se v čase přeměny pro účinnost inference spojuje s vrstvami Conv2d.
Použití 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
Možnosti
| Možnost | Popis |
|---|---|
--engine | mlx nebo coreml pro WeSpeaker; redimnet2 pro pojmenovanou identitu; camplusplus pro klonování CosyVoice |
--json | Výstupní formát JSON s úplným vložením vektoru |
Jmenovaná hlasová identita se ReDimNet2-B6
Použití --engine redimnet2 aby odpovídal čistému hlasu napříč nahrávkami. Vrací 192- dimenzionální normalizované vložení z nejméně dvou sekund řeči. Pevné šestisekundové okno CoreML opakuje kratší vzorky a center- plodiny delší.
ReDimNet2 je určen pro pojmenované hlasové profily. Diarizace si nechává své vlastní ozdoby WeSpeaker. ReDimNet2, samostatný WeSpeaker a centroidy Community-1 nelze srovnávat s ostatními.
Použít případy
Ověření mluvčího
Porovnejte dva zvukové vzorky pro určení, zda jsou ze stejného reproduktoru. Extrahovat vkládání z obou a vypočítat cosinus podobnost. Vyšší podobnost skóre ukazuje vyšší pravděpodobnost stejného reproduktoru
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
Identifikace mluvčího
Porovnejte neznámou zvukovou ukázku s databází vložených reproduktorů. Zapsaným reproduktorem s nejvyšší kosinovou podobností je předpokládaná identita.
Hlasové vyhledávání
Indexovat kolekci audio nahrávek reproduktorem vkládání, pak dotaz s novým zvukovým vzorkem najít všechny nahrávky ze stejného reproduktoru.
Reproduktor vložení práce nejlépe s čistou řečí alespoň 2-3 sekund. Velmi krátké klipy nebo hlučné nahrávky mohou produkovat méně spolehlivé vložení. Zvažte použití Vylepšení řeči První pro hlučný zvuk.
Stáhnout model
| Vzor | Backend | Velikost | HuggingFace |
|---|---|---|---|
| WeSpeaker-ResNet34-LM | MLX | ~ 25 MB | aufklarer / WeSpeaker-ResNet34-LM-MLX |
| WeSpeaker-ResNet34-LM | CoreML | ~ 25 MB | aufklarer / WeSpeaker-ResNet34-LM-CoreML |
| ReDimNet2-B6 | CoreML | ~ 25 MIB | aufklarer / ReDimNet2-B6-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