Como categorizar o conteúdo de áudio usando o aprendizado de máquina

Este documento descreve a arquitetura de um pipeline de categorização de áudio que usa aprendizado de máquina para analisar arquivos de áudio, transcrevê-los e analisá-los em busca de sentimentos. O aprendizado de máquina pode tornar o processo dessas tarefas mais rápido e preciso do que quando realizado por pessoas. O documento é destinado a arquitetos ou outras pessoas que querem aprender a usar os produtos do Google Cloud e as APIs de machine learning do Google Cloud para ajudar a categorizar o conteúdo de áudio. Um tutorial complementar ajuda os desenvolvedores a realizar o processo de implantação de uma amostra que ilustra esse padrão.

Introdução

Se parte dos seus negócios é coletar arquivos de áudio, talvez lhe convenha extrair transcrições de texto desses áudios. Também é possível categorizar o conteúdo ou adicionar tags para indexação de pesquisa. Leva tempo para pessoas criarem transcrições, e muitas vezes há tanto conteúdo de áudio que não é prático que pessoas transcrevam ou até mesmo categorizem tudo. Além disso, quando as pessoas marcam conteúdo, se elas fornecerem suas próprias tags, talvez elas não incluam tags úteis ou não marquem o conteúdo com precisão.

Usando o aprendizado de máquina, é possível criar um pipeline de categorização automatizado. Este documento descreve uma abordagem para automatizar o processo de análise de arquivos de áudio usando as APIs de aprendizado de máquina do Google Cloud. Essa abordagem aumenta a eficiência do processo de categorização e a variedade do conteúdo incluindo tags automaticamente. A solução faz isso estendendo a categorização para todo o conteúdo de áudio e gerando tags automaticamente. Adotando essa abordagem, é possível mudar para classificar proativamente todo o conteúdo e adicionar tags precisas para operações de pesquisa.

O primeiro passo do processo de categorização de um arquivo de áudio é a transcrição do arquivo de áudio para texto. Após a conversão do arquivo de áudio para texto, é possível usar o aprendizado de máquina para ver um resumo do conteúdo. Esse resumo pode ser usado para extrair entidades comuns (nomes próprios e substantivos comuns) no texto, analisar o conteúdo geral e, em seguida, oferecer categorização e tags.

Desafios da criação de um pipeline de processamento de áudio

Criar um pipeline para processar arquivos de áudio gerados por usuário apresenta os seguintes desafios:

  • Escalonabilidade: o número de envios de arquivos de áudio pode aumentar ou diminuir rapidamente, e esse número pode variar significativamente ao longo do tempo. Pode haver picos de tempo de upload durante um evento ou campanha que aumente significativamente o número de envios de conteúdo e, portanto, a carga de processamento.
  • Desempenho: o processamento de cada arquivo de áudio exige um pipeline eficiente. Os arquivos de áudio podem ser grandes, exigindo um tempo considerável para serem processados. O app precisa ser dimensionado para armazenar e processar com eficiência cada arquivo de áudio enviado, armazenar o texto resultante e chamar as APIs de aprendizado de máquina para analisar o sentimento e a perspectiva e armazenar os resultados.
  • Inteligência: um formato de áudio não é adequado à análise tradicional e, por isso, ele precisa ser convertido em texto antes. A conversão para texto é um processo manual intensivo feito por um ser humano ou que exige uma abordagem baseada em aprendizado de máquina. Após a conversão do áudio, as entidades, os conceitos e o sentimento precisam ser revisados para categorização e inclusão de tags.

Arquitetura

O seguinte diagrama mostra a arquitetura da solução de canal de categorização de áudio descrita neste documento. O canal tem as seguintes características fundamentais que podem ser usadas para qualquer caso de uso que envolva o processamento de arquivos de áudio:

  • Um pipeline orientado por eventos que processa conteúdo automaticamente quando o conteúdo de áudio é enviado para um local de armazenamento.
  • Processamento escalonável e sem servidor que é invocado automaticamente em resposta a eventos no pipeline.
  • Aprendizado de máquina que executa as tarefas de transcrição de arquivos de áudio e análise de sentimentos e entidades. Ele usa modelos de aprendizado de máquina existentes, de modo que não é necessário criar ou encontrar modelos personalizados.

