COMPUTING

Cómo crear su propio sistema de generación de texto de última generación

Casi no pasa un día sin que haya una historia sobre noticias falsas. Me recuerda una cita del periodista de radio favorito de mi juventud: “Si no te gustan las noticias, sal y crea algunas”. El innovador modelo de lenguaje de OpenAI, la versión de 1.500 millones de parámetros de GPT-2, se acercó lo suficiente como para que el grupo decidiera que era demasiado peligroso publicarlo, al menos por ahora. Sin embargo, OpenAI ha lanzado dos versiones más pequeñas del modelo, junto con herramientas para ajustarlas en su propio texto. Entonces, sin demasiado esfuerzo y usando dramáticamente menos tiempo de GPU del que tomaría entrenar desde cero, puede crear una versión ajustada de GPT-2 que podrá generar texto en el estilo que le dé, o incluso comenzar a responda preguntas similares a las que lo entrena.

Qué hace que GPT-2 sea especial

GPT-2 (Generative Pre-Trained Transformer versión 2) se basa en una versión de la red neuronal basada en la atención Transformer muy potente. Lo que entusiasmó tanto a los investigadores de OpenAI fue descubrir que podía abordar una serie de tareas lingüísticas sin recibir capacitación directa sobre ellas. Una vez entrenado previamente con su corpus masivo de datos de Reddit y con las indicaciones adecuadas, hizo un trabajo aceptable al responder preguntas y traducir idiomas. Ciertamente, no se parece en nada a Watson en lo que respecta al conocimiento semántico, pero este tipo de aprendizaje no supervisado es particularmente emocionante porque elimina gran parte del tiempo y los gastos necesarios para etiquetar los datos para el aprendizaje supervisado.

Descripción general de cómo trabajar con GPT-2

Para una herramienta tan poderosa, el proceso de trabajar con GPT-2 es afortunadamente bastante simple, siempre y cuando esté al menos un poco familiarizado con Tensorflow. La mayoría de los tutoriales que he encontrado también se basan en Python, por lo que tener al menos un conocimiento básico de programación en Python o un lenguaje similar es muy útil. Actualmente, OpenAI ha lanzado dos versiones previamente entrenadas de GPT-2. Uno (117M) tiene 117 millones de parámetros, mientras que el otro (345M) tiene 345 millones. Como era de esperar, la versión más grande requiere más memoria GPU y tarda más en entrenarse. Puedes entrenar en tu CPU, pero será muy lento.

El primer paso es descargar uno o ambos modelos. Afortunadamente, la mayoría de los tutoriales, incluidos los que explicaremos a continuación, tienen código Python para hacerlo por usted. Una vez descargado, puede ejecutar el modelo previamente entrenado para generar texto automáticamente o en respuesta a un mensaje que proporcione. Pero también hay código que le permite construir sobre el modelo previamente entrenado ajustándolo en una fuente de datos de su elección. Una vez que haya ajustado su modelo a su satisfacción, simplemente es cuestión de ejecutarlo y proporcionar las indicaciones adecuadas.

Trabajar con GPT-2 en su máquina local

Hay varios tutoriales sobre esto, pero mi favorito es de Max Woolf. De hecho, hasta el lanzamiento de OpenAI, estuve trabajando con su RNN generador de texto, del que tomó prestado para su trabajo GPT-2. Él ha proporcionado un paquete completo en GitHub para descargar, ajustar y ejecutar un modelo basado en GPT-2. Incluso puede engancharlo directamente como un paquete de PyPl. El archivo Léame lo guía a través de todo el proceso, con algunas sugerencias sobre cómo ajustar varios parámetros. Si tiene una GPU masiva a mano, este es un gran enfoque, pero dado que el modelo 345M necesita la mayor parte de una GPU de 16GB para entrenamiento o ajuste, es posible que deba recurrir a una GPU en la nube.

Trabajar con GPT-2 gratis con Colab de Google

Mantuve los puntos de control de mi modelo cada 15.000 pasos para comparar y en caso de que el modelo finalmente se sobreajustara y tuviera que volver a una versión anterior.Afortunadamente, existe una forma de utilizar una potente GPU en la nube de forma gratuita: Colab de Google. No es tan flexible como una cuenta real de Google Compute Engine y tienes que recargar todo en cada sesión, pero ¿mencioné que es gratis? En mis pruebas, obtuve una GPU Tesla T4 o K80 cuando inicialicé una computadora portátil, cualquiera de las cuales es lo suficientemente rápida como para entrenar estos modelos a un ritmo razonable. La mejor parte es que Woolf ya ha escrito un Cuaderno Colab que se hace eco de la versión del código Python local de gpt2-simple. Al igual que la versión de escritorio, simplemente puede seguir o modificar los parámetros para experimentar. Existe una cierta complejidad adicional para obtener los datos dentro y fuera de Colab, pero el cuaderno también lo guiará a través de eso.

