Huggy Lingo Utilizando Aprendizaje Automático para Mejorar los Metadatos de Lenguaje en el Hugging Face Hub
Huggy Lingo Uso de Aprendizaje Automático para Mejorar Metadatos de Lenguaje en Hugging Face Hub
Huggy Lingo: Utilizando el Aprendizaje Automático para Mejorar los Metadatos de Idioma en el Hugging Face Hub
tl;dr: Estamos utilizando el aprendizaje automático para detectar el idioma de los conjuntos de datos del Hub sin metadatos de idioma, y los bibliotecarios-bots hacen solicitudes de extracción para agregar estos metadatos.
El Hugging Face Hub se ha convertido en el repositorio donde la comunidad comparte modelos de aprendizaje automático, conjuntos de datos y aplicaciones. A medida que aumenta el número de conjuntos de datos, los metadatos se vuelven cada vez más importantes como herramienta para encontrar el recurso adecuado para su caso de uso.
En esta publicación de blog, estoy emocionado de compartir algunos experimentos iniciales que buscan utilizar el aprendizaje automático para mejorar los metadatos de los conjuntos de datos alojados en el Hugging Face Hub.
Metadatos de Idioma para Conjuntos de Datos en el Hub
Actualmente hay ~50K conjuntos de datos públicos en el Hugging Face Hub. Los metadatos sobre el idioma utilizado en un conjunto de datos se pueden especificar utilizando un campo YAML en la parte superior de la tarjeta del conjunto de datos.
Todos los conjuntos de datos públicos especifican 1,716 idiomas únicos a través de una etiqueta de idioma en sus metadatos. Tenga en cuenta que algunos de ellos serán el resultado de especificar los idiomas de diferentes maneras, por ejemplo, en
vs eng
vs english
vs English
.
- 50 ideas de ChatGPT para hacer crecer tu negocio
- Investigadores del MIT presentan PhotoGuard una nueva herramienta d...
- Adaptando BERT a través del ajuste fino para tareas posteriores
Por ejemplo, el conjunto de datos de IMDB especifica en
en los metadatos YAML (indicando inglés):
Sección de los metadatos YAML para el conjunto de datos de IMDB
No sorprende que el inglés sea, con mucho, el idioma más común para los conjuntos de datos en el Hub, con aproximadamente el 19% de los conjuntos de datos en el Hub que indican su idioma como en
(sin incluir ninguna variación de en
, por lo que el porcentaje real es probablemente mucho mayor).
La frecuencia y el porcentaje de frecuencia para los conjuntos de datos en el Hugging Face Hub
¿Cómo se ve la distribución de idiomas si excluimos el inglés? Podemos ver que hay un grupo de algunos idiomas dominantes y después de eso hay una caída bastante suave en las frecuencias a las que aparecen los idiomas.
Distribución de etiquetas de idioma para conjuntos de datos en el hub excluyendo el inglés.
Sin embargo, hay un gran inconveniente en esto. La mayoría de los conjuntos de datos (alrededor del 87%) no especifican el idioma utilizado; solo aproximadamente el 13% de los conjuntos de datos incluyen información de idioma en sus metadatos.
El porcentaje de conjuntos de datos que tienen metadatos de idioma. True indica que se especifican los metadatos de idioma, False significa que no se lista ningún dato de idioma. Sin datos de tarjeta significa que no hay metadatos o no se pudieron cargar mediante la biblioteca Python `huggingface_hub`.
¿Por qué son importantes los Metadatos de Idioma?
Los metadatos de idioma pueden ser una herramienta vital para encontrar conjuntos de datos relevantes. El Hugging Face Hub permite filtrar conjuntos de datos por idioma. Por ejemplo, si queremos encontrar conjuntos de datos con idioma holandés, podemos utilizar un filtro en el Hub para incluir solo conjuntos de datos con datos en holandés.
Actualmente, este filtro devuelve 184 conjuntos de datos. Sin embargo, hay conjuntos de datos en el Hub que incluyen holandés pero no lo especifican en los metadatos. Estos conjuntos de datos se vuelven más difíciles de encontrar, especialmente a medida que aumenta el número de conjuntos de datos en el Hub.
Muchas personas desean poder encontrar conjuntos de datos para un idioma en particular. Una de las principales barreras para entrenar buenos LLM de código abierto para un idioma en particular es la falta de datos de entrenamiento de alta calidad.
Si pasamos a la tarea de encontrar modelos de aprendizaje automático relevantes, saber qué idiomas se incluyeron en los datos de entrenamiento de un modelo puede ayudarnos a encontrar modelos para el idioma en el que estamos interesados. Esto depende de que el conjunto de datos especifique esta información.
Finalmente, saber qué idiomas están representados en el Hub (y cuáles no), nos ayuda a comprender los sesgos de idioma del Hub y ayuda a informar los esfuerzos de la comunidad para abordar las brechas en idiomas específicos.
Prediciendo los Idiomas de los Conjuntos de Datos Utilizando Aprendizaje Automático
Ya hemos visto que muchos de los conjuntos de datos en el Hugging Face Hub no incluyen metadatos sobre el idioma utilizado. Sin embargo, dado que estos conjuntos de datos ya se comparten abiertamente, tal vez podamos analizar el conjunto de datos e intentar identificar el idioma utilizando aprendizaje automático.
Obteniendo los datos
Una forma de acceder a algunos ejemplos de un conjunto de datos es utilizando la biblioteca de conjuntos de datos para descargar los conjuntos de datos, es decir:
from datasets import load_dataset
dataset = load_dataset("biglam/on_the_books")
Sin embargo, para algunos de los conjuntos de datos en el Hub, es posible que no queramos descargar todo el conjunto de datos. En su lugar, podríamos intentar cargar una muestra del conjunto de datos. Sin embargo, dependiendo de cómo se haya creado el conjunto de datos, es posible que aún terminemos descargando más datos de los que necesitamos en la máquina en la que estamos trabajando.
Afortunadamente, muchos conjuntos de datos en el Hub están disponibles a través del servidor de conjuntos de datos. El servidor de conjuntos de datos es una API que nos permite acceder a conjuntos de datos alojados en el Hub sin descargar el conjunto de datos localmente. El servidor de conjuntos de datos alimenta la vista previa del Visor de Conjuntos de Datos que verás para muchos conjuntos de datos alojados en el Hub.
Para este primer experimento de predicción del idioma para conjuntos de datos, definimos una lista de nombres de columnas y tipos de datos que probablemente contengan contenido textual, es decir, nombres de columnas “text” o “prompt” y características de tipo “string” que probablemente sean relevantes, pero “image” no lo es. Esto significa que podemos evitar predecir el idioma para conjuntos de datos donde la información del idioma es menos relevante, por ejemplo, conjuntos de datos de clasificación de imágenes. Utilizamos el servidor de conjuntos de datos para obtener 20 filas de datos de texto para pasar a un modelo de aprendizaje automático (podríamos modificar esto para tomar más o menos ejemplos del conjunto de datos).
Este enfoque significa que para la mayoría de los conjuntos de datos en el Hub, podemos solicitar rápidamente el contenido de las columnas de texto probables de las primeras 20 filas en un conjunto de datos.
Prediciendo el idioma de un conjunto de datos
Una vez que tenemos algunos ejemplos de texto de un conjunto de datos, necesitamos predecir el idioma. Aquí hay varias opciones, pero para este trabajo, utilizamos el modelo fastText de detección de idiomas facebook/fasttext-language-identification creado por Meta como parte del trabajo No Language Left Behind. Este modelo puede detectar 217 idiomas que probablemente representen la mayoría de los idiomas de los conjuntos de datos alojados en el Hub.
Pasamos 20 ejemplos al modelo que representan filas de un conjunto de datos. Esto resulta en 20 predicciones de idioma individuales (una por fila) para cada conjunto de datos.
Una vez que tenemos estas predicciones, realizamos algunos filtros adicionales para determinar si aceptaremos las predicciones como una sugerencia de metadatos. Esto consiste aproximadamente en:
- Agrupar las predicciones para cada conjunto de datos por idioma: algunos conjuntos de datos devuelven predicciones para varios idiomas. Agrupamos estas predicciones por el idioma predicho, es decir, si un conjunto de datos devuelve predicciones para inglés y holandés, agrupamos las predicciones de inglés y holandés juntas.
- Para conjuntos de datos con múltiples idiomas predichos, contamos cuántas predicciones tenemos para cada idioma. Si un idioma se predice menos del 20% del tiempo, descartamos esta predicción, es decir, si tenemos 18 predicciones para inglés y solo 2 para holandés, descartamos las predicciones de holandés.
- Calculamos la puntuación media de todas las predicciones para un idioma. Si la puntuación media asociada con la predicción de un idioma es inferior al 80%, descartamos esta predicción.
Diagrama que muestra cómo se manejan las predicciones.
Una vez que hemos realizado este filtro, tenemos un paso adicional de decidir cómo usar estas predicciones. El modelo de predicción de idioma fastText devuelve predicciones como un código ISO 639-3 (un estándar internacional para códigos de idioma) junto con un tipo de guion. Es decir, descartamos la información del guion ya que actualmente no se captura de manera consistente como metadatos en el Hub y, cuando es posible, convertimos la predicción de idioma devuelta por el modelo de ISO 639-3 a códigos de idioma ISO 639-1. Esto se hace principalmente porque estos códigos de idioma tienen un mejor soporte en la interfaz de usuario del Hub para navegar por los conjuntos de datos.
Para algunos códigos ISO 639-3, no hay un equivalente en ISO 639-1. Para estos casos, especificamos manualmente una asignación si consideramos que tiene sentido, por ejemplo, el árabe estándar (arb
) se asigna al árabe (ar
). Cuando no es posible hacer una asignación obvia, actualmente no sugerimos metadatos para este conjunto de datos. En futuras iteraciones de este trabajo, podemos tomar un enfoque diferente. Es importante reconocer que este enfoque tiene desventajas, ya que reduce la diversidad de idiomas que se pueden sugerir y también depende de juicios subjetivos sobre qué idiomas se pueden asignar a otros.
Pero el proceso no se detiene aquí. Después de todo, ¿de qué sirve predecir el idioma de los conjuntos de datos si no podemos compartir esa información con el resto de la comunidad?
Usando Librarian-Bot para actualizar metadatos
¡Para asegurarnos de que estos valiosos metadatos de idioma se incorporen de nuevo al Hub, recurrimos a Librarian-Bot! Librarian-Bot toma las predicciones de idioma generadas por el modelo fastText de Meta llamado facebook/fasttext-language-identification y abre solicitudes de extracción para agregar esta información a los metadatos de cada conjunto de datos respectivo.
Este sistema no solo actualiza los conjuntos de datos con información de idioma, sino que también lo hace de manera rápida y eficiente, sin requerir trabajo manual por parte de los humanos. Si el propietario de un repositorio decide aprobar y fusionar la solicitud de extracción, entonces los metadatos de idioma estarán disponibles para todos los usuarios, mejorando significativamente la usabilidad del Hugging Face Hub. ¡Puedes seguir lo que hace el librarian-bot aquí!
Siguientes pasos
A medida que aumenta el número de conjuntos de datos en el Hub, los metadatos se vuelven cada vez más importantes. Los metadatos de idioma, en particular, pueden ser increíblemente valiosos para identificar el conjunto de datos correcto para tu caso de uso.
Con la ayuda del Servidor de Conjuntos de Datos y los Librarian-Bots, podemos actualizar los metadatos de nuestros conjuntos de datos a una escala que no sería posible de forma manual. Como resultado, estamos enriqueciendo el Hub y convirtiéndolo en una herramienta aún más poderosa para científicos de datos, lingüistas y entusiastas de la IA de todo el mundo.
Como bibliotecario de aprendizaje automático en Hugging Face, sigo explorando oportunidades para enriquecer automáticamente los metadatos de los artefactos de aprendizaje automático alojados en el Hub. No dudes en contactarme (daniel at thiswebsite dot co) si tienes ideas o quieres colaborar en este esfuerzo.