Herramientas de IA 101

Guía Completa para Principiantes sobre las Herramientas LLM de Hugging Face

mm
HUGGING FACE - COMPLETE GUIDE

Hugging Face es un laboratorio de investigación de inteligencia artificial y un centro que ha construido una comunidad de académicos, investigadores y entusiastas. En un corto período de tiempo, Hugging Face ha logrado una presencia sustancial en el espacio de la inteligencia artificial. Los gigantes de la tecnología incluyendo Google, Amazon y Nvidia han fortalecido la startup de inteligencia artificial Hugging Face con inversiones significativas, lo que hace que su valoración sea de $4.5 mil millones.

En esta guía, presentaremos transformadores, LLM y cómo la biblioteca Hugging Face juega un papel importante en la creación de una comunidad de inteligencia artificial de código abierto. También exploraremos las características esenciales de Hugging Face, incluyendo pipelines, datasets, modelos y más, con ejemplos prácticos en Python.

Transformadores en NLP

En 2017, la Universidad de Cornell publicó un artículo influyente que presentó transformadores. Estos son modelos de aprendizaje profundo utilizados en NLP. Este descubrimiento impulsó el desarrollo de grandes modelos de lenguaje como ChatGPT.

Los grandes modelos de lenguaje o LLM son sistemas de inteligencia artificial que utilizan transformadores para comprender y crear texto similar al humano. Sin embargo, crear estos modelos es costoso, a menudo requiere millones de dólares, lo que limita su accesibilidad a grandes empresas.

Hugging Face, fundada en 2016, tiene como objetivo hacer que los modelos de NLP sean accesibles para todos. A pesar de ser una empresa comercial, ofrece una variedad de recursos de código abierto que ayudan a las personas y organizaciones a construir y utilizar modelos de transformadores de manera asequible. El aprendizaje automático se trata de enseñar a las computadoras a realizar tareas reconociendo patrones, mientras que el aprendizaje profundo, un subconjunto del aprendizaje automático, crea una red que aprende de manera independiente. Los transformadores son un tipo de arquitectura de aprendizaje profundo que utiliza de manera efectiva y flexible los datos de entrada, lo que los hace una opción popular para construir grandes modelos de lenguaje debido a los menores requisitos de tiempo de entrenamiento.

Cómo Hugging Face facilita los proyectos de NLP y LLM

Ecosistema de Hugging Face - Modelos, conjunto de datos, métricas, transformadores, aceleración, tokenizadores

Hugging Face ha simplificado el trabajo con LLM al ofrecer:

  1. Una variedad de modelos preentrenados para elegir.
  2. Herramientas y ejemplos para ajustar estos modelos a tus necesidades específicas.
  3. Opciones de implementación fáciles para varios entornos.

Un recurso excelente disponible a través de Hugging Face es la Open LLM Leaderboard. Funcionando como una plataforma integral, monitorea, clasifica y evalúa sistemáticamente la eficiencia de una serie de grandes modelos de lenguaje (LLM) y chatbots, proporcionando un análisis discernidor de los avances en el dominio de código abierto.

LLM Benchmarks mide los modelos a través de cuatro métricas:

  • AI2 Reasoning Challenge (25-shot) — una serie de preguntas sobre la ciencia elemental.
  • HellaSwag (10-shot) — una prueba de inferencia de sentido común que, aunque simple para los humanos, es un desafío significativo para los modelos de vanguardia.
  • MMLU (5-shot) — una evaluación multifacética que toca la habilidad de un modelo de texto en 57 dominios diversos, que incluyen matemáticas básicas, derecho y ciencia de la computación, entre otros.
  • TruthfulQA (0-shot) — una herramienta para determinar la tendencia de un modelo a ecoar información frecuentemente encontrada en línea.

Las métricas, que se describen con términos como “25-shot”, “10-shot”, “5-shot” y “0-shot”, indican la cantidad de ejemplos de prompts que se les da a un modelo durante el proceso de evaluación para medir su rendimiento y habilidades de razonamiento en varios dominios. En los paradigmas de “pocos disparos”, los modelos se les proporcionan unos pocos ejemplos para guiar sus respuestas, mientras que en un entorno de “0 disparos”, los modelos no reciben ejemplos y deben confiar únicamente en su conocimiento preexistente para responder adecuadamente.

Componentes de Hugging Face

Pipelines

Las ‘pipelines’ son parte de la biblioteca de transformadores de Hugging Face, una característica que ayuda en la utilización sencilla de modelos preentrenados disponibles en el repositorio de Hugging Face. Proporciona una API intuitiva para una variedad de tareas, incluyendo análisis de sentimiento, respuesta a preguntas, modelado de lenguaje enmascarado, reconocimiento de entidades con nombre y resumen.

