File size: 9,949 Bytes
5dfe4cf
2be3696
abaee04
5dfe4cf
9ef00b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
abaee04
 
 
 
748823b
aaea2ec
c151763
abaee04
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297b7af
abaee04
748823b
 
 
af15d03
 
 
5dfe4cf
965a5c1
52b6a47
76cefb8
f6d9c2b
 
 
 
b518d9f
f6d9c2b
b518d9f
f6d9c2b
965a5c1
 
9ef00b2
52b6a47
 
965a5c1
 
0ce2aa2
 
a3b0200
748823b
0ce2aa2
af15d03
52b6a47
 
 
 
2f887b1
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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)

# tts_es = gr.Interface.load("huggingface/facebook/tts_transformer-es-css10")

def make_poem(author, sentiment, words, text):
  num_lines=5
  poem = text
  prev_output = ''
  l_words = [x.strip() for x in words.split(',')]

  # Add empty strings to words
  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]

    # pre_output = pre_output.replace('.', ' ')
    poem += '\n' + pre_output
  # audio = tts_es(poem)
  # return poem, audio
  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 [sonnets in Spanish](https://huggingface.co/datasets/hackathon-pln-es/disco_spanish_poetry), and</li>
    <li>- the second one was a collection of [poems](https://huggingface.co/datasets/hackathon-pln-es/spanish-poetry-dataset).</li>
    
    <p>For the dataset of sonnets was trained a GPT-2 model that you can find [here](https://huggingface.co/hackathon-pln-es/gpt2-small-spanish-disco-poetry) and was created this [space](https://huggingface.co/spaces/hackathon-pln-es/sonnet-poetry-generator-spanish).</p>
    
    <p>For the second dataset was trained a T5 model that you can find [here](https://huggingface.co/hackathon-pln-es/poem-gen-spanish-t5-small) and this is the space that was created to play with it :)</p>""",
    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"),
      # gr.outputs.Audio(label="Primeros segundos")
      ],
     article= article,
     examples=
     [
      ['Pablo Neruda', 'positivo', 'cielo, luna, mar', 'Todos fueron a verle pasar']
     ])
iface.launch(enable_queue=True)