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)