gpt | Aprende Machine Learning https://www.aprendemachinelearning.com en Español Fri, 15 Sep 2023 11:15:30 +0000 en-US hourly 1 https://wordpress.org/?v=6.4.3 https://www.aprendemachinelearning.com/wp-content/uploads/2017/11/cropped-icon_red_neuronal-1-32x32.png gpt | Aprende Machine Learning https://www.aprendemachinelearning.com 32 32 134671790 LLM: ¿Qué son los Grandes Modelos de Lenguaje? https://www.aprendemachinelearning.com/llm-que-son-los-grandes-modelos-de-lenguaje/ https://www.aprendemachinelearning.com/llm-que-son-los-grandes-modelos-de-lenguaje/#respond Fri, 15 Sep 2023 11:15:26 +0000 https://www.aprendemachinelearning.com/?p=8493 Introducción a los LLM, en Inglés Large Language Model, que revolucionaron el campo del Procesamiento del Lenguaje Natural (NLP) crearon tendencia gracias a ChatGPT e incluso pusieron en cuestión la posibilidad de alcanzar el AGI, el punto de quiebre en el que la Inteligencia Artificial se vuelve autónoma y más poderosa que la inteligencia humana.

The post LLM: ¿Qué son los Grandes Modelos de Lenguaje? first appeared on Aprende Machine Learning.

]]>

Introducción a los LLM, en Inglés Large Language Model, que revolucionaron el campo del Procesamiento del Lenguaje Natural (NLP) crearon tendencia gracias a ChatGPT e incluso pusieron en cuestión la posibilidad de alcanzar el AGI, el punto de quiebre en el que la Inteligencia Artificial se vuelve autónoma y más poderosa que la inteligencia humana.

En este artículo vamos a comentar cómo surgen las LLMs, el cambio de paradigma, sus modelos actuales y cómo disrumpe en prácticamente todas las áreas laborales.

Definición de LLM

Los Grandes Modelos de Lenguaje son modelos de propósito general de Inteligencia Artificial desarrollados dentro del campo del Procesamiento del Lenguaje Natural que puede entender y generar texto al estilo humano.

Un LLM es un modelo estadístico que determina la probabilidad de ocurrencia de una secuencia de palabras en una oración.

Los modelos más famosos actuales “GPT” tienen una arquitectura basada en Transformers (2017) y usan redes neuronales que son entrenadas con inmensas cantidades de texto obtenidos y “curados” de internet, incluyendo libros, periódicos, foros, recetas, legales, paper científicos, patentes, enciclopedias.

Para darnos una idea de la inmensa cantidad de información que utiliza GPT-3, es el equivalente a que una persona leyera 120 palabras por minuto las 24 horas del día sin parar durante 9 mil años.

Cambio de paradigma

Desde hace más de 50 años se vienen creando diversas arquitecturas de redes neuronales que van siendo refinadas y especializadas en tareas como las redes convolucionales para clasificación de imágenes, Redes Recurrentes para NLP, Redes para audio, redes profundas para ventas. Dentro del propio campo de NLP se entrenaban modelos de lenguaje para distintas tareas con datasets específicos, por ejemplo para “análisis de sentimiento” ó traducción de textos de inglés a español, resumen de noticias.

Cuando surge la arquitectura de Transformers en 2017, confluye una serie de buenas prácticas que facilitan el poder entrenar grandes cantidades de texto de manera no supervisada (next-word) utilizando el poder de procesamiento de las GPUS (en paralelo) con una buena relación de precio, tiempo y calidad en los resultados obtenidos.

Entonces, surge algo por sorpresa: un modelo del lenguaje que sólo era entrenado para traducir texto de inglés a francés era capaz de responder a preguntas como “¿cuál es la capital de Francia?” ó de realizar tareas como la de análisis de sentimiento o resumen de conceptos: todo ello en un mismo modelo!

A esas capacidades inesperadas que adquiere el modelo se le conocen como “zero-shot“. Además una vez que el modelo queda entrenado, se lo puede utilizar en diversidad de tareas y se puede seguir reutilizando haciendo un “fine-tuning” con pocos datos adicionales y seguir expandiendo sus capacidades.

¿Ser o no ser con Código?

Una curiosidad: Al crear los inmensos datasets para entrenar los LLMs se excluía deliberadamente los bloques de código (Python, java, javascript) como una manera de limpiar los datos. Sin embargo más tarde descubrieron que al incluir código, los modelos eran capaces de programar, pero también se volvían “más inteligentes” para realizar razonamientos lógicos.

¿Una SuperInteligencia?

Cuando OpenAI tuvo entrenado al modelo GPT-2 en 2019 lo vio tan potente que creyó que no era buena idea liberarlo por miedo al posible mal uso que se pudiera hacer de él.

