Bem-vindo ao Blog da DMarkInfo

Conteúdos e novidades sobre Tecnologia da Informação.

Detecção de Sentimentos em Textos e Vozes com Python: Uma Análise Multimodal

Postado por Eduardo Marques em 06/10/2025
Detecção de Sentimentos em Textos e Vozes com Python: Uma Análise Multimodal

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.

Compartilhe este post:
Voltar para a Home