Share via


Förbereda data för finjustering av Hugging Face-modeller

Den här artikeln visar hur du förbereder dina data för finjustering öppen källkod stora språkmodeller med Hugging Face Transformers och Hugging Face Datasets.

Behov

Läsa in data från huggande ansikte

Hugging Face Datasets är ett Hugging Face-bibliotek för åtkomst till och delning av datauppsättningar för ljud-, visuellt innehåll och NLP-uppgifter (natural language processing). Med Hugging Face datasets kan du läsa in data från olika platser. Biblioteket datasets har verktyg för att läsa datauppsättningar från Hugging Face Hub. Det finns många datauppsättningar som kan laddas ned och läsas från Hugging Face Hub med hjälp load_dataset av funktionen. Läs mer om att läsa in data med Hugging Face Datasets i dokumentationen om huggande ansikten.

from datasets import load_dataset
dataset = load_dataset("imdb")

Vissa datamängder i Hugging Face Hub innehåller de storlekar på data som laddas ned och genereras när load_dataset anropas. Du kan använda load_dataset_builder för att känna till storlekarna innan du laddar ned datauppsättningen med load_dataset.

from datasets import load_dataset_builder
from psutil._common import bytes2human

def print_dataset_size_if_provided(*args, **kwargs):
  dataset_builder = load_dataset_builder(*args, **kwargs)

  if dataset_builder.info.download_size and dataset_builder.info.dataset_size:
    print(f'download_size={bytes2human(dataset_builder.info.download_size)}, dataset_size={bytes2human(dataset_builder.info.dataset_size)}')
  else:
    print('Dataset size is not provided by uploader')

print_dataset_size_if_provided("imdb")

Mer information om hur du laddar ned och förbereder datauppsättningar på Azure Databricks finns i Avsnittet Hämta datamängder från Hugging Face best practices ( Hämta datamängder från Hugging Face Best Practices) för att få vägledning om hur du laddar ned och förbereder datamängder på Azure Databricks för olika storlekar på data.

Formatera dina tränings- och utvärderingsdata

Om du vill använda dina egna data för modelljustering måste du först formatera tränings- och utvärderingsdata i Spark DataFrames. Läs sedan in DataFrames med hjälp av biblioteket Hugging Face datasets .

Börja med att formatera dina träningsdata i en tabell som uppfyller tränarnas förväntningar. För textklassificering är detta en tabell med två kolumner: en textkolumn och en kolumn med etiketter.

För att utföra finjustering måste du ange en modell. Biblioteket Hugging Face Transformer AutoClasses gör det enkelt att läsa in modeller och konfigurationsinställningar, inklusive ett brett utbud av för bearbetning av Auto Models naturligt språk.

Till exempel tillhandahåller AutoModelForSequenceClassification Hugging Face transformers som modellinläsare för textklassificering, som förväntar sig heltals-ID:n som kategorietiketter. Men om du har en DataFrame med strängetiketter måste du också ange mappningar mellan heltalsetiketterna och strängetiketterna när du skapar modellen. Du kan samla in den här informationen på följande sätt:

labels = df.select(df.label).groupBy(df.label).count().collect()
id2label = {index: row.label for (index, row) in enumerate(labels)}
label2id = {row.label: index for (index, row) in enumerate(labels)}

Skapa sedan heltals-ID:n som en etikettkolumn med en Pandas UDF:

from pyspark.sql.functions import pandas_udf
import pandas as pd
@pandas_udf('integer')
def replace_labels_with_ids(labels: pd.Series) -> pd.Series:
  return labels.apply(lambda x: label2id[x])

df_id_labels = df.select(replace_labels_with_ids(df.label).alias('label'), df.text)

Läsa in en Hugging Face-datauppsättning från en Spark DataFrame

Hugging Face datasets stöder inläsning från Spark DataFrames med hjälp av datasets.Dataset.from_spark. Mer information om metoden from_spark() finns i dokumentationen om Hugging Face.

Om du till exempel har train_df och DataFrames kan du skapa datauppsättningar för var och test_df en med följande kod:

import datasets
train_dataset = datasets.Dataset.from_spark(train_df, cache_dir="/dbfs/cache/train")
test_dataset = datasets.Dataset.from_spark(test_df, cache_dir="/dbfs/cache/test")

Dataset.from_spark cachelagrar datauppsättningen. I det här exemplet beskrivs modellträning på drivrutinen, så data måste göras tillgängliga för den. Eftersom cachematerialisering parallelliseras med Spark måste den tillhandahållna dessutom cache_dir vara tillgänglig för alla arbetare. För att uppfylla dessa begränsningar cache_dir bör vara en DBFS-rotvolym (Databricks File System) eller monteringspunkt.

DBFS-rotvolymen är tillgänglig för alla användare av arbetsytan och bör endast användas för data utan åtkomstbegränsningar. Om dina data kräver åtkomstkontroller använder du en monteringspunkt i stället för DBFS-rot.

Om datamängden är stor kan det ta lång tid att skriva den till DBFS. För att påskynda processen kan du använda parametern working_dir för att låta Hugging Face datasets skriva datauppsättningen till en tillfällig plats på disken och sedan flytta den till DBFS. Om du till exempel vill använda SSD som en tillfällig plats:

import datasets
dataset = datasets.Dataset.from_spark(
  train_df,
  cache_dir="/dbfs/cache/train",
  working_dir="/local_disk0/tmp/train",
)

Cachelagring för datauppsättningar

Cachen är ett av sätten datasets att förbättra effektiviteten. Den lagrar alla nedladdade och bearbetade datauppsättningar, så när användaren behöver använda mellanliggande datauppsättningar läses de in direkt från cachen.

Standardcachekatalogen för datauppsättningar är ~/.cache/huggingface/datasets. När ett kluster avslutas går även cachedata förlorade. För att spara cachefilen vid klusteravslut rekommenderar Databricks att du ändrar cacheplatsen till DBFS genom att ange miljövariabeln HF_DATASETS_CACHE:

import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"

Finjustera en modell

När dina data är klara kan du använda dem för att finjustera en Hugging Face-modell.

Notebook: Ladda ned datauppsättningar från Hugging Face

Den här exempelanteckningsboken innehåller rekommenderade metodtips för att använda funktionen Hugging Face load_dataset för att ladda ned och förbereda datauppsättningar på Azure Databricks för olika datastorlekar.

Ladda ned datauppsättningar från notebook-filen Hugging Face Best Practices

Hämta notebook-fil