‘B√ļsqueda potenciada en el ūü§ó Hub’

B√ļsqueda en ūü§ó Hub

La biblioteca huggingface_hub es una interfaz ligera que proporciona un enfoque program√°tico para explorar los puntos finales de alojamiento que Hugging Face proporciona: modelos, conjuntos de datos y Espacios.

Hasta ahora, buscar en el Hub a trav√©s de esta interfaz era complicado de lograr, y hab√≠a muchos aspectos de los que un usuario ten√≠a que “saber” y acostumbrarse.

En este artículo, veremos algunas características nuevas emocionantes agregadas a huggingface_hub para ayudar a reducir esa barrera y proporcionar a los usuarios una API amigable para buscar los modelos y conjuntos de datos que desean usar sin salir de sus interfaces Jupyter o Python.

Antes de comenzar, si no tiene la √ļltima versi√≥n de la biblioteca huggingface_hub en su sistema, ejecute la siguiente celda:

!pip install huggingface_hub -U

Situar el problema:

Primero, imaginemos el escenario en el que te encuentras. Te gustaría encontrar todos los modelos alojados en el Hugging Face Hub para la clasificación de texto, que fueron entrenados en el conjunto de datos GLUE y son compatibles con PyTorch.

Tal vez simplemente puedas abrir https://huggingface.co/models y usar los widgets allí. Pero esto requiere salir de tu IDE y escanear esos resultados, todo lo cual requiere unos cuantos clics de botón para obtener la información que necesitas.

¬ŅY si hubiera una soluci√≥n a esto sin tener que salir de tu IDE? Con una interfaz program√°tica, tambi√©n podr√≠a ser f√°cil ver c√≥mo se integra esto en los flujos de trabajo para explorar el Hub.

Aquí es donde entra huggingface_hub.

Para aquellos familiarizados con la biblioteca, es posible que ya sepan que podemos buscar este tipo de modelos. Sin embargo, acertar con la consulta es un proceso doloroso de prueba y error.

¬ŅPodr√≠amos simplificar eso? ¬°Vamos a descubrirlo!

Encontrar lo que necesitamos

Primero importaremos HfApi, que es una clase que nos ayuda a interactuar con el alojamiento backend de Hugging Face. Podemos interactuar con los modelos, conjuntos de datos y más a través de ella. Junto con esto, importaremos algunas clases auxiliares: ModelFilter y ModelSearchArguments

from huggingface_hub import HfApi, ModelFilter, ModelSearchArguments

api = HfApi()

Estas dos clases pueden ayudarnos a plantear una solución a nuestro problema anterior. La clase ModelSearchArguments es una especie de espacio de nombres que contiene cada uno de los parámetros válidos que podemos buscar.

Echemos un vistazo:

>>> model_args = ModelSearchArguments()

>>> model_args

Atributos o claves disponibles:
 * author
 * dataset
 * language
 * library
 * license
 * model_name
 * pipeline_tag

Podemos ver una variedad de atributos disponibles para nosotros (más sobre cómo se hace esta magia más adelante). Si categorizáramos lo que queremos, probablemente podríamos separarlos así:

  • pipeline_tag (o tarea): Clasificaci√≥n de texto
  • dataset: GLUE
  • library: PyTorch

Dada esta separación, tendría sentido encontrarlos dentro de nuestros model_args que hemos declarado:

>>> model_args.pipeline_tag.TextClassification

'text-classification'

>>> model_args.dataset.glue

'dataset:glue'

>>> model_args.library.PyTorch

'pytorch'

Lo que comenzamos a notar es parte de la comodidad que brindamos aquí. ModelSearchArguments (y el complemento DatasetSearchArguments) tienen una interfaz legible por humanos con salidas formateadas que la API quiere, como la forma en que el conjunto de datos GLUE debe buscarse con dataset:glue.

