0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Huggingfaceデータ処理

Last updated at Posted at 2025-03-30

はじめに

Huggingfaceにいる機械学習のマルチモーダルデータセット(画像、動画、オーディオ)は大体サイズが大きいし、数も多い。全部ダウンロードするとしんどいし、時間かかります。そこで、自分のノートのため、Huggingfaceからデータセットをダウンロードするや処理をまとめます。

今回の記事で、例としてオーディオデータセットを保存します。オーディオデータを保存するためにはsoundfileライブラリーが必要となります。まず必要ライブラリーをインストールします。

pip install datasets soundfile

datasetsはHuggingfaceのデータセットをアクセスできるようになるため必要なライブラリーです。

データセットのロード

今回の記事では以下の「原神インパクト」キャラ音声データセットをサンプルとして使います。
https://huggingface.co/datasets/simon3000/genshin-voice

load_ds.py
from datasets import load_dataset
dataset = load_dataset('simon3000/genshin-voice', split='train', streaming=True)

これでデータセットのロードを完了しました。
このデータセットは約228GBの大きさで、すべてをダウンロードするとしんどいです。
そこで、部分的だけをダウウンロードするかにします。

フィルター

まずはフィルターを使用します。
フィルターのフォーマットが以下とないります。

# filter(lambda x: x[キー]の条件)
dataset.filter(lambda x: x["language"] == "English")
dataset.filter(lambda x: x["speaker"] == "Klee")

「キー」の条件アイテムはデータセットのページのData Studioで確認できます。
image.png

今回の例でオーディオの言語を英語と日本語をせっていし、テキストやトランスクリプトありオーディオだけをフィルターします。

load_ds.py
from datasets import load_dataset
dataset = load_dataset('simon3000/genshin-voice', split='train', streaming=True)
voiceDS = dataset.filter(lambda voice: voice["language"] in ["English(US)", "Japanese"] 
                        and voice['speaker_type'] == 'TALK_ROLE_NPC'
                        and voice['transcription'] != '')

サブサンプル

またすべてのデータをありのままでいくつかのサンプルを取ることも可能です。以下のスクリプトで1000 Rowのデータを回収します。

load_ds.py
from datasets import load_dataset
dataset = load_dataset('simon3000/genshin-voice', split='train', streaming=True)
voiceDS = dataset.take(1000) # dataset.take(データの数)

まとめてデータ保存

上のスクリプトをまとめて、回収データをローカルで保存します。

load_ds.py

######################################## (1) データセットロード
from datasets import load_dataset
dataset = load_dataset('simon3000/genshin-voice', split='train', streaming=True)

# データセットをフィルターする
voiceDS = dataset.filter(lambda voice: voice["language"] in ["English(US)", "Japanese"] 
                        and voice['speaker_type'] == 'TALK_ROLE_NPC'
                        and voice['transcription'] != '')

# フィルターされたデータセットをサンプルする
voiceDS = voiceDS.take(1000)

######################################## (2) ローカルフォルダー準備
import os
ds_folder = 'dataset/simon3000_genshin-voice'
audio_folder = 'audiods'
os.makedirs(f"{ds_folder}/{audio_folder}", exist_ok=True)


######################################## (3) オーディオデータ保存
import soundfile as sf
for i, voice in enumerate(voiceDS):
    sf.write(audio_path, voice['audio']['array'], voice['audio']['sampling_rate'])
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?