
HuggingFaceのdatasetsライブラリーについて
HuggingFaceのdatasetsライブラリーについての記事になります。
datasetライブラリーの便利なメソッドをご紹介します。
目次から辞書代わりに使ってください。
datasetsライブラリーは、
自然言語処理や大規模言語モデル開発において非常に重宝します!
まずは、datasetsライブラリーをインストールします。
!pip install datasets
目次は以下の通り。
データセットを読み込む:load_dataset()
HuggingFaceのデータセットだけでなく、
ローカルのデータセット(JSONやCSV)も読み込むことができます!
HuggingFaceのデータセットを読み込む場合
第一引数に、HuggingFaceのデータセット名を入れます。
from datasets import load_dataset
dataset = load_dataset("kunishou/databricks-dolly-15k-ja")
ローカルのデータセット(JSONファイルなど)を読み込む場合
第一引数にファイルソース、data_filesにデータセットのパスを入れます。
dataset = load_dataset("json",data_files="/content/dolly-ja.json",split="train)
load_dataset()の引数について

❶path(必須):
読み込みたいHugging Face Hub 上のデータセット名や、データセットのソース("json","csv"など)を指定します。
❷data_files(オプション):
ローカルに保存しているカスタムデータセットをロードする場合、そのファイルのパスを指定します。
❸split(オプション)
読み込みたいデータの分割(例: "train", "test", "validation")。
分割を指定しない場合、デフォルトで全体をロードします。
データセットのデータ構造について
datasetを実行すると以下が出力されます。
これはデータセットのデータ構造です。
split引数を使う場合と使わなかった場合で出力が異なります。

❶features:
データの特徴量(カラム)です。
このデータセットにはoutput, input, index, category, instructionがあります。
❷num_rows:
データの件数です。このデータセットは全部で15,015のデータがあります。
load_datasetでsplit引数を使っていないので、
データセット全体がロードされています。
最初がDatasetDictで始まるのは、
これがデータセット全体であることを示しています。
DatasetDictの中に、trainデータとしてDatasetが格納されています。
DatasetDict: 複数のデータ分割(例: train, test)を含む辞書形式。
Dataset: 指定した分割(例: train のみ)の辞書形式。
split="train"を入力すると、train部分だけがロードされます。

個別のデータにアクセスしたい場合は、
辞書オブジェクトと同じように扱えばOKです。
#1つめのデータにアクセスする
dataset["train"][0]
#1つめのデータのoutputの中身にアクセスする
dataset["train"][0]["output"]
カラム名の取得:column_names
データセット内のカラム名を取得します。
dataset.column_names
出力結果
{'train': ['output', 'input', 'index', 'category', 'instruction']}
カラム名の変更:rename_column()
引数に、("変更前のカラム名", "変更後のカラム名")を入力することで、カラム名を変更できます
renamed_dataset = dataset.rename_column("input","context")
renamed_dataset
出力結果
DatasetDict({
train: Dataset({
features: ['output', 'context', 'index', 'category', 'instruction'],
num_rows: 15015
})
})
データ変換する:to_pandas()、to_json()
pandasのデータフレームへ変換:to_pandas()
import pandas as pd
df = dataset.to_pandas()
df.head()
出力結果

jsonデータへの変換:to_json()
import json
dataset.to_json("/content/dolly.json", orient="records", force_ascii=False)
orient="records" (デフォルトは"records")。 データを行ごとに分ける形式であり、ほとんどのアプリケーションで読み込みが簡単になる。force_ascii=False (デフォルトはTrue)。 日本語などの非 ASCII 文字を扱う場合は、Falseを推奨。
データセットをローカルに保存:save_to_disk()
引数に保存したいパスを指定します。
dataset.save_to_disk("path/to/directory")
ローカルに保存したデータセットを読み込む:load_from_disk()
引数にローカル保存先を指定します。
from datasets import load_from_disk
dataset = load_from_disk("path/to/directory")
カラムに関数を適用:map()
特徴量の生成
例: テキストの文字数を新しい列として追加
def add_length_feature(example):
example["text_length"] = len(example["text"])
return example
dataset = dataset.map(add_length_feature)
dataset
複数のカラムを統合
例: first_name と last_name を結合して full_name を作成
def combine_columns(example):
example["full_name"] = f"{example['first_name']} {example['last_name']}"
return example
dataset = dataset.map(combine_columns)
dataset
条件に合う行を抽出:filter()
dataset = dataset.filter(lambda x: x["category"] == "closed_qa")
dataset
datasetをtrainとtestに分割:train_test_split()
sizeを調整することでランダムにサンプリングできる。
dataset = dataset.train_test_split(train_size=0.2)["train"]
dataset
(さいご)複数のdatasetを統合する:concatenate_datasets()
2つのdatasetをロードする
dataset1 = load_dataset("llm-jp/oasst1-21k-en",split="train")
dataset2 = load_dataset("llm-jp/oasst1-21k-ja",split="train")
dataset1
出力結果〜dataset1とdataset2は同じカラムです。
Dataset({
features: ['conversations'],
num_rows: 21164
})
dataset1とdataset2を統合
同じカラムだと簡単に統合できます。
from datasets import concatenate_datasets
dataset3 = concatenate_datasets([dataset1, dataset2])
dataset3
出力結果
Dataset({
features: ['conversations'],
num_rows: 42328
})
別のdataset4をロードする。これをdataset3と統合します。
dataset4 = load_dataset("databricks/databricks-dolly-15k",split="train")
dataset4
出力結果〜dataset3とは異なるカラムです。
Dataset({
features: ['instruction', 'context', 'response', 'category'],
num_rows: 15011
})
dataset3とdataset4を統合する
ポイントはカラムを統一することです。map()でカラムをあわせます。
# 必要なカラムを統一
dataset3 = dataset3.map(lambda x: {
'instruction': None,
'context': None,
'response': None,
'category': None,
'conversations': x['conversations']
})
dataset4 = dataset4.map(lambda x: {
'instruction': x['instruction'],
'context': x['context'],
'response': x['response'],
'category': x['category'],
'conversations': None
})
# 2つのデータセットを結合
combined_dataset = concatenate_datasets([dataset3, dataset4])
combined_dataset
出力結果
Dataset({
features: ['conversations', 'instruction', 'context', 'response', 'category'],
num_rows: 57339
})
いいなと思ったら応援しよう!
