인공지능공부/자연어처리

[huggingface🤗] 2.Auto Class사용해보기

2023. 3. 13. 20:19
목차
  1. Auto Class
  2. 전체 코드
728x90
반응형

Auto Class

허깅 페이스는 정말 다양한 모델들이 있다고 말씀드렸었죠. 만약에 이 모델들을 불러올 때마다 다 다르게 선언해 줘야 한다면, 매우매우 복잡할 것입니다. 현재 약 15만건 정도 올라와 있는 것으로 보이는데, 그러면 15만개의 모델로 각각 불러와야합니다. 

 

매번 새 모델마다 코드를 다시 짜야하기 때문에 정말 귀찮은 일이 생기죠ㅠ..ㅠ

 

그래서 허깅 페이스에는 단 하나의 함수로! 이름만 주면! 바~~~로 모델을 불러올 수 있습니다. 

 

그렇기 때문에 Auto Class라고도 부릅니다. 

 

허깅 페이스에는 텍스트, 이미지, 멀티모달 등등 정말 다양한 모델들이 있는데요. 

저는 텍스트 위주로 보겠습니다. 

 

Auto Class는 아래와 같이 총 3가지가 있습니다. (텍스트에서 사용하기 위해서)

  • AutoConfig
  • AutoTokenizer
  • AutoModel

이제 하나씩 알아보도록 하겠습니다. 

 

AutoConfig

딥러닝 학습을 할 때 config라고 하면, 학습에 필요한 파라미터들을 정의해주는 파일을 뜻하죠. 

비슷한 의미를 가집니다. 우리가 불러오려고 하는 모델의 설정이 어떠했는지, 그 정보를 불러오는 함수입니다. 

 

class transformers.AutoConfig 클래스를 이용합니다.

 

▶ from_pretrained(pretrained_model_name_or_path, **kwargs)

함수 명에도 보이듯, pretrained 모델로 부터 불러오겠다! 하는 메소드입니다. 

파라미터들을 하나씩 살펴보겠습니다. 

 

빨간색 부분만 필수 파라미터입니다.

  • pretrained_model_name(str or os.PathLike) : 불러올 pretrained 모델을 뜻합니다. (정말 간단하게는 이것만 써주면 사용하실 수 있습니다.)
  • cache_dir(str or os.PathLike) : 파일이 캐싱될 경로를 지정합니다. 처음 다운로드하고 캐시한 후 다시 사용할 때 속도를 높이는 데 유용합니다.
  • force_download(bool, defaults to False) : 파일을 강제로 다운로드 할지 여부를 지정합니다. 
  • resume_download(bool, defaults to False) : 이전 중당된 다운로드를 다시 시작할지 여부를 지정합니다. 
  • proxies(Dict[str, str]) : 다운로드 하는 동안 http 또는 socks 프록시를 사용해야 하는 경우 지정됩니다.
  • revision(str, defaults to "main") : 모델 체크포인트의 특정 리비전을 지정합니다. 
  • return_unused_kwargs(bool, defaults to False) : 사용되지 않은 키워드 인수를 반환할 지 여부를 지정합니다. (True일 경우 모든 키워드 인수를 사전 형태로 반환)
  • trust_remote_code(bool, defaults to False) : 다운로드된 코드가 안전한지 여부를 확인합니다. True일 경우 모델 다운로드에 대한 검증 절차가 생략)
  • output_attentions(bool, defaults to False) : 모든 레이어에서 출력되는 어텐션 가중치를 반환할지 여부를 지정합니다.
  • output_hidden_states(bool, defaults to False) : 모든 레이어에서 출력되는 hidden state를 반환할지 여부를 지정합니다. 
  • from_tf(bool, defaults to False) : tensorflow 체크 포인트에서 모델을 불러올 때 사용합니다. 
  • return_dict(bool, defaults to False) : 출력 결과를 딕셔너리 형식으로 반환할지 여부를 지정합니다. 

사용 방법은 정말 간단합니다. 아래 코드를 참고해주세요.

rom transformers import AutoConfig

# bert-base-uncased 모델의 config를 불러올 경우
config = AutoConfig.from_pretrained("bert-base-uncased")

# dbmdz/bert-base-german-cased 모델의 config를 불러올 경우
config = AutoConfig.from_pretrained("dbmdz/bert-base-german-cased")

# 컴공누나가 학습시킨 comgong-nu-na-bert 불러오기
config = AutoConfig.from_pretrained("folder/comgong-nu-na-bert")

▶ register(model_type, config)

