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ázePodrobnosti
VstupConv2d (1 do 32 kanálů)
ResNet34[3, 4, 6, 3] zbytkové bloky
Stats SdružováníPrůměrná + směrodatná odchylka v čase
ProjekceLineární (5120 až 256)
VýstupL2-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žnostPopis
--enginemlx nebo coreml pro WeSpeaker; redimnet2 pro pojmenovanou identitu; camplusplus pro klonování CosyVoice
--jsonVý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ší.

Oddělené vložkové prostory

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.

Důležité

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

VzorBackendVelikostHuggingFace
WeSpeaker-ResNet34-LMMLX~ 25 MBaufklarer / WeSpeaker-ResNet34-LM-MLX
WeSpeaker-ResNet34-LMCoreML~ 25 MBaufklarer / WeSpeaker-ResNet34-LM-CoreML
ReDimNet2-B6CoreML~ 25 MIBaufklarer / 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