Muy buenas, me llamo Miguel y aquí les traigo otro nuevo artículo.
Genere texto de una manera nueva con el modelado de lenguaje de permutación
Los modelos actuales basados en Transformers , como GPT-2 o incluso GPT-3, muestran logros increíbles en la tarea de generación de texto (predicción de la siguiente palabra probable basada en la secuencia de palabras anterior). Estos modelos pueden crear textos largos, creativos y cohesivos, pero generalmente pueden generar texto solo en una dirección, de izquierda a derecha. Me preguntaba si hay una manera de generar texto en ambas direcciones y tener alguna frase de inicio (por ejemplo, «la generación de texto es genial») para ver qué historia se desarrollará a su alrededor. XLNet fue la solución: debido al uso de todas las permutaciones del orden de factorización de la secuencia de entrada, este modelo puede ayudar a generar texto en cualquier dirección.
En este artículo no estudiaremos en detalle los principios internos de XLNet (excelente explicación breve que puede encontrar aquí). En su lugar, comenzaremos a experimentar de inmediato: practicaremos un poco en la predicción de palabras enmascaradas con XLNet, intentaremos implementar la generación bidireccional top-K y luego implementaremos un enfoque más eficiente que combine la búsqueda de haces y el muestreo top-K.
Al final del artículo obtendremos un generador capaz de crear dicho texto en base a la frase inicial (que está resaltada en negrita):
Siguiendo con mis pensamientos iniciales: la generación de texto es genial! Funciona muy bien para crear encabezados de blogs, títulos, etc. Necesitará Word 2013
Vamos a empezar. Realizaremos todos nuestros experimentos en Google Collab A tener en cuenta:book (con entorno GPU), que está disponible en este enlace, por lo que el único módulo que necesitaremos instalar es el excelente Transformadores biblioteca. Esta biblioteca proporciona una interfaz simple para XLNet, así como para muchos otros modelos basados en transformadores.
!pip install transformers
Una de las ventajas de XLNet es que este modelo puede hacer frente perfectamente a la predicción de varias palabras enmascaradas relacionadas teniendo en cuenta el contexto anterior. Por ejemplo, mencionaré en el texto que le di tres manzanas, y luego le pediré al modelo que me diga quién ahora es dueño de algunas manzanas al darle al modelo una oración con palabras enmascaradas: “ have manzanas en las manos ”. Como resultado, veremos que el modelo comprende perfectamente quién tiene manzanas y cuántas.
Antes de que podamos comenzar a comunicarnos con el modelo, necesitamos cargarlo, así como cargar un tokenizador que procese el texto entrante en una forma digital comprensible para el modelo. En la forma básica, la tokenización consiste en dividir el texto en palabras o subpalabras, que luego se convierten en identificadores. Cada modelo requiere que el texto sea tokenizado de una manera específica. XLNet usa el método SentencePiece. Puede leer más sobre el proceso de tokenización en el enlace.
También necesitamos agregar un texto de relleno para ayudar a XLNet con textos cortos como estaba propuesto por Aman Rusia.
Predice las 5 palabras principales para cada ficha de . Para hacer una predicción, necesitamos alimentar el modelo con texto tokenizado, índices de palabras enmascaradas y máscaras de permutación. Se necesitan máscaras de permutación para deshabilitar los tokens de entrada para atender a los tokens enmascarados. Puede leer más sobre los parámetros del modelo aquí.
Salida:
predicted word: <mask> 0 word and logits You -9.070054054260254 word and logits I -10.822368621826172 word and logits We -12.820359230041504 word and logits Now -14.133552551269531 word and logits They -14.863320350646973 predicted word: <mask> 1 word and logits three -23.045528411865234 word and logits the -24.3369083404541 word and logits these -25.59902000427246 word and logits two -25.809444427490234 word and logits your -25.947147369384766
Ahora que sabemos cómo predecir palabras enmascaradas con XLNet, es el momento de crear un generador de texto bidireccional top-k. Sus principios de trabajo son sencillos. Crearemos un ciclo y en cada iteración el modelo predecirá tokens top-k para una palabra enmascarada en el lado derecho o izquierdo de la frase inicial. Después de eso, agregamos un token aleatorio de topK a la frase de inicio y repetimos la iteración n veces.
Salida:
• 1 1 User reviews and says:? The text generation is cool for me to see and the font size seems right
No demasiado impresionante. Hay muchas repeticiones y el texto completo parece sin sentido. Pero encontraremos una mejor solución.
Como podemos ver, todavía es bastante difícil para el modelo generar texto de derecha a izquierda. A menudo recibimos una palabra que no encaja bien en el contexto, lo que conduce a una palabra siguiente aún menos adecuada. Como resultado, el texto generado se vuelve incoherente.
Podemos aumentar las posibilidades de encontrar secuencias de palabras conectadas generando palabras no por una a cada lado de la frase inicial, sino creando un cierto número de haces de secuencias de palabras y eligiendo uno de los haces más probables de cierta longitud.
Por lo tanto, obtenemos algún tipo de combinación de muestreo top-k y búsqueda de haz.
Disfruta del artículo.
Añadir comentario