Esto es importante porque sin esta “hoja de trucos” de saber c√≥mo se deben escribir ciertos par√°metros, ¬°puedes sentarte f√°cilmente frustrado mientras intentas buscar modelos con la API!

Ahora que sabemos cu√°les son los par√°metros correctos, podemos buscar f√°cilmente en la API:

>>> modelos = api.list_models(filter = (
>>>     model_args.pipeline_tag.TextClassification, 
>>>     model_args.dataset.glue, 
>>>     model_args.library.PyTorch)
>>> )
>>> print(len(modelos))

    140

¡Encontramos que había 140 modelos coincidentes que cumplen nuestros criterios! (en el momento de escribir esto). Y si nos acercamos a uno, podemos ver que realmente parece correcto:

>>> modelos[0]

    Información del modelo: {
        modelId: Jiva/xlm-roberta-large-it-mnli
        sha: c6e64469ec4aa17fedbd1b2522256f90a90b5b86
        lastModified: 2021-12-10T14:56:38.000Z
        tags: ['pytorch', 'xlm-roberta', 'text-classification', 'it', 'dataset:multi_nli', 'dataset:glue', 'arxiv:1911.02116', 'transformers', 'tensorflow', 'license:mit', 'zero-shot-classification']
        pipeline_tag: zero-shot-classification
        siblings: [ModelFile(rfilename='.gitattributes'), ModelFile(rfilename='README.md'), ModelFile(rfilename='config.json'), ModelFile(rfilename='pytorch_model.bin'), ModelFile(rfilename='sentencepiece.bpe.model'), ModelFile(rfilename='special_tokens_map.json'), ModelFile(rfilename='tokenizer.json'), ModelFile(rfilename='tokenizer_config.json')]
        config: None
        private: False
        downloads: 680
        library_name: transformers
        likes: 1
    }

Es un poco m√°s legible y no hay que adivinar “¬ŅAcert√© con este par√°metro?”

¬ŅSab√≠as que tambi√©n puedes obtener la informaci√≥n de este modelo program√°ticamente con su ID de modelo? As√≠ es c√≥mo lo har√≠as:

api.model_info('Jiva/xlm-roberta-large-it-mnli')

Llev√°ndolo a otro nivel

Vimos c√≥mo podemos utilizar los ModelSearchArguments y DatasetSearchArguments para eliminar las conjeturas cuando queremos buscar en el Hub, pero ¬Ņqu√© pasa si tenemos una consulta muy compleja y desordenada?

Tal como: quiero buscar todos los modelos entrenados tanto para la clasificación de texto como para la clasificación de cero disparo, que fueron entrenados en los conjuntos de datos Multi NLI y GLUE, y son compatibles tanto con PyTorch como con TensorFlow (una consulta más exacta para obtener el modelo anterior).

Para configurar esta consulta, haremos uso de la clase ModelFilter. Est√° dise√Īada para manejar este tipo de situaciones, por lo que no necesitamos devanarnos los sesos:

>>> filt = ModelFilter(
>>>     task = ["text-classification", "zero-shot-classification"],
>>>     trained_dataset = [model_args.dataset.multi_nli, model_args.dataset.glue],
>>>     library = ['pytorch', 'tensorflow']
>>> )
>>> api.list_models(filt)

    [Información del modelo: {
         modelId: Jiva/xlm-roberta-large-it-mnli
         sha: c6e64469ec4aa17fedbd1b2522256f90a90b5b86
         lastModified: 2021-12-10T14:56:38.000Z
         tags: ['pytorch', 'xlm-roberta', 'text-classification', 'it', 'dataset:multi_nli', 'dataset:glue', 'arxiv:1911.02116', 'transformers', 'tensorflow', 'license:mit', 'zero-shot-classification']
         pipeline_tag: zero-shot-classification
         siblings: [ModelFile(rfilename='.gitattributes'), ModelFile(rfilename='README.md'), ModelFile(rfilename='config.json'), ModelFile(rfilename='pytorch_model.bin'), ModelFile(rfilename='sentencepiece.bpe.model'), ModelFile(rfilename='special_tokens_map.json'), ModelFile(rfilename='tokenizer.json'), ModelFile(rfilename='tokenizer_config.json')]
         config: None
         private: False
         downloads: 680
         library_name: transformers
         likes: 1
     }]

