Saltar a contenido

Introducción a los modelos pre-entrenados

En la actualidad existen multitud de modelos ya entrenados con grandes cantidades de datos. Muchos de ellos son públicos, con lo que podemos descargarlos y/o utilizarlos para nuestros propios intereses. Veremos a continuación algunos ejemplos de ello, y cómo podemos utilizarlos. Sin embargo, antes de comenzar es necesario acotar el ámbito en que vamos a movernos. La mayoría de modelos que podemos encontrar en Internet para utilizar se centran en cuatro áreas principales:

  • Clasificación/Segmentación de imágenes
  • Procesamiento de vídeo (segmentación, clasificación...)
  • Procesamiento de textos (lenguaje natural)
  • Procesamiento de audio (identificación de voz, clasificación...)

1. Kaggle

Kaggle es un sitio web con multitud de recursos para inteligencia artificial, desde datasets de distintas temáticas hasta distintos concursos para poner a prueba los modelos que desarrollamos. Y, desde hace poco tiempo, también dispone de un repositorio donde poder acceder y utilizar distintos modelos desarrollados. Aquí podemos acceder al buscador general.

Como podemos ver en el buscador, se permite filtrar por diferentes criterios:

  • Por la tarea a realizar: clasificación de imágenes, generación de textos...
  • Por el tipo de datos a manejar: imágenes, textos, audios...
  • Por el framework a utilizar: Keras, TensorFlow, PyTorch...
  • Por la empresa que lo ha publicado
  • ... etc.

Dependiendo del modelo a usar, las instrucciones para acceder a él variarán. Vamos a echar un vistazo a este modelo de detección de objetos y clasificación de imágenes. Se trata del modelo MobileNet, que entrena sobre la base de datos ImageNet. ImageNet es una enorme base de datos con más de 14 millones de imágenes y más de 20.000 categorías disponibles. Varios modelos de redes se han creado sobre esta base de datos, y son públicos y descargables. En concreto MobileNet es capaz de distinguir 1.000 categorías distintas de imágenes del catálogo.

El modelo en cuestión está hecho bajo TensorFlow, y necesitaremos tener instalados los paquetes tensorflow y tensorflow_hub, ya que antiguamente correspondía a un modelo hubicado en un hub de modelos propio de TensorFlow. También puede ser necesaria la librería tf_keras, que compatibiliza las clases de Keras con las del hub de TensorFlow.

Aquí podemos descargar un ejemplo de documento Colab que utiliza este modelo para clasificar la imagen que le facilitemos. Podemos ejecutarlo y probarlo con alguna imagen que subáis de ejemplo, como las que se proporcionan en el propio ZIP.

Observemos algunas características relevantes del código. Por ejemplo, así cargamos el modelo en una red Keras:

# La URL podría variar en un futuro si llegan nuevas versiones
url_modelo = 'https://www.kaggle.com/models/google/mobilenet-v2/TensorFlow2/035-224-classification/2'
# El modelo seleccionado admite imágenes de entrada de 224x224
tam_imagenes = (224, 224)

# Añadimos una tercera dimensión para indicar imágenes a color
modelo = tf_keras.Sequential([
    hub.KerasLayer(url_modelo, input_shape = tam_imagenes + (3,))
])

En el resto del código del documento Colab se procesa la imagen que facilitemos, se escala al tamaño de entrada (224x224), se normalizan los valores a un rango de 0 a 1 y se le pasa al modelo para que la prediga.

Ejercicio 1

Descarga y prueba el modelo del documento Colab. Utiliza algunas imágenes de prueba (que correspondan a algunas de las categorías disponibles) y comprueba si es capaz de clasificarlas correctamente.

2. Pretrained.ai

La web pretrained.ai dispone de distintos modelos pre-entrenados y enfocados a las principales temáticas que hemos comentado con anterioridad: análisis de imágenes, de textos, etc. Debemos registrarnos, y disponemos de una cuenta gratuita que permite realizar un número limitado de consultas mensuales.

Una vez registrados (quizá nos pida que añadamos un nombre de equipo o team name), deberemos crear los endpoints. Un endpoint es básicamente una URL que utiliza alguno de los modelos disponibles en la web. En nuestro caso, vamos a crear un modelo para probar el procesamiento del lenguaje natural para análisis de sentimiento (sentiment analysis). Elegimos crear un new endpoint, le ponemos un nombre y elegimos la categoría a la que pertenecerá:

Después, en la siguiente pantalla elegimos cuál de los modelos queremos aplicar, y podemos hacer una prueba para ver su funcionamiento:

Podemos ver también el formato JSON de la respuesta que obtendremos. Una vez finalizado, en nuestra sección de endpoints lo tendremos disponible, y en los detalles (Details) podremos ver la URL a la que acceder y la clave key que utilizar, junto con un breve ejemplo genérico de uso.

Ahora que ya tenemos el endpoint creado, vamos a probarlo desde Python. Usaremos para ello la librería requests. Si no la tenéis instalada, instaladla a través del correspondiente comando pip install. El proceso para hacer una petición es muy simple: debemos indicar la URL a la que conectar (nos la indica la propia web de pretrained.ai), la clave o key de acceso como cabecera Authorization de la petición, y los parámetros que queremos pasarle al servicio en el cuerpo de la petición. Dicha petición deberá ser de tipo POST para poder pasar información en el cuerpo de la misma. Así quedaría todo junto, pidiéndole al usuario que escriba su propia reseña:

import requests