이 함수를 이용하면 새로운 모델 아키텍처에 대한 클래스를 만들 수 있습니다. 

즉, 본인이 직접 학습시키고 등록하는 것이라고 생각하시면 됩니다. 

 

  • configuration_class(PretrainedConfig) : 등록하려는 클래스를 지정합니다. 이 클래스는 Pretrainedconfig 클래스를 상속해야합니다.
  • model_type(str) : 등록하려는 모델의 아키텍쳐 이름을 지정합니다.
  • force(bool, defaults to False) : 기존에 등록된 모델 아키텍처와 이름이 충돌할 경우 덮어쓸지 여부를 지정합니다
from transformers import AutoConfig

AutoConfig.register("new-model", NewModelConfig)

 

AutoTokenizer

위에서는 Config를 자동으로 가져 왔듯, 여기서는 Tokenizer를 자동으로 가져와주는 클래스입니다. 

 

▶ from_pretrained(pretrained_model_name_or_path, **kwargs)

Config에서와 같은 역할을 합니다. 

  • pretrained_model_name(str or os.PathLike) : 불러올 pretrained 모델을 뜻합니다. (정말 간단하게는 이것만 써주면 사용하실 수 있습니다.)
  • tokenizer_type(str) : 로드할 토크나이저의 클래스입니다. 지정할 경우 AutoTokenizer에서 선택하는 기본 클래스가 아닌 사용자 정의 클래스를 지정할 수 있습니다. 
  • cache_dir(str or os.PathLike) : 모델 다운로드 및 캐싱에 사용될 로드 디렉토리 경로입니다.
  • user_fast(bool, defaults to False) : True인 경우 토크나이저가 빠르게 동작하는 것으로 알려진 구현을 사용합니다. 
  • revision(str, defaults to "main") : 모델 체크포인트의 특정 리비전을 지정합니다.
  • local_files_only(bool, defaults to False) : 모델을 다운로드 하지 않고 로컬 파일 시스템에서만 모델을 로드합니다. 
from transformers import AutoTokenizer

# bert-base-uncased 모델의 토크나이저를 가져오는 경우
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

# dbmdz/bert-base-german-cased 모델의 토크나이저를 가져오는 경우
tokenizer = AutoTokenizer.from_pretrained("dbmdz/bert-base-german-cased")

▶ register(config_class, slow_tokenizer_class = None, fast_tokenizer_class = None)

이 함수를 이용하면 새로운 모델 아키텍처에 대한 클래스를 만들 수 있습니다. 

즉, 본인이 직접 학습시키고 등록하는 것이라고 생각하시면 됩니다. 

 

  • config_class(PretrainedConfig) : 등록하려는 클래스를 지정합니다. 이 클래스는 Pretrainedconfig 클래스를 상속해야합니다.
  • slow_tokenizer_class(PretrainedTokenizer, defaults to None) : 로드하는 데 많은 시간이 소요되는 모델에 대해 느리게 작동하는 토크나이저 클래스를 등록합니다. AutoTokenizer.from_pretrained의 use_fast=False일 경우 사용합니다.
  • fast_tokenizer_class(PretrainedTokenizerFast, defaults to None) : 로드하는 데 적은 시간이 소요되는 모델에 대해 빠르게 작동하는 토크나이저 클래스를 등록합니다. 위와 반대일 경우 사용합니다.
from transformers import AutoModel

AutoModel.register(NewModelConfig, NewModel)

 

AutoModel

AutoModel은 드디어 모델을 불러올 수 있는 클래스입니다. 사실 AutoModel로 시작하는 정말 다양한 클래스들이있는데요. 저는 정말 기본적인 AutoModel을 살펴보겠습니다. 

 

사실 거의 클래스가 비슷해서, 이거 하나만 알더라도 많이 활용하실 수 있을겁니다. 

 

▶ from_config(config)

위의 두 클래스와 같은 역할을 합니다. 

  • config(PretrainedConfig) : AutoConfig로부터 받아온 Config를 넣어줍니다.
from transformers import AutoConfig, AutoModel

# bert-base-cased 모델을 불러오는 경우
config = AutoConfig.from_pretrained("bert-base-cased")
model = AutoModel.from_config(config)

▶ from_pretrained(pretrained_model_name_or_path, **kwargs)

위의 두 클래스와 같은 역할을 합니다. 

  • pretrained_model_name(str or os.PathLike) : 불러올 pretrained 모델을 뜻합니다. (정말 간단하게는 이것만 써주면 사용하실 수 있습니다.)
  • config(PretrainedConfig, str, os.PathLike defaults to None) : 모델 아키텍처 설정 파일의 경로 또는 PretraiendConfig 객체를 지정합니다. 
