|
import gradio as gr |
|
import random |
|
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM |
|
|
|
author_set = {'Leopoldo Lugones', 'Nacho Buzón', 'Octavio Paz', 'Luis Cañizal de la Fuente', 'Juan de Salinas', 'Vicente Huidobro', 'Hilario Barrero', |
|
'Ramón de Campoamor', 'Anna Ajmátova', 'Víctor Hugo López Cancino', 'Ramón María del Valle-Inclán', 'Infantiles', 'Jorge Luis Borges', |
|
'Carlos Bousoño', 'Gonzalo Rojas', 'Juan Ruiz, Arcipreste de Hita', 'Rubén Izaguirre Fiallos', 'Juan Meléndez Valdés', |
|
'José María de Heredia', 'Jaime Sabines', 'Alejandra Pizarnik', 'María Cristina Azcona', 'Guillermo Aguirre y Fierro', |
|
'Miguel Ramos Carrión', 'José de Espronceda', 'Juan del Encina', 'Jorge Guillén', 'Manuel Machado', 'José Santos Chocano', 'Meira Delmar', |
|
'Iván Tubau', 'Tirso de Molina', 'Oliverio Girondo', 'Justo Braga', 'Consuelo Hernández', 'Belén Reyes', 'Pablo Neruda', |
|
'Francisco de Aldana', 'Bertolt Brecht', 'José Antonio Labordeta', 'Emilio Prados', 'Porfirio Barba Jacob', 'Leopoldo Marechal', |
|
'Aurelio González Ovies', 'Darío Jaramillo Agudelo', 'Víctor Botas', 'Leopoldo María Panero', 'Juan de Mena', 'Tomás de Iriarte', |
|
'Gabriela Mistral', 'Gonzalo de Berceo', 'Antonio Machado', 'Santiago Montobbio', 'Pedro Calderón de la Barca', 'Dionisio Ridruejo', |
|
'Atahualpa Yupanqui', 'Nicolás Guillén', 'Claudio Rodríguez', 'José María Blanco White', 'Gil Vicente', 'Corina Bruni', 'Gabriel Celaya', |
|
'Javier Alvarado', 'Rosalía de Castro', 'Gustavo Pereira', 'Miguel de Cervantes y Saavedra', 'Jorge Riechmann', 'José Juan Tablada', |
|
'Lope de Vega', 'Basilio Sánchez', 'Alfonso X el sabio', 'Rafael de León', 'Eunice Odio', 'Manuel Acuña', 'Víctor Jiménez', |
|
'José Asunción Silva', 'Omar García Ramírez', 'Luis Cernuda', 'perdón', 'Blas de Otero', 'Luis Benítez', 'Ángeles Carbajal', |
|
'Manuel Bretón de los Herreros', 'Baldomero Fernández Moreno', 'Luis Barahona de Soto', 'Guillermo Valencia', 'José María Hinojosa', |
|
'Macedonio Fernández', 'Manuel Gutiérrez Nájera', 'Alfredo Buxán', 'Salvador Novo', 'José Ángel Valente', 'José Cadalso', |
|
'Juan Ramón Mansilla', 'Ana Istarú', 'Juan Ramón Jiménez', 'Miguel Ángel Asturias', 'Ángel González', 'amistad', 'Alfredo Lavergne', |
|
'Xavier Villaurrutia', 'René Chacón Linares', 'Carolina Coronado', 'Bartolomé Leonardo de Argensola', 'Marilina Rébora', |
|
'Vicente Aleixandre', 'Alberto Girri', 'Juana de Ibarbourou', 'Ricardo Dávila Díaz Flores', 'Garcilaso de la Vega', |
|
'Lupercio Leonardo de Argensola', 'Enrique Lihn', 'Julia de Burgos', 'Mariano Brull', 'Efraín Huerta', 'Roxana Popelka', |
|
'Pelayo Fueyo', 'San Juan de la Cruz', 'Vicente García', 'Basilio Fernández', 'Paz Díez Taboada', 'cristianos', 'León Felipe', |
|
'Diana Bellessi', 'Genaro Ortega Gutiérrez', 'Cristóbal de Castillejo', 'Gioconda Belli', 'Iacyr Anderson Freitas', |
|
'Juan José Vélez Otero', 'Ezequiel Martínez Estrada', 'Juan de Arguijo', 'Gertrudis Gómez de Avellaneda', 'Marcos Rafael Blanco Belmonte', |
|
'Julio Aumente', 'Ramón López Velarde', 'para la familia', 'Antonia Álvarez Álvarez', 'José Zorrilla', 'Juan Luis Panero', |
|
'Teresa Palazzo Conti', 'Claribel Alegría', 'Francisco de Medrano', 'Antonio Colinas', 'Jordi Doce', 'Ismael Enrique Arciniegas', |
|
'Josefina Plá', 'José Agustín Goytisolo', 'Blanca Andreu', 'Enrique González Martínez', 'José García Nieto', 'Ernesto Cardenal', |
|
'Pedro Luis Menéndez', 'Carmen Conde Abellán', 'Salvador Rueda', 'Dulce María Loynaz', 'Odette Alonso', 'Manuel Altolaguirre', |
|
'Byron Espinoza', 'Francisco Álvarez', 'Vicente Gerbasi', 'César Vallejo', 'Gloria Fuertes', 'Sor Juana Inés de la Cruz', |
|
'Francisco de la Torre', 'Francisco Matos Paoli', 'Rubén Darío', 'Rafael Pombo', 'Mara Romero', 'José Albi', 'Francisco de Quevedo', |
|
'Juan de Dios Peza', 'Leopoldo Panero', 'Fernando de Herrera', 'Victoriano Crémer', 'Ana Rossetti', 'Gabriel García Márquez', |
|
'Teresa Domingo Català', 'Melchor de Palau', 'Miguel Rasch Isla', 'Luis Antonio de Villena', 'Mario Benedetti', 'Ramón Pérez de Ayala', |
|
'Antonio Plaza Llamas', 'David Escobar Galindo', 'Mario Meléndez', 'José Gorostiza', 'Delfina Acosta', 'en español', 'Delmira Agustini', |
|
'José Luis Piquero', 'Baltasar del Alcázar', 'Nimia Vicéns', 'Rafael Alberti', 'María Eugenia Caseiro', 'Nicomedes Santa Cruz', |
|
'Carlos Pellicer', 'Luis de Góngora', 'Manuel Alcántara', 'Toni García Arias', 'Antonio Fernández Lera', 'José María Pemán', |
|
'Dina Posada', 'Gaspar Melchor de Jovellanos', 'Alfonso Reyes', 'José María Gabriel y Galán', 'Manuel José Othón', 'Luciano Castañón', |
|
'Luis Alberto de Cuenca', 'Andrés Eloy Blanco', 'Luis Antonio Chávez', 'Pedro Salinas', 'Luis Palés Matos', 'Álvaro García', |
|
'Pablo de Rokha', 'Dámaso Alonso', 'Luis Álvarez Piner', 'Salvador García Ramírez', 'Roque Dalton', 'Gerardo Diego', |
|
'Felipe Benítez Reyes', 'William Shakespeare', 'José Ángel Buesa', 'Miguel Florián', 'Luis Gonzaga Urbina', 'Jesús Hilario Tundidor', |
|
'Amado Nervo', 'Miguel Hernández', 'Federico García Lorca', 'José Martí', 'Oscar Ferreiro', 'Pedro Miguel Lamet', 'Fray Luis de León', |
|
'Julio Flórez Roa', 'León de Greiff', 'Gustavo Adolfo Bécquer', 'Carlos Edmundo de Ory', 'Miguel de Unamuno', 'Manuel del Cabral', |
|
'Oscar Acosta', 'José Lezama Lima', 'Hernando de Acuña', 'Ángel García Aller', 'Salvador Díaz Mirón', 'Ricardo Molinari', |
|
'Julio Herrera y Reissig', 'Francisco Luis Bernárdez', 'Fa Claes', 'Jorge Debravo', 'Francisco de Figueroa', 'Marqués de Santillana', |
|
'Eugenio Florit', 'José Gautier Benítez', 'Óscar Hahn', 'Andrés Bello', 'Santa Teresa de Jesús, Sánchez de Cep', 'Juan Liscano', |
|
'Jorge Teillier', 'Félix María de Samaniego', 'Nicolás Fernández de Moratín', 'Juan Boscán', 'Manuel María Flores', 'Gutierre de Cetina', |
|
'Alfonsina Storni', 'José Luis Rey Cano', 'Jorge Manrique', 'Nicanor Parra'} |
|
|
|
model_name = 'hackathon-pln-es/poem-gen-spanish-t5-small' |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
model = AutoModelForSeq2SeqLM.from_pretrained(model_name) |
|
|
|
|
|
|
|
def make_poem(author, sentiment, words, text): |
|
num_lines=5 |
|
poem = text |
|
prev_output = '' |
|
l_words = [x.strip() for x in words.split(',')] |
|
|
|
|
|
if num_lines > len(l_words): |
|
diff = num_lines - len(l_words) |
|
l_words += [''] * diff |
|
|
|
random.shuffle(l_words) |
|
|
|
for i in range(num_lines): |
|
word = l_words[i] |
|
if word == '': |
|
input_text = f"""poema: estilo: {author} && sentimiento: {sentiment} && texto: {poem} """ |
|
else: |
|
input_text = f"""poema: estilo: {author} && sentimiento: {sentiment} && palabras: {word} && texto: {poem} """ |
|
inputs = tokenizer(input_text, return_tensors="pt") |
|
|
|
outputs = model.generate(inputs["input_ids"], |
|
do_sample = True, |
|
max_length = 30, |
|
repetition_penalty = 20.0, |
|
top_k = 50, |
|
top_p = 0.92) |
|
detok_outputs = [tokenizer.decode(x, skip_special_tokens=True) for x in outputs] |
|
pre_output = detok_outputs[0] |
|
|
|
poem += '\n' + pre_output |
|
|
|
|
|
return poem |
|
|
|
article = "<p style='text-align: center'>Don't miss this other cool space based in Spanish generation of poems based in sonnets: <a href='https://huggingface.co/spaces/hackathon-pln-es/sonnet-poetry-generator-spanish' target='_blank'>sonnet-poetry-generator-spanish</a></p>" |
|
|
|
|
|
iface = gr.Interface( |
|
fn=make_poem, |
|
title='Generación de poemas', |
|
description="""<p>For the participation in the First Spanish Hackathon of NLP the team worked with two datasets.</p> |
|
<ul> |
|
<li>The first one was a collection of <a href="https://huggingface.co/datasets/hackathon-pln-es/disco_spanish_poetry">sonnets in Spanish</a>, and</li> |
|
<li>the second one was a collection of <a href="https://huggingface.co/datasets/hackathon-pln-es/spanish-poetry-dataset">poems</a>.</li> |
|
<p>For the dataset of sonnets was trained a GPT-2 model that you can find <a href="https://huggingface.co/hackathon-pln-es/gpt2-small-spanish-disco-poetry">here</a> and was created this <a href="https://huggingface.co/spaces/hackathon-pln-es/sonnet-poetry-generator-spanish">space</a>.</p> |
|
<p>For the second dataset was trained a T5 model that you can find <a href="https://huggingface.co/hackathon-pln-es/poem-gen-spanish-t5-small">here</a> and this is the space that was created to play with it :)</p>""", |
|
theme='huggingface', |
|
inputs= |
|
[ |
|
gr.inputs.Dropdown(sorted(author_set), type="value", label='Nombre del autor'), |
|
gr.inputs.Radio(['positivo', 'negativo'], type="value", label='Sentimiento del texto generado'), |
|
gr.inputs.Textbox(lines=1, placeholder='palabra_1, palabra_2, ..., palabra_n', label='Palabras que desea incluir'), |
|
gr.inputs.Textbox(lines=4, placeholder='texto inicial', label='Texto inicial'), |
|
], |
|
outputs= |
|
[ |
|
gr.outputs.Textbox(label="Texto generado"), |
|
|
|
], |
|
article= article, |
|
examples= |
|
[ |
|
['Pablo Neruda', 'positivo', 'cielo, luna, mar', 'Todos fueron a verle pasar'] |
|
]) |
|
iface.launch(enable_queue=True) |