Visualiza datos de voz con Speech Analysis Framework

En esta solución, se describe Speech Analysis Framework, una colección de componentes y código de Google Cloud que puedes usar para transcribir audio, crear un flujo de trabajo de canalización de datos con el fin de mostrar estadísticas de los archivos de audio transcritos y, luego, representar los datos de forma visual.

Este documento contiene fragmentos de código de Speech Analysis Framework que demuestran cómo usar las API de Google Cloud. Para la compilación de la IU, recomendamos el uso de Google Cloud Partner (por ejemplo, integradores de sistemas). Para obtener más información sobre cómo compilar la IU de Speech Analysis Framework o sobre los integradores de sistemas, completa este formulario de interés.

En la solución, se ilustra el framework mediante la explicación del caso práctico de un centro de contactos, en el que capturar y analizar grabaciones de audio es una función fundamental para ayudar a responder las preguntas operativas. Esto incluye las preguntas tácticas (“¿Quiénes son nuestros mejores agentes humanos?”) y las estratégicas (“¿Por qué los clientes nos llaman?”).

En el código de muestra de esta solución, se demuestran algunos aspectos destacados del uso del framework, pero esta solución no es un instructivo. Aprenderás a crear una aplicación alojada en App Engine y a personalizar el framework para tus casos prácticos. Todos los componentes que se analizan en este documento son servicios de Google Cloud o están disponibles a través de nuestros socios como soluciones de Contact Center AI.

El problema: Aumento del volumen de llamadas

La mayoría de los centros de contacto registran las llamadas de los clientes para que los analistas las revisen de forma manual más tarde. Sin embargo, debido al volumen de estas grabaciones y a las limitaciones de recursos inherentes a un enfoque manual, solo se logra analizar, o incluso recopilar, una pequeña parte de estas grabaciones. Como resultado, se desaprovechan grandes cantidades de datos que podrían ayudar a proporcionar una mejor atención al cliente, aumentar su satisfacción y disminuir el volumen del centro de contacto.

En la mayoría de los centros de contacto, se implementan indicadores clave de rendimiento (KPI) para la satisfacción de los clientes, como el tiempo promedio en fila, el porcentaje de abandono promedio y las encuestas de comentarios destinadas a realizar un seguimiento del rendimiento general del centro de contacto y mejorarlo. Por lo general, el software de telefonía proporciona los datos de estos KPI directamente sin necesidad de realizar ninguna transcripción.

Sin embargo, las métricas que no recopila el proveedor de telefonía, como la opinión de la llamada mientras esta se encuentra en curso, también tienen un impacto importante en el cumplimiento del objetivo de satisfacción del cliente. En la actualidad, las personas que escuchan y califican llamadas de forma manual suelen responder preguntas como las siguientes:

  • ¿Cómo comenzó la opinión de la llamada?
  • ¿Cómo progresó la opinión de la llamada?
  • ¿Cómo terminó la opinión de la llamada?

Este enfoque es ineficiente, tedioso y propenso al sesgo humano.

Por último, en los centros de contacto en los que se usan secuencias de comandos de agentes humanos para interactuar con los clientes, se debe aplicar el cumplimiento de forma forzosa. Puedes escuchar de forma manual las llamadas grabadas o unirte a sesiones en vivo para determinar si el agente sigue el texto.

Por desgracia, debido al volumen de llamadas y a los horarios limitados disponibles para el análisis de calidad, nunca se analiza el cumplimiento de la mayoría de las llamadas, que, al igual que la opinión, es una métrica importante para los cuadros de evaluación.

El objetivo: Analizar todas las llamadas grabadas

En lugar de adoptar el enfoque manual que puede ser ineficiente y estar sesgado, los centros de contacto pueden usar Google Cloud a fin de cumplir con el objetivo de transcribir y analizar todas las llamadas grabadas para obtener estadísticas casi en tiempo real. Estas estadísticas pueden incluir lo siguiente:

  • Opinión general de la llamada
  • Opinión oración por oración
  • Información sobre las métricas de calidad del agente a las que se les debe realizar un seguimiento (como el silencio y la duración de las llamadas, el tiempo en que habla el agente, el tiempo en que habla el usuario y los mapas de calor de las oraciones)
  • Información sobre cómo reducir el volumen del centro de llamadas mediante el análisis de palabras clave en las transcripciones

