Datasets documentation
読み込み
読み込み
データはさまざまな場所に保存できます。ローカルマシンのディスク、Githubリポジトリ、Pythonの辞書やPandasのDataFrameなどのメモリ内データ構造などです。データセットがどこに保存されていても、🤗 Datasetsはその読み込みを支援します。
このガイドでは、データセットを読み込む方法を次のソースから示します:
- Hugging Face Hub
- ローカルファイル
- メモリ内データ
- オフライン
- 分割された特定のスライス
他のデータセットのモダリティの読み込みに関する詳細については、オーディオデータセットの読み込みガイド、画像データセットの読み込みガイド、動画データセットの読み込みガイド、メッシュデータセットの読み込みガイド、テキストデータセットの読み込みガイド、またはエージェント評価タスクの読み込みガイドをご覧ください。
Hugging Face Hub
Hub上の任意のデータセットリポジトリからデータセットを読み込むこともできます。データセットリポジトリを作成し、データファイルをアップロードしてください。これで、load_dataset()関数を使用してデータセットを読み込むことができます。
例えば、リポジトリのネームスペースとデータセット名を指定して、このデモリポジトリからファイルを読み込んでみてください。このデータセットリポジトリにはCSVファイルが含まれており、以下のコードはCSVファイルからデータセットを読み込みます:
>>> from datasets import load_dataset
>>> dataset = load_dataset("lhoestq/demo1")一部のデータセットは、Git のタグ、ブランチ、コミットに基づいて複数のバージョンを持つ場合があります。読み込みたいデータセットのバージョンを指定するには、revision パラメータを使用します:
>>> dataset = load_dataset(
... "lhoestq/custom_squad",
... revision="main" # tag name, or branch name, or commit hash
... )Hubにデータセットリポジトリを作成し、データファイルをアップロードする方法の詳細については、Hubにデータセットをアップロードするチュートリアルを参照してください。
データセットはデフォルトで、すべてのデータをtrainスプリットに読み込みます。または、データファイル名内の言及やスプリット名(例: “train”、“test”、“validation”)を確認します。data_filesパラメータを使用して、train、validation、testなどのスプリットにデータファイルをマッピングできます:
>>> data_files = {"train": "train.csv", "test": "test.csv"}
>>> dataset = load_dataset("namespace/your_dataset_name", data_files=data_files)使用するデータファイルを指定しない場合、load_dataset()はすべてのデータファイルを返します。C4のように約13TBのデータを含む大規模なデータセットを読み込む場合、これには長い時間がかかる可能性があります。
data_files または data_dir パラメータを使用して、ファイルの特定のサブセットを読み込むこともできます。これらのパラメータは、相対パスを受け入れることができ、これはデータセットの読み込み元に対応するベースパスに解決されます。
>>> from datasets import load_dataset
# load files that match the grep pattern
>>> c4_subset = load_dataset("allenai/c4", data_files="en/c4-train.0000*-of-01024.json.gz")
# load dataset from the en directory on the Hub
>>> c4_subset = load_dataset("allenai/c4", data_dir="en")split パラメータは、データファイルを特定の分割にマッピングすることもできます:
>>> data_files = {"validation": "en/c4-validation.*.json.gz"}
>>> c4_validation = load_dataset("allenai/c4", data_files=data_files, split="validation")ローカルファイルとリモートファイル
Datasetsは、コンピューターに保存されたローカルファイルやリモートファイルから読み込むことができます。データセットは、csv、json、txt、parquet、またはtsfileファイルとして保存されている可能性が高いです。load_dataset()関数は、これらのファイル形式のそれぞれを読み込むことができます。
CSV
🤗 Datasets は、1 つ以上の CSV ファイルで構成されたデータセットを読み取ることができます(この場合、CSV ファイルをリストとして渡します):
>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")詳細については、CSVファイルからタブラーデータセットを読み込む方法のガイドをご覧ください。
JSON
JSONファイルは、以下に示すようにload_dataset()で直接読み込まれます:
>>> from datasets import load_dataset
>>> dataset = load_dataset("json", data_files="my_file.json")JSONファイルには多様な形式がありますが、最も効率的な形式は、複数のJSONオブジェクトを保持し、各行がデータの個別の行を表す形式だと考えています。例:
{"a": 1, "b": 2.0, "c": "foo", "d": false}
{"a": 4, "b": -5.5, "c": null, "d": true}もう一つのJSON形式として、ネストされたフィールドがあります。この場合、以下に示すようにfield引数を指定する必要があります。
{"version": "0.1.0",
"data": [{"a": 1, "b": 2.0, "c": "foo", "d": false},
{"a": 4, "b": -5.5, "c": null, "d": true}]
}
>>> from datasets import load_dataset
>>> dataset = load_dataset("json", data_files="my_file.json", field="data")HTTP経由でリモートのJSONファイルを読み込むには、代わりにURLを渡します:
>>> base_url = "https://rajpurkar.github.io/SQuAD-explorer/dataset/"
>>> dataset = load_dataset("json", data_files={"train": base_url + "train-v1.1.json", "validation": base_url + "dev-v1.1.json"}, field="data")これらは最も一般的なJSON形式ですが、異なる形式でフォーマットされた他のデータセットも存在します。🤗 Datasetsはこれらの他の形式を認識し、それらを処理するためにPythonのJSON読み込みメソッドにフォールバックします。
Parquet
Parquetファイルは、CSVなどの行ベースのファイルとは異なり、カラム形式で保存されます。大規模なデータセットは、クエリをより効率的かつ高速に返すことができるため、Parquetファイルに保存されることがあります。
Parquetファイルを読み込むには:
>>> from datasets import load_dataset
>>> dataset = load_dataset("parquet", data_files={'train': 'train.parquet', 'test': 'test.parquet'})HTTP経由でリモートのParquetファイルを読み込むには、代わりにURLを渡します:
>>> base_url = "https://huggingface.co/datasets/wikimedia/wikipedia/resolve/main/20231101.ab/"
>>> data_files = {"train": base_url + "train-00000-of-00001.parquet"}
>>> wiki = load_dataset("parquet", data_files=data_files, split="train")Arrow
Arrowファイルは、CSVのような行ベースの形式や、Parquetのような非圧縮形式とは異なり、メモリ内カラム形式で保存されます。
Arrowファイルを読み込むには:
>>> from datasets import load_dataset
>>> dataset = load_dataset("arrow", data_files={'train': 'train.arrow', 'test': 'test.arrow'})HTTP経由でリモートのArrowファイルを読み込むには、代わりにURLを渡します:
>>> base_url = "https://huggingface.co/datasets/croissantllm/croissant_dataset/resolve/main/english_660B_11/"
>>> data_files = {"train": base_url + "train/data-00000-of-00080.arrow"}
>>> wiki = load_dataset("arrow", data_files=data_files, split="train")Arrow is the file format used by 🤗 Datasets under the hood, therefore you can load a local Arrow file using Dataset.from_file() directly:
>>> from datasets import Dataset
>>> dataset = Dataset.from_file("data.arrow")load_dataset() とは異なり、Dataset.from_file() はキャッシュにデータセットを準備せずに Arrow ファイルをメモリマップし、ディスク容量を節約します。 その場合、中間処理結果を保存するキャッシュディレクトリは、Arrow ファイルのディレクトリになります。
現時点では、Arrowストリーミング形式のみがサポートされています。Arrow IPCファイル形式(Feather V2としても知られています)はサポートされていません。
Lance
Lanceは、AI向けのオープンなマルチモーダル・レイクハウス・テーブル形式です。Lanceテーブルは、テキストやスカラー値だけでなく、画像、音声、動画などの大きなバイナリオブジェクト(blob)も、タブラーデータと並んでネイティブに保存できます。
>>> from datasets import load_dataset
>>> lance_base_url = "lance-format/laion-1m"ローカルマシンにコピーせずにデータセットをストリーミングするには、streaming=Trueパラメータを指定します。
ds = load_dataset(lance_base_url, split="train", streaming=True)
# Take first three rows
for row in ds.take(3):
print(row["caption"], row["image"])これにより、1回のリクエストで画像キャプションと画像バイトを返します。
Vortex
Vortexは、圧縮データに対する高速スキャンのために構築されたカラムナファイル形式です。pip install vortex-dataでインストールし、.vortexファイルは他のパッケージ化された形式と同様に読み込むことができます。
>>> from datasets import load_dataset
>>> dataset = load_dataset("vortex", data_files="data.vortex", split="train")カラムとフィルタは Vortex スキャンにプッシュダウンされるため、要求された行とカラムのみが読み取られます。ストリーミング中にもこの仕組みが機能するため、Hub 上のデータセットをフィルタリングする際に、条件に一致しない部分をダウンロードせずに済みます。
>>> filters = [("label", "==", 1)]
>>> dataset = load_dataset(vortex_dataset_id, columns=["text", "label"], filters=filters, streaming=True, split="train")FiltersはParquetローダーと同じ析取法標準形(disjunctive normal form)を採用します。(column, operator, value)の述語のリストは合取(conjunction)を表し、そのリストのリストは析取(disjunction)を表します。NullはSQLのセマンティクスに従います。Nullは比較を満足しないため、フィルタ対象の列がNullである行は、not inを含むすべてのケースで返されません。この形式では表現できないものについては、代わりにVortex式を渡します。
>>> import vortex.expr as ve
>>> dataset = load_dataset(vortex_dataset_id, filters=ve.column("score") >= 0.5, split="train")Vortex は fsspec を介さずファイルを開くため、data_files はローカルパス、Hub のデータセット、および Vortex がネイティブで読み取れるリモートロケーション(HTTP および一般的なオブジェクトストレージ)を指すことができますが、アーカイブ内(zip://...)や fsspec 専用のプロトコルには対応していません。
HDF5ファイル
HDF5ファイルは、科学計算や機械学習において大量の数値データを保存するために広く使用されています。🤗 DatasetsでHDF5ファイルを読み込む方法は、CSVファイルを読み込む方法と似ています。
>>> from datasets import load_dataset
>>> dataset = load_dataset("hdf5", data_files="data.h5")HDF5ローダーは、ファイルが「表形式」の構造、つまりファイル内のすべてのデータセットが最初の次元に(同じ数の)行を持つことを前提としています。
TsFile
TsFileは時系列データ向けに設計されたカラムナファイル形式であり、Apache IoTDBのネイティブなストレージ層として使用されます。タイムスタンプ、デバイスタグ、測定フィールドをネイティブで表現し、効率的な時間範囲のプルーニングを可能にする内部の時間インデックスを維持します。
結果のデータセットの各行は1つのdevice(TAG列で識別される)に対応し、time列およびすべてのFIELD列は、昇順に並べられたそのデバイスの完全な時系列を含むリスト列です。
TsFileを読み込むには:
>>> from datasets import load_dataset
>>> dataset = load_dataset("tsfile", data_files="my_data.tsfile")時間範囲でフィルタリング — 境界値はTsFileの内部時間インデックスにプッシュダウンされ、int型のエポック、datetime、date、ISO-8601文字列、またはpyarrowのタイムスタンスカラーを受け入れます:
>>> from datetime import datetime
>>> dataset = load_dataset(
... "tsfile",
... data_files="my_data.tsfile",
... start_time=datetime(2023, 11, 14),
... end_time=datetime(2023, 11, 15),
... )詳細については、TsFileデータの読み込み方法ガイドをご覧ください。
Harbor
Harborデータセットは、AIエージェントを評価するために使用されるタスクのコレクションです。
データファイルではなくディレクトリで構成されており、各タスクはtask.toml設定ファイルとinstruction.mdファイル、およびその環境、検証器、ソリューションを含むディレクトリです。
結果として得られるデータセットの各行は、1つのタスク(その指示、task.toml、同梱されるファイル)を記述しており、読み込み時に何も実行されません。
>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench")
>>> dataset["train"][0]["task_id"]
'tasks/atrx-vep-crispr'詳細については、エージェント評価タスクの読み込み方法ガイドをご覧ください。
PDB
PDB(Protein Data Bank)は、3次元マクロ分子構造を表すためのレガシーな固定幅形式です。mmCIFが現代的な標準規格である一方で、PDBは依然として広く使用されており、多くの歴史的なデータセットがこの形式で保存されています。
各行は1つの構造ファイルに対応し、ImageFolderと同じフォルダ構成に従います。サブフォルダ名がラベルとなり、metadata.csv/metadata.jsonlファイルが構造ごとのメタデータを追加します。structure列はformat="pdb"を指定したBioStructureを使用し、ファイル内のモデル、チェーン、残基、原子を含むBio.PDB.Structure.Structureオブジェクトにデコードされます。デコードにはbiopythonが必要です。インストールされていない場合、デコードされた構造にアクセスするとImportErrorが発生します。
ディレクトリからPDBファイルを読み込むには:
>>> from datasets import BioStructure, load_dataset
>>> dataset = load_dataset("pdb", data_dir="path/to/structures")
>>> dataset["train"].features["structure"]
BioStructure(format='pdb', decode=True)デコードを行わず、biopythonを必要とせずに、基盤となる{"bytes": ..., "path": ...}辞書にアクセスするには、decode=Falseでカラムをキャストします:
>>> dataset = dataset.cast_column("structure", BioStructure(format="pdb", decode=False)).pdbおよび.entの拡張子がサポートされています。
SQL
データベースへの接続URIを指定して、from_sql()でデータベースの内容を読み取ります。テーブル名とクエリの両方を読み取ることができます:
>>> from datasets import Dataset
# load entire table
>>> dataset = Dataset.from_sql("data_table_name", con="sqlite:///sqlite_file.db")
# load from query
>>> dataset = Dataset.from_sql("SELECT text FROM table WHERE length(text) > 100 LIMIT 10", con="sqlite:///sqlite_file.db")詳細については、SQLデータベースからタブラーデータセットを読み込む方法のガイドをご覧ください。
WebDataset
WebDataset形式はTARアーカイブをベースとしており、大規模な画像データセットに適しています。
そのサイズのため、WebDatasetは一般的にストリーミングモード(streaming=Trueを使用)で読み込まれます。
WebDatasetは次のように読み込むことができます。
>>> from datasets import load_dataset
>>>
>>> path = "path/to/train/*.tar"
>>> dataset = load_dataset("webdataset", data_files={"train": path}, split="train", streaming=True)HTTP経由でリモートのWebDatasetsを読み込むには、代わりにURLを渡します:
>>> from datasets import load_dataset
>>>
>>> base_url = "https://huggingface.co/datasets/lhoestq/small-publaynet-wds/resolve/main/publaynet-train-{i:06d}.tar"
>>> urls = [base_url.format(i=i) for i in range(4)]
>>> dataset = load_dataset("webdataset", data_files={"train": urls}, split="train", streaming=True)mmCIF
mmCIF(macromolecular Crystallographic Information File)は、3次元的な高分子構造を表現するための最新の標準形式であり、2014年以降、Protein Data Bank(PDB)で使用されています。
各行は1つの構造ファイルに対応し、ImageFolderと同じフォルダ構成に従います。サブフォルダ名がラベルとなり、metadata.csv/metadata.jsonlファイルが構造ごとのメタデータを追加します。structure列はformat="mmcif"を指定したBioStructureを使用し、ファイル内のモデル、チェーン、残基、原子を含むBio.PDB.Structure.Structureオブジェクトにデコードされます。デコードにはbiopythonが必要です。インストールされていない場合、デコードされた構造にアクセスするとImportErrorが発生します。
ディレクトリからmmCIFファイルを読み込むには:
>>> from datasets import BioStructure, load_dataset
>>> dataset = load_dataset("mmcif", data_dir="path/to/structures")
>>> dataset["train"].features["structure"]
BioStructure(format='mmcif', decode=True)デコードを行わず、biopythonを必要とせずに、基盤となる{"bytes": ..., "path": ...}辞書にアクセスするには、decode=Falseでカラムをキャストします:
>>> dataset = dataset.cast_column("structure", BioStructure(format="mmcif", decode=False)).cifおよび.mmcifの拡張子がサポートされています。
GenBank
GenBank は、NCBI によるヌクレオチド配列およびタンパク質配列と、それらのアノテーションを含むテキストベースの形式です。ファイルには .gb、.gbk、または .genbank の拡張子(任意で圧縮可)が使用され、各レコードの FEATURES セクションは構造化オブジェクトとしてデコードされます。
軽量な解析済みカラムに加えて、各行にはrecordカラムが含まれており、その型はBioSequence(format="genbank")です。biopythonがインストールされている場合、これはBio.SeqRecord.SeqRecordとしてデコードされます。元のレコードのバイト列を{"bytes": ..., "path": None}としてアクセスするには、このカラムをBioSequence(format="genbank", decode=False)にキャストしてください。または、biopythonを使わずに解析済みカラムのみを使用するには、columns=[...]でこのカラムを省略してください。
GenBankファイルを読み込むには:
>>> from datasets import load_dataset
>>> dataset = load_dataset("genbank", data_files="*.gb", split="train")実際のNCBIレコードからなる小さなサンプルデータセットで試すことができます(そのうち1つはgzip圧縮されており、圧縮ファイルが透過的に読み込まれることを示しています):
>>> from datasets import load_dataset
>>> dataset = load_dataset("ermiaazarkhalili/datasets-genbank-test", data_files="*.gb*", split="train")
>>> dataset[0]["locus_name"], dataset[0]["organism"], dataset[0]["length"]FASTQ
FASTQ は、ヌクレオチド配列とその品質スコアを保存するためのテキストベースの形式であり、高スループットシーケンシングデータに広く使用されています。
FASTQファイルを読み込む:
>>> from datasets import load_dataset
>>> dataset = load_dataset("fastq", data_files="reads.fq")ローダーは5つのカラムを返します:
| カラム | 型 | 説明 |
|---|---|---|
id | string | シーケンス識別子(@の直後の最初の単語) |
description | string | 完全な説明行(id の後のすべて) |
sequence | large_string | ヌクレオチド配列 |
quality | large_string | ASCIIエンコードされた品質スコア |
record | BioSequence | format="fastq" を指定すると、各レコードの元のバイト列を保存し、アクセス時に Biopython の SeqRecord にデコードして格納します。 |
パースされたカラムの読み取りには Biopython は不要です。record を columns で除外するか、dataset.cast_column("record", BioSequence(decode=False))(datasets からインポート)を使用して、デコードせずにその {"bytes": ..., "path": None} ストレージにアクセスできます。
特定の列のみを読み込む:
>>> dataset = load_dataset("fastq", data_files="reads.fq", columns=["sequence", "quality"])圧縮ファイル(.fq.gz、.fastq.gz、.fq.bz2、.fq.xz)は自動的に検出され、展開されます。
FASTA
FASTA は、ヌクレオチド配列(DNA/RNA)やペプチド配列(タンパク質)を表現するためのテキストベースの形式であり、バイオインフォマティクスで広く使用されています。
FASTAファイルを読み込むには:
>>> from datasets import load_dataset
>>> dataset = load_dataset("fasta", data_files="sequences.fasta")これにより、以下のカラムを持つデータセットが返されます:
id: シーケンス識別子(>の後の最初の単語)description: 完全な説明行(id の後のすべて)sequence: 生物学的配列(DNA/RNA/タンパク質)record:format="fasta"を指定した BioSequence で、各レコードの元のバイト列を保存し、アクセス時に Biopython のSeqRecordとしてデコードされます。
パースされたカラムの読み取りには Biopython は不要です。record を columns で除外するか、dataset.cast_column("record", BioSequence(decode=False))(datasets からインポート)を使用して、デコードせずにその {"bytes": ..., "path": None} ストレージにアクセスできます。
特定の列のみを読み込むこともできます:
>>> dataset = load_dataset("fasta", data_files="sequences.fa", columns=["id", "sequence"])拡張子が異なるFASTAファイルがサポートされています: .fa、.fasta、.fna(核酸)、.ffn(遺伝子領域のヌクレオチド)、.faa(アミノ酸)、および.frn(非コードRNA)。圧縮ファイル(gzip、bzip2、xz)は自動的に検出され、展開されます。
リモートファイル
csv、json、txt、parquet などのサポートされている形式で保存されているリモートファイルがある場合、リモートパスを指定することで、load_dataset() 関数を使用して読み込むことができます。
https://は、公開されているオンラインファイルの URL に使用します。例:data_files=["https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json"]- Hugging Face 上の任意の Dataset リポジトリ または Storage Bucket 内のファイルには、
hf://URL を使用します。例:data_files=["hf://datasets/karpathy/tinystories-gpt4-clean/tinystories_gpt4_clean.parquet"]またはdata_files=["hf://buckets/julien-c/my-training-bucket/julien/affluence.csv"]
マルチプロセッシング
データセットが複数のファイル(「シャード」と呼ばれるもの)で構成されている場合、データセットのダウンロードと準備のステップを大幅に高速化することが可能です。
num_proc を使用して、データセットを並列で準備するために使用するプロセス数を指定できます。
この場合、各プロセスには準備するシャードのサブセットが割り当てられます:
from datasets import load_dataset
imagenet = load_dataset("timm/imagenet-1k-wds", num_proc=8)
ml_librispeech_spanish = load_dataset("facebook/multilingual_librispeech", "spanish", num_proc=8)メモリ内データ
🤗 Datasetsでは、Pythonの辞書やPandasのDataFrameなどのメモリ内のデータ構造から直接Datasetを作成することもできます。
Python辞書
Pythonの辞書をfrom_dict()で読み込みます:
>>> from datasets import Dataset
>>> my_dict = {"a": [1, 2, 3]}
>>> dataset = Dataset.from_dict(my_dict)Pythonの辞書のリスト
Pythonの辞書のリストをfrom_list()で読み込みます:
>>> from datasets import Dataset
>>> my_list = [{"a": 1}, {"a": 2}, {"a": 3}]
>>> dataset = Dataset.from_list(my_list)Pythonジェネレーター
Pythonのジェネレーターからfrom_generator()を使ってデータセットを作成します:
>>> from datasets import Dataset
>>> def my_gen():
... for i in range(1, 4):
... yield {"a": i}
...
>>> dataset = Dataset.from_generator(my_gen)このアプローチは、利用可能なメモリよりも大きいデータの読み込みをサポートします。
gen_kwargs にリストを渡すことで、シャード化されたデータセットを定義することもできます。
>>> def gen(shards):
... for shard in shards:
... with open(shard) as f:
... for line in f:
... yield {"line": line}
...
>>> shards = [f"data{i}.txt" for i in range(32)]
>>> ds = IterableDataset.from_generator(gen, gen_kwargs={"shards": shards})
>>> ds = ds.shuffle(seed=42, buffer_size=10_000) # shuffles the shards order + uses a shuffle buffer
>>> from torch.utils.data import DataLoader
>>> dataloader = DataLoader(ds.with_format("torch"), num_workers=4) # give each worker a subset of 32/4=8 shardsPandas DataFrame
from_pandas()でPandasのDataFrameを読み込みます:
>>> from datasets import Dataset
>>> import pandas as pd
>>> df = pd.DataFrame({"a": [1, 2, 3]})
>>> dataset = Dataset.from_pandas(df)詳細については、PandasのDataFrameからタブラーデータセットを読み込む方法のガイドをご覧ください。
オフライン
インターネット接続がなくても、データセットを読み込むことは可能です。以前に Hub リポジトリからデータセットをダウンロードしていれば、キャッシュされているはずです。つまり、キャッシュからデータセットを再読み込みして、オフラインで使用できます。
インターネットにアクセスできないことがわかっている場合は、🤗 Datasets を完全なオフラインモードで実行できます。これにより、Dataset builder のダウンロードがタイムアウトするのを待つ代わりに、🤗 Datasets が直接キャッシュを参照するため、時間を節約できます。完全なオフラインモードを有効にするには、環境変数 HF_HUB_OFFLINE を 1 に設定してください。
Sliceの分割
特定の分割のスライスのみをロードするように選択することもできます。分割をスライスするには2つのオプションがあります。文字列を使用するか、ReadInstruction APIを使用するかです。単純なケースでは文字列の方がコンパクトで読みやすく、ReadInstructionは可変のスライシングパラメータとの組み合わせで使いやすくなります。
trainとtestの分割を以下のように連結します:
>>> train_test_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train+test")trainスプリットから特定の行を選択します:
>>> train_10_20_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[10:20]")または、…でスプリットの割合を選択します:
>>> train_10pct_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[:10%]")各スプリットからパーセンテージの組み合わせを選択します:
>>> train_10_80pct_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[:10%]+train[-80%:]")最後に、交差検証用のスプリットを作成することもできます。以下の例では、10分割交差検証のスプリットを作成しています。各検証データセットは10%のチャンクであり、トレーニングデータセットは残りの補完的な90%のチャンクを構成します。
>>> val_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=[f"train[{k}%:{k+10}%]" for k in range(0, 100, 10)])
>>> train_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=[f"train[:{k}%]+train[{k+10}%:]" for k in range(0, 100, 10)])パーセンテージによるスライシングと丸め
デフォルトの動作は、要求されたスライスの境界が100で割り切れないデータセットの場合、境界を最も近い整数に丸めることです。以下に示すように、スライスによって含まれるサンプル数が異なる場合があります。例えば、以下のtrainスプリットが999件のレコードを含む場合:
# 19 records, from 500 (included) to 519 (excluded).
>>> train_50_52_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[50%:52%]")
# 20 records, from 519 (included) to 539 (excluded).
>>> train_52_54_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[52%:54%]")等しいサイズの分割を希望する場合は、代わりにpct1_dropremainderの丸めを使用してください。これにより、指定されたパーセンテージの境界が1%の倍数として扱われます。
# 18 records, from 450 (included) to 468 (excluded).
>>> train_50_52pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=datasets.ReadInstruction("train", from_=50, to=52, unit="%", rounding="pct1_dropremainder"))
# 18 records, from 468 (included) to 486 (excluded).
>>> train_52_54pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=datasets.ReadInstruction("train",from_=52, to=54, unit="%", rounding="pct1_dropremainder"))
# Or equivalently:
>>> train_50_52pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[50%:52%](pct1_dropremainder)")
>>> train_52_54pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[52%:54%](pct1_dropremainder)")
pct1_dropremainderの丸め処理では、データセットのサンプル数が 100 で割り切れない場合、最後のサンプルが切り捨てられる可能性があります。
トラブルシューティング
データセットを読み込む際に、予期しない結果が得られることがあります。遭遇する可能性が高い2つの一般的な問題は、データセットを手動でダウンロードすることと、データセットの機能(features)を指定することです。
機能の指定
ローカルファイルからデータセットを作成すると、FeaturesはApache Arrowによって自動的に推論されます。ただし、データセットのフィーチャーが期待通りにならない場合や、フィーチャーを自分で定義したい場合があります。次の例では、ClassLabelフィーチャーを使用してカスタムラベルを追加する方法を示します。
Features クラスで独自のラベルを定義することから始めます:
>>> class_names = ["sadness", "joy", "love", "anger", "fear", "surprise"]
>>> emotion_features = Features({'text': Value('string'), 'label': ClassLabel(names=class_names)})次に、load_dataset()のfeaturesパラメータに、先ほど作成したfeaturesを指定します:
>>> dataset = load_dataset('csv', data_files=file_dict, delimiter=';', column_names=['text', 'label'], features=emotion_features)Now when you look at your dataset features, you can see it uses the custom labels you defined:
>>> dataset['train'].features
{'text': Value('string'),
'label': ClassLabel(names=['sadness', 'joy', 'love', 'anger', 'fear', 'surprise'])}