File size: 3,855 Bytes
b0717ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
68
69
70
71
72
73
# Imports

from sentence_splitter import SentenceSplitter
import torch
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from deep_translator import GoogleTranslator
import random

# Funciones

model_name2 = "Vamsi/T5_Paraphrase_Paws"
torch_device2 = "cuda" if torch.cuda.is_available() else "cpu"
tokenizer2 = AutoTokenizer.from_pretrained(model_name2)
model2 = AutoModelForSeq2SeqLM.from_pretrained(model_name2).to(torch_device2)

def get_response_t5(input_text, num_return_sequences):
    batch = tokenizer2.prepare_seq2seq_batch([input_text], truncation=True, padding='longest', max_length=100, return_tensors="pt").to(torch_device2)
    translated = model2.generate(**batch, max_length=100, num_beams=10, num_return_sequences=num_return_sequences, temperature=0.7)
    tgt_text = tokenizer2.batch_decode(translated, skip_special_tokens=True)
    return tgt_text

def traducir_a_ingles(frase):
    translated = GoogleTranslator(source='auto', target='en')
    return translated.translate(frase)

def traducir_a_espanol(frase):
    translated = GoogleTranslator(source='auto', target='es')
    return translated.translate(frase)

def paraphrase_t5(text):
    frase = get_response_t5(traducir_a_ingles(text), 10)
    return traducir_a_espanol(frase[random.randint(0, 9)])

# Parafrasear

def parafrasear_texto(texto):
    texto = texto.replace('\n\n', '\n')
    paragraph_list = texto.split('\n')

    cadena = ""
    for paragraph in paragraph_list:
        splitter = SentenceSplitter(language='en')
        sentence_list = splitter.split(paragraph)
        
        for sentence in sentence_list:
            sentence_paraphrase = paraphrase_t5(sentence)
            if sentence_paraphrase is not None:
                cadena += sentence_paraphrase + " "

        cadena += 'token_salto_parrafo'
    
    cadena = cadena.replace('  ', ' ')
    cadena = cadena.replace('token_salto_parrafo', '\n\n')
    cadena = cadena.lstrip('\n').rstrip('\n')
    return cadena

# Interfaz
    
import gradio as gr

def function(texto):
    result = parafrasear_texto(texto)
    return result

demo = gr.Interface(
    fn=function,
    inputs=gr.Textbox(lines=10, label="Texto a parafrasear", placeholder="Ingrese el texto a parafrasear..."),
    outputs=gr.Textbox(lines=10, label="Resultado de la paráfrasis", placeholder="Texto parafraseado..."),
    title="Paráfrasis en español con el Modelo T5",
    examples=[["¿Qué es un científico de datos?\n\nComo especialidad, la ciencia de datos aun es nueva. Surgió de los campos del análisis estadístico y de la minería de datos. The Data Science Journal se lanzó inicialmente en 2002 y su publicación corrió a cargo del International Council for Science: Committee on Data for Science and Technology. En 2008 surgió el nombre de científico de datos y este campo prosperó rápidamente. Desde entonces, ha habido una escasez de científicos de datos, a pesar de que cada vez más colegios y universidades han comenzado a ofrecer grados en ciencia de datos.\n\nLas tareas de un científico de datos pueden incluir el desarrollo de estrategias para analizar datos, la preparación de datos para su análisis, explorar, analizar y visualizar datos, construir modelos con datos mediante el uso de lenguajes de programación como Python y R y desplegar modelos en aplicaciones.\n\nEl científico de datos no trabaja solo. De hecho, la data science más efectiva se ejecuta en equipos. Además de un científico de datos, este equipo puede incluir un analista empresarial que define el problema, un ingeniero de datos que prepara los datos y su método de acceso, un arquitecto de TI que supervisa los procesos subyacentes y la infraestructura, y un desarrollador de aplicaciones que implementa los modelos o las salidas del análisis en aplicaciones y productos."]],
)

demo.launch(inline=False)