|
|
import gradio as gr |
|
|
import torch |
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
|
|
|
|
|
|
MODEL_NAME = "microsoft/DialoGPT-small" |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) |
|
|
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME).to("cpu") |
|
|
|
|
|
|
|
|
def responder(pergunta: str) -> str: |
|
|
""" |
|
|
Bot de Perguntas e Respostas sobre Deep Learning. |
|
|
Recebe uma pergunta em texto e devolve uma resposta em português, |
|
|
com tom de professor explicando de forma simples. |
|
|
""" |
|
|
|
|
|
pergunta = (pergunta or "").strip() |
|
|
if not pergunta: |
|
|
return "Me manda uma pergunta sobre Deep Learning 🙂" |
|
|
|
|
|
|
|
|
system_prefix = ( |
|
|
"Você é o Professor DL, um professor de Deep Learning. " |
|
|
"Responda SEMPRE em português do Brasil, de forma simples, didática e objetiva, " |
|
|
"usando exemplos práticos quando possível. " |
|
|
"Explique conceitos como redes neurais, camadas, CNN, RNN, overfitting, " |
|
|
"regularização, dropout, etc., sem fórmulas muito pesadas." |
|
|
) |
|
|
|
|
|
prompt = ( |
|
|
system_prefix |
|
|
+ "\n\n" |
|
|
+ f"Aluno: {pergunta}\n" |
|
|
+ "Professor DL:" |
|
|
) |
|
|
|
|
|
|
|
|
inputs = tokenizer( |
|
|
prompt, |
|
|
return_tensors="pt", |
|
|
truncation=True, |
|
|
max_length=512, |
|
|
) |
|
|
|
|
|
|
|
|
with torch.no_grad(): |
|
|
output_ids = model.generate( |
|
|
**inputs, |
|
|
max_new_tokens=160, |
|
|
do_sample=True, |
|
|
top_p=0.9, |
|
|
temperature=0.7, |
|
|
pad_token_id=tokenizer.eos_token_id, |
|
|
) |
|
|
|
|
|
saida = tokenizer.decode(output_ids[0], skip_special_tokens=True) |
|
|
|
|
|
|
|
|
if "Professor DL:" in saida: |
|
|
resposta = saida.split("Professor DL:")[-1].strip() |
|
|
else: |
|
|
resposta = saida.strip() |
|
|
|
|
|
if not resposta: |
|
|
resposta = ( |
|
|
"Boa pergunta! Tenta reformular ou ser um pouco mais específico " |
|
|
"sobre o que você quer saber em Deep Learning." |
|
|
) |
|
|
|
|
|
return resposta |
|
|
|
|
|
|
|
|
demo = gr.Interface( |
|
|
fn=responder, |
|
|
inputs=gr.Textbox(lines=2, label="Sua pergunta sobre Deep Learning"), |
|
|
outputs=gr.Textbox(lines=8, label="Resposta do Professor DL"), |
|
|
title="Professor DL - Bot de Deep Learning", |
|
|
description=( |
|
|
"Faça perguntas sobre redes neurais, Deep Learning, CNN, RNN, overfitting, " |
|
|
"regularização, etc. O Professor DL responde em português, de forma didática." |
|
|
), |
|
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |
|
|
|