Vtr100 commited on
Commit
8290b89
·
verified ·
1 Parent(s): 1dc9b4b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -26
app.py CHANGED
@@ -18,18 +18,18 @@ if os.path.exists(MODEL_PATH):
18
  else:
19
  print("⚠️ baseline_pipe.pkl não encontrado. Usando modo simulado.")
20
 
21
- # Carrega modelo generativo treinado em português
22
- # (modelo leve e compatível com Hugging Face Spaces)
23
- generator = pipeline("text-generation", model="pierreguillou/gpt2-small-portuguese")
24
 
25
  def predict_and_respond(text: str):
26
  """
27
- Analisa o sentimento do texto e gera uma resposta automática empática.
28
  """
29
  if not text or text.strip() == "":
30
  return {"sentimento": "n/a", "resposta": "Por favor, digite uma avaliação válida."}
31
 
32
- # Predição de sentimento
33
  if baseline:
34
  proba = baseline.predict_proba([text])[0]
35
  pred = int(np.argmax(proba))
@@ -39,27 +39,21 @@ def predict_and_respond(text: str):
39
  label = "positivo" if "bom" in text.lower() else "negativo"
40
  conf = 0.0
41
 
42
- # Cria prompt para IA generativa
43
  prompt = (
44
  f"O cliente escreveu: '{text}'. "
45
- f"Identificamos que o sentimento é {label}. "
46
- "Responda de forma empática, útil e em português:"
 
47
  )
48
 
49
- # Gera resposta
50
- response = generator(
51
- prompt,
52
- max_new_tokens=80,
53
- do_sample=True,
54
- temperature=0.7,
55
- top_k=50,
56
- top_p=0.95
57
- )[0]["generated_text"]
58
-
59
- # Limpa o texto da resposta
60
- resposta_limpa = response.replace(prompt, "").strip()
61
 
62
- # Retorna resultados
63
  return {
64
  "sentimento": label,
65
  "confiança": round(conf, 3),
@@ -71,12 +65,12 @@ demo = gr.Interface(
71
  fn=predict_and_respond,
72
  inputs=gr.Textbox(label="Digite uma avaliação de produto"),
73
  outputs=gr.JSON(label="Resultado"),
74
- title="🤖 Análise de Sentimentos + IA Generativa (Português)",
75
- description="Analisa o sentimento e gera uma resposta empática com IA generativa em português.",
76
  examples=[
77
- ["Gostei do produto, mas a entrega atrasou um pouco."],
78
- ["Veio quebrado e o suporte não ajudou."],
79
- ["Excelente qualidade, recomendo muito!"]
80
  ],
81
  theme="soft"
82
  )
 
18
  else:
19
  print("⚠️ baseline_pipe.pkl não encontrado. Usando modo simulado.")
20
 
21
+ # Carrega modelo generativo em português (T5-base da Unicamp)
22
+ # Esse modelo entende instruções e responde em linguagem natural.
23
+ generator = pipeline("text2text-generation", model="unicamp-dl/ptt5-base-portuguese-vocab")
24
 
25
  def predict_and_respond(text: str):
26
  """
27
+ Analisa o sentimento do texto e gera uma resposta automática empática em português.
28
  """
29
  if not text or text.strip() == "":
30
  return {"sentimento": "n/a", "resposta": "Por favor, digite uma avaliação válida."}
31
 
32
+ # Etapa 1 — Predição de sentimento
33
  if baseline:
34
  proba = baseline.predict_proba([text])[0]
35
  pred = int(np.argmax(proba))
 
39
  label = "positivo" if "bom" in text.lower() else "negativo"
40
  conf = 0.0
41
 
42
+ # Etapa 2 Geração de resposta empática com T5
43
  prompt = (
44
  f"O cliente escreveu: '{text}'. "
45
+ f"O sentimento identificado é {label}. "
46
+ "Gere uma resposta curta, empática e em português natural, "
47
+ "como se fosse um atendente cordial da empresa."
48
  )
49
 
50
+ try:
51
+ response = generator(prompt, max_new_tokens=80)[0]["generated_text"]
52
+ resposta_limpa = response.strip()
53
+ except Exception as e:
54
+ resposta_limpa = f"(Erro ao gerar resposta com o modelo T5: {e})"
 
 
 
 
 
 
 
55
 
56
+ # Retorna resultado final
57
  return {
58
  "sentimento": label,
59
  "confiança": round(conf, 3),
 
65
  fn=predict_and_respond,
66
  inputs=gr.Textbox(label="Digite uma avaliação de produto"),
67
  outputs=gr.JSON(label="Resultado"),
68
+ title="🤖 Análise de Sentimentos + IA Generativa (Português - T5)",
69
+ description="Analisa o sentimento e gera uma resposta empática e natural com o modelo T5 em português (Unicamp).",
70
  examples=[
71
+ ["Gostei do produto, mas chegou com um pequeno defeito."],
72
+ ["Horrível, o suporte não resolveu meu problema."],
73
+ ["Entrega rápida e produto excelente!"]
74
  ],
75
  theme="soft"
76
  )