Vtr100 commited on
Commit
5f51158
·
verified ·
1 Parent(s): 733e42d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -37
app.py CHANGED
@@ -2,56 +2,56 @@ import gradio as gr
2
  import joblib
3
  import numpy as np
4
  import os
 
5
 
6
  # Caminho padrão do modelo
7
  MODEL_PATH = os.getenv("MODEL_PATH", "baseline_pipe.pkl")
8
 
9
- # Tenta carregar o modelo treinado
10
  baseline = None
11
  if os.path.exists(MODEL_PATH):
12
- try:
13
- baseline = joblib.load(MODEL_PATH)
14
- print(f"✅ Modelo carregado com sucesso: {MODEL_PATH}")
15
- except Exception as e:
16
- print(f"⚠️ Erro ao carregar o modelo '{MODEL_PATH}': {e}")
17
  else:
18
- print(f"⚠️ Aviso: arquivo de modelo '{MODEL_PATH}' não encontrado. Executando em modo demonstração.")
19
 
20
- def predict_sentiment(text: str):
21
- """
22
- Realiza a predição de sentimento (positivo/negativo) ou simula resposta
23
- se o modelo não estiver carregado.
24
- """
25
  if not text or text.strip() == "":
26
- return {"predição": "n/a", "confiança": 0.0}
27
-
28
- # Caso o modelo não esteja disponível
29
- if baseline is None:
30
- fake_pred = "positivo" if "bom" in text.lower() else "negativo"
31
- return {"predição": f"(simulado) {fake_pred}", "confiança": 0.0}
32
-
33
- # Predição real
34
- proba = baseline.predict_proba([text])[0]
35
- pred = int(np.argmax(proba))
36
- label = "positivo" if pred == 1 else "negativo"
37
- conf = float(np.max(proba))
38
- return {"predição": label, "confiança": round(conf, 4)}
 
 
 
 
 
 
 
 
 
 
39
 
40
  # Interface Gradio
41
  demo = gr.Interface(
42
- fn=predict_sentiment,
43
  inputs=gr.Textbox(label="Digite uma avaliação de produto"),
44
- outputs=gr.JSON(label="Resultado"),
45
- title="🛍️ Análise de Sentimentos (Amazon Polarity)",
46
- description=(
47
- "Classificador TF-IDF + Regressão Logística. "
48
- "Caso o arquivo baseline_pipe.pkl não esteja presente, o sistema usa modo simulado."
49
- ),
50
- theme="soft",
51
- examples=[
52
- ["Este produto é incrível, recomendo muito!"],
53
- ["Horrível, que desperdício de dinheiro."]
54
- ],
55
  )
56
 
57
  if __name__ == "__main__":
 
2
  import joblib
3
  import numpy as np
4
  import os
5
+ from transformers import pipeline
6
 
7
  # Caminho padrão do modelo
8
  MODEL_PATH = os.getenv("MODEL_PATH", "baseline_pipe.pkl")
9
 
10
+ # Carrega o modelo de sentimentos
11
  baseline = None
12
  if os.path.exists(MODEL_PATH):
13
+ baseline = joblib.load(MODEL_PATH)
14
+ print("✅ Modelo de sentimento carregado.")
 
 
 
15
  else:
16
+ print("⚠️ Aviso: baseline_pipe.pkl não encontrado. Usando modo simulado.")
17
 
18
+ # Cria o gerador de texto (IA generativa local)
19
+ generator = pipeline("text-generation", model="distilgpt2")
20
+
21
+ def predict_and_respond(text: str):
 
22
  if not text or text.strip() == "":
23
+ return {"sentimento": "n/a", "resposta": "Por favor, digite um texto válido."}
24
+
25
+ # Predição de sentimento
26
+ if baseline:
27
+ proba = baseline.predict_proba([text])[0]
28
+ pred = int(np.argmax(proba))
29
+ label = "positivo" if pred == 1 else "negativo"
30
+ else:
31
+ label = "positivo" if "bom" in text.lower() else "negativo"
32
+
33
+ # Gera uma resposta contextual
34
+ prompt = (
35
+ f"O cliente escreveu: '{text}'. "
36
+ f"Identificamos que o sentimento é {label}. "
37
+ "Responda de forma empática e útil, em português:"
38
+ )
39
+ response = generator(prompt, max_new_tokens=60, do_sample=True, temperature=0.7)[0]["generated_text"]
40
+
41
+ # Retorna resultados
42
+ return {
43
+ "sentimento": label,
44
+ "resposta": response.replace(prompt, "").strip()
45
+ }
46
 
47
  # Interface Gradio
48
  demo = gr.Interface(
49
+ fn=predict_and_respond,
50
  inputs=gr.Textbox(label="Digite uma avaliação de produto"),
51
+ outputs=gr.JSON(label="Análise + Resposta"),
52
+ title="🧠 Análise de Sentimentos + IA Generativa",
53
+ description="Analisa o sentimento e gera uma resposta automática e empática ao usuário.",
54
+ theme="soft"
 
 
 
 
 
 
 
55
  )
56
 
57
  if __name__ == "__main__":