Maskinöversättning · Engelskt original

Talarinbäddningar

Extrahera 256-dimensionell L2-normalized högtalare vektorer med WeSpeaker ResNet34-LM. Dessa inbäddningar fångar en högtalares unika vokalkaraktärer och kan användas för identifiering, verifiering och röstsökning.

Arkitektur

WeSpeaker ResNet34-LM är ett djupt restnätverk som är utbildat för talrepresentationsinlärning.

StegDetaljer
InputConv2d (1 till 32 kanaler)
ResNet34[3, 4, 6, 3] restblock
Stats PoolingMean + standardavvikelse över tiden
ProjektionLinjär (5120 till 256)
OutputL2-normalized 256-dim inbäddning

Modellstorlek: ~6.6M-parametrar, ~25 MB på disken.

Mel funktioner

Modellen använder 80-dimensionella mel-frekventa funktioner som beräknas med ett Hamming-fönster. Log scaling använder en enkel log(max(mel, 1e-10)) formel utan ytterligare normalisering. Batch normalisering smälts in i Conv2d skikt vid omvandlingstid för inferenseffektivitet.

CLI Användning

# 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

Alternativ

AlternativBeskrivning
--enginemlx eller coreml för WeSpeaker; redimnet2 för namngiven identitet; camplusplus för CosyVoice kloning
--jsonJSON-utgångsformat med full inbäddningsvektor

Namngivna röstidentitet med ReDimNet2-B6

Använd --engine redimnet2 för att matcha en ren röst över inspelningar. Det returnerar en 192-dimensionell normaliserad inbäddning från minst två sekunder av tal. Den fasta sex sekunder CoreML fönster upprepar kortare prover och center-grödor längre.

Separata inbäddningsplatser

ReDimNet2 är för namngivna röstprofiler. Diarization håller sina egna WeSpeaker inbäddningar. ReDimNet2, fristående WeSpeaker, och Community-1 centroids kan inte jämföras med varandra.

Använda fall

Högtalarverifiering

Jämför två ljudprover för att avgöra om de är från samma högtalare. Extrahera inbäddningar från både och beräkna kosinets likhet. En högre likhetspoäng indikerar en högre sannolikhet för samma talare.

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

Högtalaridentifiering

Matcha ett okänt ljudprov mot en databas med inskrivna högtalarinbäddningar. Den inskrivna talaren med högsta kosin likhet är den förutspådda identiteten.

Röstsökning

Index en samling ljudinspelningar genom högtalarinbäddning, sedan fråga med ett nytt ljudprov för att hitta alla inspelningar från samma högtalare.

Viktigt

Högtalare inbäddningar fungerar bäst med rent tal på minst 2-3 sekunder. Mycket korta klipp eller bullriga inspelningar kan producera mindre tillförlitliga inbäddningar. Överväg att tillämpa talförbättring först för bullriga ljud.

Modell nedladdningar

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