유용한것 이것저것

Hugging Face 사용법 (1) pipeline 함수 사용하기 및 모델 객체 로컬에 다운 받기

seungbeomdo 2023. 7. 25. 19:31
 

Hugging Face – The AI community building the future.

The AI community building the future. Build, train and deploy state of the art models powered by the reference open source in machine learning.

huggingface.co

 

0. Hugging Face 소개

 

허깅페이스는 머신러닝 기술, 특히 딥러닝 모델의 손쉬운 공유 및 배포, 사용, 훈련을 가능하게 하는 생태계이다.

  • 기존의 성능이 검증된 pre-trained 모델을 쉽게 (무료로) 다운 받아서 사용할 수 있고,
  • 본인의 task에 맞게 모델을 fine-tuning하는 것도 가능하다.
  • 스스로 제작/파인튜닝한 딥러닝 모델을 공유할 수도 있다.

1. Pre-trained 모델 사용하기

 

  • 허깅페이스는 Transformers라는 파이썬 패키지를 통해 Transformer류 모델의 serving을 간편하게 구현한다. 
pip install transformers
from transformers import pipeline
  • pipeline 함수는 허깅페이스에 업로드된 모델을 불러오는 API 기능을 제공한다.

 

  • 먼저, 해결하려는 과제에 맞는 모델을 찾아야 한다. 허깅페이스에 접속해서 Models 탭으로 이동하면 아래와 같은 화면이 나온다. 메타에서 llama 모델을 공개한지 얼마 안 되어서 그런지 llama 모델로 뒤덮여있다.

 

 

  • Text classification 문제를 해결하는 모델을 찾아보자. 블로그 글 작성 시점에서 가장 다운로드를 많이 받은 모델은 roberta-base-go_emotions인데, roberta 모델을 베이스로 해서 go-emotions 데이터셋으로 훈련한 모델이다. 주어진 자연어 텍스트의 감성을 분류하는 모델이라고 한다.

 

 

  • 좌측 탭에 표시된 task와 모델 주소를 pipeline 함수에 입력하면 모델을 순식간에 객체로 불러올 수 있다. 
sentiment_classification = pipeline("text-classification", "SamLowe/roberta-base-go_emotions")
  • "today is payday!"라는 문장을 넣었더니 excitement 클래스에 속할 확률이 50.4%로 가장 높았다.
sentiment_classification("today is payday!")

>>> [{'label': 'excitement', 'score': 0.5041834115982056}]

2. 모델 다운받기

 

  • 방금 pipeline으로 불러온 모델은 대략 500MB 정도 되는 모델이다. 사용할 때마다 API로 호출해서 쓰기에는 부담스러운 크기이다. 
  • 당연히 허깅페이스에서는 모델을 로컬에 다운받는 기능도 제공한다.

 

  • 이번에는 Zero-shot classification 모델에 속하는 facebook의 bart-large-mnli 모델을 사용해보자. 어떤 모델이 되었건 간에 모델 페이지로 들어가면 File and Versions 라는 탭이 있다. 이 탭으로 이동하면 아래와 같은 화면이 나오는데,

 

  • 여기서 모든 파일을 다 다운로드 받아주면 된다.

 

  • Transformers 패키지가 설치된 가상환경 내 폴더로 다운 받은 파일들을 옮겨준 후에는, 아까와 동일하게 pipeline 함수를 쓰되, 로컬 폴더 주소를 입력하면 된다.
classifier = pipeline("zero-shot-classification",
			model='C:/Python_/pretrained_models/bart-large-mnli')

 

  • 다운받은 모델은 자연어 문장과 후보 레이블을 알려주면, 입력된 자연어 문장과 가장 가까운 후보 레이블이 무엇인지 return하는 모델이다. 예를 들어
classifier("This position requires statistical background and programming skill", 
           candidate_labels = ['Data Analyst', 'Head hunter', 'Financial manager'])
           
>>> {'sequence': 'This position requires statistical background and programming skill', 
    'labels': ['Data Analyst', 'Financial manager', 'Head hunter'],
    'scores': [0.7551137208938599, 0.14233411848545074, 0.10255210101604462]}
  • "This position requires statistical background and programming skill" 이라는 문장은 열거한 직무들 중에서 Data analyst와 가장 가깝다는 결과를 준다.