Las pipelines integran tres componentes centrales de Hugging Face:

  1. Tokenizer: Prepara tu texto para el modelo convirtiéndolo en un formato que el modelo pueda entender.
  2. Modelo: Es el corazón de la pipeline donde se realizan las predicciones reales basadas en la entrada preprocesada.
  3. Post-procesador: Transforma las predicciones crudas del modelo en una forma legible por humanos.

Estas pipelines no solo reducen la codificación extensiva, sino que también ofrecen una interfaz de usuario amigable para realizar diversas tareas de NLP.

Aplicaciones de Transformadores utilizando la biblioteca Hugging Face

Un aspecto destacado de la biblioteca Hugging Face es la biblioteca de Transformadores, que simplifica las tareas de NLP al conectar un modelo con las etapas de preprocesamiento y post-procesamiento necesarias, racionalizando el proceso de análisis. Para instalar e importar la biblioteca, use los siguientes comandos:

pip install -q transformers
from transformers import pipeline

Una vez hecho esto, puede ejecutar tareas de NLP comenzando con el análisis de sentimiento, que categoriza el texto en sentimientos positivos o negativos. La función pipeline() de la biblioteca sirve como un centro que abarca otras pipelines y facilita aplicaciones específicas de tareas en dominios de audio, visión y multimodal.

Aplicaciones Prácticas

Clasificación de Texto

La clasificación de texto se vuelve fácil con la función pipeline() de Hugging Face. Aquí hay cómo puedes iniciar una pipeline de clasificación de texto:

classifier = pipeline("text-classification")

Para una experiencia práctica, alimenta una cadena o lista de cadenas en tu pipeline para obtener predicciones, que se pueden visualizar de manera elegante usando la biblioteca Pandas de Python. A continuación, se muestra un fragmento de Python que demuestra esto:

sentences = ["Estoy emocionado de presentarte el maravilloso mundo de la IA.",
"Espero que no te decepcione."]

<p># Obtiene los resultados de clasificación para cada oración en la lista
results = classifier(sentences)</p>

<p># Recorre cada resultado e imprime la etiqueta y la puntuación
for i, result in enumerate(results):
print(f"Resultado {i + 1}:")
print(f" Etiqueta: {result['label']}")
print(f" Puntuación: {round(result['score'], 3)}\n")

Salida

Resultado 1:
Etiqueta: POSITIVO
Puntuación: 1.0

<p>Resultado 2:
Etiqueta: POSITIVO
Puntuación: 0.996

Reconocimiento de Entidades con Nombre (NER)

El NER es fundamental para extraer objetos del mundo real denominados “entidades con nombre” del texto. Utiliza la pipeline de NER para identificar estas entidades de manera efectiva:

ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Elon Musk es el CEO de SpaceX."
outputs = ner_tagger(text)
print(outputs)

Salida

 Elon Musk: PER, SpaceX: ORG 

Respuesta a Preguntas

La respuesta a preguntas implica extraer respuestas precisas a preguntas específicas de un contexto dado. Inicializa una pipeline de respuesta a preguntas e ingresa tu pregunta y contexto para obtener la respuesta deseada:

reader = pipeline("question-answering")
text = "Hugging Face es una empresa que crea herramientas para NLP. Está basada en Nueva York y fue fundada en 2016."
question = "¿Dónde se basa Hugging Face?"
outputs = reader(question=question, context=text)
print(outputs)

Salida

 { 'score': 0.998, 'start': 51, 'end': 60, 'answer': 'Nueva York' } 

La función pipeline de Hugging Face ofrece una variedad de pipelines preconstruidas para diferentes tareas, además de la clasificación de texto, NER y respuesta a preguntas. A continuación, se presentan detalles sobre un subconjunto de tareas disponibles:

Tabla: Tareas de la Pipeline de Hugging Face

Tarea Descripción Identificador de Pipeline
Generación de Texto Genera texto basado en un prompt dado pipeline(task=”text-generation”)
Resumen Resume un texto o documento extenso pipeline(task=”summarization”)
Clasificación de Imágenes Etiqueta una imagen de entrada pipeline(task=”image-classification”)
Clasificación de Audio Categoriza datos de audio pipeline(task=”audio-classification”)
Preguntas y Respuestas Visuales Responde a una pregunta usando una imagen y una pregunta pipeline(task=”vqa”)

 

Para descripciones detalladas y más tareas, consulte la documentación de la pipeline en el sitio web de Hugging Face.

Por qué Hugging Face está cambiando su enfoque a Rust

Hugging Face Safetensors y tokenizador Rust

Página de GitHub de Hugging Face Safetensors y tokenizador

