Hola, que bueno verte por aquí.
En este tutorial, te enseñaré cómo crear un dataset de HuggingFace a partir de un archivo CSV con datos y cómo cargarlo en la plataforma HuggingFace Hub para compartirlo con la comunidad.
Antes de empezar, déjame decirte que hay varias formas de crear un dataset de HuggingFace, pero esta es la que me pareció más fácil para este ejemplo.
Supongamos que tienes un archivo CSV con frases machistas y no machistas y quieres crear un dataset para clasificar cualquier frase que se te ocurra. ¡Empecemos!
Lo primero que debes hacer es importar las librerías que necesitarás:
import pandas as pdimport numpy as np
from datasets import Dataset, DatasetDict, Features, ClassLabel, Value
Luego, debes leer el archivo CSV con pandas:
df = pd.read_csv("/ruta/del/archivo.csv", sep=';')
Aquí, debes cambiar “/ruta/del/archivo.csv” por la ubicación de tu archivo CSV y “;”" por el separador que estés usando en tu archivo CSV.
Luego que tienes tus datos cargados estamos listo para hacer modificaciones o transformaciones si es que las necesitas.
Si tu archivo CSV tiene exactamente el mismo formato que quieres subir simplemente salta al siguiente paso.
En mi caso yo tenia un CSV que era: Frase machista; Posible rescritura y quería transformarlo a una estructura Frase;[Machista o No machista] por lo que hice el siente código:
new_df = pd.DataFrame(columns=["text", "label"])
new_df["text"] = df.iloc[:, 0].tolist() + df.iloc[:, 1].tolist()
new_df["label"] = [1] * len(df) + [0] * len(df)
En este caso, asumimos que la primera columna del CSV contiene las frases machistas y la segunda columna las frases no machistas. Si tus columnas tienen otros nombres, debes cambiar “df.iloc[:, 0]” y “df.iloc[:, 1]” por los nombres de tus columnas.
Ahora, dividiremos el conjunto de datos en conjuntos de entrenamiento, validación y prueba.
train, validation, test = np.split(new_df.sample(frac=1, random_state=42), [int(0.6 * len(new_df)), int(0.8 * len(new_df))])
En este caso, estamos dividiendo el conjunto de datos en un 60% para entrenamiento, un 20% para validación y un 20% para prueba. Si quieres cambiar estas proporciones, debes cambiar los números en la función “np.split”.
Es importante definir las características y etiquetas para las columnas. En este caso, la columna “text” tendrá un tipo de dato “string” y la columna “label” tendrá dos clases: “No” y “Yes”.
features = Features({
'text': Value(dtype='string'),
'label': ClassLabel(num_classes=2, names=['No', 'Yes'])
})
Nota: Me paso que al hacer el Transfer Learning el Trainer me daba error por que mis columnas no se llamaban “text y label” así que recomiendo uses estos nombres. Tal vez sea solo para la tarea de Text-classification.
Ahora, eliminaremos la columna “index_level_0” que se crea automáticamente al convertir el archivo CSV a un DataFrame.
train.reset_index(drop=True, inplace=True)
validation.reset_index(drop=True, inplace=True)
test.reset_index(drop=True, inplace=True)
Crearemos los datasets de HuggingFace con las características y etiquetas establecidas y los agregaremos a un diccionario de datasets.
train_dataset = Dataset.from_pandas(train, features=features)val_dataset = Dataset.from_pandas(validation, features=features)test_dataset = Dataset.from_pandas(test, features=features)dataset_dict_text_classification = DatasetDict({
'train': train_dataset,
'validation': val_dataset,
'test': test_dataset
})
Finalmente publicamos nuestro Dataset en el hub
dataset_dict_text_classification.push_to_hub(repo_id_text_classification)
Espero este tutorial te haya servido y lo puedas aplicar a tus proyectos.
Les dejo mi Dataset creado y el modelo con fine-tunning por si les sirve de ejemplo.
Hola! Necesito ayuda para crear un dataset pero de imagenes con información de entidades. Alguien que pueda ayudarme? Gracias!