Hace tres años (cuando entrenar RNNs para generar texto era cool) tuve la idea de entrenar una red neuronal recurrente (RNN) con los libros de Harry Potter. Fue hasta el 2020 que finalmente lo hice. Adicional al modelo también creé una sencilla aplicación de Streamlit para ponerlo a prueba: https://share.streamlit.io/santiviquez/harry-potter-rnn/app.py

Aplicación de Streamlit. Código fuente: https://github.com/santiviquez/harry-potter-rnn

Resultado Final: texto generado por el modelo

Harry sat down next to the went to see when Harry reading the stairs.

“So sorry, your bloodiness, Mr. Baron, Snape’s classe on your cheek,
Potter, or I wouldn’t both their far worse than even Dudley. Dudley had
been a couple of the library; he swallowed a lot of new questions that
had just occaurt their ends.

So put me on! Don’t be afraid! And don’t get in our first week. See
you.”

Fred and George Weasley were responsible for trying to stop Gryffindor
for the first time something that had been worrying him a lot like Uncle
Vernon. He had a lot of trouble keeping his letter. He handed silently.
He mustn’t want to tell Harry?”

Harry heard the little bronze coins, and the owl swooped in and dropped
the newspaper on top of Hagrid, who dived on top of it and managed to
get through his exams when he half expected Voldemort to come back.

“What is a wizard’s duel?” said Harry and Ron.

Como pueden ver, la mayoría de las oraciones no tienen sentido semántico. Sin embargo, cada palabra fue generada por una computadora que no tiene noción de las reglas ortográficas del idioma inglés.

Proceso de aprendizaje del modelo

Veamos varias etapas del proceso de aprendizaje para entender un poco más el output del modelo.

Epoch 1: en el primer epoch (un entrenamiento completo sobre todo el conjunto de datos) vemos lo que parecen ser letras y caracteres aleatorios.

sngns yiiy I rad yit se ke sery Ro, "udGct touveid. samtd ccift, the. fpe
gincy lindos ys Towe feeng beunat )X h so-int rines Hufons nsmtheis anmin
f oideyhend wrratt hit le therf arerre he fo ke thomecAg voutud unfed fow
suk rond thet macughilg wares thirstof hy youMl hed folh,

Epoch 2:  muy similar al resultado anterior

"Mald sined ro fastrong orryfe frourd hot'dilg trimt wa thin ware ne
bamly oue ntho feringseps thag catkirgen tu hime baicf sait yoveece way
yonerbyedene nomt thaney an'thing ve fuba carpouflit  Serofy," saided one
whizciof Harr wiole, I it the pie pevainigrofle pors

Epoch 5: vemos algunos avances. El modelo está aprendiendo a crear párrafos, aprendió a deletrear Ron correctamente y casi lo logra con Hermione. Otro dato interesante es que aprendió que cada párrafo debe terminar con un punto.

daven lack a grivert He mad eets plaiced. The inares, ruther Inard in
brigt tuffing a to kinares." 

"Haw do get brousl purny to seize whis with hem looking by. We's if ge. 

"Haryy, you, wande -- recatbladred got Herwione, and Harry ando, him some
wich nover Durn Ron. Ho said abeary own exard to ke to nextsen, mowned
megrmings.

Epoch 10: ¡El modelo aprendió a deletrear Snape, Harry, Dudley y Hermione!

Harry fast roy winged and same forward that Snape heard fat looked at
all. Small not about is but he didn't makber, wh they furged him. 

"It's going to lim, I'll never thought that Curse for dong tone ach ins
other, could poney. Harry flocked Dudley this if he soll that Hermione
had be before wouldn't meville. 'veryto his rrom -- and he stop its head.
I've reed Lonnem. Snape was gonew like Harry's gettid himmered in elor
without hair.

Epoch 50: observen que en el segundo párrafo aprendió a usar las comillas correctamente (ortográficamente).

Neville had been hand stretching to watch as Harry sped straight at Snape
-- she didn't even noticed in tim again. After burning all the letters,
he was made difficult by Fathers s had been waiting noise and the sheets
a hotethere, with right dewild!"

"But what's only shop."

Harry nodded, but stopped quickly, because it made different time was
protected wherever he went.

Lo que el modelo está haciendo es intentando replicar el estilo y tono de escritura de JK Rowling.

¿Cómo es que el modelo logra hacer esto?

Uno de los mejores recursos para comprender cómo funcionan las RNN es un blog post del 2015 de Andrej Karpathy. Tomaré la libertad de usar uno de sus ejemplos.

Imaginemos que todo nuestro vocabulario consta de cuatro letras: h, e, l, o. Y dividimos un texto cualquiera en trozos de longitud = 4. Pensemos que queremos entrenar nuestra RNN en la secuencia "hello".

En este caso, nuestra secuencia de entrada sería "hell" y la secuencia objetivo "ello". Entonces, dado el contexto en el que inicialmente solo hay una "h" solitaria, el modelo adivinará que la siguiente palabra probablemente sea una "e" y luego, dado el contexto de que las dos primeras letras son "h" y "e", el modelo adivinará una "l" para la tercera letra y así sucesivamente hasta completar la secuencia objetivo "ello".

La relación entre todas las letras anteriores ayuda a predecir la siguiente.

La RNN recuerda todas estas relaciones para cada una de las secuencias.

https://karpathy.github.io/2015/05/21/rnn-effectiveness/

Para obtener más información sobre las RNN, recomiendo el blog de Karpathy. Y si desean crear su propia RNN, este tutorial de TensorFlow es de gran ayuda.