Obtener datos para su proyecto

Ahora que se han lanzado modelos de lenguaje poderosos en la web y abundan los tutoriales sobre cómo usarlos, la parte más difícil de su proyecto podría ser crear el conjunto de datos que desea usar para ajustar. Si desea replicar los experimentos de otros haciendo que genere Shakespeare o escriba Star Trek diálogo, simplemente puede enganchar uno que esté en línea. En mi caso, quería ver cómo funcionarían los modelos cuando se les pidiera que generaran artículos como los que se encuentran en ExtremeTech. Tuve acceso a un catálogo atrasado de más de 12.000 artículos de los últimos 10 años. Así que pude juntarlos en un archivo de texto y usarlo como base para el ajuste fino.

Si tiene otras ambiciones que incluyen imitar un sitio web, el raspado es sin duda una alternativa. Hay algunos servicios sofisticados como ParseHub, pero son limitados a menos que pague por un plan comercial. He descubierto que Chrome Extension Webscraper.io es lo suficientemente flexible para muchas aplicaciones, y es rápido y gratuito. Una nota de advertencia importante es prestar atención a los Términos de servicio de cualquier sitio web en el que esté pensando, así como a cualquier problema de derechos de autor. Al observar el resultado de varios modelos de lenguaje, ciertamente no se les enseña a no plagiar.

Entonces, ¿puede hacer periodismo tecnológico?

Una vez que tuve mi corpus de 12,000 artículos de ExtremeTech, comencé tratando de entrenar el GPT-2 simplificado en la GPU Nvidia 1080 de mi escritorio. Desafortunadamente, los 8 GB de RAM de la GPU no fueron suficientes. Así que pasé a entrenar el modelo 117M en mi i7 de 4 núcleos. No fue increíblemente terrible, pero habría llevado más de una semana hacer una mella real incluso con el más pequeño de los dos modelos. Así que cambié a Colab y al modelo 345M. El entrenamiento fue mucho, mucho más rápido, pero tener que lidiar con los reinicios de la sesión y la imprevisibilidad de qué GPU obtendría para cada sesión fue molesto.

Actualización a Compute Engine de Google

Después de eso, me mordí la bala, me registré para obtener una cuenta de Google Compute Engine y decidí aprovechar el crédito de $ 300 que Google otorga a los nuevos clientes. Si no está familiarizado con la configuración de una máquina virtual en la nube, puede ser un poco abrumador, pero hay muchas guías en línea. Es más simple si comienza con una de las VM preconfiguradas que ya tiene Tensorflow instalado. Elegí una versión de Linux con 4 vCPU. Aunque mi sistema de escritorio es Windows, el mismo código Python funcionó perfectamente en ambos. Luego debe agregar una GPU, que en mi caso solicitó permiso al soporte de Google. Supongo que eso se debe a que las máquinas equipadas con GPU son más caras y menos flexibles que las máquinas solo con CPU, por lo que tienen algún tipo de proceso de verificación. Solo tomó un par de horas y pude lanzar una máquina virtual con un Tesla T4. Cuando entré por primera vez (usando el SSH incorporado) me recordó que necesitaba instalar los controladores de Nvidia para el T4 y me dio el comando que necesitaba.

A continuación, debe configurar un cliente de transferencia de archivos como WinSCP y comenzar a trabajar con su modelo. Una vez que cargue su código y datos, cree un entorno virtual de Python (opcional) y cargue los paquetes necesarios, puede proceder de la misma manera que lo hizo en su escritorio. Entrené mi modelo en incrementos de 15.000 pasos y descargué los puntos de control del modelo cada vez, para tenerlos como referencia. Eso puede ser particularmente importante si tiene un pequeño conjunto de datos de entrenamiento, ya que demasiado entrenamiento puede hacer que su modelo se sobreajuste y empeore. Por lo tanto, tener puntos de control a los que pueda regresar es valioso.

