Spaces:
Runtime error
Runtime error
Upload Arquivos
Browse files- README.md +53 -12
- app.py +33 -0
- requirements.txt +10 -0
README.md
CHANGED
|
@@ -1,14 +1,55 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
---
|
| 13 |
|
| 14 |
-
|
|
|
|
| 1 |
+
|
| 2 |
+
# Projeto Final — Análise de Sentimentos (Amazon Polarity)
|
| 3 |
+
|
| 4 |
+
**Curso**: Machine Learning e Deep Learning
|
| 5 |
+
**Data**: 2025-11-12
|
| 6 |
+
**Grupo**: _(preencha com os integrantes)_
|
| 7 |
+
|
| 8 |
+
## 1. Definição do Problema
|
| 9 |
+
Classificar avaliações de produtos (Amazon) como **positivas** ou **negativas**.
|
| 10 |
+
|
| 11 |
+
**Justificativa**: problema real de PLN, com alto valor prático em e-commerce e suporte a decisões.
|
| 12 |
+
|
| 13 |
+
## 2. Dataset
|
| 14 |
+
- **Fonte**: [Hugging Face — `amazon_polarity`](https://huggingface.co/datasets/amazon_polarity)
|
| 15 |
+
- **Tamanho**: milhões de exemplos (usamos amostra para execução rápida)
|
| 16 |
+
- **Divisão**: treino/validação/teste
|
| 17 |
+
|
| 18 |
+
## 3. Metodologia
|
| 19 |
+
- **Pré-processamento**: limpeza básica de texto; TF‑IDF (ML) e tokenização simples (DL)
|
| 20 |
+
- **Modelos**:
|
| 21 |
+
- Baseline: TF‑IDF + Regressão Logística
|
| 22 |
+
- Comparativo: Random Forest
|
| 23 |
+
- Deep Learning: LSTM (PyTorch)
|
| 24 |
+
- **Métricas**: Accuracy, F1 (macro/weighted), Matriz de Confusão
|
| 25 |
+
|
| 26 |
+
## 4. Resultados (resumo)
|
| 27 |
+
> _Inclua as tabelas e gráficos principais. Compare ML vs. DL e explique as diferenças observadas._
|
| 28 |
+
|
| 29 |
+
## 5. Deploy (Hugging Face Spaces)
|
| 30 |
+
**Arquivos necessários**:
|
| 31 |
+
- `app.py`
|
| 32 |
+
- `requirements.txt`
|
| 33 |
+
- `baseline_pipe.pkl` (gerado pelo notebook)
|
| 34 |
+
|
| 35 |
+
**Passo a passo**:
|
| 36 |
+
1. Crie uma conta em https://huggingface.co (ou use a sua).
|
| 37 |
+
2. Clique em **Create new Space** → **Gradio** → **Python**.
|
| 38 |
+
3. Faça **Upload** de `app.py`, `requirements.txt` e `baseline_pipe.pkl`.
|
| 39 |
+
4. Aguarde o build do Space e teste a interface.
|
| 40 |
+
5. Edite este **README** com prints da interface funcionando e links.
|
| 41 |
+
|
| 42 |
+
## 6. Conclusões
|
| 43 |
+
- _Resumo dos achados e justificativas técnicas._
|
| 44 |
+
- _Limitações e próximos passos (ex.: transformers, tuning avançado, dados balanceados)._
|
| 45 |
+
|
| 46 |
+
## 7. Como reproduzir localmente
|
| 47 |
+
```bash
|
| 48 |
+
python -m venv .venv && source .venv/bin/activate # (Windows: .venv\Scripts\activate)
|
| 49 |
+
pip install -r requirements.txt
|
| 50 |
+
python app.py
|
| 51 |
+
```
|
| 52 |
+
|
| 53 |
---
|
| 54 |
|
| 55 |
+
> **Observação**: Este repositório/Space cumpre os **entregáveis**: notebook, deploy funcional e documentação.
|
app.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
import gradio as gr
|
| 3 |
+
import joblib
|
| 4 |
+
import numpy as np
|
| 5 |
+
import os
|
| 6 |
+
|
| 7 |
+
# Carrega o pipeline baseline (TF-IDF + LogisticRegression)
|
| 8 |
+
MODEL_PATH = os.getenv("MODEL_PATH", "baseline_pipe.pkl")
|
| 9 |
+
|
| 10 |
+
if not os.path.exists(MODEL_PATH):
|
| 11 |
+
raise FileNotFoundError(f"Arquivo de modelo não encontrado: {MODEL_PATH}. Faça upload de baseline_pipe.pkl.")
|
| 12 |
+
|
| 13 |
+
baseline = joblib.load(MODEL_PATH)
|
| 14 |
+
|
| 15 |
+
def predict_sentiment(text: str):
|
| 16 |
+
if not text or text.strip() == "":
|
| 17 |
+
return {"predição": "n/a", "confiança": 0.0}
|
| 18 |
+
proba = baseline.predict_proba([text])[0]
|
| 19 |
+
pred = int(np.argmax(proba))
|
| 20 |
+
label = "positivo" if pred == 1 else "negativo"
|
| 21 |
+
conf = float(np.max(proba))
|
| 22 |
+
return {"predição": label, "confiança": conf}
|
| 23 |
+
|
| 24 |
+
demo = gr.Interface(
|
| 25 |
+
fn=predict_sentiment,
|
| 26 |
+
inputs=gr.Textbox(label="Digite uma avaliação de produto"),
|
| 27 |
+
outputs=gr.JSON(label="Resultado"),
|
| 28 |
+
title="Análise de Sentimentos (Amazon Polarity)",
|
| 29 |
+
description="Pipeline TF-IDF + Regressão Logística. Faça upload de baseline_pipe.pkl gerado no notebook."
|
| 30 |
+
)
|
| 31 |
+
|
| 32 |
+
if __name__ == "__main__":
|
| 33 |
+
demo.launch()
|
requirements.txt
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
datasets==3.0.1
|
| 3 |
+
pandas==2.2.2
|
| 4 |
+
numpy==2.1.3
|
| 5 |
+
scikit-learn==1.5.2
|
| 6 |
+
matplotlib==3.9.2
|
| 7 |
+
joblib==1.4.2
|
| 8 |
+
torch==2.4.1
|
| 9 |
+
tqdm==4.66.5
|
| 10 |
+
gradio==5.7.1
|