Konekäännös · Englanninkielinen alkuperäinen

Puhujien erottelu

Tunnista puhujat, kun monikaiutin äänitys. Neljä moottoria on saatavilla: kevyt Pyannote (CLI-oletus), täysi putkijohto Community-1 (CoreML + natiivi PLDA/VBx), suoratoisto Lajittelija (CoreML, Neural Engine) ja Nemotron 3 (CoreML INT8 tai MLX INT8).

Moottorit

Valitse moottori, jossa on --engine pyannote (oletusarvo), --engine community1, --engine sortformer tai --engine nemotron3.

Pyannote (oletusarvo)

Kaksivaiheinen putkisto: Pyannote segmentointiprosessit, jotka ovat päällekkäisiä toimintoperusteisen kaiuttimen ketjutuksen kanssa (Pearson-koostumus päällekkäisillä vyöhykkeillä) kokonaiskaiuttimen tarrojen määrittämiseksi. Post-hoc WeSpeaker upotus mahdollistaa kohdekaiuttimen tunnistamisen ilmoittautumisen äänen avulla.

Community-1 (CoreML + natiivi VBx)

Täysi Pyannote Community-1 CoreML-yhdistelmä : 10 sekunnin PyanNet-segmentointiikkunat etenevät joka sekunti, naamioitu WeSpeaker -panevat syötteen centroid AHC ja 256→128 PLDA-muunnos, jonka jälkeen natiivi Swift VBx ja rajoitettu käyttö tuottavat maailmanlaajuisia klustereita. Se palauttaa yhden 256-ulotteisen centroidin havaittua kaiutinta kohti ja tukee tarkkoja, minimi- tai maksimiäänimääräisiä rajoitteita.

Lajittelija (CoreML)

NVIDIA:n hermojen diarisaatiomalli. Suorana ennustaa enintään 4 kaiuttimen liikettä ilman erillistä upotus- tai ryhmittelyvaihetta. Toimii Neural Engine CoreML:n kautta ja suoratoistotilassa olevat puskurit (FIFO + kaiutinvälimuisti).

Liveääni. SortformerStreamingSession käyttää .streaming Sortformer-malli kehittyy asteittain minkä tahansa kokoisilla 16 kHz mono PCM-puskureilla. Kun 560 ms lookear on saatavilla, se etenee 480 ms-ääniportaissa; viiden tiedoston M-sarjan Neural Engine-pilotti, joka mittaa 12.4:n ms:n mediaanilatenssia 500 Ms:n työntöä kohti. Kaiuttimen tarrat seuraavat saapumis-Order-kaiutinta Cachea jokaisen ikkunan uudelleenklusterien sijaan, ja jokainen push palauttaa koko virtakuvan. finish() puskuroitu häntä huuhtelee. Mallinmukaisessa vastaavuustestissä lopulliset segmentit sopivat kokonaispuskuriin. .streaming diarisaatio yhden 80 ms-rungon sisällä.

