데이터셋 만들기
데이터셋 만들기 (Create a Dataset)
때로는자신의 데이터로 작업할 때 데이터셋을 직접 만들어야 할 수 있어요. 🤗 Datasets으로 데이터셋을 만들면 그 데이터셋은 라이브러리의 모든 장점을 누리게 돼요: 빠른 로딩·처리, 거대한 데이터셋 스트리밍, 메모리 매핑 등이죠. 🤗 Datasets의 로우코드(low-code) 방식으로 데이터셋을 쉽고 빠르게 만들어 모델 훈련을 시작하는 시간을 줄일 수 있어요. 많은 경우 데이터 파일을 Hub의 데이터셋 저장소에 끌어다 놓기만 하면 될 만큼 간단합니다.
이 튜토리얼에서는 🤗 Datasets의 로우코드 메서드로 모든 종류의 데이터셋을 만드는 법을 배울 거예요:
- 이미지·오디오 데이터셋을 빠르게 만드는 폴더 기반 빌더
- 로컬 파일에서 데이터셋을 만드는
from_메서드
파일 기반 빌더
🤗 Datasets은 csv, json/jsonl, parquet, txt 같은 많은 일반적인 형식을 지원해요.
예를 들어 하나 또는 여러 개의 CSV 파일로 이루어진 데이터셋을 읽을 수 있는데 (이 경우 CSV 파일을 리스트로 넘기세요):
>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")
지원되는 형식 목록과 코드 예시는 이 가이드에서 확인하세요.
폴더 기반 빌더
폴더 기반 빌더는 ImageFolder와 AudioFolder 두 가지가 있어요. 이들은 수천 개 예시를 가진 이미지·음성·오디오 데이터셋을 빠르게 만드는 로우코드 방식이에요. 더 큰 데이터셋으로 확장하기 전에 컴퓨터 비전·음성 모델을 빠르게 프로토타이핑하기에 아주 좋습니다.
폴더 기반 빌더는 데이터를 가져와 데이터셋의 features, split, 레이블을 자동으로 생성해요. 내부적으로:
ImageFolder는Imagefeature를 사용해 이미지 파일을 디코드해요. jpg, png 같은 많은 이미지 확장자를 지원하며 다른 형식도 지원돼요. 지원되는 이미지 확장자 전체 목록을 확인할 수 있어요.AudioFolder는Audiofeature를 사용해 오디오 파일을 디코드해요. wav, mp3, mp4 같은 확장자를 지원하며, 디코딩은 ffmpeg로 이루어져요. 지원되는 오디오 확장자 전체 목록을 확인할 수 있어요.
데이터셋 split은 저장소 구조에서 생성되고, 레이블 이름은 디렉토리 이름에서 자동으로 추론돼요.
예를 들어 이미지 데이터셋이 (오디오 데이터셋도 동일) 이렇게 저장되어 있다면:
pokemon/train/grass/bulbasaur.png
pokemon/train/fire/charmander.png
pokemon/train/water/squirtle.png
pokemon/test/grass/ivysaur.png
pokemon/test/fire/charmeleon.png
pokemon/test/water/wartortle.png
그럼 폴더 기반 빌더는 이렇게 예시를 생성해요.
load_dataset()에 imagefolder를 지정하면 이미지 데이터셋이 만들어져요.
>>> from datasets import load_dataset
>>> dataset = load_dataset("imagefolder", data_dir="/path/to/pokemon")
오디오 데이터셋도 같은 방식으로 만들되, load_dataset()에 audiofolder를 지정하면 됩니다.
>>> from datasets import load_dataset
>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")
from_ 메서드
from_ 메서드들로 로컬 파일에서 데이터셋을 만들 수 있어요.
from_dict와 from_list
파이썬 딕셔너리에서 데이터셋을 만들려면 from_dict()를 사용해요. 딕셔너리의 각 키는 컬럼 이름, 각 값은 컬럼의 데이터가 돼요.
>>> from datasets import Dataset
>>> my_dict = {"a": [1, 2, 3], "b": ["x", "y", "z"]}
>>> dataset = Dataset.from_dict(my_dict)
파이썬 딕셔너리 리스트에서 데이터셋을 만들려면 from_list()를 사용해요. 각 딕셔너리는 데이터셋의 한 행이 됩니다.
>>> from datasets import Dataset
>>> my_list = [{"a": 1, "b": "x"}, {"a": 2, "b": "y"}, {"a": 3, "b": "z"}]
>>> dataset = Dataset.from_list(my_list)
from_generator
from_generator()로 파이썬 제너레이터에서 데이터셋을 만들 수 있어요. 제너레이터는 데이터를 한 번에 하나씩 생성하므로, 데이터를 모두 메모리에 불러오지 않아도 돼서 큰 데이터셋을 만들 때 유용해요.
>>> from datasets import Dataset
>>> def my_generator():
... for i in range(100):
... yield {"index": i, "label": i % 2}
...
>>> dataset = Dataset.from_generator(my_generator)
출처: 공식문서