A. Análise de Sentimentos (Sentiment Analysis)
Diferente da busca por palavras-chave, o modelo analisa a semântica da letra.
Conceito: Usar um Transformer (como o BERT ou RoBERTa) para classificar o texto em labels emocionais (Alegria, Tristeza, Raiva, Serenidade).
Exemplo Prático: A letra "O sol nasceu e o dia está lindo" gera um vetor de probabilidade alto para a classe Joy (Alegria).
B. Sistemas de Recomendação por Humor (Emotion-based Recommendation)
Conceito: Criar um mapeamento entre o estado emocional do usuário (input) e os metadados das músicas (output).
Exemplo Prático: Se o chatbot detecta que o usuário está "melancólico", o sistema filtra o banco de dados por músicas cujas letras foram classificadas com alto índice de Sadness.
C. Chatbot Conversacional (Conversational AI)
Conceito: Implementar um modelo LLM (como o GPT) que utilize as informações do sistema de recomendação para responder de forma natural.
Exemplo Prático: "Parece que você está em um dia reflexivo. Que tal ouvirmos o novo álbum de MPB que combina com essa vibe?"
Código Fonte: PoC de Análise de Sentimentos:
import torch
from transformers import pipeline
import gradio as gr
1. Inicialização do Pipeline com modelo especializado em emoções
Modelo: j-hartmann/emotion-english-distilroberta-base
classifier = pipeline("text-classification",
model="j-hartmann/emotion-english-distilroberta-base",
return_all_scores=True)
def analyze_lyrics(lyrics):
"""
Recebe a letra da música e retorna a emoção predominante.
"""
# Inferência do modelo
results = classifier(lyrics)[0]
# Ordenar por maior pontuação (score)
sorted_results = sorted(results, key=lambda x: x['score'], reverse=True)
# Formatação para o Chatbot
top_emotion = sorted_results[0]['label']
confidence = sorted_results[0]['score']
return f"Emoção detectada: {top_emotion} ({confidence:.2%})"
2. Interface Gradio (MVP para a equipe da Playcatch)
demo = gr.Interface(
fn=analyze_lyrics,
inputs=gr.Textbox(lines=5, placeholder="Cole a letra da música aqui..."),
outputs="text",
title="Playcatch: Emotion Detector v1.0",
description="Analise o sentimento das letras para o nosso novo motor de recomendação."
)
if name == "main":
demo.launch()