El ecosistema de Hugging Face (HF) comenzó a utilizar Rust en sus bibliotecas, como safetensors y tokenizadores.

Hugging Face ha lanzado recientemente un nuevo marco de aprendizaje automático llamado Candle. A diferencia de los marcos tradicionales que utilizan Python, Candle está construido con Rust. El objetivo detrás del uso de Rust es mejorar el rendimiento y simplificar la experiencia del usuario, mientras se admite las operaciones de GPU.

El objetivo principal de Candle es facilitar la inferencia sin servidor, lo que hace posible la implementación de binarios ligeros y elimina Python de las cargas de trabajo de producción, que a veces puede ralentizar los procesos debido a sus sobrecargas. Este marco surge como una solución para superar los problemas encontrados con marcos de aprendizaje automático completos como PyTorch, que son grandes y lentos al crear instancias en un clúster.

Exploraremos por qué Rust se está convirtiendo en una opción favorita mucho más que Python.

  1. Velocidad y Rendimiento – Rust es conocido por su increíble velocidad, superando a Python, que se utiliza tradicionalmente en los marcos de aprendizaje automático. El rendimiento de Python puede verse ralentizado debido a su bloqueo del intérprete global (GIL), pero Rust no enfrenta este problema, prometiendo una ejecución más rápida de tareas y, en consecuencia, un mejor rendimiento en proyectos donde se implementa.
  2. Seguridad – Rust proporciona garantías de seguridad de memoria sin un recolector de basura, un aspecto esencial para garantizar la seguridad de los sistemas concurrentes. Esto juega un papel crucial en áreas como safetensors, donde la seguridad en el manejo de estructuras de datos es una prioridad.

Safetensors

Safetensors se benefician de las características de velocidad y seguridad de Rust. Safetensors implica la manipulación de tensores, una entidad matemática compleja, y tener Rust garantiza que las operaciones no solo sean rápidas, sino también seguras, evitando errores comunes y problemas de seguridad que podrían surgir del mal manejo de la memoria.

Tokenizer

Tokenizers manejan la división de oraciones o frases en unidades más pequeñas, como palabras o términos. Rust ayuda en este proceso acelerando el tiempo de ejecución, asegurando que el proceso de tokenización no solo sea preciso, sino también rápido, mejorando la eficiencia de las tareas de procesamiento del lenguaje natural.

En el núcleo del tokenizador de Hugging Face se encuentra el concepto de tokenización de subpalabras, que busca un equilibrio delicado entre la tokenización a nivel de palabra y a nivel de carácter para optimizar la retención de información y el tamaño del vocabulario. Funciona a través de la creación de subtokens, como “##ing” y “##ed”, manteniendo la riqueza semántica mientras evita un vocabulario inflado.

La tokenización de subpalabras implica una fase de entrenamiento para identificar el equilibrio más eficaz entre la tokenización a nivel de carácter y a nivel de palabra. Va más allá de las reglas simples de prefijo y sufijo, requiriendo un análisis exhaustivo de los patrones del lenguaje en corpus de texto extensos para diseñar un tokenizador de subpalabras eficiente. El tokenizador generado es hábil para manejar palabras nuevas dividiéndolas en subpalabras conocidas, manteniendo un alto nivel de comprensión semántica.

Componentes de Tokenización

La biblioteca de tokenizadores divide el proceso de tokenización en varias etapas, cada una abordando un aspecto distinto de la tokenización. Exploraremos estos componentes:

  • Normalizador: Realiza transformaciones iniciales en la cadena de entrada, aplicando ajustes necesarios como la conversión a minúsculas, la normalización de Unicode y el recorte.
  • Pre-tokenizador: Se encarga de fragmentar la cadena de entrada en pre-segmentos, determinando las divisiones según reglas predefinidas, como la delimitación por espacios.
  • Modelo: Supervisa el descubrimiento y la creación de subtokens, adaptándose a las particularidades de tus datos de entrada y ofreciendo capacidades de entrenamiento.
  • Post-procesador: Mejora las características de construcción para facilitar la compatibilidad con muchos modelos basados en transformadores, como BERT, agregando tokens como [CLS] y [SEP].

Para comenzar con los tokenizadores de Hugging Face, instale la biblioteca usando el comando `pip install tokenizers` e impórtela en su entorno de Python. La biblioteca puede tokenizar grandes cantidades de texto en muy poco tiempo, ahorrando así recursos computacionales valiosos para tareas más intensivas como el entrenamiento de modelos.

La biblioteca de tokenizadores utiliza Rust, que hereda la similitud sintáctica de C++ mientras introduce conceptos nuevos en el diseño de lenguajes de programación. Acoplado con enlaces de Python, garantiza que disfrute del rendimiento de un lenguaje de nivel inferior mientras trabaja en un entorno de Python.

