Herramientas de IA 101

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

mm
AÃąade Unite.AI a tus fuentes preferidas en Google
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 (GOOGL ), Amazon (AMZN ) y Nvidia (NVDA ) 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 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

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

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 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.