Patrick's 데이터 세상
Huggingface 허깅페이스 파헤치기 본문
자연어 처리 포함 모든 딥러닝 학습 시에 pretrained 된 모델을 사용하다 보면 가장 많이 접하는 것이 바로 Huggingface이다.
이 포스팅에서는 Huggingface를 좀 더 자세히 알아보고 주요 기능에 대한 documentation에 대해 알아보려고 한다.
Hugging Face, Inc. is an American company that develops tools for building applications using machine learning.
허깅페이스는 기계 학습을 사용해 애플리케이션을 구축하기 위한 도구를 개발하는 미국 회사이다.
자연어 처리 어플리케이션 용으로 구축된 Transformers library와 사용자가 기계학습 모델 및 데이터 세트를 공유할 수 있는 플랫폼으로 가장 유명하다.
Transformers
트랜스포머 라이브러리는 텍스트, 이미지 및 오디오 등을 처리하기 위한 Transformer model의 오픈소스 구현이 포함된 Python package이다.
PyTorch, TensorFlow 및 JAX 딥러닝 라이브러리와 호환되며 BERT, GPT 같은 모델 구현을 포함한다.
위 설명은 위키피디아를 참고한 것.
허깅페이스는 쉽게 설명해 트랜스포머를 기반으로 파생된 다양한 모델과 학습 시 필요한 Trainer를 구현해 놓은 모듈이다.
PyTorch나 TensorFlow로 직접 구현해야 하는 신경망에 대한 수고를 덜어준다.
👉🏻 Main
Huggingface 메인 페이지. 로그인하면 아래 화면으로 전환된다.
개인 프로필 수정, 기관 등록, 새로운 모델을 등록한 활동 이력, 트렌드 모델 등이 나옴.
👉🏻 Models
Models 탭에서 좌측에 Tasks, Libraries, Datasets, Languages 등을 지정해서 pretrained model을 확인할 수 있다.
좌측 카테고리에서 Libraries PyTorch, Languages Korean로 설정하면 한국어로 사전 학습된 279개의 모델을 볼 수 있다.
👉🏻 Docs
🤗 Transformers
허깅페이스에서 사전 학습된 모델을 쉽게 download 하고 train할 수 있는 API와 도구를 제공한다.
자연어 처리 측면에서는 Language Modeling, Text Classification, NER(Named Entity Recognition), Q&A(Question & Answering), Summarization, Translation, Multiple choice, and Text generation 등 task를 사용한다.
∙ Fine-tune a pretrained model
사전 학습된 모델을 사용하는 방법에 대해 예시로 알아보자.
pip3 install transformers==4.24.0
pip3 install datasets==2.7.0
import numpy as np
import evaluate
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer
# dataset
dataset = load_dataset("yelp_review_full")
dataset["train"][100]
# tokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))
# model
model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased")
# metrics
metric = evaluate.load("accuracy")
def compute_metrics(eval_pred):
logits, labels = eval_pred
predictions = np.argmax(logits, axis=-1)
return metric.compute(predictions=predictions, references=labels)
# trainer
training_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch")
trainer = Trainer(
model=model,
args=training_args,
train_dataset=small_train_dataset,
eval_dataset=small_eval_dataset,
compute_metrics=compute_metrics,
)
trainer.train()
예시에서는 datasets에서 yelp review 데이터를 활용한다.
dataset의 map을 활용하여 각 데이터를 tokenizing 처리하고 train, evaluation data로 나눈다.
허깅페이스에 등록된 Pretrained Model "bert-base-cased"를 load해서
토크나이저는 AutoTokenizer를 활용, 모델은 AutoModel로 각 Task에 맞게끔 설정한다.
사전 학습한 모델을 huggingface module의 양식대로 사용할 수 있고 또한, config를 통해 초기 initial 모델로 학습하여 사용할 수도 있다.
TrainingArguments를 통해 trainer의 필요한 Hyperparameters를 조절한다.
Trainer에 model, arguments, dataset과 필요 평가지표를 추가하여 compute_metrics으로 입력하여 Trainer를 통해 finetuning 학습을 시도한다.
위 코드가 허깅페이스를 활용하여 pretrained model을 finetuning 학습을 실행하는 기본 예제이다.
'Deep Learning > Huggingface' 카테고리의 다른 글
Huggingface generate 문장 생성 (2) | 2023.07.21 |
---|---|
Huggingface 허깅페이스 - NLP (0) | 2022.12.02 |