File size: 3,152 Bytes
3507896 a538398 7151f73 05aab8b 3507896 7151f73 d267e33 d003175 eab8503 d267e33 001e124 d267e33 05aab8b d267e33 05aab8b 51d1da6 fd7b2e5 d267e33 8d48e06 1b20ebf 51d1da6 44ca29e 1b20ebf 44ca29e 1b20ebf d267e33 7151f73 d267e33 45613fb f7947ed 747a531 8d48e06 f7947ed 45613fb d267e33 1b20ebf d267e33 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
import gradio as gr
import os
import torch
from transformers import BartTokenizer, BartForConditionalGeneration, AutoConfig
# Definindo o dispositivo
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Obtendo o token do ambiente
HF_TOKEN = os.environ.get("HF_TOKEN")
# Definindo o nome do modelo
model_name = 'rubendsm/inteligencia-ricardo-bart-large-2'
# Carregando o tokenizador e o modelo
config = AutoConfig.from_pretrained(model_name, hf_token=HF_TOKEN)
tokenizer = BartTokenizer.from_pretrained(model_name)
model = BartForConditionalGeneration.from_pretrained(model_name, config=config)
model.to(device) # Movendo o modelo para o dispositivo adequado
# Função para sumarizar o texto de entrada
def summarize_long_text(input_text, temperature=1.6, top_k=55, top_p=0.8, num_beams=8):
# Divide o texto em partes menores
max_input_length = 2048
max_output_length = 2048
parts = [input_text[i:i+max_input_length] for i in range(0, len(input_text), max_input_length)]
part_summaries = []
for part in parts:
input_ids = tokenizer.encode(part, return_tensors="pt", max_length=max_input_length, truncation=True)
# Movendo os dados de entrada para o dispositivo adequado
input_ids = input_ids.to(device)
output = model.generate(
input_ids, # IDs de entrada codificados
max_length=max_output_length, # Comprimento máximo do texto gerado
num_return_sequences=1, # Número de sequências de retorno
do_sample=True, # Habilita a amostragem aleatória
temperature=temperature, # Controla a aleatoriedade da geração
top_k=top_k, # Controla o número de tokens candidatos considerados
top_p=top_p, # Controla a soma acumulada das probabilidades de tokens
num_beams=num_beams # Número de feixes (sequências candidatas) durante a geração
)
summary = tokenizer.decode(output[0], skip_special_tokens=True)
part_summaries.append(summary)
# Concatena os resumos das partes em um único resumo
full_summary = ' '.join(part_summaries)
return full_summary
# Interface do Gradio
textbox_input = gr.Textbox(lines=7, label="Input Text")
temperature_slider = gr.Slider(minimum=0.1, maximum=2.0, label="Temperature - Controla a aleatoriedade da geração", value=1.6)
top_k_slider = gr.Slider(minimum=1, maximum=100, label="Top K - Controla o número de tokens candidatos considerados", value=55)
top_p_slider = gr.Slider(minimum=0.1, maximum=1.0, label="Top P - Controla a soma acumulada das probabilidades de tokens", value=0.8)
num_beams_slider = gr.Slider(minimum=1, maximum=10, label="Num Beams - Número de feixes (sequências candidatas) durante a geração", value=8)
textbox_output = gr.Textbox(label="Summary")
interface = gr.Interface(
fn=summarize_long_text,
inputs=[textbox_input, temperature_slider, top_k_slider, top_p_slider, num_beams_slider],
outputs=textbox_output,
title="Resumo de transcrição de reuniões",
description="Assembleia Municipal de Paredes"
)
interface.launch(share=True)
|