Arquitetura do pipeline que processa arquivos de áudio.

O pipeline ilustrado no diagrama consiste nas seguintes etapas de processamento:

  1. Upload do arquivo de áudio. Um app ou processo faz o upload de arquivos de áudio para o Cloud Storage. É possível usar um pipeline do Dataflow ou um processo de envio em tempo real; essa etapa é independente do próprio pipeline.
  2. Armazenamento do arquivo de áudio. Os arquivos de áudio são armazenados em um bucket do Cloud Storage que opera como um bucket de preparo para manter os arquivos antes de serem executados no restante do pipeline.
  3. Acionamento da Função do Cloud. Uma notificação Finalização do objeto do Cloud Storage é gerada sempre que os arquivos de áudio forem enviados para o bucket de preparo. A notificação aciona uma Função do Cloud.
  4. Chamado da API Speech-to-Text. A Função do Cloud chama a API Speech-to-Text para adquirir uma transcrição do arquivo de áudio. Esse processo é assíncrono, de modo que a API Speech-to-Text retorna um ID de job para a função do Cloud.
  5. Publicação dos códigos de tarefa de conversão de voz em texto. O código da tarefa e o nome do arquivo de áudio são publicados em um tópico Pub/Sub. Essas mensagens Pub/Sub publicadas com códigos de tarefa de diferentes envios de arquivos de áudio se acumulam no tópico conforme mais uploads são feitos.
  6. Enquete de conversão de voz em texto. Em uma frequência programada (por exemplo, a cada 10 minutos), o programador do Cloud publica uma mensagem em um tópico Pub/Sub, que aciona uma segunda Função do Cloud.
  7. Aquisição dos resultados da API Speech-to-Text. A segunda Função do Cloud Function obtém todas as mensagens do primeiro tópico Pub/Sub e extrai os códigos das tarefas e os nomes dos arquivos de cada mensagem. Em seguida, ela chama a API Speech-to-Text para verificar o status de cada código de tarefa:

    • Se um job for concluído, os resultados da transcrição serão gravados em um segundo bucket do Cloud Storage. Em seguida, o arquivo de áudio é movido pela Função do Cloud do bucket de armazenamento temporário do Cloud Storage para um bucket do Cloud Storage para arquivos processados.
    • Se o job não for concluído, uma mensagem Pub/Sub com o código da tarefa e o nome do arquivo será adicionado novamente ao tópico Pub/Sub. Dessa forma, o job será verificado novamente na próxima vez que o programador do Cloud chamar a função do Cloud.

    Se por algum motivo a transcrição não for retornada da conversão de voz em texto, a função do Cloud moverá o arquivo de áudio do bucket de preparo para um bucket de erro do Cloud Storage.

  8. Armazenamento dos resultados da API Speech-to-Text. Um arquivo de texto com uma transcrição do arquivo de áudio é gravado em um bucket do Cloud Storage.

  9. Acionamento das Funções d Cloud. Quando o arquivo de transcrição for carregado para o Cloud Storage, outra notificação de Finalização do objeto é enviada. Essa notificação aciona o processamento de duas Funções do Cloud adicionais.

  10. Chamado da API Perspective. A terceira Função do Cloud chama a API Perspective, que retorna uma resposta sobre a probabilidade de "toxicidade" na transcrição, que é descrita no site de API Perspectives da seguinte maneira:

    O modelo da API Perspective foi treinado pedindo que as pessoas classifiquem os comentários da Internet em uma escala de contribuição "Muito tóxica" a "Muito saudável". Um comentário tóxico é definido como um "comentário grosseiro, desrespeitoso ou desarrazoado que provavelmente fará você sair de uma discussão".

    Quando essa análise é concluída, a Função do Cloud grava os resultados em outro bucket do Cloud Storage.

  11. Chamado da API Cloud Natural Language. A quarta Função do Cloud chama a API Natural Language para analisar a atitude ou o sentimento geral da transcrição e para determinar quais entidades são discutidas. Quando a Função do Cloud recebe os resultados da API Natural Language, a função grava os resultados em outro bucket do Cloud Storage.

  12. Análise dos resultados. Você obtém os resultados da análise por conversão de voz em texto, API Natural Language e API Perspective e integra as informações ao seu próprio pipeline ou aplicativo de revisão. No diagrama anterior, um aplicativo da Web hospedado no App Engine fornece uma interface do usuário simples para visualizar os resultados. O aplicativo da web extrai os dados das saídas armazenadas nos buckets do Cloud Storage.