Con GPT3 el modelo LLM ya era capaz de crear cuentos, poemas y noticias falsas que eran indistinguibles -apenas-de la escritura humana.

El modelo Bard(Lamda) de Google logró confundir a un ingeniero que trabajaba en su desarrollo para hacerle creer que tenia conciencia propia, que la IA era un “ser sintiente”. El test de Turing estaba definitivamente resulto.

A finales de 2022 OpenAI lanza ChatGPT que se viraliza en redes sociales haciendo que un producto de este tipo alcance la cantidad de un millón de usuarios en menos de una semana, algo comparable al crecimiento de adquisición de usuarios que logran las redes sociales más populares.

Entonces surgen montones de dudas: ¿Es realmente inteligente ChatGPT? Puede contestar preguntas de lo que sea? Puede saber más que un médico? Va a reemplazar mi trabajo? Puede convertirse en una tecnología peligrosa?

De hecho a principios de 2023 con la salida de GPT-4 dentro de ChatGPT un grupo de 1000 científicos de todo el mundo firmaron una petición para detener el desarrollo de este tipo de modelos de lenguaje durante 6 meses para estudiar si es responsable y beneficioso su uso libre o si por el contrario, estamos a tiempo de frenar esta tecnología que nos puede llevar al fin del mundo…

Si bien mantener una charla con este tipo de bots es sorprendente, los científicos reputados como Andrew Ng (deeplearning.ai) y Yann LeCun (Meta) mantienen la calma (y el escepticismo) dando un mensaje de que una IA que “sólo aprendió a predecir la próxima palabra” aún está lejos de convertirse en AGI y que de hecho, sufre de alucinaciones, no puede realizar cálculos matemáticos sencillos ni deducciones lógicas, está lejos de ser una herramienta peligrosa.

Modelos que siguen Instrucciones

Dentro del desarrollo de LLMs hay dos grandes tipos en los que los podemos subdividir; los modelos “base” (ó crudos) y los “Instruction Tuned LLM“. Los modelos Base son los modelos “generales” que están entrenados en predecir la siguiente palabra. Los modelos tuneados para seguir instrucciones son entrenados para seguir instrucciones a partir de un grupo de ejemplos; estos son los que permiten que tengamos diálogo mediante chats, como el propio ChatGPT.

Una analogía entre estos dos modelos, podría ser la de un médico clínico (conocimiento general) y un médico especialista. Si preguntamos al médico “base” sobre unos síntomas nos dará una respuesta general que puede ser buena, pero si la pregunta es específica para un área (ej. en cardiología) obtendremos mejor respuesta del médico especialista.

Los modelos de instrucciones son los que nos permiten hacer que el LLM pueda generar listas con resultados, o crear canciones, contestar preguntas con mayor precisión pero también prevenir dar malas respuestas ó inapropiadas (también llamadas tóxicas) que puede contener el modelo base (sin filtros). El modelo base podría contener información sobre cómo fabricar un químico peligroso, pero dentro del finetuning del modelo basado en instrucciones podríamos evitar que esa información aparezca en sus respuestas.

Los Instruction-models están entrenados para ser “Helpful-Honest-Harmless“, es decir que brinden ayuda, sean honestos e inocuos. Pero ¿cómo evaluamos al modelo de instrucciones? ¿cómo sabemos que podemos liberarlos al público sin peligro? Mediante el mecanismo de RLHF

EL RLHF, “un tipo en el Loop”

El Reinforcement Learning with Human Feedback es un paso adicional para mejorar al modelo. Para ello pasamos preguntas y las respuestas generadas por el LLM a un grupo de personas que evaluarán si la respuesta es de calidad ó si por el contrario incumple las normas. Esto retroaliementará mediante “premios ó castigos” al modelo, permitiendo reajustar sus parámetros gracias al Aprendizaje por refuerzo.

Es como si intentáramos dotar de una personalidad al modelo para que se “comporte” de una forma esperada y respetuosa.

Este paso adicional en donde necesitamos un grupo de personas es un coste adicional que sólo pueden permitirse grandes empresas. Lo interesante como Ingenieros o Científico de Datos es poder contar con un modelo que siga instrucciones que sea libre y poder ajustarlo a nuestro antojo.

Panorama LLMs 2023 y la llama que llama

Desde 2018 que empezaron a aparecer LLMs entrenadas por las grandes compañías IT, recordemos algunas de ellas, su aporte y los modelos recientes, a Septiembre de 2023.

LLM destacadas

Fecha, nombre, compañía, parámetros en “Billions”*, aporte

