Sprecherdiarisierung annotieren
So baust du in Potato eine Aufgabe zur Sprechererkennung: interaktive Audio-Wellenformen, Marker mit Zeitstempeln, Zuweisung von Sprecherlabels und Messung der Inter-Annotator-Übereinstimmung.
Sprecherdiarisierung beantwortet die Frage, wer wann gesprochen hat. Dieses Tutorial zeigt, wie du Oberflächen baust, um Sprecherbeiträge zu annotieren, automatische Diarisierung zu korrigieren und Gespräche mit mehreren Sprechenden zu bearbeiten. Die vollständige Referenz der Audio-Schemata steht in der Quelldokumentation.
Was ist Sprecherdiarisierung?
Sprecherdiarisierung zerlegt Audio in Abschnitte, die jeweils zu einer sprechenden Person gehören. Sie kommt vor bei:
- Transkription von Besprechungen
- Auswertung von Callcenter-Gesprächen
- Podcast-Produktion
- Aufbereitung von Interviews
- Gerichts- und Rechtsaufnahmen
Einfacher Aufbau für Diarisierung
annotation_task_name: "Speaker Diarization"
data_files:
- "data/conversations.json"
annotation_schemes:
- annotation_type: audio_annotation
name: speakers
description: "Mark when each speaker talks"
labels:
- name: Speaker 1
color: "#FF6B6B"
keyboard_shortcut: "1"
- name: Speaker 2
color: "#4ECDC4"
keyboard_shortcut: "2"
- name: Speaker 3
color: "#45B7D1"
keyboard_shortcut: "3"
- name: Overlap
color: "#FFEAA7"
keyboard_shortcut: "o"
- name: Silence
color: "#9CA3AF"
keyboard_shortcut: "s"Sprechersegmente anlegen
Ablauf
- Audio abspielen oder in die Wellenform klicken, um zu navigieren
- Mit gedrückter Maustaste über die Wellenform ziehen, um einen Zeitbereich zu wählen
- Eine Zifferntaste drücken oder ein Sprecherlabel anklicken
- Das Segment bekommt Farbe und Label
- Grenzen durch Ziehen an den Kanten nachjustieren
- Weitermachen, bis das gesamte Audio segmentiert ist
Steuerung über die Tastatur
Potato bringt Tastenkürzel für die Wiedergabe mit, unter anderem für Abspielen und Pause sowie für das Navigieren.
Vorannotierte Diarisierung korrigieren
Häufig labelst du nicht bei null, sondern korrigierst die Ausgabe eines automatischen Diarisierers:
data_files:
- "data/auto_diarized.json"Datenformat:
{
"id": "meeting_001",
"audio_path": "/audio/meeting_001.wav",
"auto_segments": [
{"start": 0.0, "end": 3.5, "speaker": "Speaker 1"},
{"start": 3.5, "end": 8.2, "speaker": "Speaker 2"},
{"start": 8.2, "end": 12.0, "speaker": "Speaker 1"}
]
}Ausführliche Angaben zu den Sprechenden
Zusätzliche Metadaten zu jeder sprechenden Person erfassen:
annotation_schemes:
- annotation_type: audio_annotation
name: speakers
labels:
- name: Speaker A
color: "#FF6B6B"
- name: Speaker B
color: "#4ECDC4"
- name: Speaker C
color: "#45B7D1"
- name: Unknown
color: "#9CA3AF"
# Speaker characteristics
- annotation_type: radio
name: speaker_a_gender
description: "Speaker A Gender"
labels:
- Male
- Female
- Unknown
- annotation_type: text
name: speaker_a_role
description: "Speaker A Role (if identifiable)"
- annotation_type: radio
name: speaker_b_gender
description: "Speaker B Gender"
labels:
- Male
- Female
- UnknownÜberlappende Sprache behandeln
annotation_schemes:
- annotation_type: audio_annotation
name: speakers
labels:
- name: Speaker 1
color: "#FF6B6B"
- name: Speaker 2
color: "#4ECDC4"
- name: Overlap
color: "#FFEAA7"Diarisierung von Besprechungen und Interviews
annotation_task_name: "Meeting Diarization"
data_files:
- "data/meetings.json"
annotation_schemes:
# Speaker turns
- annotation_type: audio_annotation
name: turns
description: "Mark each speaker turn"
labels:
- name: Moderator
color: "#EF4444"
keyboard_shortcut: "m"
- name: Participant 1
color: "#3B82F6"
keyboard_shortcut: "1"
- name: Participant 2
color: "#10B981"
keyboard_shortcut: "2"
- name: Participant 3
color: "#F59E0B"
keyboard_shortcut: "3"
- name: Participant 4
color: "#8B5CF6"
keyboard_shortcut: "4"
- name: Unknown
color: "#6B7280"
keyboard_shortcut: "u"
- name: Overlap
color: "#FCD34D"
keyboard_shortcut: "o"
- name: Silence/Noise
color: "#D1D5DB"
keyboard_shortcut: "s"
# Speech type annotation
- annotation_type: radio
name: speech_type
description: "Type of speech"
labels:
- Statement
- Question
- Response
- Interruption
- Backchannel
# Overall quality
- annotation_type: radio
name: recording_quality
description: "Overall recording quality"
labels:
- Excellent - All speakers clear
- Good - Most speech understandable
- Fair - Some difficulty
- Poor - Significant issuesAusgabeformat
{
"id": "meeting_001",
"audio_path": "/audio/meeting_001.wav",
"annotations": {
"turns": [
{
"start": 0.0,
"end": 5.2,
"label": "Moderator",
"attributes": {
"speech_type": "Statement"
}
},
{
"start": 5.2,
"end": 12.8,
"label": "Participant 1",
"attributes": {
"speech_type": "Response"
}
},
{
"start": 11.5,
"end": 12.8,
"label": "Overlap"
}
],
"recording_quality": "Good - Most speech understandable"
}
}Hinweise zur Diarisierung
- Erst hören: mach dich mit den Stimmen vertraut, bevor du annotierst
- Merkmale notieren: Tonhöhe, Akzent, Sprechweise
- Überlappungen einheitlich behandeln: leg die Vorgehensweise vorher fest
- Geschwindigkeit nutzen: schwierige Stellen langsamer abspielen
- Unsicherheit markieren: Unknown zu vergeben ist völlig in Ordnung
Nächste Schritte
- Kombiniere das mit Transkription zu vollständigen Besprechungsprotokollen
- Ergänze Emotionserkennung je sprechender Person
- Richte Qualitätskontrolle für die Übereinstimmung mehrerer Annotierender ein
Die vollständige Audio-Dokumentation steht unter Audio-Annotation.