En el framework que se presenta en esta solución, se usan los servicios (de AI Platform) de aprendizaje automático de Google Cloud, como Speech-to-Text y la API de Cloud Natural Language. En el framework, también se usan Pub/Sub y Dataflow para la transmisión y la transformación de datos. El resultado es una aplicación completamente sin servidores. Para implementar el framework, no necesitas tener experiencia con el aprendizaje automático. Google Cloud administra todas las necesidades de infraestructura de datos, como el almacenamiento, el escalamiento y la seguridad.

Informes y visualizaciones

Es más sencillo obtener estadísticas mediante la visualización de los datos de las grabaciones de audios que mediante la revisión de las transcripciones. El framework de esta solución te brinda ayuda mediante la producción de visualizaciones que se ubican los datos en el contexto del usuario.

Por ejemplo, la siguiente transcripción de una grabación puede ser significativa, pero sería mejor visualizar una transcripción por interlocutor. Es decir, en lugar de leer un párrafo, puedes realizar una lectura en función de lo que dijo cada interlocutor.

Agent: Hello. Thank you for calling the Google merchandise store. How can I help you?
Client: Hi. I ordered a pair for Google crew socks last week.
Agent: Okay have they arrived?
Client: Yes, they have but I have two issues.

Mediante los servicios de AI Platform de Google Cloud, puedes producir una variedad de visualizaciones, como se describe en las siguientes secciones.

Cuadros de evaluación de la grabación de llamadas

En el cuadro de evaluación de nivel superior que produce el framework, se incluyen métricas comunes del sector y métricas derivadas de transcripciones, como las opiniones. Las métricas, como el silencio de las llamadas (que se calcula mediante las diferencias en las marcas de tiempo), proporcionan información adicional sobre la satisfacción del cliente. Por ejemplo, un porcentaje de silencio inusualmente alto constituye es una señal de alerta.

Cuadro de evaluación que muestra el silencio de las llamadas

Cuadros de evaluación de la grabación de llamadas basados en el volumen

Gracias al cuadro de evaluación basado en el volumen, puedes crear una vista basada en métricas del filtro de fechas para las llamadas que procesa el framework. Las métricas, como el porcentaje promedio de conversación del agente, proporcionan información sobre la satisfacción general del cliente en función de un filtro de fechas. Por ejemplo, puedes ver el porcentaje promedio de conversación del agente durante las últimas 24 horas, la semana pasada y los últimos 30 días.

Cuadro de evaluación que muestra las llamadas a lo largo del tiempo

Búsqueda de transcripciones y nube de etiquetas

La combinación de la búsqueda de formato libre y la nube de palabras facilita la búsqueda de conversaciones en las que se involucran categorías específicas (como las “devoluciones”) o palabras clave (como los nombres de productos). Esta función ayuda a los analistas a comprender mejor las tendencias de temporada, impulsadas por eventos o de cualquier otro tipo.

IU con búsqueda de formato libre y etiquetas de nube de palabras

Extracción de entidades

Comprender las opiniones asociadas con una entidad específica (como una empresa, un producto, la ubicación de una tienda y una venta) puede ayudar a descubrir tendencias. Por ejemplo, puedes descubrir si una tienda, una temporada o una campaña específica está asociada con una gran cantidad de reclamos.

Extracción de entidad que muestra ubicaciones

Mapas de calor desglosados

Puedes observar cómo fluctúa una opinión en el cronograma completo de una llamada y, luego, desglosar una parte específica de la conversación para reproducirla, si es necesario.

Mapa de calor de una llamada

El framework: Visualiza las estadísticas de la grabación de llamadas

El framework que se ofrece en esta solución está diseñado para permitirte implementar y procesar archivos de audio con rapidez y casi en tiempo real con el fin de obtener información de las grabaciones. En esta sección, se explica cómo los componentes del framework funcionan en conjunto.

Diagrama de arquitectura

En el siguiente diagrama, se ilustra el flujo de trabajo y sus componentes. Arquitectura del flujo de trabajo

La arquitectura incluye los siguientes componentes de Google Cloud:

Explicación del flujo de trabajo

En las siguientes secciones, se describen los pasos que deberías seguir para usar el framework en un nivel alto.

