תרגום מכונה · המקור באנגלית

הפרדה לפי דוברים

לזהות מי דיבר בעת הקלטה רב-קולרית של ארבעה מנועים זמינים: קל משקל Pyannote (התחילה CLI), במלואה Community-1 (CoreML + Native PLDA/VBx) המונחים (CoreML, Neural Engine) Nemotron 3 (CoreML INT8 או או MLX INT8).

מנועים

בחר את המנוע עם --engine pyannote (default), --engine community1, --engine sortformer, או --engine nemotron3.

Pyannote (default)

צינור שני שלבים: Pyannote תהליכים חופפים חלונות עם רמקולים מבוסס פעילות שרשרתing (Pearson מתאם באזורי חפיפה) כדי להקצות תוויות רמקולים גלובליות. Post-hoc WeSpeakerהטמעת החילוץ מאפשר דובר יעד באמצעות זיהוי באמצעות רישום אודיו.

Community-1 (CoreML + Native VBx)

המלא Pyannote Community-1 CoreML: 10- השני PyanNet פלח חלונות להתקדם כל שנייה WeSpeaker הטמיעו את הזנה של ה-AHC ו-AHC 256→128 PLDA משתנה, ואז יליד Swift VBx ומשימה מוגבלת לייצר אשכולות גלובליים.הוא מחזיר אחד 256- Centroid per Recognized רמקולים ותומכת באופן מדויק, מינימלי, או מקסימום דובר שורות.

(CoreML)

NVIDIA"מודל לדיאריזציה עצבית מקצה לקצה.באופן ישיר צופה פעילות הדוברת לכל מסגרת עבור עד 4 רמקולים ללא שלבים מטביעים או מקובצים נפרדים. Neural Engine באמצעות CoreML עם מטמון המדינה הזרמת (FIFO + רמקולים cache).

עבור אודיו חי, SortformerStreamingSession רץ .streaming מודל מסובייקט עולה בקנה אחד עם 16 kHz מונו PCM buffers של כל גודל. 560 ms Lookahead זמין, הוא מתקדם 480 מדרגות אודיו: 5-file M-series Neural Engine הטייס נמדד 12.4 המונחים: median latency per 500 תוויות מ's Push. Speakers Follow the Arrival-Order Cache במקום לפוצץ מחדש כל חלון, וכל דחיפה מחזירה תמונה של זרם שלם. finish() שטף את הזנב המבולבל. במבחן השוויון של המודל, פלחות סופיות תואמים את כל ה-buffered. .streaming פיזור בתוך מסגרת 80.

Nemotron 3 (CoreML או MLX)

NVIDIA Nemotron 3 צופה כי 10 ms פעילות הדוברת של עד שמונה רמקולים אנונימיים.היצוא INT8 הסופי מוריד באופן אוטומטי מהיצוא של ZXQXQ3XZ. CoreML או או MLXברירת המחדל CLI backend היא CoreML; בחר MLX עם --nemotron3-backend mlxשניהם תומכים בחבילה מקומית דרך --nemotron3-directory.