from transformers import AutoModel

# bert-base-cased 모델을 다운받는 경우
model = AutoModel.from_pretrained("bert-base-cased")

 

전체 코드

이제 전체 코드를 한번 살펴보겠습니다. 

 

보시면 아시겠지만, 전체 코드는 크게 두 가지로 작성해 볼 수 있습니다. 

 

1. 모델을 from_config()로 불러오는 경우

from transformers import AutoConfig, AutoModel

# 모델 아키텍처 설정 파일 불러오기
config = AutoConfig.from_pretrained('bert-base-cased')

# 모델 객체 생성
model = AutoModel.from_config(config)

2. 모델을 from_pretrained()로 불러오는 경우 

from transformers import AutoModel

# 미리 훈련된 BERT 모델 불러오기
model = AutoModel.from_pretrained('bert-base-cased')

 

맛보기

아직 설명은 안했지만, 실제로 각각 config, tokenizer, model을 정의한 뒤 아래의 코드처럼 사용할 수 있습니다. 

아래 코드는 config를 사용하지 않고, 모델에서 from_pretrained를 불러서 사용하는 예시입니다.

from transformers import AutoTokenizer, AutoModel

# 토크나이저 불러오기
tokenizer = AutoTokenizer.from_pretrained('bert-base-cased')

# 모델 객체 생성
model = AutoModel.from_pretrained('bert-base-cased')

# 입력 텍스트 인코딩
sample_text = "테스트용 문장입니다."
input = tokenizer.encode_plus(sample_text, padding=True, truncation=True, return_tensors='pt')

# 모델에 입력
results = model(input['input_ids'],input['attention_mask'])

 

반응형

'인공지능공부 > 자연어처리' 카테고리의 다른 글

word2vec의 모든 것  (0) 2023.03.18
[huggingface🤗] 3.Trainer사용해보기  (0) 2023.03.14
[huggingface🤗] 1.허깅페이스란?  (0) 2023.03.09
[NLP이론]3.텍스트 분류-영어 텍스트 분류  (0) 2021.01.28
[NLP실습]2.자연어 처리 개요-유사도 및 문제들  (0) 2021.01.21
  1. Auto Class
  2. 전체 코드
'인공지능공부/자연어처리' 카테고리의 다른 글
  • word2vec의 모든 것
  • [huggingface🤗] 3.Trainer사용해보기
  • [huggingface🤗] 1.허깅페이스란?
  • [NLP이론]3.텍스트 분류-영어 텍스트 분류
컴공누나
컴공누나
ML 엔지니어 컴공누나입니다:) wodbs9522@gmail.com
컴공누나의 지식 보관소ML 엔지니어 컴공누나입니다:) wodbs9522@gmail.com
컴공누나
컴공누나의 지식 보관소
컴공누나
전체
오늘
어제
  • 분류 전체보기 (267)
    • 컴공누나 소개 (2)
    • 언어 마스터 (4)
      • 파이썬 (4)
    • 알고리즘 (159)
      • 프로그래머스 (120)
      • 백준알고리즘 (39)
      • 알고리즘기초 (0)
    • 인공지능공부 (62)
      • 인공지능기본지식 (6)
      • LLM (3)
      • 인공지능기초수학 (9)
      • 프레임워크 (2)
      • 자연어처리 (16)
      • 컴퓨터비전 (2)
      • 그래프 (24)
      • Prolog (0)
    • 다른 분야 (4)
      • Docker (1)
      • Web (3)
    • 논문 (10)
      • 논문리딩 (6)
      • 게제논문 (4)
    • 꿀팁 (19)
      • 오류 정리 (8)
      • 소소한 팁 (11)

블로그 메뉴

  • 홈
  • 태그
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • 그래프
  • selfattention
  • stanfordgraph
  • stanfordgnn
  • nlp
  • 선형대수
  • Bert
  • 영상기반상식추론
  • 스탠포드그래프
  • cs224w
  • GNN
  • GPT
  • 백준
  • 파이썬
  • transformer
  • 선형대수기초
  • 그래프신경망
  • 프로그래머스
  • 그래프강의
  • 자연어처리

최근 댓글

최근 글

글쓰기 / 관리자
hELLO · Designed By 정상우.
컴공누나
[huggingface🤗] 2.Auto Class사용해보기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.