Click & Talk
Como primeira tarefa, procurarei desenvolver um programa que permita controlar a estrutura dos sons tocados em tempo real, por meio de análises sentimentais sobre o reconhecimento contínuo da voz de um usuário.
Em geral, pretendo fazer algo assim.
Reconhecimento de fala (Speech to Text)
No mundo Open Source exsiten diversas alternativas que podemos utilizar para novos propósitos.
Julius: Provavelmente um dos mais antigos softwares de reconhecimento de voz de todos os tempos; Seu desenvolvimento começou em 1991 na Universidade de Kyoto, e então sua propriedade foi transferida como um projeto independente em 2005. Muitos aplicativos de código aberto o utilizam como mecanismo. É escrito em C e funciona em Linux, Windows, macOS e até Android (em smartphones). Atualmente ele suporta apenas os idiomas inglês e japonês.
Kaldi: Seu desenvolvimento começou em 2009. É um software de reconhecimento de voz de código aberto escrito em C ++ e “empacotado” por scripts Bash ou Python. Ele é lançado sob a licença pública Apache. Funciona em Windows, macOS e Linux. C ++, é “embrulhado” por scripts Bash e Python.
OpenSeq2Seq: Desenvolvido pela NVIDIA para treinamento de modelos sequência a sequência. Você pode construir seus próprios modelos de treinamento usando-o ou usar os modelos Jasper, Wave2Letter + e DeepSpeech2 que são enviados por padrão. Ele suporta processamento paralelo usando várias GPUs / CPUs múltiplas, além de um suporte pesado para algumas tecnologias NVIDIA como CUDA e suas placas gráficas fortes.
Vosk: Um dos mais novos sistemas de reconhecimento de voz de código aberto, já que seu desenvolvimento começou apenas em 2020. Ao contrário de outros sistemas nesta lista, Vosk está pronto para uso após a instalação, pois suporta 10 idiomas (inglês, alemão, francês, turco …) com modelos portáteis de 50 MB já disponíveis para os usuários (existem outros modelos maiores de até 1,4 GB, se necessário). Ele também funciona em Raspberry Pi, dispositivos iOS e Android, e fornece uma API de streaming que permite que você se conecte a ele para fazer suas tarefas de reconhecimento de voz online. Vosk tem vínculos para Java, Python, JavaScript, C # e NodeJS.
Project DeepSpeech: Este projeto é feito pela Mozilla; É uma biblioteca de fala em texto 100% gratuita e de código aberto que também implica a tecnologia de aprendizado de máquina usando o framework TensorFlow para cumprir sua missão.
O projeto de reconhecimento de voz também considera um banco de dados aberto com vozes integradas aos sistemas.
Data Mining (Text scoring)
Nesta parte, o que precisamos é ser capaz de analisar o texto escrito (com certeza no futuro, podemos pular esta etapa e analisar o áudio diretamente, mas por agora parece uma boa aproximação).
Existem vários métodos e dicionários para avaliar a opinião ou emoção no texto.
Três léxicos de uso geral são:
AFINN
de Finn Årup Nielsen,bing
de Bing Liu and collaborators, enrc
de Saif Mohammad and Peter Turney.
Todos os três léxicos são baseados em unigramas, ou seja, palavras únicas. Esses léxicos contêm muitas palavras que são pontuações. O léxico nrc
categoriza as palavras de uma forma binária (“sim” / “não”) em categorias de positivo, negativo, raiva, antecipação, repulsa, medo, alegria, tristeza, surpresa e confiança. O léxico bing
categoriza palavras de forma binária em categorias positivas e negativas. O léxico AFINN
atribui palavras com uma pontuação que varia entre -5 e 5, com pontuações negativas indicando sentimento negativo e pontuações positivas indicando sentimento positivo.
Como exemplo, digamos que falamos ao microfone e dissemos “Espero que não seja horrível”. Isso seria 2 pontos para “esperança” e -3 pontos para “horrendo”, o que tornaria nossa sentença negativa com -1 pontos. Todas as outras palavras que não estão na lista, nós ignoraríamos para pontuar.
Tecnicamente, o que temos que fazer é analisar o arquivo e convertê-lo em um arquivo JSON com a palavra e somar cada uma das pontuações associadas.
Felizmente, isso já foi feito por Andrew Sliwinski e sua contribuição de Open Source Sentiment
Eu também encontrei uma versão multilíngue.
🙂
Sound Synthesis (Procedural Audio)
WebPD é um tempo de execução 100% JavaScript Pure Data que usa Web Audio API para reproduzir áudio no navegador. Seu objetivo é permitir que um subconjunto da linguagem de programação Pure Data seja executado no navegador sem plug-ins e com o melhor desempenho possível.
Agora que sabemos o que usaremos, podemos ver as tarefas como:
- O navegador escuta o usuário e retorna algum texto usando Mozilla Web Speech API
- It faz uma solicitação ao servidor com o texto
- The servidor avalia o texto usando a lista de AFINN e retorna a pontuação
- A pontuação é recebida pelo cliente (navegador) que se comunica com o patch PD montado no servidor.
- O patch interage com a API de áudio da Web para fazer a síntese
1) O navegador escuta o usuário e retorna algum texto usando Mozilla Web Speech API
A primeira coisa a fazer é definir uma instância de reconhecimento de fala para controlar o reconhecimento de nosso aplicativo. Isso é feito usando o SpeechRecognition()
constructor.
Também definimos algumas outras propriedades da instância de reconhecimento antes de prosseguirmos:
SpeechRecognition.continuous
: Controles, se os resultados contínuos são capturados, (true
), ou apenas um único resultado cada vez que o reconhecimento é iniciado (false
).SpeechRecognition.lang
: Define o idioma do reconhecimento. Definir isso é uma boa prática e, portanto, recomendado.
Depois que o reconhecimento de voz é iniciado, muitos manipuladores de eventos podem ser usados para recuperar resultados e outras informações ao redor (Veja o SpeechRecognition
event handlers list.) O mais comum que você provavelmente usará é SpeechRecognition.onresult
, que é disparado assim que um resultado bem-sucedido for recebido.
O SpeechRecognitionEvent.results
propriedade retorna um SpeechRecognitionResultList.
Em seguida, retornamos sua propriedade transcript para obter uma string contendo o resultado individual reconhecido como uma string.
2) It faz uma solicitação ao servidor com o texto
Para o pedido, uma simples busca é suficiente. Enviamos a transcrição como um parâmetro de consulta que chamaremos de texto.
Então, por exemplo, vamos pegar o seguinte: “I love cats, but I am allergic to them.”
Essa string resulta no seguinte:
Objetos Devolvidos:
Pontuação: pontuação calculada adicionando os valores de sentimento das palavras reconhecidas.
Comparativo: pontuação comparativa da string de entrada.
Cálculo: uma matriz de palavras que têm valência negativa ou positiva com sua respectiva pontuação AFINN.
Token: todos os tokens, como palavras ou emojis, encontrados na string de entrada.
Palavras: lista de palavras da string de entrada que foram encontradas na lista AFINN.
Positivo: Lista de palavras positivas na string de entrada que foram encontradas na lista AFINN.
Negativo: Lista de palavras negativas na string de entrada que foram encontradas na lista AFINN.
3) A pontuação é recebida pelo cliente (navegador) que se comunica com o patch PD montado no servidor.
Finalmente desenvolvemos um patch em Pure Data para fazer nossa síntese de áudio.