על פנים 132רישום diarization להגדיר (12.82 שעות, 0.25 צווארון, המשלוח Nemotron 3 MLX ו CoreML הופעות בRuntimesהבקיע 10.98% ו 11.20% ב-DER, בהתאמה, ללא תקלות. 48 מפגשים אנגליים, הם זכו 10.31% ו 10.24%ראה את השוואות שפה ומגבלות הערכה.

Note Note

The The The --target-speaker ו --embedding-engine דגלים זמינים רק עם ברירת המחדל Pyannote מנוע Community-1 מחזירים את הצפרדעים דרך Swift APIהמונחים: miter and Nemotron 3 אל תפיקו רמקולים מטביעות.

עבור תוצאות נמדדות על פני מערכות הדיאריזציה ושמונה שפות, הבקיע עם שליט אחד, ראה את מדד הסימון רמקולer diarization .

מוציא לאור CALLHOME Baseline

הבא הוא NVIDIA's מפרסם בסיס רמקולים נאמניים עבור ZXQQ0QxZ diar_streaming_sortformer_4spk-v2זוהי הפניה חיצונית, לא מדידה מקומית של המרה speech-swift של CoreML, ולא של רמקול בשם.

DatasetמצבDER
CALLHOME חלק 22 דוברים6.57%
CALLHOME חלק 23 דוברים10.05%
CALLHOME חלק 24 דוברים12.44%

כל השורות משתמשות ב- 1.04 s-bu-buffer latency, חפיפה הכלולה, צווארון 0.25, ולאחר עיבוד מכוון על disjoint CALLHOME חלק 1. CALLHOEX הוא מורשה ואינו ארוז. diarization-bench דוחות דומים בנפרד על ידי דובר הפניה ספירה בקונסולה וב-JSON תחת JSON byReferenceSpeakerCount.

Community-1 Pipeline

Community-1 שני השלבים העצביים עם CoreML וכל עיבוד מארח Swiftאז זה לא העומס MLX או לדרוש Metal ספריית הצלר: ברירת מחדל שפורסמו נשמרים: מסיכות מתפתלות קשות, נקיות ורמקולים עם נפילה במסלול הקצר במעלה הזרם, 0.6 סף חיוג אלקטרוני, Fa=0.07, Fb=0.8, וברוב ה- 20 VBx.

על גבי חמש תמונות קבועות VoxConverse השחרור subset (1,057.49 שניות, 0.25-II צווארון, חפיפה הכלולים), Swift תפוקה מוטבעת עם ZXQXQ2XZ pyannote.metrics מדד 4.66% DER / 21.43% JERהמונחים: CoreML Reference Measure 4.65% / 21.42%זהו מבחן הסתברותי קטן, לא תביעה איכותית של נתונים.

עם speech-swift"התוצאה של המסגרת-grid באותה תת-קרקעית, Community-1 מדד 9.31% DER / 16.20% JER, 25.5® בזמן אמת, ו 1.54 GB שיא RSSמנוע Pyannote שנמדד 5.03% / 9.28%, 105.7× בזמן אמת, 393 MBCommunity-1 הוא אפוא צינור אופציונלי של שקיפות הזרם עם גבולות מספרים הדוברים והחזירו צנטרירוטינים, לא דיוק או שדרוג מהירות אוניברסלי.ציונים משני שיטות הניקוד אינם דומים ישירות.

Pyannote Pipeline

צינור ברירת המחדל פועל בשני שלבים:

שלב 1: סגמנטציה + יושב ראש

Pyannote segmentation-3.0 מעבד 10-II מכווץ חלונות עם 50%. Powerset decoder ממיר את הפלט 7-class להסתברות לרמקולים (עד 3 רמקולים מקומיים לחלון). חלונות Adjacent חולקים חפיפה 5 שניות - זהות הדוברת מופצה על פני חלונות על ידי מחשוב מחשוב מתורגמן מתאם בין מסלולי ההסתברות באזור החפיפה, עם התאמה בלעדית חמדנית עבור תעודות זהות רמקולים גלובליות עקביות.

שלב 2: Post-hoc Embedding

לאחר דיאריזציה, WeSpeaker ResNet34-LM תמצית של 256 חלקיקים ממדיים המטביעים לרמקול. אלה הטמיעו הטמעת רמקול היעד (--target-speaker

הצצה ל- piannote.audio

אם אתה מגיע Python pyannote.audio ספרייה - להחליף Pipeline תת-מחלקה שקובעת pipeline.segmentation = ...או בורח מ-A Server Hosting pyannote/speaker-diarization-3.1 Soniqo עוטפת את אותו דגם Pyannote-Segmentation-3.0 ומפעיל אותו לחלוטין על-ידי Apple Silicon. No Python בזמן ריצה, ללא CUDA, no Hugging Face token atference time.

pyannote.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 = ... (תתיכון) קבוע: Pyannote-Segmentation-3.0 (MLX או CoreML, שנבחר אוטומטית)
diarization.itertracks(yield_label=True) for seg in result.segments { ... }
diarization.write_rttm(file) --rttm
pyannote.metrics.diarization.DiarizationErrorRate CLI: --score-against reference.rttm

The The The Pyannote-Segmentation-3.0 משקלים מומרים מן הזרם HuggingFace מחסומים, כל כך גליונות פלח הם שווה ערך רב בתוך סובלנות צף מראש.השלכה שלאחר הדגימה (Pearson על פני חלונות חופפים + התאמה בלעדית חמדנית) ופוסט-hoccation. WeSpeaker שלבים מטבוליים מחדש Swift אך לייצר תפוקה RTTM דומה ל-Sing Python צינורות.

עדיין לא נתמך

אין הזרמת OnlineSpeakerDiarization שווה ערך עבור מנוע Pyannote. עבור שימוש בזמן אמת דיאריזציה --engine sortformer במקום זאת, אשר פועל מודל מפורמנדר עם FIFO ו-cache המדינה buffers.

CLI Usage

# 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

מיצוי פנים-ראש

לספק אודיו הרשמה של דובר ידוע כדי לחלץ רק את הקטעים שלהם מהקלטה.הצנרת קובעת את הדובר להטביע של אודיו ההרשמה ומוצאת את האישכול עם הדומה הקוסטין הגבוהה ביותר.

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

תגית: Scoring

הערכת איכות דיאריזציה על ידי ניקוד נגד קובץ RTTM הפניה.הצנרת קובעת את שיעור שגיאות הדירקיזציה (DER), אשר מודד את מידת הזמן שהוא מיוחס באופן שגוי.

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

RTTM Output

דגל --rttm מייצר את זמן ה- Rich Transcription Time Marked פלט, פורמט סטנדרטי המשמש להערכה של דירקיזציה.כל קו עוקב אחר התבנית:

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

אפשרויות אפשרויות

אפשרותתיאור תיאור
--target-speakerאודיו עבור מיצוי של דובר היעד (איור בלבד)
--embedding-engineשם המחבר: mlx או coreml (pyannote בלבד)
--vad-filterPre-filter with Silero VAD (pyannote בלבד)
--community1-compute-unitsane (default), cpu, gpu, או all
--num-speakersספירת הדוברים המדויקת (Community-1 בלבד)
--min-speakersמינימום רמקולים ספירה (Community-1, ברירת מחדל 1)
--max-speakersספירת הדוברים המקסימלית (Community-1)
--rttmOutput בפורמט RTTM
--jsonפורמט JSON
--score-againstקובץ RTTM עבור DER הערכה
חשוב

Diarization עובד הכי טוב עם הקלטות שיש להם רמקולים ברורים פונה. דיבור חפיפה גבוה עשוי להפחית דיוק. ספירת הדוברים נקבעת באופן אוטומטי.

דגם Downloads

המודלים הורידו באופן אוטומטי לשימוש ראשון:

המונחיםמודל מודלגודלHuggingFace
המונחיםPyannote-Segmentation-3.05.7 MBaufklarer/Pyannote-Segmentation-MLX
יושב ראשWeSpeaker-ResNet34-LM (MLX)25 MBaufklarer/WeSpeaker-ResNet34-LM-MLX
יושב ראשWeSpeaker-ResNet34-LM (CoreML)25 MBaufklarer/WeSpeaker-ResNet34-LM-CoreML
Community-1PyanNet + מסיכה WeSpeaker + PLDA / VBx32 MBaufklarer/Pyannote-Community-1-CoreML
המונחיםדיאריזציה (CoreML)-240 MBaufklarer / Sortformer-Diarization-CoreML
Nemotron 3Diarization INT8 CoreML או MLX)100 MB כל אחדCoreML · 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)
)