Conjuntos de Datos

Los conjuntos de datos son la base de los proyectos de inteligencia artificial. Hugging Face ofrece una amplia variedad de conjuntos de datos, adecuados para una serie de tareas de NLP y más. Para utilizarlos de manera eficiente, es esencial comprender el proceso de carga y análisis de los mismos. A continuación, se muestra un script de Python comentado que demuestra cómo explorar conjuntos de datos disponibles en Hugging Face:

from datasets import load_dataset
# Carga un conjunto de datos
dataset = load_dataset('squad')
# Muestra la primera entrada
print(dataset[0])

Este script utiliza la función load_dataset para cargar el conjunto de datos SQuAD, que es una elección popular para tareas de respuesta a preguntas.

Aprovechando Modelos Preentrenados y Uniendo Todo

Los modelos preentrenados forman la columna vertebral de muchos proyectos de aprendizaje profundo, permitiendo a los investigadores y desarrolladores iniciar sus proyectos sin partir de cero. Hugging Face facilita la exploración de una amplia variedad de modelos preentrenados, como se muestra en el código a continuación:

from transformers import AutoModelForQuestionAnswering, AutoTokenizer

<p># Carga el modelo y el tokenizador preentrenados
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')</p>

<p># Muestra la arquitectura del modelo
print(model)</p>

Con el modelo y el tokenizador cargados, ahora podemos proceder a crear una función que tome un texto y una pregunta como entradas y devuelva la respuesta extraída del texto. Utilizaremos el tokenizador para procesar el texto y la pregunta de entrada en un formato compatible con el modelo, y luego alimentaremos este input procesado al modelo para obtener la respuesta:


<p>def get_answer(text, question):
# Tokeniza el texto y la pregunta de entrada
inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
outputs = model(**inputs)</p>

<p># Obtiene las puntuaciones de inicio y fin para la respuesta
answer_start = torch.argmax(outputs.start_logits)
answer_end = torch.argmax(outputs.end_logits) + 1</p>

<p>answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))
return answer</p>

En el fragmento de código, importamos los módulos necesarios del paquete transformers, luego cargamos un modelo y un tokenizador preentrenados usando el método from_pretrained. Elegimos un modelo BERT ajustado en el conjunto de datos SQuAD.

Vemos un caso de uso de esta función donde tenemos un párrafo de texto y queremos extraer una respuesta específica a una pregunta de él:


<p>text = """
La Torre Eiffel, ubicada en París, Francia, es uno de los monumentos más icónicos del mundo. Fue diseñada por Gustave Eiffel y completada en 1889. La torre tiene una altura de 324 metros y fue la estructura hecha por el hombre más alta del mundo en el momento de su finalización.
"""

<p>question = "¿Quién diseñó la Torre Eiffel?"</p>

<p># Obtiene la respuesta a la pregunta
answer = get_answer(text, question)
print(f"La respuesta a la pregunta es: {answer}")
# Salida: La respuesta a la pregunta es: Gustave Eiffel</p>

En este script, construimos una función get_answer que toma un texto y una pregunta, tokeniza adecuadamente el input, y utiliza el modelo BERT preentrenado para extraer la respuesta del texto. Demuestra una aplicación práctica de la biblioteca de transformadores de Hugging Face para construir un sistema de respuesta a preguntas simple pero poderoso. Para comprender bien los conceptos, se recomienda experimentar de manera práctica usando un Cuaderno de Google Colab.

Conclusión

A través de su amplia gama de herramientas de código abierto, modelos preentrenados y pipelines de usuario amigables, Hugging Face permite que tanto profesionales experimentados como nuevos en el campo exploren el vasto mundo de la inteligencia artificial con facilidad y comprensión. Además, la iniciativa de integrar Rust, debido a sus características de velocidad y seguridad, subraya el compromiso de Hugging Face con la innovación mientras se garantiza la eficiencia y la seguridad en las aplicaciones de inteligencia artificial. El trabajo transformador de Hugging Face no solo democratiza el acceso a herramientas de inteligencia artificial de alto nivel, sino que también fomenta un entorno colaborativo para el aprendizaje y el desarrollo en el espacio de la inteligencia artificial, facilitando un futuro donde la inteligencia artificial sea accesible a todos.

He dedicado los últimos cinco años sumergiéndome en el fascinante mundo de Machine Learning y Deep Learning. Mi pasión y experiencia me han llevado a contribuir a más de 50 proyectos de ingeniería de software diversos, con un enfoque particular en AI/ML. Mi curiosidad en curso también me ha llevado hacia el Procesamiento de Lenguaje Natural, un campo que estoy ansioso por explorar más a fondo.