Processamento dos arquivos de áudio

Depois de fazer upload de um arquivo de áudio, o arquivo é processado por várias APIs. Primeiro, use a conversão de voz em texto para converter o arquivo de áudio em texto. Em seguida, o texto é enviado para a API Natural Language e API Perspective para extrair o sentimento e entidades. O processamento do arquivo de áudio para texto pode demorar um pouco. Assim, a arquitetura usa os recursos de notificação Funções do Cloud, Pub/Sub e Cloud Storage para implementar um pipeline de processamento de evento assíncrono e escalonável."

Cloud Functions

O Cloud Functions oferece uma maneira de construir funções assíncronas criadas especificamente para o usuário sem gerenciar a infraestrutura. Chamar as três APIs na arquitetura descrita neste documento exige um orquestrador baseado em eventos. O Cloud Functions pode ser acionado por notificações do Cloud Storage ou por mensagens Pub/Sub. Os dois métodos de acionamento permitem que você construa uma arquitetura orientada por eventos. O Cloud Functions pode aumentar e diminuir dinamicamente à medida que novos arquivos são adicionados e os volumes de processamento são alterados.

Mensagens de Pub/Sub

O Pub/Sub fornece um serviço de mensagens escalonável que pode ser usado para enviar e receber dados e também pode ser usado para acionar o Cloud Functions. O Pub/Sub estabelece o funcionamento de mensagens assíncronas nesta arquitetura de duas maneiras:

  1. Ele fornece uma fila de mensagens para códigos de tarefas gerados pela API Speech-to-Text. Em seguida, é possível usar os IDs para determinar se os jobs foram concluídos.
  2. O job do programador do Cloud envia uma mensagem Pub/Sub que aciona a Função do Cloud que verifica os resultados da conversão de voz em texto em busca de mensagens que ainda não foram processadas.

Notificações do Cloud Storage

As notificações do Cloud Storage fornecem ganchos para eventos que ocorrem no Cloud Storage. Cada vez que um objeto é enviado ou modificado, uma notificação é gerada. É possível usar essa notificação com o Cloud Functions para criar um sistema com base em eventos.

As notificações do Cloud Storage são usadas em dois locais na arquitetura:

  • Para notificar uma Função do Cloud de que um novo arquivo de áudio foi enviado. Essa notificação inicia o fluxo de processamento.
  • Para notificar duas Funções do Cloud de que a saída de texto da API Speech-to-Text foi armazenada e para executar a saída de texto por meio da API Natural Language e da API Perspective.

Conversão de voz em texto

Converter a gravação de áudio na versão de texto do conteúdo, ou seja, transcrever a gravação de áudio, é uma etapa fundamental deste processo. Uma maneira de executar essa tarefa é implementar um algoritmo de conversão de voz em texto personalizado em um dos frameworks de aprendizado de máquina conhecidas, como o TensorFlow. Outra maneira é usar uma API de aprendizado de máquina pré-treinada, como a API Speech-to-Text. Cada abordagem tem suas vantagens e desvantagens.

Opção 1: criar seu próprio modelo no TensorFlow

Vantagens

  • Permite treinar o modelo em relação a frases específicas ou termos específicos do domínio.

Desvantagens

  • A implantação de conversão de voz em texto é um problema resolvido, e a criação de um algoritmo personalizado não agrega valor, a menos que você tenha termos específicos do domínio.
  • Exige experiência em aprendizado de máquina para implantar o modelo.
  • Exige um esforço significativo para implantar, selecionar e ajustar o modelo.
  • Exige que você gerencie e ajuste o modelo ao longo do tempo.

