본문 바로가기
DNN with Keras/NLP with Hugging Face

Training HUGGING FACE models

by goatlab 2024. 1. 11.
728x90
반응형
SMALL

Training HUGGING FACE models

 

 

허깅 페이스 모델을 전송하고 훈련하기 위해 허깅 페이스 데이터 세트, 토큰화 도구, 사전 훈련된 모델을 사용한다. 먼저 필요한 경우 허깅 페이스를 설치하다. 허깅 페이스 데이터 세트를 설치하는 것도 필수이다.

 

!pip install transformers
!pip install transformers[sentencepiece]
!pip install datasets

 

먼저, 허깅 페이스 허브에서 감정 데이터 세트를 로드한다. 감정 데이터 세트는 분노, 공포, 기쁨, 사랑, 슬픔, 놀라움의 여섯 가지 기본 감정이 포함된 영어 트위터 메시지의 데이터 세트이다. 다음 코드는 Hugging Face 허브에서 감정 데이터 세트를 로드한다.

 

from datasets import load_dataset

emotions = load_dataset("emotion")

 

여기에서 학습 데이터 세트의 단일 관찰을 볼 수 있다. 이 관찰에는 텍스트 샘플과 할당된 감정 레이블이 모두 포함된다. 레이블은 할당된 감정을 나타내는 숫자 인덱스이다.

 

emotions['train'][2]
{'text': 'im grabbing a minute to post i feel greedy wrong', 'label': 3}

 

인덱스 레이블 순서대로 레이블을 표시할 수 있다.

 

emotions['train'].features
{'text': Value(dtype='string', id=None),
 'label': ClassLabel(names=['sadness', 'joy', 'love', 'anger', 'fear', 'surprise'], id=None)}

 

다음으로 허깅 페이스 토큰화 도구와 데이터 세트를 함께 활용한다. 다음 코드는 전체 감정 데이터 세트를 토큰화한다. 아래에서 이 코드가 훈련 집합을 하위 단어 토큰으로 변환하여 이제 추론 또는 훈련을 위해 트랜스포머와 함께 사용할 준비가 된 것을 볼 수 있다.

 

from transformers import AutoTokenizer

def tokenize(rows):
  return tokenizer(rows['text'], padding="max_length", truncation=True)

model_ckpt = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)
emotions.set_format(type=None)
tokenized_datasets = emotions.map(tokenize, batched=True)

 

DefaultDataCollator를 활용하여 감정 데이터 세트를 신경망을 미세 조정하는 데 사용할 수 있는 텐서플로 유형 데이터로 변환하겠다.

 

from transformers import DefaultDataCollator

data_collator = DefaultDataCollator(return_tensors="tf")

 

이제, 셔플된 훈련 및 평가 데이터 세트를 생성한다.

 

small_train_dataset = tokenized_datasets["train"].shuffle(seed=42)
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42)

 

이제, 텐서플로 데이터 집합을 생성할 수 있다. 입력 기능 및 레이블에 매핑할 열을 지정한다. 이전에 데이터를 셔플했기 때문에 셔플할 필요가 없다.

 

tf_train_dataset = small_train_dataset.to_tf_dataset(
    columns=["attention_mask", "input_ids"],
    label_cols=["labels"],
    shuffle=True,
    collate_fn=data_collator,
    batch_size=8,
)

tf_validation_dataset = small_eval_dataset.to_tf_dataset(
    columns=["attention_mask", "input_ids"],
    label_cols=["labels"],
    shuffle=False,
    collate_fn=data_collator,
    batch_size=8,
)

 

이제, 분류를 위해 디스틸버트 모델을 로드한다. 텍스트 줄의 감정을 예측하기 위해 미리 학습된 가중치를 조정한다.

 

import tensorflow as tf
from transformers import TFAutoModelForSequenceClassification

model = TFAutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased", num_labels=6)

 

이제, 신경망을 훈련한다. 네트워크는 이미 사전 학습되어 있으므로 학습 속도가 느리다.

 

model.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=5e-5),
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=[tf.keras.metrics.SparseCategoricalAccuracy()]
)

model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=5)

728x90
반응형
LIST

'DNN with Keras > NLP with Hugging Face' 카테고리의 다른 글

임베딩 전송 (Transferring Embedding)  (0) 2024.01.11
Embedding Layers  (0) 2024.01.11
Tokenizers  (0) 2024.01.10
Hugging Face API (2)  (0) 2024.01.10
Hugging Face API (1)  (0) 2024.01.10