SlickSlick commited on
Commit
682dbe8
·
verified ·
1 Parent(s): cad6daa

Delete app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -79
app.py DELETED
@@ -1,79 +0,0 @@
1
-
2
- from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
3
- from sentence_transformers import SentenceTransformer, util
4
- import torch
5
- import gradio as gr
6
-
7
- # Modelos A e B
8
- modelo_a_nome = "pierreguillou/t5-base-pt-small-finetuned-question-generation"
9
- modelo_b_nome = "unicamp-dl/ptt5-base-portuguese-vocab"
10
-
11
- tokenizer_a = AutoTokenizer.from_pretrained(modelo_a_nome)
12
- modelo_a = AutoModelForSeq2SeqLM.from_pretrained(modelo_a_nome)
13
-
14
- tokenizer_b = AutoTokenizer.from_pretrained(modelo_b_nome)
15
- modelo_b = AutoModelForSeq2SeqLM.from_pretrained(modelo_b_nome)
16
-
17
- # Modelo Árbitro
18
- modelo_arbitro_nome = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
19
- modelo_arbitro = SentenceTransformer(modelo_arbitro_nome)
20
-
21
- # Dispositivo
22
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
23
- modelo_a = modelo_a.to(device)
24
- modelo_b = modelo_b.to(device)
25
- modelo_arbitro = modelo_arbitro.to(device)
26
-
27
- # Funções
28
- def gerar_resposta_modelo_a(pergunta):
29
- entrada = tokenizer_a.encode(pergunta, return_tensors="pt").to(device)
30
- saida_ids = modelo_a.generate(entrada, max_length=50, num_beams=4, early_stopping=True)
31
- resposta = tokenizer_a.decode(saida_ids[0], skip_special_tokens=True)
32
- return resposta
33
-
34
- def gerar_resposta_modelo_b(pergunta):
35
- entrada = tokenizer_b.encode(pergunta, return_tensors="pt").to(device)
36
- saida_ids = modelo_b.generate(entrada, max_length=50, num_beams=4, early_stopping=True)
37
- resposta = tokenizer_b.decode(saida_ids[0], skip_special_tokens=True)
38
- return resposta
39
-
40
- def escolher_melhor_resposta(pergunta, resposta_a, resposta_b):
41
- embeddings = modelo_arbitro.encode([pergunta, resposta_a, resposta_b], convert_to_tensor=True)
42
- similaridade_a = util.pytorch_cos_sim(embeddings[0], embeddings[1]).item()
43
- similaridade_b = util.pytorch_cos_sim(embeddings[0], embeddings[2]).item()
44
-
45
- if similaridade_a > similaridade_b:
46
- melhor = "A"
47
- resposta_escolhida = resposta_a
48
- else:
49
- melhor = "B"
50
- resposta_escolhida = resposta_b
51
-
52
- return resposta_escolhida, melhor, similaridade_a, similaridade_b
53
-
54
- def responder(pergunta):
55
- resposta_a = gerar_resposta_modelo_a(pergunta)
56
- resposta_b = gerar_resposta_modelo_b(pergunta)
57
- resposta_final, escolhido, sim_a, sim_b = escolher_melhor_resposta(pergunta, resposta_a, resposta_b)
58
-
59
- return {
60
- "Melhor Resposta": resposta_final,
61
- "Resposta do Modelo A": f"{resposta_a} (similaridade: {sim_a:.2f})",
62
- "Resposta do Modelo B": f"{resposta_b} (similaridade: {sim_b:.2f})",
63
- "Modelo Escolhido": f"Modelo {escolhido}"
64
- }
65
-
66
- interface = gr.Interface(
67
- fn=responder,
68
- inputs=gr.Textbox(label="Digite sua pergunta"),
69
- outputs=[
70
- gr.Textbox(label="Melhor Resposta"),
71
- gr.Textbox(label="Resposta do Modelo A"),
72
- gr.Textbox(label="Resposta do Modelo B"),
73
- gr.Textbox(label="Modelo Escolhido"),
74
- ],
75
- title="Chatbot em Cascata",
76
- description="Este chatbot compara duas respostas geradas por modelos diferentes e escolhe a melhor com base na similaridade semântica. Respostas 100% em português."
77
- )
78
-
79
- interface.launch()