A capacidade de compreender sentimentos humanos a partir de textos e vozes já não é exclusiva de grandes laboratórios. Hoje, com algumas bibliotecas acessíveis em Python, é possível desenvolver sistemas capazes de interpretar emoções e tons de fala de maneira surpreendentemente precisa.
Neste artigo, vamos explorar uma abordagem multimodal, combinando texto e áudio para identificar sentimentos como alegria, raiva, tristeza ou neutralidade — unindo processamento de linguagem natural e análise de sinais de voz.
O que é uma Análise Multimodal?
Em termos simples, uma análise multimodal considera mais de uma fonte de informação.
Enquanto a maioria dos projetos foca apenas no texto (como tweets, comentários ou e-mails), uma análise multimodal considera também o tom de voz, que carrega informações emocionais sutis, impossíveis de captar apenas com palavras.
Exemplo:
A frase “tudo bem” pode soar amigável, sarcástica ou irritada — depende do tom.
Nosso objetivo será combinar esses dois mundos: texto + voz.
Tecnologias e Bibliotecas Utilizadas
Para este projeto, usaremos apenas ferramentas bem documentadas e gratuitas:
| Biblioteca | Função |
|---|---|
| transformers | Análise de sentimento textual |
| torchaudio | Extração de características da voz |
| librosa | Análise e visualização de áudio |
| scikit-learn | Normalização e modelos de classificação simples |
| matplotlib | Gráficos e comparações visuais |
Parte 1 — Detecção de Sentimento em Texto
Começamos com algo simples: análise de sentimento textual.
Com o modelo distilbert-base-uncased-finetuned-sst-2-english, conseguimos classificar rapidamente o sentimento de qualquer texto.
from transformers import pipeline
# Carrega o pipeline de análise de sentimento
analisador_texto = pipeline("sentiment-analysis")
# Exemplo de entrada
texto = "Estou muito feliz com o resultado do projeto!"
resultado = analisador_texto(texto)
print(resultado)
Saída esperada:
[{'label': 'POSITIVE', 'score': 0.998}]
Simples e eficiente. Agora, vamos além.
Parte 2 — Detecção de Sentimento na Voz
O áudio é mais desafiador, pois envolve frequência, entonação e energia.
Podemos extrair essas características com librosa e aplicar uma classificação leve com base em parâmetros acústicos.
import librosa
import numpy as np
# Carrega um arquivo de áudio (voz humana)
audio_path = "voz_exemplo.wav"
y, sr = librosa.load(audio_path)
# Extrai características acústicas
energia = np.mean(librosa.feature.rms(y=y))
pitch = np.mean(librosa.yin(y, fmin=80, fmax=400))
mel = np.mean(librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13))
print(f"Pitch médio: {pitch:.2f}")
print(f"Energia média: {energia:.4f}")
Esses valores — pitch, energia e MFCCs — ajudam a identificar emoções:
• Alta energia e pitch: raiva ou entusiasmo
• Baixa energia: tristeza ou desânimo
• Variações abruptas: surpresa ou tensão
Parte 3 — Unindo Texto e Voz (Análise Multimodal)
Aqui está o diferencial: combinar os resultados textuais e acústicos em uma única decisão.
Podemos ponderar as duas fontes ou treinar um modelo simples que aprenda a associar padrões.
def analise_multimodal(texto, audio_energia, audio_pitch):
texto_result = analisador_texto(texto)[0]
# Peso maior para o texto (70%) e menor para o áudio (30%)
sentimento_score = texto_result['score'] * 0.7 + (audio_pitch / 300) * 0.3
sentimento_final = texto_result['label']
if sentimento_score > 0.6:
sentimento_final = "POSITIVE"
elif sentimento_score < 0.4:
sentimento_final = "NEGATIVE"
else:
sentimento_final = "NEUTRAL"
return sentimento_final
print(analise_multimodal("Estou bem, mas um pouco cansado.", 0.04, 110))
Com essa lógica simples, conseguimos algo notável:
um sistema que interpreta emoções tanto no que foi dito quanto em como foi dito.
Visualizando Resultados
Podemos plotar comparações entre diferentes amostras de fala:
import matplotlib.pyplot as plt
samples = ["feliz.wav", "triste.wav", "nervoso.wav"]
energies = []
for s in samples:
y, sr = librosa.load(s)
energies.append(np.mean(librosa.feature.rms(y=y)))
plt.bar(samples, energies)
plt.title("Comparação de energia em diferentes emoções")
plt.ylabel("Energia média")
plt.show()
Gráficos como este ajudam a visualizar o comportamento emocional de forma clara e intuitiva.
A detecção de sentimentos em textos e vozes é uma das aplicações mais interessantes da análise de dados contemporânea.
Mais do que identificar “positivo” ou “negativo”, o desafio é compreender nuances — o contexto, o tom e a intenção.
Essa abordagem multimodal mostra que a emoção humana pode ser representada em números, padrões e formas de onda — mas continua sendo um campo em que a sensibilidade e a interpretação humana são insubstituíveis.