728x90

이번에는 Hugging Face에서 Evaluate 라이브러리 사용하여 모델의 Acc, F1, Rouge 등의 metric을 사용하는 방법에 대해 소개해드리겠습니다.

Evaluate 라이브러리란?

기계 학습(Machine Learning) 및 데이터셋(Dataset)을 쉽게 평가하기 위한 라이브러리 입니다. 간단한 코드로 다양한 작업(NLP Task, Computer Vision 등)을 수십 가지 평가 방법을 적용할수 있습니다.

전체적인 구조는 다음과 같습니다.

Pipeline, Metric과 Dataset을 Evaluator에 넣어서 결과를 도출합니다.

 

이어서 사용하는 방법에 대해 설명해드리겠습니다.

*코드 환경은 기본적으로 Jupyter Noteboo에서 실행합니다!

 

evaluate 설치


pip

!pip install evaluate

 

필요한 모듈 선언


from transformers import pipeline
from datasets import load_dataset
from evaluate import evaluator
import evaluate

각각 필요한 모듈을 선언합니다.

 

pipeline 구축


pipe = pipeline("text-classification", model="lvwerra/distilbert-imdb", device=0 if torch.cuda.is_available() else "cpu")

1. 텍스트 분류 선언

2. distilbert 기반이며 imdb로 fine-tunnig된 모델 선언

3. gpu가 없다면 cpu 사용

 

dataset 로드


# imdb dataset 중 test를 가져오며, 랜덤하게 1000개를 선택
data = load_dataset("imdb", split="test").shuffle().select(range(1000))

imdb 데이터셋을 로드합니다. 그리고 섞고  1000개를 랜덤으로 가져옵니다.

 

metric 로드


metric = evaluate.load("accuracy")

평가에 사용할 것은 accuracy (정확도) 입니다.

 

evaluator 선언 및 평가


# Task 선언
task_evaluator = evaluator("text-classification")

# model, data 를 이용하여 metric 반환
# label이 숫자가 아닌 str로 구성된다면 0과 1로 각각 매핑
# strategy는 'bootstrap'과 'simple'로 구성되어있습니다.
# n_resamples는 기본적으로 9999 입니다.

results = task_evaluator.compute(model_or_pipeline=pipe, data=data, metric=metric,
                       label_mapping={"NEGATIVE": 0, "POSITIVE": 1},
                       strategy="bootstrap", n_resamples = 200)
# 결과 출력
print(results)
{'accuracy': 
    {
    'confidence_interval': (0.905, 0.939), 
    'standard_error': 0.008500206951033177, 
    'score': 0.923
    }
}

 

파이프라인  : distilbert를 imdb로 미세 조정한 모델을 바탕으로 text-classification 진행

데이터셋 : imdb

metric : Accuracy

-> imdb로 미세조정된 모델이 imdb를 얼마나 잘 맞추는지 정확도를 산출

감사합니다.

 

728x90