Datasets documentation
クイックスタート
クイックスタート
このクイックスタートは、コードにすぐに取り組み、🤗 Datasets をモデル学習ワークフローに統合する方法の例を確認したい開発者向けです。初心者の方は、より詳細な入門内容が得られるチュートリアルから始めることをお勧めします。
各データセットは固有のもので、タスクによっては学習用に準備するための追加の手順が必要な場合があります。ただし、🤗 Datasets のツールを使用してデータセットを読み込み、処理することは常に可能です。最も速く、簡単なスタート方法は、Hugging Face Hub から既存のデータセットを読み込むことです。数多くのタスクにわたって、数千ものデータセットから選択できます。作業したいデータセットの種類を選択して、始めましょう!
Hugging Face コースの第5章では、リモートまたはローカルのデータセットの読み込み、データセットのクリーニングに役立つツール、独自のデータセットの作成など、その他の重要なトピックについて詳しく学ぶことができます。
🤗 Datasetsのインストールから始めましょう:
pip install datasets
🤗 Datasetsは、音声データおよび画像データ形式にも対応しています:
オーディオデータセットを扱うには、Audio機能をインストールしてください:
pip install datasets[audio]
画像データセットを扱うには、Image機能をインストールしてください:
pip install datasets[vision]
🤗 Datasets 以外に、ご使用の機械学習フレームワークがインストールされていることを確認してください。
bash pip install torch
bash pip install tensorflow
オーディオ
オーディオデータセットは、テキストデータセットと同様に読み込まれます。ただし、オーディオデータセットの前処理は少し異なります。トークナイザーの代わりに、feature extractorが必要です。また、使用している事前学習モデルのサンプリングレートに合わせるために、オーディオ入力のサンプリングレートをリサンプリングする必要がある場合があります。このクイックスタートでは、MInDS-14データセットをモデルの学習用に準備し、顧客が抱えている銀行の問題を分類します。
1. load_dataset() 関数に、データセット名、データセットの構成(すべてのデータセットに構成があるとは限りません)、およびデータセットの分割を指定して、MInDS-14 データセットを読み込みます。
>>> from datasets import load_dataset, Audio
>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")2. 次に、🤗 Transformers ライブラリから事前学習済みの Wav2Vec2 モデルと、それに対応する特徴量抽出器を読み込みます。モデルを読み込んだ後、一部の重みが初期化されていないという警告が表示されることがありますが、これは完全に正常です。別のタスクでの学習のためにこのモデルのチェックポイントを読み込んでいるため、このように表示されるのが想定されています。
>>> from transformers import AutoModelForAudioClassification, AutoFeatureExtractor
>>> model = AutoModelForAudioClassification.from_pretrained("facebook/wav2vec2-base")
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")3. MInDS-14 のデータセットカードにはサンプリングレートが 8kHz と記載されていますが、Wav2Vec2 モデルは 16kHz のサンプリングレートで事前学習されています。モデルのサンプリングレートに合わせるため、cast_column() 関数と Audio 特徴量を使用して audio 列をアップサンプリングする必要があります。
>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
>>> dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>4. 特徴抽出器で音声arrayを前処理し、シーケンスを切り詰めたりパディングしたりして、整った長方形のテンソルにする関数を作成します。最も重要なのは、array(実際の音声信号)がモデルの入力であるため、特徴抽出器に音声arrayを渡すことです。
前処理関数が用意できたら、map()関数を使用して、データセット内の例のバッチにその関数を適用することで処理を高速化します。
>>> def preprocess_function(examples):
... audio_arrays = [x.get_all_samples().data for x in examples["audio"]]
... inputs = feature_extractor(
... audio_arrays,
... sampling_rate=16000,
... padding=True,
... max_length=100000,
... truncation=True,
... )
... return inputs
>>> dataset = dataset.map(preprocess_function, batched=True)5. rename_column()関数を使用して、intent_class列をlabelsに名前変更します。labelsは、Wav2Vec2ForSequenceClassificationで期待される入力名です。
>>> dataset = dataset.rename_column("intent_class", "labels")6. 使用している機械学習フレームワークに合わせて、データセットの形式を設定します。
set_format()関数を使用して、データセットの形式をtorchに設定し、フォーマットしたい列を指定します。この関数は、オンザフライでフォーマットを適用します。PyTorchテンソルに変換した後、データセットをtorch.utils.data.DataLoaderでラップします:
>>> from torch.utils.data import DataLoader
>>> dataset.set_format(type="torch", columns=["input_values", "labels"])
>>> dataloader = DataLoader(dataset, batch_size=4)🤗 Transformers の prepare_tf_dataset メソッドを使用して、TensorFlow 互換のデータセットを準備し、モデルの学習/ファインチューニングに備えます。このメソッドは、HuggingFace の Dataset を、コラレーションとバッチングを備えた tf.data.Dataset としてラップするため、fit() などの Keras メソッドに追加の修正なしで直接渡すことができます。
>>> import tensorflow as tf
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )7. マシンラーニングフレームワークでトレーニングを開始しましょう!🤗 Transformers の 音声分類ガイド をご覧ください。音声データセットでモデルをトレーニングするエンドツーエンドの例が紹介されています。
ビジョン
画像データセットは、テキストデータセットと同様に読み込まれます。ただし、トークナイザーの代わりに、データセットの前処理にはfeature extractorが必要です。コンピュータビジョンでは、モデルの過学習に対する頑健性を高めるために、画像にデータ拡張を適用することが一般的です。お好みのデータ拡張ライブラリを使用し、その後、🤗 Datasets で拡張を適用できます。このクイックスタートでは、Beansデータセットを読み込み、葉の画像から病気を識別するためにモデルが学習できるよう準備します。
1. データセット名とデータセットの分割を指定して、load_dataset() 関数に渡すことで、Beans データセットを読み込みます:
>>> from datasets import load_dataset, Image
>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")ほとんどの画像モデルはRGB画像で動作します。データセットに異なるモードの画像が含まれている場合は、cast_column()関数を使用してモードをRGBに設定できます:
>>> dataset = dataset.cast_column("image", Image(mode="RGB"))BeansデータセットにはRGB画像のみが含まれているため、ここではこの手順は不要です。
2. 次に、お好みのライブラリ(Albumentations、imgaug、Kornia)でデータ拡張を追加できます。ここでは、torchvisionを使用して、画像の色特性をランダムに変更します。
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor
>>> jitter = Compose(
... [ColorJitter(brightness=0.5, hue=0.5), ToTensor()]
... )3. データセットにトランスフォームを適用し、モデルの入力pixel_valuesを生成する関数を作成します。
>>> def transforms(examples):
... examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
... return examples4. with_transform() 関数を使用して、データ拡張をオンザフライで適用します:
>>> dataset = dataset.with_transform(transforms)5. 使用している機械学習フレームワークに合わせて、データセットの形式を設定します。
torch.utils.data.DataLoaderでデータセットをラップします。また、サンプルをバッチにまとめるために、collate関数を作成する必要があります:
>>> from torch.utils.data import DataLoader
>>> def collate_fn(examples):
... images = []
... labels = []
... for example in examples:
... images.append((example["pixel_values"]))
... labels.append(example["labels"])
...
... pixel_values = torch.stack(images)
... labels = torch.tensor(labels)
... return {"pixel_values": pixel_values, "labels": labels}
>>> dataloader = DataLoader(dataset, collate_fn=collate_fn, batch_size=4)🤗 Transformers の prepare_tf_dataset メソッドを使用して、TensorFlow 互換のデータセットを準備し、モデルの学習/ファインチューニングに備えます。このメソッドは、HuggingFace の Dataset を、コラレーションとバッチングを備えた tf.data.Dataset としてラップするため、fit() などの Keras メソッドに追加の修正なしで直接渡すことができます。
開始する前に、albumentationsとcv2の最新バージョンがインストールされていることを確認してください。
pip install -U albumentations opencv-python
>>> import albumentations
>>> import numpy as np
>>> transform = albumentations.Compose([
... albumentations.RandomCrop(width=256, height=256),
... albumentations.HorizontalFlip(p=0.5),
... albumentations.RandomBrightnessContrast(p=0.2),
... ])
>>> def transforms(examples):
... examples["pixel_values"] = [
... transform(image=np.array(image))["image"] for image in examples["image"]
... ]
... return examples
>>> dataset.set_transform(transforms)
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )6. 機械学習フレームワークでトレーニングを開始しましょう!🤗 Transformers の 画像分類ガイド をご覧ください。画像データセットでモデルをトレーニングするエンドツーエンドの例が紹介されています。
NLP
テキストは、tokenizer によって個々のトークンにトークナイズする必要があります。クイックスタートでは、文のペアが同じ意味を持つかどうかを判定するモデルを訓練するために、Microsoft Research Paraphrase Corpus (MRPC) の訓練データセットを読み込みます。
1. load_dataset() 関数に、データセット名、データセットの構成(すべてのデータセットに構成があるとは限りません)、およびデータセットの分割を指定して、MRPC データセットを読み込みます:
>>> from datasets import load_dataset
>>> dataset = load_dataset("nyu-mll/glue", "mrpc", split="train")2. 次に、🤗 Transformers ライブラリから事前学習済みのBERTモデルと対応するトークナイザーを読み込みます。モデルを読み込んだ後、一部の重みが初期化されていないという警告が表示されることがありますが、これは完全に正常です。別のタスクでの学習のためにこのモデルのチェックポイントを読み込んでいるため、このように予想される動作です。
>>> from transformers import AutoModelForSequenceClassification, AutoTokenizer
>>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
>>> tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")3. データセットをトークナイズする関数を作成します。また、テキストを整った長方形のテンソルに切り詰め(truncate)およびパディング(pad)する必要があります。トークナイザーは、データセットにinput_ids、token_type_ids、attention_maskという3つの新しい列を生成します。これらはモデルの入力です。
map()関数を使用して、データセットの例のバッチにトークナイゼーション関数を適用することで、処理を高速化します:
>>> def encode(examples):
... return tokenizer(examples["sentence1"], examples["sentence2"], truncation=True, padding="max_length")
>>> dataset = dataset.map(encode, batched=True)
>>> dataset[0]
{'sentence1': 'Amrozi accused his brother , whom he called " the witness " , of deliberately distorting his evidence .',
'sentence2': 'Referring to him as only " the witness " , Amrozi accused his brother of deliberately distorting his evidence .',
'label': 1,
'idx': 0,
'input_ids': [ 101, 7277, 2180, 5303, 4806, 1117, 1711, 117, 2292, 1119, 1270, 107, 1103, 7737, 107, 117, 1104, 9938, 4267, 12223, 21811, 1117, 2554, 119, 102, 11336, 6732, 3384, 1106, 1140, 1112, 1178, 107, 1103, 7737, 107, 117, 7277, 2180, 5303, 4806, 1117, 1711, 1104, 9938, 4267, 12223, 21811, 1117, 2554, 119, 102, 0, 0, ...],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...]}4. label 列を labels に変更します。BertForSequenceClassification で期待される入力名です:
>>> dataset = dataset.map(lambda examples: {"labels": examples["label"]}, batched=True)5. 使用している機械学習フレームワークに合わせて、データセットの形式を設定します。
with_format() 関数を使用して、データセットのフォーマットを torch に設定し、フォーマット対象とする列を指定します。この関数は、オンザフライでフォーマットを適用します。PyTorch テンソルに変換した後、データセットを torch.utils.data.DataLoader でラップします:
>>> import torch
>>> dataset = dataset.select_columns(["input_ids", "token_type_ids", "attention_mask", "labels"])
>>> dataset = dataset.with_format(type="torch")
>>> dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)🤗 Transformers の prepare_tf_dataset メソッドを使用して、TensorFlow 互換のデータセットを準備し、モデルの学習/ファインチューニングに備えます。このメソッドは、HuggingFace の Dataset を、コラレーションとバッチングを備えた tf.data.Dataset としてラップするため、fit() などの Keras メソッドに追加の修正なしで直接渡すことができます。
>>> import tensorflow as tf
>>> tf_dataset = model.prepare_tf_dataset(
... dataset,
... batch_size=4,
... shuffle=True,
... )6. 機械学習フレームワークでトレーニングを開始しましょう!テキストデータセットでモデルをトレーニングする方法のエンドツーエンドの例については、🤗 Transformers のテキスト分類ガイドをご覧ください。
次に何をするか?
これで🤗 Datasetsのクイックスタートは完了です。テキスト、音声、画像のいずれのデータセットも、単一の関数で読み込み、モデルの学習にすぐに使える状態にできます。
For your next steps, take a look at our How-to guides and learn how to do more specific things like loading different dataset formats, aligning labels, and streaming large datasets. If you’re interested in learning more about 🤗 Datasets core concepts, grab a cup of coffee and read our Conceptual Guides!
Update on GitHub