Conceito: Enriquecimento de Dados com PLN
A base da Playcatch não é apenas tocar música, mas entender o conteúdo semântico. Transformamos texto bruto (letras) em metadados estruturados (emoções/sentimentos) utilizando modelos de linguagem pré-treinados.
Abordagem: Transfer Learning (Aprendizado por Transferência), utilizando modelos do Hugging Face.
Modelo Sugerido: nlptown/bert-base-multilingual-uncased-sentiment.
Métrica de Saída: Escala de 1 a 5 estrelas (atribuindo polaridade ao texto).
- Pontos-Chave Técnicos (Checklist de Desenvolvimento)
Configuração: Ambiente isolado com Python 3.10+, PyTorch para processamento e transformers para abstração do modelo.
Limpeza (Preprocessing): Uso de Expressões Regulares (Regex) para remover ruídos das letras (tags como [Refrão]), evitando que o modelo tente analisar metadados como se fossem sentimentos.
Inferência em Lote (Batching): Processamento de várias letras simultaneamente para otimizar o uso da GPU/CPU.
Persistência: Exportação dos resultados em .csv para alimentar o futuro motor de recomendação (Etapa 2).
- Código-Fonte Consolidado (Versão Produção)
Este código resume a lógica de inicialização e processamento que você implementou:
Python
import torch
from transformers import pipeline
import pandas as pd
import re
1. SETUP DO DISPOSITIVO
device = 0 if torch.cuda.is_available() else -1
2. CARREGAMENTO DO MODELO (BERT MULTILINGUAL)
Classifica de 1 (muito negativo) a 5 (muito positivo)
sentiment_analyzer = pipeline(
"sentiment-analysis",
model="nlptown/bert-base-multilingual-uncased-sentiment",
device=device
)
def clean_text(text):
"""Limpeza técnica das letras (O(n))"""
text = re.sub(r'[.*?]', '', text)
return text.strip()
def run_analysis(lyrics_list):
"""Executa a análise e estrutura os dados"""
cleaned = [clean_text(l) for l in lyrics_list]
# Inferência em lote
preds = sentiment_analyzer(cleaned, truncation=True, max_length=512)
# Criação do dataset estruturado
data = []
for i, p in enumerate(preds):
data.append({
"id": i,
"label": p['label'],
"score": round(p['score'], 4),
"preview": cleaned[i][:50]
})
return pd.DataFrame(data)
--- EXEMPLO DE USO ---
if name == "main":
letras = ["Eu estou muito feliz hoje!", "Que saudade de você, dói muito."]
df = run_analysis(letras)
print(df)
4. Analogia para Memorização
Imagine que a Playcatch é uma biblioteca mágica.
As letras de música chegam como pergaminhos sem título.
O Transformer é um bibliotecário que sabe ler todas as línguas e sente a "energia" de cada texto.
A Etapa 1 foi colocar um carimbo colorido em cada pergaminho (Azul para triste, Amarelo para feliz).
Agora, na Etapa 2, quando um leitor (usuário) pedir algo "para animar o dia", o bibliotecário só precisa olhar para os carimbos amarelos.