Opção 2: usar a conversão de voz em texto

Vantagens

  • Fácil de usar por parte dos desenvolvedores porque usar uma API é mais fácil do que desenvolver um modelo e criar sua própria API para usá-lo.
  • Não exige experiência em aprendizado de máquina.
  • Fornece cobertura para mais de 120 idiomas.

Desvantagens

  • Não permite treinar o modelo em comparação a frases específicas ou termos específicos de domínio.

Em geral, a conversão de voz em texto é uma excelente opção, contanto que o áudio não contenha termos técnicos específicos e frases incomuns ou frases com palavras difíceis de decifrar. Como o cenário descrito anteriormente avalia a probabilidade de uma gravação de áudio apresentar conteúdo inapropriado, a conversão de voz em texto deve classificar com precisão o áudio, mesmo se alguns termos técnicos não forem processados.

Devido à ampla abrangência de idiomas da conversão de voz em texto (mais de 120) e da facilidade de integração à solução baseada em Google Cloud, ela é melhor opção para o cenário descrito neste documento.

Como chamar a API Speech-to-Text

A API Speech-to-Text fornece serviços de transcrições síncronas e assíncronas. Para processar arquivos longos de áudio, é melhor usar o modo de transcrição assíncrona. Quando você usa o modo assíncrono, envia um arquivo de áudio para a API. Em seguida, a API retorna um código de tarefa. É possível pesquisar o ID do job para verificar o status dele.

Na arquitetura descrita neste documento, o Cloud Scheduler é usado para verificar regularmente o status de todos os jobs pendentes. O Cloud Scheduler aciona uma Função do Cloud que puxa todos os códigos de tarefa do tópico Pub/Sub. A Função do Cloud verifica o status de cada job chamando a API Speech-to-Text. A API retorna os resultados de todos os jobs que forem concluídos. Esses resultados são armazenados como arquivos de texto no Cloud Storage. Os jobs que ainda não estiverem completos têm seu ID enviado de volta ao tópico Pub/Sub para processamento durante a próxima iteração.

A API Speech-to-Text aceita uma lista de codificações de áudio específicas. Para melhores resultados, trabalhe com fontes de áudio que foram capturadas e transmitidas usando codificações sem perda (FLAC ou LINEAR16). A precisão do reconhecimento de fala pode ser reduzida se você usar codecs com perda para capturar ou transmitir áudios, especialmente se houver ruído de fundo na gravação. Os codecs com perdas são MULAW, AMR, AMR_WB, OGG_OPUS, SPEEX_WITH_HEADER_BYTE e MP3.

Como analisar o sentimento e as entidades

Após a conversão do conteúdo de áudio em texto, é possível realizar análises mais detalhadas sobre o conteúdo para determinar quais entidades são mencionadas no áudio com o sentimento de cada uma delas. Há várias maneiras de extrair entidades e sentimentos do texto, algumas abordagens sendo mais complexas do que outras.

A primeira opção é criar a própria entidade e o extrator de sentimento usando um framework de machine learning, como o TensorFlow. Uma alternativa é aproveitar o trabalho já realizado por outras pessoas e usar o aprendizado por transferência para personalizar um modelo existente. Usar uma API de aprendizado de máquina pré-treinada, como a API Natural Language ou AutoML Natural Language são outras opções. Cada abordagem tem suas vantagens e desvantagens.

Opção 1: criar seu próprio modelo no TensorFlow ou usar o aprendizado por transferência

Vantagens:

  • Permite treinar o modelo quanto a entidades específicas ou termos específicos do domínio.

Desvantagens:

  • A implementação da extração de entidade é um problema resolvido e não agrega valor, a menos que você tenha termos específicos do domínio.
  • Exige experiência em aprendizado de máquina para implantar o modelo.
  • Exige um esforço significativo na implantação do modelo, na seleção de modelos e no ajuste.
  • Exige que você gerencie e ajuste o modelo ao longo do tempo.