*NOTA, recuerda que el uso de “Billions” en inglés es distinto al valor Billón del español.

  • 2018 Octubre – BERT – Google – ? – Utiliza la Arquitectura Transformer sólo su rama encoder.
  • 2019 Julio – Roberta – Meta – 0.35B – versión multilenguaje optimizada de BERT.
  • 2019 Noviembre – GPT2 – OpenAI – 1.5B – Entrenado para predecir la Siguiente Palabra. Utiliza sólo decoder de la arquitectura de Transformers.
  • 2020 Mayo – GPT3– OpenAI – 175B – Alcanza un nivel de conversación al nivel humano. Puede generar textos, noticias o literatura fantástica sin problemas.
  • 2022 Enero – Lamda – Google – 137B – Modelo de lenguaje tuneado para chat y diálogos, priorizando ser agradable a los humanos.
  • 2022 Marzo – Chinchilla – DeepMind – 70B – Demostró que con un “presupuesto limitado” la mejor performance no se consigue con modelos enromes si no con modelos más pequeños entrenados con más datos.
  • 2022 Marzo – InstrucGPT – OpenAI – 175B – Entrenado con RLHF para seguir instrucciones
  • 2022 Abril – PALM – Google – 540B – Supera al hombre en muchas tareas del “bigbench” definidas como punto de referencia.
  • 2022 Octubre – FLANT5 – Google – 11B – Modelo basado en PALM para seguir instrucciones libre bajo licencia Apache 2.
  • 2022 Noviembre – BLOOMBigScience – Entrenado en 59 idiomas para uso libre.
  • 2023 Febrero – Llama – Meta – 13B/65B – “supera a GPT3 siendo 10 veces más pequeño”. Es libre pero no para uso comercial.
  • 2023 Marzo – GPT4 – OpenAI – ? – Se desconoce su tamaño, pero es el modelo más poderoso en la actualidad.
  • 2023 Mayo – Palm2 -Google – ? – “Tiene capacidades multi-lenguaje y de razonamiento más eficientes con menor cómputo”.
  • 2023 Mayo – FalconTII – 40B – “40 billones de parámetros entrenados en un trillón de tokens”.
  • 2023 Julio – LLAMA2 – META – 180B – Permite ser utilizado comercialmente!
  • 2023 Septiembre – Falcon – TII – 180B – Opensource! Supera a LLAMA2

Conclusión

Los Grandes Modelos de Lenguaje están apoderándose de toda la popularidad de la Inteligencia Artificial y lo tienen justificado; son realmente grandiosas en sus tareas y han logrado traer a la agenda de los organismos internacionales la importancia de regular este tipo de tecnologías, su importancia, riesgos e impacto que tendrá en nuestra sociedad (global), incluyendo el plano económico y laboral.

Las LLMS han pateado el tablero a las grandes compañías, creando una nueva carrera en IA, el propio Google vio amenazado su negocio como motor de búsqueda, Microsoft trazo alianzas estratégicas con OpenAI y reflotó a Bing agregando funciones de Chat con IA y dando acceso a LLMs desde su servicio en la nube Azure.

Las personas que están trabajando con esta tecnología creen que las LLMs se han convertido en compañeros indispensables para casi cualquier tareas, potenciando nuestras tareas, no para reemplazarnos si no para aumentarnos (en marketing, programación, toma de decisiones, investigación, escritura…)

En próximos artículos hablaré sobre el prompt engineering, las librerías python que nos ayudan a implementar LLMs en local y en la nube y en cómo construir nuestros propios sistemas privados al estilo de ChatGPT.

Espero que hayas disfrutado del artículo!

The post LLM: ¿Qué son los Grandes Modelos de Lenguaje? first appeared on Aprende Machine Learning.

]]>
https://www.aprendemachinelearning.com/llm-que-son-los-grandes-modelos-de-lenguaje/feed/ 0 8493
Generación de Texto en Español con GPT-2 https://www.aprendemachinelearning.com/generacion-de-texto-en-espanol-con-gpt-2/ https://www.aprendemachinelearning.com/generacion-de-texto-en-espanol-con-gpt-2/#comments Tue, 13 Dec 2022 09:00:00 +0000 https://www.aprendemachinelearning.com/?p=7869 Crearemos nuestra propia IA de generación de texto basada en los diálogos y entrevistas de Ibai Llanos publicados en Youtube. Usaremos un modelo pre-entrenado GPT-2 en castellano disponible desde HuggingFace y haremos el fine-tuning con Pytorch para que aprenda el estilo de escritura deseado.

The post Generación de Texto en Español con GPT-2 first appeared on Aprende Machine Learning.

]]>
Crea tu propio bot-influencer, basado en Ibai Llanos, en Python ¿Qué puede salir mal?

Crearemos nuestra propia IA de generación de texto basada en los diálogos y entrevistas de Ibai Llanos publicados en Youtube. Usaremos un modelo pre-entrenado GPT-2 en castellano disponible desde HuggingFace y haremos el fine-tuning con Pytorch para que aprenda el estilo de escritura deseado.

