Подготовка данных для точной настройки моделей распознавания лиц
В этой статье показано, как подготовить данные для точной настройки открытый код больших языковых моделей с использованием преобразователей лиц и обнимания наборовданных лиц.
Требования
- Databricks Runtime для Машинное обучение 13.0 или более поздней версии. В примерах этого руководства используются наборы данных Hugging Face, включенные в Databricks Runtime 13.0 ML и более поздних версий.
- Рабочая область с включенным каталогом Unity. Для записи данных в том каталога Unity также необходимо иметь следующие разрешения:
- Привилегия WRITE VOLUME на томе, в который требуется отправить файлы.
- Привилегия "USE SCHEMA" на родительскую схему.
- Привилегия USE CATALOG в родительском каталоге.
- Значительные вычислительные ресурсы для скачивания больших наборов данных. Для скачивания большого набора данных, используемого в примере записной книжки, требуется более одного дня.
Загрузка данных из обнимаемого лица
Обнимать наборы данных лиц — это библиотека распознавания лиц для доступа к наборам данных для аудио, компьютерного зрения и задач обработки естественного языка (NLP). С помощью обнимания лица datasets
можно загружать данные из разных мест. Библиотека datasets
имеет служебные программы для чтения наборов данных из Концентратора распознавания лиц Hugging. Существует множество наборов данных, которые можно скачать и читать из Концентратора распознавания лиц с помощью load_dataset
функции. Дополнительные сведения о загрузке данных с помощью наборов данных об обнимаемого лица см. в документации по обнимаю лиц.
from datasets import load_dataset
dataset = load_dataset("imdb")
Некоторые наборы данных в Концентраторе распознавания лиц предоставляют размеры данных, скачанных и создаваемых при load_dataset
вызове. Вы можете узнать load_dataset_builder
размеры перед скачиванием набора данных с 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")
Дополнительные сведения о том, как скачать и подготовить наборы данных в Azure Databricks для различных размеров данных, см. в записной книжке по использованию методов hugging Face.
Форматирование данных обучения и оценки
Чтобы использовать собственные данные для точной настройки модели, необходимо сначала отформатировать обучающие и ознакомительные данные в Кадры данных Spark. Затем загрузите кадры данных с помощью библиотеки обнимаемого лица datasets
.
Начните с форматирования обучающих данных в таблицу с ожиданиями тренера. Для классификации текста это таблица с двумя столбцами: текстовым столбцом и столбцом меток.
Для точной настройки необходимо предоставить модель. Библиотека автоклассов преобразователя распознавания лиц упрощает загрузку моделей и параметров конфигурации, включая широкий спектр для Auto Models
естественного языка.
Например, Hugging Face transformers
предоставляет AutoModelForSequenceClassification
в качестве загрузчика модели для классификации текста, которая ожидает целые идентификаторы в качестве меток категорий. Однако если у вас есть кадр данных со строковыми метками, необходимо также указать сопоставления между целочисленными метками и строковыми метками при создании модели. Эти сведения можно собирать следующим образом:
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)}
Затем создайте целые идентификаторы в виде столбца меток с UDF Pandas:
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)
Загрузка набора данных об обнимания лиц из кадра данных Spark
Обнимающее лицо datasets
поддерживает загрузку из кадров данных Spark с помощью datasets.Dataset.from_spark
. Дополнительные сведения о методе from_spark() см. в документации по об hugging Face.
Например, если у вас есть train_df
и test_df
кадры данных, можно создать наборы данных для каждого из них со следующим кодом:
import datasets
train_dataset = datasets.Dataset.from_spark(train_df, cache_dir="/Volumes/main/default/my-volume/train")
test_dataset = datasets.Dataset.from_spark(test_df, cache_dir="/Volumes/main/default/my-volume/test")
Dataset.from_spark
кэширует набор данных. В этом примере описывается обучение модели на драйвере, поэтому данные должны быть доступны для него. Кроме того, так как материализация кэша параллелизирована с помощью Spark, предоставленная cache_dir
должна быть доступна всем рабочим. Для удовлетворения этих ограничений cache_dir
должен быть пути тома каталога Unity.
Доступ к объему управляется в каталоге Unity.
Если набор данных большой, запись в каталог Unity может занять много времени. Чтобы ускорить процесс, вы можете использовать параметр working_dir
, чтобы обнять лицо datasets
записать набор данных во временное расположение на диске, а затем переместить его в каталог Unity. Например, чтобы использовать SSD в качестве временного расположения:
import datasets
dataset = datasets.Dataset.from_spark(
train_df,
cache_dir="/Volumes/main/default/my-volume/train",
working_dir="/local_disk0/tmp/train",
)
Кэширование для наборов данных
Кэш является одним из способов datasets
повышения эффективности. Он сохраняет все скачанные и обработанные наборы данных, поэтому, когда пользователю нужно использовать промежуточные наборы данных, они перезагрузятся непосредственно из кэша.
Каталог кэша по умолчанию для наборов ~/.cache/huggingface/datasets
данных. Когда кластер завершается, данные кэша также теряются. Чтобы сохранить файл кэша при завершении кластера, Databricks рекомендует изменить расположение кэша на путь тома каталога Unity, задав переменную среды HF_DATASETS_CACHE
:
import os
os.environ["HF_DATASETS_CACHE"] = "/Volumes/main/default/my-volume/"
Точное настройка модели
Когда данные будут готовы, его можно использовать для точной настройки модели обнимания лиц.
Записная книжка: скачивание наборов данных из hugging Face
В этом примере записная книжка предоставляет рекомендуемые рекомендации по использованию функции Hugging Face load_dataset
для скачивания и подготовки наборов данных в Azure Databricks для различных размеров данных.