Opção 2: usar a API Natural Language

Vantagens:

  • Fácil de usar por parte dos desenvolvedores porque usar uma API é mais fácil do que desenvolver um modelo e criar a API para usá-lo.
  • Não exige experiência em aprendizado de máquina, porque, o modelo é pré-desenvolvido, treinado e hospedado.
  • Inclui análise de sentimento, análise de entidade, análise de sentimento de entidade, classificação de conteúdo e análise de sintaxe.

Desvantagens:

  • Não permite treinamento relacionado a entidades específicas ou termos específicos do domínio.

Opção 3: usar o AutoML Natural Language

Vantagens:

  • Não exige experiência em aprendizado de máquina, porque, o modelo é pré-desenvolvido, treinado e hospedado.
  • Permite treinar o modelo quanto a entidades específicas ou termos específicos do domínio.
  • Apresenta o modelo resultado do treinamento como uma API.

Desvantagens:

  • Exige fornecimento manual de dados de treinamento.
  • Exige que você gerencie e ajuste o modelo ao longo do tempo.

Em geral, a API Natural Language é uma excelente opção, contanto que o texto não contenha termos técnicos e frases incomuns ou frases com palavras difíceis de decifrar. No caso de uso descrito neste documento, como a amostra extrai o sentimento e as entidades do texto, a API Natural Language fornece um nível aceitável de desempenho. Devido à facilidade de uso da API em comparação com o desenvolvimento de um modelo de aprendizado de máquina personalizado, a Natural Language API é uma boa opção.

Como chamar a API Natural Language

Na arquitetura descrita neste documento, a API Natural Language é usada para extrair as entidades e executar a análise de sentimento da entidade. Essas informações são usadas para incluir tags no texto extraído do arquivo de áudio e fornecer uma compreensão do tema geral do texto.

Como analisar a perspectiva do texto

Outro sinal na análise é o impacto negativo que uma observação ou os comentários podem ter em um determinado tópico. A API Perspective foi criada por Jigsaw e a equipe de Tecnologia contra agressão do Google e lançada como um projeto de código aberto. Ela determina a probabilidade de um determinado comentário ser percebido como "tóxico". A API usa modelos de aprendizado de máquina para pontuar o impacto percebido que um comentário pode ter em uma conversa.

A API Perspective

A API Perspective oferece vários modelos, incluindo TOXICITY, PROFANITY e INSULT. A arquitetura de exemplo usa o modelo TOXICITY, que informa a probabilidade de o texto fornecido ser um "comentário grosseiro, desrespeitoso ou desarrazoado que provavelmente fará com que as pessoas abandonem uma discussão". Como o conteúdo de texto inclui os horários de início e término no arquivo de áudio correspondente, os resultados da API Perspective são armazenados com os horários de início e término. Isso permite associar os resultados da API Perspective a uma determinada seção do arquivo de áudio original.

Como visualizar os resultados de pipeline de áudio

O pipeline de processamento é iniciado quando você faz o upload de um arquivo de áudio para o Cloud Storage. Na prática, é possível integrá-lo a qualquer processo de upload de usuário. Pode ser um upload em tempo real usando seu app da Web ou em lote, fazendo o upload de vários arquivos de áudio de uma só vez por um pipeline de dados.

Quando o processamento for concluído, é possível ler os resultados da análise que foi criada pelas APIs usadas na arquitetura. O diagrama da arquitetura ilustra uma IU da Web que exibe o conteúdo do texto, as entidades e o sentimento identificados no texto e o horário de início e término do clipe de áudio relacionado. Conforme mostrado no diagrama, o app da Web usa o App Engine e o Cloud Storage.

App Engine

O app da Web é implantado como um app de App Engine. O App Engine é um produto de Platform as a Service (PaaS) que suporta muitas linguagens de programação comuns da Web e que pode aumentar e diminuir automaticamente o escalonamento com base no tráfego de usuários. O Google App Engine é bem integrado ao Google Cloud, o que simplifica o processo de upload dos arquivos de áudio para o Cloud Storage.

A seguir