En este artículo comentaremos brevemente el modelo GPT-2 y crearemos un entorno en Python desde donde poder entrenar y generar texto!

¿Qué son los modelos GPT?

GPT significa “Generative Pre-Training” y es un modelo de Machine Learning creado por OpenAI para la generación de texto. El modelo de Procesamiento del Lenguaje Natural, es un caso particular de Transformers. GPT propone el pre-entrenamiento de un enorme corpus de texto para luego -opcionalmente- realizar el fine-tuning.

El fine-tuning es el proceso de realizar un “ajuste fino” de los parámetros ó capas de la red neuronal, en nuestro caso con un dataset adicional para guiar al modelo a obtener las salidas deseadas.

¿Entonces es aprendizaje no supervisado? Sí; se considera que es aprendizaje no supervisado porque estamos pasando al modelo enormes cantidades de texto, que el modelo organizará automáticamente y le pedimos que “prediga la siguiente palabra” usando como contexto todos los tokens previos (con posicionamiento!). El modelo ajusta sin intervención humana los embeddings y los vectores de Atención. Algunos autores lo consideran aprendizaje “semi-supervisado” porque consideran como “etiqueta de salida” el token a predecir.

Ejemplo: Si tenemos la oración “Buenos días amigos”, el modelo usará “Buenos días” para predecir como etiqueta de salida “amigos”.

Este modelo puede usarse directamente como modelo generativo luego de la etapa de aprendizaje no supervisado (sin hacer fine-tuning).

Al partir de este modelo en crudo y realizar un fine-tuning a nuestro antojo, podemos crear distintos modelos específicos: de tipo Question/Answering, resumen de textos, clasificación, análisis de sentimiento, etc.

Eso es lo que haremos en el ejercicio de hoy: descargar el modelo GPT y realizar el fine-tuning!

¿Cómo es la arquitectura de GPT-2?

GPT es un modelo Transformer. Utiliza sólo la rama “Tansformer-Decoder” a diferencia de modelos como BERT que utilizan la rama Encoder. De esta manera se elimina la Atención cruzada, pues ya no es necesaria y mantiene la “Masked Self-Attention”.

 Entre sus características:

  • El Transformer Decoder utiliza Masked Self-Attention. Sólo utiliza los tokens precedentes de la oración para calcular la atención del token final.
  • GPT es un modelo con posicionamiento absoluto de embeddings.
  • GPT fue entrenado con “Causal Language Modelling” y es poderoso para predecir el “siguiente token” de la oración. Esto le permite generar texto coherente, imitando al lenguaje de los humanos.
  • GPT-2 fue entrenado con el texto de 8 millones de páginas web que acumulan más de 40GB.
  • GPT-2 tiene 1500 millones de parámetros en su versión Extra-Large.
  • El tamaño de vocabulario es de 50.257 tokens.
  • Existen 4 modelos de distinto tamaño de GPT-2 según la cantidad de decoders y la dimensionalidad máxima.
Desde la versión GPT-2 Small de unos 500MB (117Millones de parámetros) hasta el Extra large que ocupa más de 6.5GB.

Como vemos, la versión pequeña tiene un tamaño aún manejable para entrenar en un ordenador “normal”. Es la versión del modelo que utilizaremos en el ejercicio.

Zero shot Learning

Una ventaja que se consigue al entrenar al modelo con millones de textos de conocimiento general (en contraposición a utilizar textos sobre un sólo tema) es que el modelo consigue habilidades “zero shot”, es decir, logra realizar satisfactoriamente algunas tareas para las que no ha sido entrenado específicamente. Por ejemplo, GPT-2 puede traducir textos de inglés a francés sin haber sido entrenado para ello. También consigue responder a preguntas ó generar código en Java.

¿Por qué usar GPT-2?

Puede que sepas de la existencia de GPT-3 y hasta puede que hayas escuchado hablar sobre el recientemente lanzado “ChatGPT” que algunos denominan como GPT-3.5 ó GPT-4. Entonces, ¿porqué vamos a usar al viejo GPT-2 en este ejercicio?

La respuesta rápida es porque GPT-2 es libre!, su código fue liberado y tenemos acceso al repositorio y a su implementación desde HuggingFace. Existen muchos modelos libres tuneado de GPT-2 y publicados que podemos usar. Si bien cuenta con un tamaño de parámetros bastante grande, GPT-2 puede ser reentrenado en nuestro propio ordenador.

En cuanto a resultados, GPT-2 fue unos de los mejores de su época (Feb 2019), batiendo records y con valores -en algunos casos- similares a los del humano:

En cambio GPT-3 aún no ha sido liberado, ni su código ni su red pre-entrenada, además de que tiene un tamaño inmensamente mayor a su hermano pequeño, haciendo casi imposible que lo podamos instalar ó usar en nuestra computadora de casa ó trabajo.

Es cierto que puedes utilizar GPT-3 mediante la API de pago de OpenAI y también se puede utilizar ChatGPT de modo experimental desde su web. Te animo a que lo hagas, pero no dejes de aprender a utilizar GPT-2 que será de gran ayuda para comprender como ajustar uno de estos modelos de lenguaje para tus propios fines.

¿Qué tiene que ver HuggingFace en todo esto?

HuggingFace se ha convertido en el gran repositorio de referencia de modelos pre-entrenados. Es un sitio web en donde cualquier persona ó insitutición pueden subir sus modelos entrenados para compartirlos.

HuggingFace ofrece una librería python llamada transformers que permite descargar modelos preentrenados de NLP (GPT, BERT, BART,ELECTRA, …), utilizarlos, hacer el fine tuning, reentrenar.

En el ejercicio que haremos instalaremos la librería de HuggingFace para acceder a los modelos de GPT.

Modelo pre-entrenado en Español

Dentro de HuggingFace podemos buscar modelos para NLP y también para Visión Artificial, cómo el de Stable Diffusion, para crear imágenes, como se explica en un anterior post del blog!).

Y podemos encontrar Modelos con distintos fines. En nuestro caso, estamos interesados en utilizar un modelo en Español.

Usaremos el modelo llamado “flax-community/gpt-2-spanish“, puedes ver su ficha aquí, y desde ya, agradecemos enormemente al equipo que lo ha creado y compartido gratuitamente. Ocupa unos 500MB.

Un detalle, que verás en el código: realmente cargaremos una red pre-entrenada con los pesos y el embeddings PERO también usaremos el tokenizador! (es decir, cargaremos 2 elementos del repositorio de HuggingFace, no sólo el modelo).

El proyecto Python: “Tu propio bot influencer”

En otros artículos de NLP de este tipo, utilizan textos de Shakespeare porque es un escritor reconocido, respetado y porque no tiene derechos de autor. Nosotros utilizaremos textos de Ibai Llanos generados a partir de transcripciones generadas automáticamente por Whisper de sus videos de Youtube. Ibai es un reconocido Streamer español de Twitch. ¿Porqué Ibai? Para hacer divertido el ejercicio! Para que sea en castellano, con jerga actual 😀

El proyecto consiste en tomar un modelo GPT-2 pre-entrenado en castellano y realizar el fine-tuning con nuestro propio dataset de texto. Como resultado obtendremos un modelo que será capaz de crear textos “con la manera de hablar” de Ibai.

Aquí puedes encontrar la Jupyter notebook completa en mi repo de Github con el ejercicio que realizaremos. En total son unas 100 líneas de código.

El Dataset educacional: Diálogos de Ibai

Banner del Canal de Ibai en Youtube 2022

El dataset es una selección totalmente arbitraría de videos de Youtube de Ibai con entrevistas y charlas de sus streams en Twitch. En algunos videos juega videojuegos en vivo, entrevista cantantes, futbolistas ó realiza compras de productos usados que le llaman la atención.

Utilicé un notebook de Google Colab con Whisper que es un modelo de machine learning lanzado hace pocos meses (en 2022) que realiza la transcripción automática de Audio a Texto. Usaremos como entradas esos textos. Disclaimer: Pueden contener errores de mala transcripción y también es posible que hubiera palabras que el modelo no comprenda del español.

El archivo de texto que utilizaremos como Dataset con fines educativos, lo puedes encontrar aquí.

Creación del entorno Python con Anaconda

Si tienes instalado Anaconda, puedes crear un nuevo Environment python para este proyecto. Si no, instala anaconda siguiendo esta guía, ó utiliza cualquier manejador de ambientes python de tu agrado.

También puedes ejecutar el código una notebook en la nube con Google Colab y aprovechar el uso de GPU gratuito. En este artículo te cuento sobre cómo usar Colab.

En este ejercicio utilizaremos la librería Pytorch para entrenar la red neuronal. Te recomiendo ir a la web oficial de Pytorch para obtener la versión que necesitas en tu ordenador, porque puede variar la instalación si usas Windows, Linux ó Mac y si tienes o no GPU.

Ejecuta las siguientes líneas en tu terminal:

conda create -n gpt2 python=3.9 -y
# Activa el nuevo ambiente con: 'conda activate gpt2'
conda install numpy tqdm transformers -y
# si tienes GPU instala Pytorch con:
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
# si no tienes GPU, instala con:
conda install pytorch torchvision torchaudio cpuonly -c pytorch