Almacena las grabaciones de audio

El framework supone que los archivos de audio se encuentran en un bucket de Cloud Storage. En el diseño del framework, debes configurar una función de Cloud Functions para que se active cuando subes un archivo de audio al bucket. La función de Cloud Functions envía el archivo de audio a varias API con el fin de que se procese.

Cuando subes el archivo de audio al bucket, puedes agregar metadatos personalizados que identifiquen la grabación con categorías, como el identificador de llamada, el ID de cliente y otras métricas recopiladas del centro de contacto. Para agregar metadatos personalizados a un objeto de Cloud Storage, usa el comando x-goog-meta con la marca -h. En el siguiente comando, se muestra un ejemplo. Sustituye el nombre de tu archivo de audio por [FILENAME] y el nombre del depósito de Cloud Storage por [BUCKET].

gsutil -h x-goog-meta-agentid:55551234 -h cp [FILENAME].flac gs://[BUCKET]

Procesa las grabaciones de audio

Como ya se mencionó, subir archivos de audio invoca una función de Cloud Functions, que ya debe existir. Por ejemplo, puedes configurar notificaciones para que, cuando se suba un archivo, la carga active una función que inicie el proceso de transcripción del archivo de audio mediante el uso de la API de Speech-to-Text. De esta forma, se obtiene la opinión de la API de Natural Language y se ocultan los datos sensibles mediante la API de Data Loss Prevention.

exports.helloGCSGeneric = (event, callback) => {
  const file = event.data;
  callback();
};

Recopila datos del archivo de audio

La función de Cloud Functions que envía el archivo de audio sin procesar a la API de Speech-to-Text muestra un objeto de respuesta y, luego, envía el resultado de la transcripción a la API de Natural Language y a la de Data Loss Prevention. Estas API muestran objetos de respuesta adicionales.

Los objetos de respuesta de las tres API se envían a Pub/Sub para que Dataflow los procese. Además del objeto de respuesta de las API, la función de Cloud Functions puede extraer metadatos personalizados y agregar ese campo a la carga útil de Pub/Sub mediante el siguiente código de JavaScript:

let strAgentID  = object.metadata.agentid === undefined ? 'undefined' : object.metadata.agentid;

Esto te permite agregar dos fuentes de datos dispares.

Extrae texto de una grabación de audio

Con Speech-to-Text, puedes convertir audio en texto mediante la aplicación de modelos de red neuronal en una API. La API reconoce 120 idiomas y variantes con el fin de respaldar tu base de usuarios global. Puedes habilitar el control y el comando por voz, transcribir audio de centros de atención telefónica y mucho más. Speech-to-Text puede procesar transmisiones en tiempo real o audio grabado previamente.

El siguiente fragmento de código es un ejemplo de cómo puedes procesar archivos largos de audio. Se usa la identificación de interlocutores, una característica que detecta cuándo cambian los interlocutores y agrega una etiqueta numerada a las voces individuales detectadas en el audio.

const audioConfig = {
   encoding:"FLAC",
   sampleRateHertz: 44100,
   languageCode: `en-US`,
   enableSpeakerDiarization: true,
   diarizationSpeakerCount: 2,
   enableAutomaticPunctuation: true,
   enableWordTimeOffsets: false,
   useEnhanced: true,
   model: 'phone_call'
 };

 const audioPath = {
   uri: `gs://${object.bucket}/${object.name}`
 };

 const audioRequest = {
   audio: audioPath,
   config: audioConfig,
 };

 return spclient
   .longRunningRecognize(audioRequest)
   .then(data => {
     const operation = data[0];
     return operation.promise();
   })

Oculta información sensible de las transcripciones

Puedes usar Cloud DLP para comprender y administrar mejor los datos sensibles. Esta característica proporciona una clasificación y un ocultamiento rápidos y escalables de los elementos de datos sensibles, como los números de tarjetas de crédito, los nombres, los números de identificación personal de EE.UU., los números seleccionados de identificación internacional, los números de teléfono y las credenciales de Google Cloud.

Cloud DLP clasifica estos datos mediante el uso de más de 90 detectores predefinidos para la identificación de patrones, formatos y sumas de verificación. Incluso comprende pistas contextuales. Puedes ocultar datos mediante técnicas como el enmascaramiento, el hash seguro, el agrupamiento y la encriptación con preservación del formato.

