Hablantes y roles
Cuándo fiarse de speakerRole, y por qué el número de confianza solo no basta.
Es lo que hace útil esto para un BPO, y también donde es más fácil construir una métrica falsa con toda confianza.
speakeres un identificador acústico ("0","1", …), estable dentro de una misma llamada y sin significado entre llamadas. El hablante"0"de dos llamadas distintas no es la misma persona.speakerRolees"agent","customer"onull. Se atribuye o no se atribuye: no se adivina.speaker_role_confidencedice cuánto fiarse. Medido en llamadas reales de BPO: 0,9 en castellano. Un0significa que no se etiquetó ningún rol, yspeakerRoleseránullen todas las intervenciones.
El número solo no basta
En una llamada real en catalán salió speaker_role_confidence: 0.7 —por encima de
cualquier umbral razonable— y los roles estaban mal: el saludo del agente venía
marcado como customer.
Lo que sí lo dijo fue el aviso attribution_heuristic_disagrees, que viajaba en
warnings. Está exactamente para eso.
Regla práctica, en este orden:
- Si
warningscontieneattribution_heuristic_disagrees,diarization_single_speakerodiarization_unavailable→ trata la llamada como sin roles. - Si no, y
speaker_role_confidence >= 0.6→ los roles son utilizables. - En cualquier otro caso, no construyas encima métricas por agente.
const w = t.warnings ?? [];
const rolesFiables =
!w.some(x => ['attribution_heuristic_disagrees',
'diarization_single_speaker',
'diarization_unavailable'].includes(x)) &&
(t.speaker_role_confidence ?? 0) >= 0.6;Qué hacer con las llamadas que no pasan el filtro
Apartarlas para revisión manual, no puntuarlas. Una plantilla de calidad aplicada sobre roles invertidos produce una nota confiada y falsa, que es peor que no tener nota: nadie la va a cuestionar porque viene con un número al lado.
En un panel de calidad eso se traduce en tres cubos —puntuadas, apartadas y fallidas— y no en dos.
Estéreo
Si tu grabación trae agente y cliente en canales separados, hoy no se aprovecha: el
audio se mezcla a mono y la separación se hace por diarización acústica. Se avisa con
stereo_source_available en warnings.
Para grabaciones de contact center esto no suele importar —son mono y la diarización funciona—, pero si tienes estéreo de verdad estás perdiendo una señal que sería perfecta.
speakerRole está en camelCase
En un JSON donde todo lo demás es snake_case, dentro de utterances[] y de
pii.utterances_redacted[] el campo se llama speakerRole, no speaker_role.