Importamos las librerías

Ahora pasamos a un notebook o una IDE Python y empezamos importando las librerías python que utilizaremos, incluyendo transformers de HuggingFace:

import os
import time
import datetime
import numpy as np
import random
from tqdm import tqdm
import torch
from torch.utils.data import Dataset, DataLoader, random_split, RandomSampler
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import AdamW, get_linear_schedule_with_warmup

Uso de CPU ó GPU

Haremos una distinción; si vamos a utilizar GPU para entrenar ó CPU, definiendo una variable llamada device. Nótese que también alteramos el tamaño que usaremos de batch. En el caso de GPU, podemos utilizar valores 2 ó 3 según el tamaño de memoria RAM que tenga la tarjeta gráfica.

if torch.cuda.is_available():
    print("Usar GPU")
    device = torch.device("cuda")
    batch_size = 3
else:
    print("usar CPU")
    device = torch.device("cpu")
    batch_size = 1

Cargamos el Modelo de HuggingFace

La primera vez que ejecutemos esta celda, tomará unos minutos en descargar los 500MB del modelo y el tokenizador en Español desde HuggingFace, pero luego ya se utilizará esa copia desde el disco, siendo una ejecución inmediata.

Para este ejercicio estamos creando un “token especial” (de control) que llamaremos “ibai” con el que luego indicaremos al modelo que queremos obtener una salida de este tipo.

# Load the GPT tokenizer.
tokenizer = AutoTokenizer.from_pretrained("flax-community/gpt-2-spanish", bos_token='<|startoftext|>', eos_token='<|endoftext|>', pad_token='<|pad|>')
model = AutoModelForCausalLM.from_pretrained("flax-community/gpt-2-spanish")

control_code = "ibai"

special_tokens_dict = {
         "additional_special_tokens": ['f"<|{control_code}|>"'],
}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)
model.resize_token_embeddings(len(tokenizer))
unk_tok_emb = model.transformer.wte.weight.data[tokenizer.unk_token_id, :]
for i in range(num_added_toks):
        model.transformer.wte.weight.data[-(i+1), :] = unk_tok_emb

Cargamos el Dataset “Ibai_textos.txt”

Creamos una clase python que hereda de Dataset que recibe el archivo txt que contiene los textos para fine-tuning.

class GPT2Dataset(Dataset):
  def __init__(self, control_code, tokenizer, archivo_texto, max_length=768):
    self.tokenizer = tokenizer
    self.input_ids = []
    self.attn_masks = []
    print('loading text...')
    sentences = open(archivo_texto, 'r', encoding="utf-8").read().lower().split('n')
    print('qty:',len(sentences))
    for row in tqdm(sentences):
      encodings_dict = tokenizer('<|startoftext|>'+ f"<|{control_code}|>" + row + '<|endoftext|>', truncation=True, max_length=max_length, padding="max_length")
      self.input_ids.append(torch.tensor(encodings_dict['input_ids']))
      self.attn_masks.append(torch.tensor(encodings_dict['attention_mask']))
    
  def __len__(self):
    return len(self.input_ids)
  def __getitem__(self, idx):
    return self.input_ids[idx], self.attn_masks[idx]

Instanciamos la clase, pasando el nombre de archivo “ibai_textos.txt” a utilizar

dataset = GPT2Dataset(control_code, tokenizer, archivo_texto="ibai_textos.txt", max_length=768)
# Split into training and validation sets
train_size = int(0.99 * len(dataset))
val_size = len(dataset) - train_size
train_dataset, val_dataset = random_split(dataset, [train_size, val_size])
print('{:>5,} training samples'.format(train_size))
print('{:>5,} validation samples'.format(val_size))
train_dataloader = DataLoader(
            train_dataset,  # The training samples.
            sampler = RandomSampler(train_dataset), # Select batches randomly
            batch_size = batch_size # Trains with this batch size.
        )

Entrenamos haciendo el Fine-Tuning

Realizando entre 1 y 3 epochs debería ser suficiente para que el modelo quede tuneado.

epochs = 1
learning_rate = 5e-4
warmup_steps = 1e2
epsilon = 1e-8
optimizer = AdamW(model.parameters(), lr = learning_rate, eps = epsilon)
total_steps = len(train_dataloader) * epochs
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps = warmup_steps, num_training_steps = total_steps)
def format_time(elapsed):
    return str(datetime.timedelta(seconds=int(round((elapsed)))))

Ahora si, a entrenar el modelo durante cerca de 2 horas si tenemos GPU ó durante un día entero en CPU.

El código es bastante estándar en PyTorch para entreno de redes neuronales profundas; un loop principal por epoch donde procesamos por batches las líneas de texto del dataset y hacemos backpropagation.