# Colocad aquí la URL de vuestro endpoint
URL = 'https://api.pretrained.ai/...'
# Sustituir las X por vuestra propia clave
KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

frase = input("Escribe una reseña (en inglés):\n")
contenido = {"language": "en", "text": frase}
cabeceras = {"Authorization": "Bearer " + KEY}
respuesta = requests.post(URL, json=contenido, headers=cabeceras)

A la hora de procesar el contenido, convertimos a JSON la respuesta y obtenemos un diccionario con las claves del contenido JSON. En nuestro caso, si miramos el ejemplo de respuesta anterior, debemos acceder al campo response > document > sentiment > label para saber si la reseña es positiva o negativa, y a response > document > sentiment > score para saber la certeza del veredicto. Se puede hacer así:

respuesta_json = respuesta.json()
resultado = respuesta_json['response']['document']['sentiment']['label']
probabilidad = respuesta_json['response']['document']['sentiment']['score']
print(resultado, probabilidad)

Ejercicio 2

Crea un nuevo endpoint en Pretrained.ai con el modelo de demografía de caras (face demographics), que predice el género y la edad de las caras que detecte en una imagen. Deberás pasarle una imagen codificando sus bytes en formato base64. Aquí tienes un ejemplo de cómo hacerlo:

import base64

...

with open("imagen.jpg", "rb") as imagen:
    imagen64 = base64.b64encode(imagen.read()).decode('UTF-8')
# Usar "imagen64" como texto en contenido de petición

Recoge el resultado de la imagen que envíes y muestra por pantalla el género y edad estimada de la(s) persona(s) de la imagen. Aquí tienes un par de imágenes de muestra.

3. OpenAI

OpenAI es, a día de hoy, una de las empresas más punteras en el desarrollo de modelos de Deep Learning. Es muy conocida por algunos de sus "productos estrella", como Chat-GPT o DALL-E, y permite que utilicemos de forma gratuita (aunque limitada) sus productos vía API. Debemos acceder a la web y crear una cuenta. Una vez creada, en el menú superior podemos crear una API Key, y también gestionar los límites de consumo, ampliarlos, etc.

Después, en la sección de documentación podemos consultar los modelos disponibles. En esta sección vamos a centrarnos en dos de ellos:

  • Generación de texto (GPT), siguiendo los pasos indicados en la documentacion
  • Generación de imágenes (DALL-E), siguiendo también la documentación correspondiente.

Por ejemplo, vamos a utilizar GPT. Antes de nada, debemos instalar la librería openai en nuestro sistema con el correspondiente comando:

pip install openai

Incorporamos la librería en nuestro programa, y en la propiedad api_key deberemos indicar la clave que hayamos generado previamente en la web:

from openai import OpenAI

cliente = OpenAI(
  api_key= 'XXXXXXXX'  # Añadir aquí nuestra API Key
)

Después, para hacer uso de GPT, debemos indicar cuál será nuestro motor de generación de texto en el parámetro model. Si accedemos a la documentación podemos ver que hay varias opciones disponibles, algunas más obsoletas y limitadas y otras más actuales. Por ejemplo, usaremos como motor gpt-4o-mini, y le lanzamos una pregunta en español. La respuesta tiene un campo choices con las respuestas emitidas por GPT, y en el atributo message.content tendremos el texto de la respuesta enviada:

pregunta = input("Escribe tu pregunta:\n")
respuesta = cliente.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {
            "role": "user",
            "content": pregunta,
        },
    ],
    max_tokens=50
)

print(respuesta.choices[0].message.content)

Observa que en el campo messages podemos enviar varias preguntas, e indicar con el parámetro max_tokens el tamaño máximo de respuesta de éstas.

Ejercicio 3

Vamos a utilizar ahora el modelo DALL-E de OpenAI para generar imágenes a partir de texto. Aquí tienes una guía de cómo utilizarlo. Escribe un programa donde el usuario indique lo que quiere que tenga la imagen, y nos devuelva la URL de la imagen generada, para poder acceder a ella.

4. Otros recursos

Además de los recursos vistos anteriormente, existen otros sitios en Internet donde utilizar modelos pre-entrenados. Aquí mostramos un listado de algunos de los más populares:

  • Model Zoo, un repositorio de modelos al estilo de TensorFlow Hub, aunque para descargar el modelo entero y adaptarlo a nuestro sistema a desarrollar. Dispone de modelos de diferentes categorías (procesamiento de imágenes, textos, etc.)
  • Hugging Face, con un catálogo de modelos de distintas categorías: análisis de sentimiento, procesamiento de textos, imágenes...
  • PyTorch Hub, un repositorio realizado por y para la librería PyTorch de Facebook. Algunos de los modelos están también disponibles en Kaggle.
  • Papers with code
  • También existen librerías específicas descargables con modelos pre-entrenados incorporados.

Ejercicio 4

Vamos a probar un modelo de Hugging Face. En concreto este traductor de inglés a español. Deberás registrarte en la web, y acceder a la sección Deploy de la parte superior derecha para ver cómo usar este modelo a través de su API. Una vez registrado, podrás crear una API token para usar el modelo, desde esa misma sección Deploy, o desde el apartado de tokens de tu perfil.

Ejercicio 5

Descarga la librería textblob (comando pip install textblob). Dispone de un conjunto de modelos pre-entrenados para procesamiento de lenguaje natural, con tareas como análisis de sentimiento, extracción de palabras clave, etc. Utilízala para análisis de sentimiento con la frase que le pidamos al usuario. Aquí tienes información sobre cómo usarla.