Analiza los datos

Una vez que se transcribe el archivo de audio, se captura un análisis de opiniones y se ocultan los datos sensibles, debes almacenar los resultados en BigQuery para informar y visualizar la información recopilada.

Usa la plantilla de Pub/Sub a BigQuery

Puedes usar una plantilla proporcionada por Google para leer y escribir los objetos de respuesta. Mediante la plantilla de Pub/Sub a BigQuery, se crea una canalización de transmisión. Dataflow lee los mensajes con formato JSON de un tema de Pub/Sub y los escribe en una tabla de BigQuery.

En el siguiente fragmento de código, se muestra una parte de la plantilla de Pub/Sub a BigQuery que ejecuta la herramienta de línea de comandos de gcloud.

gcloud dataflow jobs run [JOB_NAME] \
    --gcs-location gs://dataflow-templates/latest/PubSub_to_BigQuery \
    --parameters \
        inputTopic=projects/[YOUR_PROJECT_ID]/topics/[YOUR_TOPIC_NAME],\
        outputTableSpec=[YOUR_PROJECT_ID]:[YOUR_DATASET].[YOUR_TABLE_NAME]

En la siguiente ilustración, se muestra el Speech Analysis Framework completo, en el que Dataflow lee los mensajes de Pub/Sub, los convierte de formato JSON a tableRow y, por último, escribe registros en BigQuery.

Speech Analysis Framework

Determina el interlocutor, el tiempo de conversación y el tiempo de silencio

Puedes usar las características de identificación de interlocutores y de marcas de tiempo de palabras para determinar el interlocutor, el tiempo de conversación del interlocutor y el silencio de la llamada. También puedes crear un mapa de calor de la opinión para obtener más detalles.

Los clientes potenciales del centro de atención telefónica pueden ver el progreso de la llamada, incluida la forma en que esta inició y finalizó. Además del progreso visual, pueden explorar en detalle cada cuadrado para ver la opinión de la oración.

Explorar en detalle la opinión de la oración

Si hacen más clics, pueden leer y escuchar la oración.

Reproducción para la grabación de llamadas

Usa marcas de tiempo de palabras

Speech-to-Text puede incluir valores de compensación horaria (marca de tiempo) en el texto de respuesta de tu solicitud de recognize. En los valores de compensación horaria, se muestra el principio y el final de cada palabra pronunciada que se reconoce en el audio proporcionado. Un valor de compensación horaria representa la cantidad de tiempo transcurrido desde el comienzo del audio en incrementos de 100 milisegundos.

En la siguiente muestra del objeto de respuesta, se incluyen los valores startTime y endTime de cada palabra de la transcripción. Con estos valores, puedes crear métricas personalizadas para ver el tiempo de silencio de la llamada y la cantidad de tiempo que habla cada interlocutor. También puedes identificar quién es el interlocutor mediante una búsqueda por palabra clave dentro del texto.

"words": [
          {
            "startTime": "1.300s",
            "endTime": "1.400s",
            "word": "Four"
          },
          {
            "startTime": "1.400s",
            "endTime": "1.600s",
            "word": "score"
          },
          ...
        ]

Después de recopilar las marcas de tiempo de las palabras del texto, puedes crear cuadros de evaluación como los que se muestran a continuación:

Cuadros de evaluación de llamadas

Identifica diferentes interlocutores (identificación de interlocutores)

Mediante la identificación de interlocutores, Speech-to-Text puede reconocer varios interlocutores en el mismo clip de audio. Cuando envías una solicitud de transcripción de audio a Speech-to-Text, puedes incluir un parámetro que le indique que debe identificar a los diferentes interlocutores en la muestra de audio.

Speech-to-Text detecta cuándo cambian los interlocutores y agrega una etiqueta numerada a las voces individuales detectadas en el audio. En el resultado de una transcripción, es posible que se incluyan números para todos los interlocutores que Speech-to-Text pueda identificar de forma única en la muestra de audio.

El siguiente fragmento de código es un ejemplo en el que se demuestra cómo habilitar la identificación de interlocutores:

const config = {
  encoding: `LINEAR16`,
  sampleRateHertz: 8000,
  languageCode: `en-US`,
  enableSpeakerDiarization: true,
  diarizationSpeakerCount: 2,
  model: `phone_call`
};