total_t0 = time.time()
model = model.to(device)
for epoch_i in range(0, epochs):
    print('======== Epoch {:} / {:} ========'.format(epoch_i + 1, epochs))
    print('Training...')
    t0 = time.time()
    total_train_loss = 0
    model.train()
    for step, batch in enumerate(train_dataloader):
        b_input_ids = batch[0].to(device)
        b_labels = batch[0].to(device)
        b_masks = batch[1].to(device)
        model.zero_grad()
        outputs = model(  b_input_ids, labels=b_labels, 
                          attention_mask = b_masks, token_type_ids=None )
        loss = outputs[0]
        batch_loss = loss.item()
        total_train_loss += batch_loss
        # Get sample every x batches.
        if step % sample_every == 0 and not step == 0:
            elapsed = format_time(time.time() - t0)
            print('  Batch {:>5,}  of  {:>5,}. Loss: {:>5,}.   Elapsed: {:}.'.format(step, len(train_dataloader), batch_loss, elapsed))
        loss.backward()
        optimizer.step()
        scheduler.step()
    # Calculate the average loss over all of the batches.
    avg_train_loss = total_train_loss / len(train_dataloader)
    # Measure how long this epoch took.
    training_time = format_time(time.time() - t0)
    print("")
    print("  Average training loss: {0:.2f}".format(avg_train_loss))
    print("  Training epoch took: {:}".format(training_time))
    t0 = time.time()
    total_eval_loss = 0
    nb_eval_steps = 0
print("Training complete!")
print("Total training took {:} (h:mm:ss)".format(format_time(time.time()-total_t0)))

Guardar el modelo, para uso futuro

El tiempo de entreno varía según tu ordenador, memoria RAM y si tienes o no placa de video con GPU.

Luego de varias horas de entreno, mejor guardar el modelo para no tener que reentrenar cada vez y reutilizar el modelo que hicimos. Para guardar hacemos:

output_dir = './model_gpt_ibai/'
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
model_to_save = model.module if hasattr(model, 'module') else model
model_to_save.save_pretrained(output_dir)
tokenizer.save_pretrained(output_dir)

En la notebook con el ejercicio verás también una celda con el código de ejemplo para cargar tu modelo ya entrenado.

Crear Texto al estilo influencer

Generamos 3 salidas preguntando ¿Qué es el fútbol? con máximo de 300 caracteres. Puedes variar estos parámetros para obtener más párrafos y con un máximo de 764 letras.

Fijate que agregamos al prompt el token de control de inicio (startoftext) pero también nuestro token de control que llamamos “ibai”.

model.eval()
prompt = "<|startoftext|>" + "<|ibai|>" + "¿ qué es el fútbol ?"
generated = torch.tensor(tokenizer.encode(prompt)).unsqueeze(0)
generated = generated.to(device)
sample_outputs = model.generate(
                                generated, 
                                num_return_sequences=3,
                                max_length = 300,
                                do_sample=True, 
                                top_k=50, 
                                top_p=0.95
                                )
for i, sample_output in enumerate(sample_outputs):
  print("{}: {}nn".format(i, tokenizer.decode(sample_output, skip_special_tokens=True)))

Y obtenemos como salidas:

  • <|ibai|>¿ qué es el fútbol? porque yo creo que son los mejores momentos de la vida del mundo. eh no se. eh y eso es lo que me llama la atención. eh ¡gracias! gracias.
  • <|ibai|>¿ qué es el fútbol? fútbol es la suma de sus defectos, del mal que uno puede poner en uno, de un mal que tú quieres que la gente haga como si nada, es decir, yo soy el contrario, yo soy el mejor, soy el peor. es decir, que tú eres el mejor y yo soy el peor. ¡joder, yo soy del mejor! ¡pero, bueno, ya está! ¿ tú eres el que está ahí para que me lo diga? ¿ me crees que estás bueno? no, no.
  • <|ibai|>¿ qué es el fútbol? para empezar, el que se mueve por el interés de los futbolistas es increíble. ¿ de quién eres? en el mejor sentido, y además de lo que eres. te he dicho que ya sé que a ti te gusta eso de hacer las cosas, pero eres muy, muy, muy, muy, muy, muy especial, ¿ no? un niño. te lo voy a decir un poco de corazón.

Ahora ya puedes jugar y probar tú mismo con distintas salidas!

