Maskinoversettelse · Engelsk original
Talerrepresentasjoner
Uttrekk 256-dimensjonale L2-normalized høyttalervektorer ved bruk av WeSpeaker ResNet34-LM. Disse inneleggerne fanger de unike vokalegenskaperne til en høyttaler og kan brukes til identifikasjon, verifisering og talesøk.
Arkitektur
WeSpeaker ResNet34-LM er et dypt gjenværende nettverk utdannet for høyttalerrepresentasjon læring.
| Stage | Detaljer |
|---|---|
| Inngang | Conv2d (1 til 32 kanaler) |
| ResNet34 | [3, 4, 6, 3] restblokker |
| Statistics Pooling | Gjennomsnittlig + standardavvik over tid |
| Projection | Linear (5120 til 256) |
| Utgang | L2-normalized 256-dim-innbygging |
Modellstørrelse: ~6.6M parametre, ~25 MB på disken.
Mel funksjoner
Modellen bruker 80-dimensjonal mel-frekvens funksjoner beregnet med et Hamming-vindu. Log skalering bruker en enkel log(max(mel, 1e-10)) formel uten ekstra normalisering. Batch normalisering er fusjonert til Conv2d lag ved konverteringstid for inferens effektivitet.
CLI bruk
# 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
Alternativer
| Mulighet | Beskrivelse |
|---|---|
--engine | mlx eller coreml for WeSpeaker; redimnet2 for navngitt identitet; camplusplus for CosyVoice kloning |
--json | JSON-utgangsformat med full innebygge vektor |
Oppkalt stemmeidentitet med ReDimNet2-B6
Bruk --engine redimnet2 for å matche en ren stemme på tvers av opptak. Det returnerer en 192-dimensjonal normalisert innbygging fra minst to sekunders tale. Den faste seks sekunders CoreML -vinduet gjentar kortere prøver og senter-krap lengre.
ReDimNet2 er for navngitte stemmeprofiler. Diarisering holder sine egne WeSpeaker emboliger. ReDimNet2, standalone WeSpeaker og Community-1 centroider kan ikke sammenlignes med hverandre.
Bruk tilfeller
Høyttaler Verifisering
Sammenlign to lydprøver for å bestemme om de er fra samme høyttaler. Ekstrakt innlegg fra både og beregne cosinuslikheten. En høyere likhetsscore indikerer en høyere sannsynlighet for den samme høyttaleren.
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øyttaleridentifikasjon
Match en ukjent lydprøve mot en database med innspillinger av høyttalere. Den registrerte høyttaleren med den høyeste cosinuslikhet er den forutsagte identiteten.
Stemmesøk
Indekser en samling lydopptak ved høyttalerinnbygging, og spør deretter med en ny lydprøve for å finne alle opptak fra samme høyttaler.
Høyttalerinnbygginger fungerer best med ren tale på minst 2-3 sekunder. Svært korte klipp eller støyende opptak kan gi mindre pålitelige innbygginger. Vurder å bruke speech forbedring først for støyende lyd.
Modellnedlastninger
| Modell | Motor | Størrelse | 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