Penulis
Taishin Maeda - Universiti Waseda
Abstrak
Kertas ini menilai dan membandingkan dua rangka kerja diarisasi penutur sumber terbuka terkini: Pyannote.audio dan Nvidia Nemo. Penilaian memberi tumpuan kepada Diarization Error Rate (DER), masa pelaksanaan, dan penggunaan sumber GPU merentasi senario audio yang berbeza. Selain itu, pendekatan pasca-pemprosesan menggunakan GPT-4-Turbo OpenAI diterokai untuk meningkatkan ketepatan diarisasi.
Keputusan Utama:
- Nvidia Nemo mencapai ~9% DER lebih rendah untuk senario 2 penutur
- Pyannote.audio berprestasi lebih baik untuk senario berbilang penutur (9+)
- Pasca-pemprosesan GPT-4-Turbo menunjukkan potensi tetapi memerlukan integrasi konteks audio
- Aplikasi web diarisasi penutur masa nyata ditunjukkan
1. Pengenalan
Apakah Diarisasi Penutur?
Diarisasi Penutur adalah proses mensegmenkan dan melabelkan audio berdasarkan penutur yang berbeza - menjawab soalan “siapa bercakap bila?” dalam audio yang diberikan. Ia adalah alat analisis perbualan yang penting digabungkan dengan Pengecaman Pertuturan Automatik (ASR).
Sistem diarisasi penutur terdiri daripada:
- Pengesanan Aktiviti Suara (VAD) - Cap masa di mana pertuturan berlaku
- Model Penyematan Audio - Ekstrak penyematan dari segmen bercap masa
- Pengelompokan - Kumpulkan penyematan untuk menganggarkan bilangan penutur
Pyannote.audio
Pyannote.audio adalah kit alat Python sumber terbuka untuk diarisasi penutur dan penyematan penutur berdasarkan PyTorch.
Nvidia Nemo
Nvidia Nemo menggunakan pendekatan yang berbeza dengan segmentasi berbilang skala dan Neural Diarizer (model MSDD) untuk mengendalikan pertuturan bertindih.
Segmentasi Berbilang Skala
Nemo menangani pertukaran antara kualiti pengenalan penutur dan granulariti temporal:
- Segmen lebih panjang -> Representasi penutur lebih baik, resolusi temporal lebih rendah
- Segmen lebih pendek -> Representasi kualiti lebih rendah, resolusi temporal lebih tinggi
Perbandingan Rangka Kerja
| Komponen | Pyannote.audio | Nvidia Nemo |
|---|
| VAD | Pyannet dari Syncnet | Multilingual MarbleNet |
| Penyematan Penutur | ECAPA-TDNN | Titanet Large |
| Pengelompokan | Hidden Markov Model | Pengelompokan Berbilang Skala (MSDD) |
2. Kaedah Penilaian
Diarization Error Rate (DER)
Metrik standard untuk diarisasi penutur, diperkenalkan oleh NIST pada tahun 2000:
DER = (False Alarm + Missed Detection + Confusion) / Total
Di mana:
- False Alarm: Pertuturan dikesan tetapi tiada penutur hadir
- Missed Detection: Tiada pertuturan dikesan tetapi penutur hadir
- Confusion: Pertuturan diberikan kepada penutur yang salah
Matlamatnya adalah untuk meminimumkan DER ke arah 0, menunjukkan tiada ralat.
Rich Transcription Time Marked (RTTM) adalah format standard untuk output diarisasi penutur:
SPEAKER obama_zach(5min).wav 1 66.32 0.27 <NA> <NA> SPEAKER_01 <NA> <NA>
Medan utama: masa mula segmen (66.32), tempoh (0.27), label penutur (SPEAKER_01)
3. Persediaan Eksperimen
Set Data
- Audio 5 minit - Dua penutur (temuduga Obama-Zach), dianotasi secara manual menggunakan Audacity
- Audio 9 minit - Sembilan penutur dari set data VoxConverse dengan kebenaran asas profesional
Perkakasan
- GPU: Nvidia GeForce RTX 3090
- Masa diukur menggunakan modul
time Python
Kod Pyannote.audio
from pyannote.audio import Pipeline
import torch
pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token="your_auth_token"
)
if torch.cuda.is_available():
pipeline.to(torch.device("cuda"))
def diarization(audio_path):
diarization = pipeline(audio_path)
rttm = "SPEAKER {file} 1 {start:.2f} {duration:.2f} <NA> <NA> {speaker} <NA> <NA>"
return [
rttm.format(file=audio_path, start=turn.start,
duration=turn.duration, speaker=speaker)
for turn, _, speaker in diarization.itertracks(yield_label=True)
]
Kod Nvidia Nemo
from nemo.collections.asr.models import NeuralDiarizer
from omegaconf import OmegaConf
config = OmegaConf.load('diar_infer_telephonic.yaml')
config.diarizer.msdd_model.model_path = 'diar_msdd_telephonic'
config.diarizer.msdd_model.parameters.sigmoid_threshold = [0.7, 1.0]
msdd_model = NeuralDiarizer(cfg=config)
diarization_result = msdd_model.diarize()
4. Keputusan dan Perbincangan
Keputusan DER - Dua Penutur (5 min)
| Rangka Kerja | DER |
|---|
| Pyannote.audio | 0.252 |
| Pyannote.audio (penutur dikenal pasti terlebih dahulu) | 0.214 |
| Nvidia Nemo | 0.161 |
| Nvidia Nemo (penutur dikenal pasti terlebih dahulu) | 0.161 |
Nvidia Nemo menghasilkan kira-kira 9% kurang DER daripada Pyannote.audio untuk senario dua penutur.
Keputusan DER - Sembilan Penutur (9 min)
| Rangka Kerja | DER |
|---|
| Pyannote.audio | 0.083 |
| Pyannote.audio (penutur dikenal pasti terlebih dahulu) | 0.098 |
| Nvidia Nemo (penutur dikenal pasti terlebih dahulu) | 0.097 |
Untuk senario berbilang penutur, Pyannote.audio mencapai ~1.4% DER lebih rendah daripada Nvidia Nemo.
Keputusan Pasca-Pemprosesan GPT-4
| Rangka Kerja | DER GPT-4-Turbo | DER GPT-3.5 |
|---|
| Pyannote (5min, 2 penutur) | 0.427 | 0.494 |
| Nemo (5min, 2 penutur) | 0.179 | 0.544 |
| Pyannote (9min, 9 penutur) | 0.103 | 0.214 |
| Nemo (9min, 9 penutur) | 0.128 | 0.179 |
Pasca-pemprosesan GPT-4 menunjukkan DER yang lebih tinggi kerana ia tidak mempunyai akses audio langsung. Menyediakan pemasaan penutur dan konteks audio boleh meningkatkan keputusan.
Prestasi Masa Pelaksanaan
| Rangka Kerja | Audio 5-min | Audio 9-min |
|---|
| Pyannote.audio | 31.3s | 44.5s |
| Pyannote (dikenal pasti terlebih dahulu) | 29.8s | 41.5s |
| Nvidia Nemo | 63.9s | - |
| Nemo (dikenal pasti terlebih dahulu) | 49.9s | 108.2s |
Nvidia Nemo mengambil kira-kira dua kali ganda masa pelaksanaan berbanding Pyannote.audio.
5. Aplikasi Masa Nyata
Aplikasi web diarisasi penutur masa nyata dibangunkan menggunakan:
- WebSockets untuk penstriman audio
- FastAPI untuk backend
- Pyannote.audio untuk diarisasi
Butiran Pelaksanaan Utama
Aplikasi menggunakan potongan audio 3 saat berbanding potongan 30 saat untuk prestasi masa nyata yang lebih baik:
class PyannoteService:
def __init__(self):
self.pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token=config.hugging_face.token,
)
self.pipeline.to(torch.device("cuda"))
self.embedding_model = Model.from_pretrained(
"pyannote/embedding",
use_auth_token=config.hugging_face.token
)
self.embedding_inference = Inference(
self.embedding_model, window="whole"
)
Perbandingan Keputusan
Logik potongan yang diubahsuai mengurangkan ralat pemasaan dengan ketara dan menyediakan peralihan penutur yang lebih lancar.
6. Kesimpulan
Penemuan Utama
- Nvidia Nemo unggul dalam audio yang lebih pendek dengan penutur yang lebih sedikit (DER: 0.161 vs 0.252)
- Pyannote.audio berprestasi lebih baik dengan lebih ramai penutur dan apabila bilangan penutur dikenal pasti terlebih dahulu
- Pasca-pemprosesan GPT-4 menunjukkan potensi tetapi memerlukan integrasi konteks audio
- Masa pelaksanaan: Pyannote.audio adalah kira-kira 2x lebih pantas
- Aplikasi masa nyata: Logik potongan yang diubahsuai meningkatkan ketepatan
Kerja Masa Depan
- Sesuaikan model Nvidia Nemo untuk senario bukan telefonik
- Integrasikan konteks audio ke dalam pasca-pemprosesan GPT
- Tala halus ambang pengenalan penutur untuk aplikasi masa nyata
- Terokai LLM khusus domain yang dilatih untuk tugas diarisasi
7. Rujukan
- NIST Rich Transcription Evaluation (2022)
- Nvidia NeMo Documentation - Speaker Diarization
- Pyannote.audio GitHub Repository
- OpenAI GPT-4 Turbo Documentation
- VoxConverse Speaker Diarization Dataset
Penghargaan
- Akinori Nakajima - Pengarah Wakil VoicePing Corporation
- Melnikov Ivan - Pembangun AI VoicePing Corporation