본문 바로가기

Engineering

허깅페이스 데이터셋 업로드하기

머신러닝 연구를 하다보면 다양한 데이터셋에 활용하게 된다. 예전에는 인터넷에서 크롤링을 하거나, 다른 논문의 저자가 업로드해둔 데이터셋을 다운로드 받아서 사용하는 등 데이터셋에 접근하는 방식이 각양각색이었다. 그런데, 어느 날 데이터셋에 통합적으로 접근할 수 있는 라이브러리가 생겼고 이것이 허깅페이스 데이터셋이다. 문득문득 이런걸 만들어서 배포해주는 허깅페이스를 비롯한 많은 오픈소스 개발자에게 감사하면서 살고 있다;; 어쨋든, 이렇게 통합된 라이브러리에 내가 새로운 데이터셋을 만들었을 때, 어떻게 이 새로운 데이터셋을 허깅페이스 라이브러리를 써서 접근할 수 있게 구성하는지 알아보고자 한다.

csv 파일 준비하기

주로 대부분의 정제된 데이터셋은 엑셀의 형태로 구성할 수 있다. 이미지나 비디오와 같은 멀티미디어 데이터들은 따로 관리를 해주어야 하지만 텍스트 형태의 데이터는 어지간한 경우, 표 형태로 구조화시켜서 저장할 수 있다. 이런 구조화된 표를 저장하는 형식 가운데 널리 알려진 방식이 csv (comma separated values)라는 포맷이다. 단순하게는, 각각의 컬럼은 콤마로 끊고, 로우는 뉴라인으로 끊어서 표기하는 방식을 의미한다. 아래 내용은 csv 포맷을 준수한 하나의 데이터 예시를 보여준다.

이름,성별,나이
김춘추,남,33
장미희,여,32

허깅페이스 허브에 데이터셋 생성하기

이런 데이터셋을 준비했다면, 허깅페이스 데이터셋 허브에 업로드를 해야 한다. 그러기 위해서 허깅페이스 홈페이지에 들어가서, 회원가입을 진행한 후, 로그인을 하여 허브 메인 페이지에 들어온다. 우상단의 프로필 사진을 클릭 후, "New Dataset"이라는 버튼을 누르면 새로운 데이터셋을 만들 수 있다.

허깅페이스 허브 데이터셋 생성 폼. 이름과 라이센스, 그리고 공개 여부를 설정하고 만들기 버튼을 클릭하면 된다.

허깅페이스 허브에 데이터셋 업로드하기

위에서 허깅페이스 허브에서 만든 데이터셋에 데이터를 업로드하고, 전체적인 설정을 README.md에 작성하면 데이터셋을 허깅페이스 데이터셋 라이브러리를 통해서 쉽게 다운로드할 수 있게 된다. 우선적으로, 전체적인 데이터셋 관리 구조를 구성하기 위해서 아래와 같은 구조를 구성했다.

sample_dataset
├── README.md
└── v1.0
    ├── test.csv
    └── train.csv

허깅페이스 허브에서 만든 데이터셋은 단순히 인터넷에 폴더 하나를 만들었다고 생각하면 될 것 같다. 그 폴더 내부에 파일을 어떤 식으로 저장해 관리할 것인지는 내가 정할 수 있다. 나는 매번 데이터셋을 수정해나갈 일이 많을 것 같아 버전 관리를 위해서 버전을 나타내는 하위 폴더를 구성하고, 그 내부에 학습용 데이터셋와 평가용 데이터셋을 각각 저장하는 구조를 채택했다.

데이터셋 설정 파일 작성하기

이제 이렇게 업로드된 데이터셋들의 속성을 명시하는 설정파일인 README.md를 구성해보자. 사실, README.md는 "나를 읽어라"라는 파일로 주로 개발자가 처음 어떤 프로젝트에 접근할 때 맨 처음 읽는 문서를 의미한다. 허깅페이스 허브에서는 이 README.md 맨 위에 데이터셋의 메타 데이터를 명시하는 방식으로 데이터셋의 속성을 파악할 수 있게 한다. 아래는 내가 작성한 README.md의 예시이다.

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "v1.0/train.csv"
  - split: test
    path: "v1.0/test.csv" 
- config_name: v1.0
  data_files: 
  - split: train
    path: "v1.0/train.csv"
  - split: test
    path: "v1.0/test.csv"
---
# 샘플 데이터셋

샘플 데이터셋입니다.

아래부분은 마크다운을 통해 내용을 작성했고, 중요한 부분은 윗 부분이다. 윗 부분은 YAML이라는 json보다 좀더 인간친화적으로 사전 객체를 직렬화 할 수 있는 하나의 형식이다. 어쨋든 이 형식에서, config_name을 사용해 어떤 config가 존재하는지 나타내고, 거기서 각 config에서 split에 따라 어떤 데이터 파일에 접근해야 하는지를 명시해준다. 이를 통해 나중에 데이터셋을 다운로드 받을 때, config와 split을 명시해 데이터를 쉽게 다운로드 받을 수 있게 된다.

업로드한 데이터셋 다운로드 받기

이 데이터셋을 다운로드 받기 위해서는 우선 허깅페이스 데이터셋 라이브러리를 설치해야 한다. 이는 아래와 같은 커멘드로 설치할 수 있다.

pip install datasets

만약 이것이 실행되지 않을 경우, 파이썬이 설치되어있지 않을 가능성이 있기 때문에 파이썬을 설치해준다. 다음으로 아래의 코드를 작성 후 파이썬으로 실행시켜준다.

from datasets import load_dataset

dataset = load_dataset("sh0416/sample_dataset", "v1.0", split="test")

이런 방식을 통해 허깅페이스 허브에서 바로 데이터셋을 다운로드 받아오고 사용할 수 있게 된다.

결론

허깅페이스 데이터셋에 직접 만든 데이터셋을 올리는 방식에 대해서 간략히 알아보았다. 좀더 복잡한 멀티미디어 데이터는 아직 올릴 일이 없어서 따로 알아보진 않았는데 아마 쉽게 가능할 것이라고 보여진다. 잘 써보자!