A continuación, puedes compilar transcripciones de interlocutores:

Agent: Hello. Thank you for calling the Google merchandise store. How can I help you?
Client: Hi. I ordered a pair for Google crew socks last week.
Agent: Okay have they arrived?
Client: Yes, they have but I have two issues.

Extrae opiniones de una conversación

Puedes usar la API de Natural Language para comprender las opiniones sobre tu producto en las redes sociales o analizar la intención de las conversaciones de los clientes en un centro de atención telefónica o una app de mensajería.

Puedes extraer la opinión general de la transcripción, la opinión de las oraciones y las entidades. Si tienes estos datos disponibles en el archivo de audio transcrito, puedes crear mapas de calor y cronogramas de opiniones. También puedes crear nubes de palabras.

En el siguiente ejemplo, se muestra un fragmento de código para capturar la opinión de oraciones:

client
     .analyzeSentiment({document: document})
     .then(results => {

       const sentences = results[0].sentences;
       sentences.forEach(sentence => {
         pubSubObj.sentences.push({
           'sentence': sentence.text.content,
           'score': sentence.sentiment.score,
           'magnitude': sentence.sentiment.magnitude
         })
      });

El framework descrito en esta solución permite a los usuarios buscar palabras clave en la transcripción.

La imagen a continuación muestra una visualización de nube de palabras creada por el framework. En la nube de palabras, se incluyen palabras populares extraídas de los archivos de audio. Puedes realizar un búsqueda de estos términos como un método eficaz para extraer sus datos.

Nube de palabras

Crea el mapa de calor de opiniones

Debido a que puede aprovechar los objetos de respuesta enriquecida de las API de Google Cloud, el código del framework puede producir visualizaciones que permiten a los usuarios explorar con solo hacer clic. En el código, se incluye una API compilada mediante Express.js que aprovecha el SDK de Node.js de BigQuery para ejecutar instrucciones de SQL con el fin de recuperar datos. Los comandos de SQL se invocan en respuesta al clic que realiza un usuario en la visualización.

Mediante la siguiente consulta de muestra, se buscan todas las palabras de la transcripción que se encuentran almacenadas en el momento como un campo repetido anidado. La instrucción de consulta se ejecuta mediante el SDK de BigQuery, que obtiene todas las palabras del registro pertinente.

const sqlQueryCallLogsWords = `SELECT
  ARRAY(SELECT AS STRUCT word, startSecs, endSecs FROM UNNEST(words)) words
  FROM \`` + bigqueryDatasetTable + `\`
  where fileid = \'` + queryFileId + `\'`

Después de que se ejecuta la instrucción de SQL, la respuesta se envía a la IU:

res.status(200).send({words:wordsArray});

El framework aprovecha varias instrucciones de SQL para recuperar datos de BigQuery. Por ejemplo, se usan dos objetos que contienen arreglos para compilar el mapa de calor, como se muestra en la siguiente tabla.

Nombre del objeto Contenido
oraciones

{sentence:sentenceString, sentiment: sentimentValue}
palabras

{words:wordsArray}

Con estos dos objetos, puedes crear una asignación de la hora de inicio de una oración para la reproducción de audio, representar la opinión de la oración de forma visual y mostrar la oración.

Cuando un usuario hace clic en el cuadrado de un mapa de calor, se llama a la función onSeekChange mediante el siguiente código:

this.onSeekChange(parseFloat(0))
onSeekChange = (value) => {
   this.player.seekTo(value);
   let currentPlayerTime = this.player.getCurrentTime()
 }

Debes capturar el valor de startTime de la oración en la que hizo clic el usuario, como se representa en la asignación que se muestra a continuación:

{sentence:sentenceString, sentiment: sentimentValue, start: startTime}

Debes capturar el valor de startTime de la oración mediante la unión de las oraciones y su posterior división en un arreglo. Luego, debes hacer coincidir la palabra inicial de la oración con el arreglo dividido para encontrar el valor de startTime. De esta manera, puedes posicionar al usuario en la hora de inicio del archivo de audio para la reproducción.

Mediante la combinación de las dos API, puedes generar visualizaciones como el siguiente cronograma de opiniones:

Visualización del cronograma de opiniones

Próximos pasos