Aquí te dejo algunos ejemplos divertidos que conseguí (pinto en negrita el comienzo del prompt enviado al modelo):

  • <|ibai|>para mi la vida es una cosa en la que te tienes que esforzar por lo que te gusta, porque quieres algo. cuando me pongo de acuerdo en algo me siento preparado para el momento. el ego que te llevas es la presión de no ser perfecto. y claro, si quieres, no quieres ser tan bueno, eres tú.
  • <|ibai|>la música que me gusta escuchar, claro. hay muchas personas que no nos conocen de nada, se nota. es un tío muy, muy, muy directo y creo que a lo mejor es un poco directo, de hecho, hay mucho ego en su actitud. la gente en general está bastante influenciada por él.
  • <|ibai|>un día todos deberíamos tener una vida, que es el futuro, una vida en paz con uno mismo, con la sociedad, y eso no es tan complicado como parece. y te digo lo de
  • <|ibai|>la felicidad es cuando hay armonía, que el mundo entero tiene su armonía. bueno, amigos, es que estamos unidos, a mí la música me relaja. bueno, es que no quiero dejar de escucharme ni de escuchar. y la música, de hecho, no es mi música, es mi vida.
  • <|ibai|>si voy a un restaurante, voy a un restaurante de argentina. me voy a un restaurante argentino. ¡ah, la verdad que me lo estoy pasando bien!
  • <|ibai|>la navidad es muy importante, porque es la época que vivimos. ¿ no crees que la navidad sería algo diferente de como la vivimos nosotros? en vez de algo muy tradicional, de un poco de juerga y de hacer una noche loca. no sé si la navidad es de las fechas en las que más fiesta hay. de verdad, no sé si es de las fechas en las que más fiesta hay o más fiesta no hay.
  • <|ibai|>en el próximo mes voy a empezar el segundo año. me llevo la bici para el club. de momento, voy a aprender a convivir con mis seguidores. y de hecho, hoy estoy hablando de eso.
  • <|ibai|>la inteligencia artificial, la realidad aumentada, ¿ qué pasa, tío? en este mundo hay gente que intenta crear un juego de magia que le pueda pasar un poquito de mal. bueno, que sí, que le pasa con las personas.
  • <|ibai|>la inteligencia artificial se está dando en todos los ámbitos. se está dando en todos los ámbitos, es cierto. en general, es un mundo donde la inteligencia artificial y el cerebro humano son los dos primeros motores.
  • <|ibai|>¿ qué es la inteligencia artificial? inteligencia artificial, es la de verdad. si la inteligencia artificial es más potente, es más fácil trabajar con ella. y es más difícil tener más inteligencia. porque la inteligencia artificial es la de verdad.
  • <|ibai|>yo sé mucho sobre el tema, pero me hace un poco de gracia. y también quiero que vosotros tengáis una gran audiencia, que leéis un libro, porque yo creo que eso es una idea que está muy bien. y es que si a tu amiga le pasa lo mismo que a ti, se va al final. por eso te pido que se ponga a grabar el libro, porque yo creo que eso, como el libro ya está hecho, le va a quedar espectacular.
  • <|ibai|>el amor es el camino, y no te vas a quedar ahí, a las 9. 40 am. el amor es un sentimiento que debe de ser muy fuerte en tu vida. a ver, yo creo que en la vida hay un tipo de personas que te hacen sentir una persona especial en tu vida. y el amor, que es la otra persona, también lo es.
Imagen generada por el autor con StableDiffusion

Resumen

En estos días estamos viendo cómo ChatGPT está siendo trending topic por ser el modelo GPT más poderoso y versátil de OpenAI, con capacidad de responder a cualquier pregunta, traducir idiomas, dar definiciones, crear poesía, historias y realizar snippets de código python.

En este artículo te acercamos un poco más a conocer qué son los modelos GPT que están revolucionando el campo del NLP mediante un ejercicio práctico.

Ya conoces un poco más sobre la librería transformers de HuggingFace, sobre los distintos modelos que puedes descargar en tu ordenador y personalizar. Como siempre, esto es sólo la punta del iceberg, te invito a que sigas investigando y aprendiendo más sobre todo ello y me dejes tus comentarios al respecto.

Nos vemos en el próximo post!

Puedes descargar la notebook con el ejercicio completo y el archivo con los textos de Ibai.

Otros Enlaces de interés

Suscripción al Blog

Recibe los próximos artículos sobre Machine Learning, estrategias, teoría y código Python en tu casilla de correo!

NOTA: algunos usuarios reportaron que el email de confirmación y/o posteriores a la suscripción entraron en su carpeta de SPAM. Te sugiero que revises y recomiendo que agregues nuestro remitente info @ aprendemachinelearning.com a tus contactos para evitar problemas. Gracias!

El libro del Blog

Si te gustan los contenidos del blog y quieres darme tu apoyo, puedes comprar el libro en papel, ó en digital (también lo puede descargar gratis!).

The post Generación de Texto en Español con GPT-2 first appeared on Aprende Machine Learning.

]]>
https://www.aprendemachinelearning.com/generacion-de-texto-en-espanol-con-gpt-2/feed/ 4 7869