Generación de textos con cadenas de Markov: Introducción al uso de MarkovifyEsta es una introducción simple a las cadenas de Markov para la generación de texto. Vamos a entrenar un modelo utilizando la biblioteca Markovify en la novel del Don Quijote de la Mancha y ver si lo que generamos es legible y coherente. Soy consciente de que estos dos términos son un tanto nebulosos, pero creo que la mayoría de la gente entenderá mi intención al utilizarlos, sobre todo cuando vean la variación en el texto que se genera. Markovify es una librería python que se autodenomina "Un generador de cadenas de Markov simple y extensible". Sus usos incluyen la generación de frases aleatorias semi-plausibles basadas en un texto existente". Y debo admitir que es increíblemente fácil y rápido de usar. Las propias cadenas de Markov son creaciones ingeniosas que dan probabilidades de "permanencia" y "cambio" para procesos multiestado. No voy a profundizar aquí en las matemáticas de las cadenas de Markov, pero siéntete libre de consultar esto y esto para una visión global y visualizaciones, respectivamente. Para nuestro propósito, explicaré las cadenas de Markov visualmente. Si observamos la imagen anterior, podemos ver que tenemos tres estados posibles: Nublado, Lluvioso y Soleado. Las cadenas de Markov se basan en el estado actual para predecir un resultado futuro. Si observamos que hoy está Lloviendo, nuestras probabilidades son las siguientes: La probabilidad de que mañana siga lloviendo es del 60%, la probabilidad de que esté nublado es del 30% y la probabilidad de que haga sol es del 10%. La misma lógica se puede aplicar cuando empezamos en los estados Nublado y Soleado. ¿Y cómo demonios funciona esto con el texto? Básicamente, cada palabra de nuestro corpus está "conectada" a todas las demás con probabilidades variables mediante cadenas de Markov. Así, si nuestra palabra (estado) inicial es "Tú", Markovify asigna una probabilidad a todas las demás palabras de nuestro corpus en función de la probabilidad de que sigan a nuestra palabra inicial. Por ejemplo, "debería" tiene un 65% de probabilidades de seguir a "tú", "es" un 20%, "puede" un 10%, y así sucesivamente para todo nuestro corpus, que constituirá el último 5%. Tenga en cuenta que la probabilidad de que "Tú" se repita a sí misma debería ser cercana al 0%, ya que una palabra que se repitiera a sí misma no tendría mucho sentido y es así para casi todas las palabras. Si desea profundizar en el tema, consulte el desglose de Películas, métricas y reflexiones aquí. Así que finalmente estamos listos para implementar Markovify para generar texto. Puedes encontrar mi cuaderno Colab aquí en Github. Primero necesitamos instalar nuestras librerías y paquetes. Vamos a utilizar NLTK y spaCy para el preprocesamiento de texto, ya que son los más comunes y nuestro modelo generará mejor el texto si lo analizamos primero. Ahora podemos importar nuestras librerías. Para esta demostración, vamos a utilizar tres de la novela de Cervantes del corpus NLTK del Proyecto Gutenberg. Primero imprimiremos todos los documentos del corpus Gutenberg para que pueda mezclarlos y combinarlos a su gusto. Para esta demostración utilizaremos la novela de Cervantes: Don Quijote. A continuación las importaremos e inspeccionaremos el texto. A continuación construiremos una función de utilidad para limpiar nuestro texto utilizando la biblioteca re. Esta función eliminará los espacios innecesarios y sangrías, puntuaciones, y tal. A continuación, seguiremos limpiando nuestros textos eliminando los títulos de los capítulos y los indicadores, y aplicaremos nuestra función de limpieza de textos. Ahora queremos utilizar spaCy para analizar nuestros documentos. Aquí encontrarás más información sobre el procesamiento de textos. Ahora que nuestros textos están limpios y procesados, podemos crear frases y combinar nuestros documentos. Nuestro preprocesamiento de texto está hecho y podemos empezar a usar Markovify para generar frases. Y ahora viene la parte divertida. Sólo tenemos que escribir un bucle para generar tantas sentencias como queramos. A continuación, crearemos 3 sentencias de longitud indefinida y 3 más con una longitud inferior a 100 caracteres. Texto de ejemplo: No está mal para el español de Cercantes. Pero creo que podemos hacerlo mejor. Implementaremos POSifiedText utilizando SpaCy para intentar mejorar nuestra predicción de texto. Y por último, imprime más frases utilizando nuestro nuevo generador. Aqui el texto: Para terminar INICIO --------------------------------------------------------------------------------------------------------------------------- |