Konekäännös · Englanninkielinen alkuperäinen
Puhujaupotukset
Uute 256-dimensional L2-normalized kaiutinvektorit, joissa käytetään WeSpeaker ResNet34-LM. Nämä upotukset kuvaavat kaiuttimen ainutlaatuisia ääniominaisuuksia ja niitä voidaan käyttää tunnistamiseen, todentamiseen ja äänihakuun.
Arkkitehtuuri
WeSpeaker ResNet34-LM on syvä jäännösverkko, joka on koulutettu kaiutinten edustuksen oppimiseen.
| Vaihe | Yksityiskohdat |
|---|---|
| Syöte | Conv2d (1-32 kanavaa) |
| ResNet34 | [3, 4, 6, 3] jäännöslohkoja |
| Tilastojen yhdistäminen | Keskihajonta + keskihajonta |
| Ennuste | Lineaarinen (5120-256) |
| Tuotos | L2-normalized 256 dimi upottaminen |
Mallin koko: ~6,6M parametrit, ~25 MB levyllä.
Mel Ominaisuudet
Mallissa käytetään 80-ulotteisia mel-taajuusominaisuuksia, jotka on laskettu Hamming-ikkunalla. Lokiskaalauksessa käytetään yksinkertaista log(max(mel, 1e-10)) kaavaa ilman lisä normalisointia. Erän normalisointi sulautetaan Conv2d kerroksiin konversion aikana, jolloin vaikutustehokkuus saavutetaan.
CLI-käyttö
# 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
Valinnat
| Vaihtoehto | Tavaran kuvaus |
|---|---|
--engine | mlx tai coreml WeSpeaker; redimnet2 nimetyn henkilöllisyyden osalta; camplusplus CosyVoice kloonaaminen |
--json | JSON-ulostulomuoto, jossa on täydellinen upotusvektori |
Nimetty äänitunniste ReDimNet2-B6
Käyttää --engine redimnet2 sovittaa puhdas ääni kautta äänitykset. Se palauttaa 192-ulotteinen normalisoitu upotetaan vähintään kahden sekunnin puheen. Kiinteä kuusi sekuntia CoreML ikkuna toistaa lyhyempiä näytteitä ja keski-roiskeet pidempiä.
ReDimNet2 on nimetty ääniprofiileille. Diarisointi pitää oman WeSpeaker upotukset. ReDimNet2, standalone WeSpeaker ja Community-1 centroideja ei voida verrata toisiinsa.
Käyttötapaukset
Puheenvarmistus
Vertaa kahta audio näytettä määrittää, jos ne ovat samasta kaiuttimesta. Pura kaiuttimet sekä ja laskea kosine samankaltaisuus. Korkeampi samankaltaisuuden pisteet osoittavat suurempi todennäköisyys saman kaiuttimen.
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
Puhujan tunnistus
Ottakaa tuntematon ääninäyte vastaan kirjautuvien kaiuttimien tietokanta.
Äänihaku
Hakemisto kokoelma äänitallenteita kaiuttimella kaiuttimen kaiuttimeen, sitten kyselyn uusi ääninäyte löytää kaikki tallenteet samasta kaiuttimesta.
Kaiuttimet toimivat parhaiten vähintään 2-3 sekunnin puhtaalla puheella. Hyvin lyhyet leikkeet tai äänekkäät tallenteet saattavat tuottaa vähemmän luotettavia upotuksia. Harkitse puheen lisäämistä ensin äänekkäälle audiolle.
Mallilataukset
| Malli | Taustaosa | Koko | HuggingFace |
|---|---|---|---|
| WeSpeaker-ResNet34-LM | MLX | ~25 Mt | aufklarer/WeSpeaker-ResNet34-LM-MLX |
| WeSpeaker-ResNet34-LM | CoreML | ~25 Mt | 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