Hablando de puntos de control, como los modelos, son grandes. Por lo que probablemente querrá agregar un disco a su VM. Al tener el disco separado, siempre puede usarlo para otros proyectos. El proceso para montarlo automáticamente es un poco molesto (parece que podría ser una casilla de verificación, pero no lo es). Afortunadamente, solo tienes que hacerlo una vez. Una vez que tuve mi máquina virtual en funcionamiento con el código, el modelo y los datos de entrenamiento necesarios, lo solté. El T4 pudo ejecutar aproximadamente un paso cada 1,5 segundos. La máquina virtual que había configurado cuesta alrededor de $ 25 por día (recuerde que las máquinas virtuales no se apagan solas; debe apagarlas si no desea que se le facture, y el disco persistente se sigue facturando incluso entonces).

Para ahorrar algo de dinero, transferí los puntos de control del modelo (como un archivo .zip) a mi escritorio. Luego podría apagar la máquina virtual (ahorrando un dólar o dos por hora) e interactuar con el modelo localmente. Obtiene el mismo resultado de cualquier manera porque el modelo y el punto de control son idénticos. La forma tradicional de evaluar el éxito de su entrenamiento es mantener una parte de sus datos de entrenamiento como un conjunto de validación. Si la pérdida continúa disminuyendo, pero la precisión (que obtiene al calcular la pérdida cuando ejecuta su modelo en los datos que ha reservado para validación) disminuye, es probable que haya comenzado a ajustar en exceso sus datos y su modelo. es simplemente “memorizar” su entrada y retroalimentarla. Eso reduce su capacidad para lidiar con nueva información.

Aquí está la carne: algunos resultados de muestra después de días de capacitación

Después de experimentar con varios tipos de indicaciones, me decidí por alimentar al modelo (al que he apodado The Oracle) las primeras oraciones de artículos reales de ExtremeTech y ver qué se le ocurrió. Después de 48 horas (106,000 pasos en este caso) de entrenamiento en un T4, aquí hay un ejemplo:

Salida de nuestro modelo después de dos días de entrenamiento en un T4 cuando se alimenta la primera oración del artículo Titan de Ryan Whitwam.

El resultado de nuestro modelo después de dos días de entrenamiento en un T4 cuando se alimentó con la primera oración del artículo Titan de Ryan Whitwam. Obviamente, no va a engañar a nadie, pero el modelo está empezando a hacer un trabajo decente al vincular conceptos similares en este punto.

Cuanta más información tenga el modelo sobre un tema, más comenzará a generar texto plausible. Escribimos mucho sobre Windows Update, así que pensé que dejaría que el modelo lo probara:

La respuesta del modelo a un mensaje sobre Windows Update después de un par de días de entrenamiento.

La respuesta del modelo a un mensaje sobre Windows Update después de un par de días de entrenamiento.

Con algo tan subjetivo como la generación de texto, es difícil saber hasta dónde llegar con el entrenamiento de un modelo. Eso es particularmente cierto porque cada vez que se envía un mensaje, obtendrá una respuesta diferente. Si desea obtener algunas respuestas plausibles o divertidas, lo mejor que puede hacer es generar varias muestras para cada mensaje y revisarlas usted mismo. En el caso del mensaje de Windows Update, alimentamos el modelo con el mismo mensaje después de unas pocas horas de entrenamiento, y parecía que el trabajo adicional podría haber sido útil:

Después de algunas horas de capacitación, aquí está la mejor de las muestras cuando se le da el mismo mensaje sobre Microsoft Windows.

Después de unas pocas horas de formación, aquí está la mejor de las muestras cuando se le da el mismo mensaje sobre Microsoft Windows.

He aquí por qué los modelos sin supervisión son tan geniales

Me impresionó, pero no me sorprendió, el rendimiento predictivo en bruto de GPT-2 (al menos la versión pública) en comparación con soluciones más simples como textgenrnn. Lo que no me di cuenta hasta más tarde fue la versatilidad. GPT-2 es lo suficientemente de propósito general como para abordar una amplia variedad de casos de uso. Por ejemplo, si le da pares de oraciones en francés e inglés como indicación, seguidas solo de una oración en francés, hace un trabajo plausible de generar traducciones. O si le da pares de preguntas y respuestas, seguidas de una pregunta, hace un trabajo decente al encontrar una respuesta plausible. Si genera algún texto o artículos interesantes, considere compartirlos, ya que definitivamente es una experiencia de aprendizaje para todos nosotros.

Publicaciones relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar
Cerrar