Muy rápidamente vemos que es un enfoque mucho más coordinado para buscar a través de la API, ¡sin ninguna complicación adicional para ti!

¬ŅQu√© es la magia?

Muy brevemente hablaremos sobre la magia subyacente que nos da este tipo de datos similar a un diccionario enumerado, el AttributeDictionary.

En gran medida inspirado en la clase AttrDict de la biblioteca fastcore, la idea general es tomar un diccionario normal y potenciarlo para la programación exploratoria al proporcionar autocompletado para cada clave en el diccionario.

Como vimos antes, esto se vuelve a√ļn m√°s fuerte cuando tenemos diccionarios anidados por los que podemos explorar, ¬°como model_args.dataset.glue!

Para aquellos familiarizados con JavaScript, imitamos cómo funciona la clase object.

Esta sencilla clase de utilidad puede ofrecer una experiencia mucho más centrada en el usuario al explorar tipos de datos anidados e intentar comprender qué hay allí, ¡como el resultado de una solicitud a la API!

Como se mencionó anteriormente, ampliamos el AttrDict de algunas formas clave:

  • Puedes eliminar claves con del model_args[key] o con del model_args.key
  • Esa representaci√≥n limpia __repr__ que vimos antes

No obstante, un concepto muy importante a tener en cuenta es que si una clave contiene un n√ļmero o un car√°cter especial, debe indexarse como un diccionario, y no como un objeto.

>>> from huggingface_hub.utils.endpoint_helpers import AttributeDictionary

Un ejemplo muy breve de esto es si tenemos un AttributeDictionary con una clave de 3_c:

>>> d = {"a":2, "b":3, "3_c":4}
>>> ad = AttributeDictionary(d)

>>> # Como un atributo
>>> ad.3_c

 File "<ipython-input-6-c0fe109cf75d>", line 2
    ad.3_c
        ^
SyntaxError: símbolo inválido

>>> # Como una clave de diccionario
>>> ad["3_c"]

4

Pensamientos finales

Espero que en este momento tengas una breve comprensi√≥n de c√≥mo esta nueva API de b√ļsqueda puede afectar directamente tu flujo de trabajo y exploraci√≥n del Hub. Junto con esto, quiz√°s conozcas un lugar en tu c√≥digo donde el AttributeDictionary podr√≠a ser √ļtil para ti.

A partir de aqu√≠, aseg√ļrate de consultar la documentaci√≥n oficial sobre C√≥mo buscar en el Hub de manera eficiente ¬°y no olvides darnos una estrella!

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

OpenAI lanza Baby Llama - Un LLM para dispositivos de baja potencia!

¬°√öltimas noticias del mundo de la inteligencia artificial! Andrej Karpathy, renombrado experto en aprendizaje profund...

Inteligencia Artificial

Deci presenta DeciCoder un modelo de lenguaje grande de código abierto con 1 billón de parámetros para generación de código.

En el mundo acelerado de la IA, la generación eficiente de código es un desafío que no se puede pasar por alto. Con l...

Inteligencia Artificial

El futuro de la guerra totalmente autónoma impulsado por IA está aquí

Barcos sin tripulación. Enjambres de drones autónomos. Cómo una fuerza de tarea de la Armada de los Estados Unidos es...

Inteligencia Artificial

Este artículo de Alibaba Group presenta FederatedScope-LLM un paquete integral para el ajuste fino de LLMs en el aprendizaje federado

Hoy en día, plataformas como Hugging Face han facilitado el acceso y la utilización de Modelos de Lenguaje de Gran Ta...