Datasets documentation
빌드 및 로드
빌드 및 로드
거의 모든 딥러닝 워크플로우는 데이터셋 로딩으로 시작하며, 이는 가장 중요한 단계 중 하나입니다. 🤗 Datasets를 사용하면 NLP 작업을 시작하는 데 도움이 되는 900개 이상의 데이터셋을 사용할 수 있습니다. load_dataset()를 호출하기만 하면 첫걸음을 내딛을 수 있습니다. 이 함수는 모든 의미에서 진정한 일꾼(workhorse)이며, 사용자가 사용하는 모든 데이터셋을 빌드하고 로드하기 때문입니다.
ELI5: load_dataset
Explain Like I’m Five의 기본 개념부터 시작해 보겠습니다.
데이터셋은 다음을 포함하는 디렉터리입니다:
- JSON, CSV, Parquet, 텍스트 등 범용 형식의 일부 데이터 파일
- 데이터셋에 대한 문서와 데이터셋 태그 및 구성을 정의하는 YAML 헤더를 포함하는
README.md라는 이름의 데이터셋 카드
load_dataset() 함수는 요청된 데이터셋을 로컬 또는 Hugging Face Hub에서 가져옵니다. Hub는 모든 Hugging Face 데이터셋과 모델이 저장되는 중앙 저장소입니다.
데이터셋에 데이터 파일만 포함된 경우, load_dataset()는 확장자(json, csv, parquet, tsfile, txt 등)를 기반으로 데이터 파일을 로드하는 방법을 자동으로 추론합니다. 내부적으로 🤗 Datasets는 데이터 파일 형식에 따라 적절한 DatasetBuilder를 사용합니다. 🤗 Datasets에는 데이터 파일 형식별로 하나의 빌더가 존재합니다:
- 텍스트의 경우 datasets.packaged_modules.text.Text
- CSV 및 TSV의 경우 datasets.packaged_modules.csv.Csv
- JSON 및 JSONL의 경우 datasets.packaged_modules.json.Json
- Parquet의 경우 datasets.packaged_modules.parquet.Parquet
- Arrow(스트리밍 파일 형식)의 datasets.packaged_modules.arrow.Arrow
- SQL 데이터베이스를 위한 datasets.packaged_modules.sql.Sql
- TsFile(시계열 데이터)의 경우 datasets.packaged_modules.tsfile.TsFile
- 이미지 폴더에 datasets.packaged_modules.imagefolder.ImageFolder
- 오디오 폴더에 datasets.packaged_modules.audiofolder.AudioFolder
데이터셋을 공유하는 방법에 대해 자세히 알아보려면 Share 섹션을 읽어보세요.
🤗 Datasets는 원본 URL에서 데이터셋 파일을 다운로드하고, 데이터셋을 생성한 후 드라이브에 Arrow 테이블로 캐시합니다. 이전에 데이터셋을 다운로드한 적이 있다면, 🤗 Datasets는 다시 다운로드하는 번거로움을 줄이기 위해 캐시에서 다시 로드합니다.
데이터셋이 어떻게 구축되는지에 대한 고수준의 이해를 갖추셨으니, 이제 이 모든 것이 작동하는 방식의 세부 사항을 자세히 살펴보겠습니다.
데이터셋 구축
데이터셋을 처음 로드할 때, 🤗 Datasets는 원시 데이터 파일을 가져와 행과 유형화된 열로 구성된 테이블로 구성합니다. 데이터셋을 구축하는 데 책임이 있는 두 가지 주요 클래스는 BuilderConfig와 DatasetBuilder입니다.

BuilderConfig
BuilderConfig은 DatasetBuilder의 설정 클래스입니다. BuilderConfig에는 데이터셋에 대한 다음 기본 속성이 포함됩니다:
| 속성 | 설명 |
|---|---|
name | 데이터셋의 짧은 이름. |
version | 데이터셋 버전 식별자. |
data_dir | 데이터 파일이 포함된 로컬 폴더의 경로를 저장합니다. |
data_files | 로컬 데이터 파일의 경로를 저장합니다. |
description | 데이터셋 설명. |
클래스 레이블과 같은 추가 속성을 데이터셋에 추가하려면 기본 BuilderConfig 클래스를 서브클래스로 사용할 수 있습니다. BuilderConfig 클래스 또는 서브클래스의 속성을 채우는 방법은 두 가지가 있습니다:
datasets의
DatasetBuilder.BUILDER_CONFIGS()속성에 BuilderConfig 클래스(또는 하위 클래스) 인스턴스의 사전 정의된 목록을 제공합니다.load_dataset()을 호출할 때, 해당 메서드에 특화된 키워드 인수가 아닌 모든 인수는 BuilderConfig 클래스의 관련 속성을 설정하는 데 사용됩니다. 특정 구성이 선택된 경우, 이는 미리 정의된 속성을 덮어씁니다.
DatasetBuilder.BUILDER_CONFIG_CLASS를 BuilderConfig의 임의의 사용자 정의 하위 클래스로 설정할 수도 있습니다.
DatasetBuilder
DatasetBuilder는 BuilderConfig 내부의 모든 속성에 접근하여 실제 데이터셋을 빌드합니다.