Nemotron 3 (CoreML tai MLX

NVIDIA Nemotron 3 ennustaa 10 ms:n kaiutintoiminnan jopa kahdeksalle nimettömälle puhujalle.Lopullinen INT8 vienti latautuu automaattisesti CoreML tai MLX. Oletus CLI-taustatuki on CoreML; valitse MLX --nemotron3-backend mlx. Molemmat tukevat paikallista nippua --nemotron3-directory.

Sisäisessä 132-tallennus diarisation set (12.82 tuntia, 0.25 s kaulus), lähetetty Nemotron 3 MLX sekä CoreML juoksuajat pisteytetyt 10.98% sekä 11.20% Yhdistetty DER, vastaavasti ilman epäonnistumisia. 48 Englantilaisia kokouksia, he tekivät maalin 10.31% sekä 10.24%. Katso kielikohtaisen vertailun ja arvioinnin rajat.

Huomautus

--target-speaker ja --embedding-engine liput ovat saatavilla ainoastaan oletuksena Pyannote moottori. Community-1 palauttaa ryppäiden keskipakot sen Swift API; Järjestäjä ja Nemotron 3 ei tuota kaiuttimia.

Mitatut tulokset diarisaatiojärjestelmissä ja kahdeksassa kielessä, jotka on tehty yhdellä viivoittimella, ks. kaiuttimen diarisaation viitearvot .

Julkaistu CALLHOME-perustaso

Seuraava on NVIDIA:n julkaistu nimetön lähtöarvo diar_streaming_sortformer_4spk-v2. Se on ulkoinen viite, ei paikallinen mittaus speech-swift:n CoreML konversiotulos, ei nimetty kaiutin.

DataaineistoEhtoDER
KESKUSTELU OSA 22 referenssipuhujaa6.57%
KESKUSTELU OSA 23 referenssikaiutinta10.05%
KESKUSTELU OSA 24 viitekaiutinta12.44%

Kaikissa rivissä käytetään 1.04 s:n syöttöpuskurin latenssia, mukaan lukien päällekkäin oleva, 0,25 s:n kaulus ja jälkikäsittely, joka on viritetty dissijoint CALLHOME Part 1. CallHOME on lisensoitu eikä sitä ole niputettu. Paikallinen diarization-bench raportoi vertailukelpoiset tulokset erikseen viitekaiuttimella konsolissa ja JSONissa alle byReferenceSpeakerCount.

Community-1 putkijohto

Community-1 toimii molemmat hermovaiheet, joissa on CoreML ja kaikki isäntäkäsittely Swift, joten se ei kuormita MLX tai vaadi Metal shader-kirjastoa. Julkaistut oletusarvot säilyvät: kovatehoiset dekoodauslaitteet, puhtaat yhden kaiuttimen naamarit, joissa on ylävirtaan suuntautuva lyhytraidekäännös, 0,6 centroid-linkkauskynnys, Fa=0.07, Fb=0.8 ja enintään 20 VBx iteraatiot.

Kiinteässä viiden tiedoston VoxConverse julkaisun subset (1,057.49 sekuntia, 0.25-sekunnin kaulus, päällekkäisyyksiä mukana), Swift lähtö uudelleen pyannote.metrics mitattu 4.66% DER / 21.43% JER; julkaistu CoreML-vertailu mitattuna 4.65% / 21.42%. Tämä on pieni pariteettitarkistus, ei aineisto-koko laatuvaatimus.

Jos speech-swift:n frame-swrid-scorer samasta alaluokasta, Community-1 mitataan 9,31% DER / 16,20% JER, 25.5× reaaliaikainen ja 1,54 GB huippu RSS . Oletusarvo Pyannote moottori mitattuna 5,03% / 9,28%, 105,7× reaaliajassa ja 393 MB . Community-1 on siis valinnainen alkuvaiheen pariteettiputki, jossa on puhujien laskentaraja ja palautettu centroidit, ei yleinen tarkkuus tai nopeuspäivitys.

Pyannote Putkisto

Oletusputkisto toimii kahdessa vaiheessa:

Vaihe 1: Segmentaatio + Puheketjutus

Pyannote segmentation-3.0 prosessit 10 sekunnin liukuikkunat, joissa on 50% päällekkäin. A powerset-dekooderi muuntaa 7-luokan ulostulon todennäköisyyksiksi (jopa 3 paikalliskaiutinta ikkunaa kohti).Lisäikkunoissa on 5 sekunnin päällekkäinen puhuja-identiteetti, joka lisätään ikkunoiden välillä tietokoneella Pearson-korrelaatio todennäköisyysraitojen välillä päällekkäisyydessä vyöhykkeellä, ja ahnea yksinomaista vastaamista yhtenäisten maailmanlaajuisten puhujien tunnisteiden osalta.

Vaihe 2: Post-hoc-exbeding

Diarisoinnin jälkeen WeSpeaker ResNet34-LM ottaa esiin 256-ulotteisen centroidin upottamisen kaiutinta kohti. Nämä kaiuttimen upotteet mahdollistavat kohdekaiuttimen uuttoa (--target-speaker), mutta eivät aja kaiutinta itse.

Muuttaa Pyannote.audio

Jos olet tulossa Python pyannote.audio Kirjasto ... Pipeline alaluokka, joka asettaa pipeline.segmentation = ..., tai siirtyä pois palvelimen hosting pyannote/speaker-diarization-3.1 Soniqo kietoutuu samaan Pyannote-Segmentation-3.0-malliin ja käyttää sitä täysin on-device-laitteella Apple Silicon:llä. Ei Python runtime, ei CUDA:ta, ei Hugging Face tokennusta inference-ajalla.

syannote.audio (Python)Soniqo (Swift)
Pipeline.from_pretrained("pyannote/speaker-diarization-3.1") DiarizationPipeline.fromPretrained()
pipeline(audio_file) pipeline.diarize(audio: samples, sampleRate: 16000)
pipeline.segmentation = ... (custom-alaluokka) Kiinteä: Pyannote-Segmentation-3.0 (MLX tai CoreML, auto-valikoitu)
diarization.itertracks(yield_label=True) for seg in result.segments { ... }
diarization.write_rttm(file) CLI: --rttm
pyannote.metrics.diarization.DiarizationErrorRate CLI: --score-against reference.rttm

Pyannote-Segmentation-3.0 painot muunnetaan yläpuolelta HuggingFace -tarkastuspisteistä, joten segmentointilokit ovat numeerisesti samanarvoisia kelluvan tarkkuuden toleranssin sisällä.Segmentaation jälkeinen ketjutus (earson-koordifikaatio päällekkäisten ikkunoiden välillä + ahneus-yksinomaan matching) ja post-hoc WeSpeaker -testivaiheet toteutetaan uudelleen Swift -menetelmällä, mutta ne tuottavat vertailukelpoisen RTTM-tuotoksen kuin vertailu Python -putkisto.

Ei vielä tuettu

Ei ole streaming OnlineSpeakerDiarization ekvivalenttia Pyannote -moottorille. Reaaliaikaista diarisointia varten käytetään --engine sortformer, joka sen sijaan toimii Järjestäjä-mallilla, jossa on FIFO- ja kaiutinvälimuistipuskurit.

CLI-käyttö

# Basic diarization (pyannote, default)
.build/release/speech diarize meeting.wav

# Community-1 (CoreML + native PLDA/VBx)
.build/release/speech diarize meeting.wav --engine community1
.build/release/speech diarize meeting.wav --engine community1 --num-speakers 2

# End-to-end Sortformer (CoreML)
.build/release/speech diarize meeting.wav --engine sortformer

# Nemotron 3 (CoreML default; MLX optional)
.build/release/speech diarize meeting.wav --engine nemotron3
.build/release/speech diarize meeting.wav --engine nemotron3 --nemotron3-backend mlx

# RTTM output format (for evaluation)
.build/release/speech diarize meeting.wav --rttm

# JSON output
.build/release/speech diarize meeting.wav --json

Kohdekaiuttimen poisto

Tarjoa ilmoittautuminen ääni tunnetun kaiuttimen poimia vain niiden segmentit tallennus. Putki laskee kaiutin upottaa sisääntuloäänen ja löytää klusterin korkein kosine samankaltaisuus.

# Extract segments for a specific speaker
.build/release/speech diarize meeting.wav --target-speaker enrollment.wav

DER-pisteytys

Arvioidaan diarisaation laatua pisteyttämällä RTTM-tiedostoa vastaan. Putkessa lasketaan diarisaatiovirheen nopeus (DER), joka mittaa väärin annetun ajan osuutta.

# Score against reference RTTM
.build/release/speech diarize meeting.wav --score-against reference.rttm

RTTM-tuloste

--rttm -lippu tuottaa Rich Transkriptioaika merkittyä ulostuloa, vakiomuotoa, jota käytetään diarisaation arvioinnissa.

SPEAKER filename 1 start_time duration <NA> <NA> speaker_id <NA> <NA>

Valinnat

Vaihtoehto Tavaran kuvaus
--target-speaker Ilmoittautumisääni kohdekaiuttimen poistoa varten (vain pyannote)
--embedding-engineKaiuttimen upotusmoottori: mlx tai coreml (ainoastaan syannote)
--vad-filter Esisuodatin, jossa Silero VAD (vain pyannote)
--community1-compute-unitsane (oletusarvo), cpu, gpu tai all
--num-speakers Tunnettu tarkka puhujamäärä (Community-1 vain)
--min-speakersMinimikaiutinmäärä (Community-1, oletus 1)
--max-speakersKaiutinten enimmäismäärä (Community-1)
--rttm Tuotos RTTM-muodossa
--jsonJSON- tulostusmuoto
--score-against Viite RTTM-tiedosto DER-arviointia varten
Tärkeää

Diarisointi toimii parhaiten äänityksillä, joissa on selvät kaiuttimen käännökset. Erittäin päällekkäiset puheet voivat vähentää tarkkuutta.

Mallilataukset

Mallit ladataan automaattisesti ensimmäisestä käytöstä:

Osa Malli KokoHuggingFace
SegmentointiPyannote-Segmentation-3.0~5,7 Mtaufklarer/Pyannote-segmentaatio-MLX
Puheenjohtajuuden lisääminenWeSpeaker-ResNet34-LM (MLX)~25 Mtaufklarer/WeSpeaker-ResNet34-LM-MLX
Puheenjohtajuuden lisääminenWeSpeaker-ResNet34-LM (CoreML)~25 Mtaufklarer/WeSpeaker-ResNet34-LM-CoreML
Community-1 putkijohtoPyanNet + naamioitu WeSpeaker + PLDA/VBx~32 Mtaufklarer/Pyannote-Community-1-CoreML
LajittelijaKorjaaja-diarisaatio (CoreML)~240 Mtaufklarer/Sortformer-Diarization-CoreML
Nemotron 3Diarisaatio INT8 (CoreML tai MLX~100 Mt kutakinCoreML · MLX

Swift API

import SpeechVAD

let pipeline = try await DiarizationPipeline.fromPretrained()
let result = pipeline.diarize(audio: samples, sampleRate: 16000)
for seg in result.segments {
    print("Speaker \(seg.speakerId): [\(seg.startTime)s - \(seg.endTime)s]")
}

// Target speaker extraction
let targetEmb = pipeline.embeddingModel.embed(audio: enrollmentAudio, sampleRate: 16000)
let segments = pipeline.extractSpeaker(
    audio: meetingAudio, sampleRate: 16000,
    targetEmbedding: targetEmb
)

// Full Community-1 pipeline with bounded speaker counts
let community1 = try await Community1DiarizationPipeline.fromPretrained()
try community1.prewarm()
let attributed = try community1.diarize(
    audio: meetingAudio,
    sampleRate: 16000,
    speakerBounds: Community1SpeakerBounds(minimum: 2, maximum: 6)
)