DatasetBuilder에는 세 가지 주요 메서드가 있습니다:
DatasetBuilder._info()는 데이터셋 속성을 정의하는 역할을 합니다.dataset.info를 호출하면 🤗 Datasets는 여기에 저장된 정보를 반환합니다. 마찬가지로 Features도 여기서 지정됩니다. Features는 데이터셋의 골격과 같다는 점을 기억하세요. 각 열의 이름과 유형을 제공합니다.DatasetBuilder._split_generator는 요청된 데이터 파일을 다운로드하거나 가져와 분할로 정리하고, 생성 과정에 대한 특정 인수를 정의합니다. 이 메서드는 파일을 다운로드하거나 로컬 파일 시스템에서 가져오는 DownloadManager를 포함합니다. DownloadManager 안에는 원본 데이터 파일의 URL을 딕셔너리로 받아 요청된 파일을 다운로드하는 DownloadManager.download_and_extract() 메서드가 있습니다. 허용되는 입력에는 단일 URL 또는 경로, 또는 URL 또는 경로의 목록/딕셔너리가 포함됩니다. TAR, GZIP, ZIP 아카이브와 같은 압축 파일 형식은 자동으로 추출됩니다.파일이 다운로드되면 SplitGenerator가 이를 스플릿으로 정리합니다. SplitGenerator에는 스플릿 이름과
DatasetBuilder._generate_examples메서드에 전달되는 모든 키워드 인수가 포함됩니다. 키워드 인수는 스플릿별로 다를 수 있으며, 일반적으로 각 스플릿에 대한 데이터 파일의 로컬 경로를 최소한으로 포함합니다.DatasetBuilder._generate_examples는 split의 데이터 파일을 읽고 파싱합니다. 그런 다음DatasetBuilder._info()의features에서 지정된 형식에 따라 dataset 예시를 yield합니다.DatasetBuilder._generate_examples의 입력은 실제로 마지막 메서드의 키워드 인수로 제공된filepath입니다.데이터셋은 모든 데이터를 메모리에 로드하지 않는 Python 생성기로 생성됩니다. 따라서 생성기는 대규모 데이터셋을 처리할 수 있습니다. 그러나 생성된 샘플이 디스크의 데이터셋 파일에 기록되기 전에
ArrowWriter버퍼에 저장됩니다. 이는 생성된 샘플이 배치 단위로 기록됨을 의미합니다. 데이터셋 샘플이 많은 메모리를 사용하는 경우(이미지 또는 비디오) DatasetBuilder의DEFAULT_WRITER_BATCH_SIZE속성에 낮은 값을 지정하도록 하십시오. 200 MB를 초과하지 않는 크기를 권장합니다.
무결성 유지
데이터셋이 완전한지 확인하기 위해 load_dataset()는 다운로드된 파일에 대해 일련의 테스트를 수행하여 모든 것이 존재하는지 확인합니다. 이렇게 하면 요청한 데이터셋이 예상대로 생성되지 않을 때 예상치 못한 문제를 만나지 않습니다. load_dataset()는 다음을 검증합니다:
- 생성된
DatasetDict의 분할 수입니다. - 생성된
DatasetDict의 각 분할에 포함된 샘플 수입니다. - 다운로드된 파일 목록.
- 다운로드된 파일의 SHA256 체크섬(기본적으로 비활성화됨).
데이터셋이 검증에 실패하면, 데이터셋 작성자가 데이터 파일에 일부 변경 사항을 적용했을 가능성이 높습니다.
이 경우, 데이터셋이 변경되었음을 알리는 오류가 발생합니다.
오류를 무시하려면 load_dataset()에서 verification_mode="no_checks"를 지정해야 합니다.
검증 오류를 발견하면 해당 데이터셋의 “Community” 탭에서 토론이나 pull request를 열어 해당 데이터셋의 무결성 검사가 업데이트되도록 해 주세요.
보안
Hub의 데이터셋 저장소는 악성ware를 스캔하며, 자세한 정보는 여기에서 확인하세요.
Update on GitHub